dsp课程设计报告.doc
DSP课程设计报告班级: 姓名: 学号:题目一:基于Matlab的数字滤波器设计及其对语音信号的应用1. 课程设计的目的:1)掌握数字信号处理的基本概念、基本理论和基本方法; 2)掌握MATLAB设计FIR和IIR数字滤波器的方法; 3)掌握在Windows环境下语音信号采集以及时域、频域分析;4)学会MATLAB的使用,掌握MATLAB的程序设计方法;5)学会用MATLAB对信号进行分析和处理。2. 课程设计内容:录制一段自己的语音信号,对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采matlab设计数字滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号。3. 课程设计基础:MATLAB编程基础、数字信号处理知识、语音信号处理知识。4. 具体步骤与要求:4.1语音信号的采集录制一段自己的话音,或利用老师给的语音,在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。wavrecord(2*fs,fs)4.2语音信号的频谱分析要求画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。fft4.3设计数字滤波器,画出其频率响应曲线各滤波器的性能指标:(1)低通滤波器性能指标fp1000Hz, fs1200Hz, As40dB, Ap1dB。(2)高通滤波器性能指标fs4000Hz, fp4300Hz, As40dB, Ap1dB(3)带通滤波器性能指标fp11200 Hz, fp23 000 Hz, fs11000 Hz, fs23200 Hz, As40dB, Ap1dB。要求:(1) 频率变换法设计IIR滤波器: 可以利用函数butter、cheby1、cheby2和ellip等设计。(2) (选做)设计IIR滤波器:用双线性变换法设计上面要求的3种滤波器。bilinear(3) (选做)设计FIR滤波器:用窗函数法设计上面要求的3种滤波器。可以利用函数fir1设计FIR滤波器。(4) 函数freqz画出各滤波器的频率响应。4.4用滤波器对信号进行滤波,比较滤波前后语音信号的波形及频谱要求用自己设计的各滤波器分别对采集的语音信号进行滤波,并在一个窗口同时画出滤波前后的波形及频谱。(1) IIR滤波器利用函数filter对信号进行滤波;(2) FIR滤波器利用函数fftfilt对信号进行滤波。4.5 回放语音信号在MATLAB中,函数sound可以对声音进行回放。其调用格式:sound(x,fs,bits);可以感觉滤波前后的声音有变化。4.6 (选做)设计系统界面为了使编制的程序操作方便,要求有能力的学生,设计处理系统的用户界面。在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。5 滤波器设计方法综述滤波器的设计步骤:1) 给出系统的性能指标; 2)用一个离散的时间系统逼近这些性能指标; 3)实现该系统.一般我们利用数字计算的方法实现系统,所以,将该离散时间滤波器称为数字 滤波器.滤波器的指标往往是以频域的形式给出的,尤其是低通,带通,高通和带阻这些选频滤波器.如图所示的一个线性时不变离散系统,如果输入是带限的,且采样率满足奈奎斯特采样率, 这系统是一个线性时不变的连续系统.H (e jT ), < / T H eff ( j) = H (e j ) = H eff ( j ), / T6 实验程序fs=22050; %语音信号采样频率为22050x1=wavread('Windows Critical Stop.wav'); %读取语音信号的数据,赋给变量x1sound(x1,22050); %播放语音信号y1=fft(x1,1024); %对信号做1024点FFT变换f=fs*(0:511)/1024;figure(1)plot(x1) %做原始语音信号的时域图形title('原始语音信号');xlabel('time n');ylabel('fuzhi n');figure(2)freqz(x1) %绘制原始语音信号的频率响应图title('频率响应图')figure(3)subplot(2,1,1);plot(abs(y1(1:512) %做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y1(1:512);title('原始语音信号频谱')xlabel('Hz');ylabel('fuzhi');程序2:fs=22050; %语音信号采样频率为22050x1=wavread('Windows Critical Stop.wav'); %读取语音信号的数据,赋给变量x1t=0:1/22050:(size(x1)-1)/22050;y1=fft(x1,1024); %对信号做1024点FFT变换f=fs*(0:511)/1024;x2=randn(1,length(x1); %产生一与x长度一致的随机信号sound(x2,22050);figure(1)plot(x2) %做原始语音信号的时域图形title('高斯随机噪声');xlabel('time n');ylabel('fuzhi n');randn('state',0);m=randn(size(x1);x2=0.1*m+x1;sound(x2,22050);%播放加噪声后的语音信号y2=fft(x2,1024);figure(2)plot(t,x2)title('加噪后的语音信号');xlabel('time n');ylabel('fuzhi n');figure(3)subplot(2,1,1);plot(f,abs(y2(1:512);title('原始语音信号频谱');xlabel('Hz');ylabel('fuzhi');subplot(2,1,2);plot(f,abs(y2(1:512);title('加噪后的语音信号频谱');xlabel('Hz');ylabel('fuzhi');根据以上代码,你可以修改下面有错误的代码程序3:双线性变换法设计Butterworth滤波器fs=22050;x1=wavread('h:课程设计2shuzi.wav');t=0:1/22050:(size(x1)-1)/22050;Au=0.03;d=Au*cos(2*pi*5000*t)'x2=x1+d;wp=0.25*pi;ws=0.3*pi;Rp=1;Rs=15;Fs=22050;Ts=1/Fs;wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标ws1=2/Ts*tan(ws/2); N,Wn=buttord(wp1,ws1,Rp,Rs,'s'); %选择滤波器的最小阶数Z,P,K=buttap(N); %创建butterworth模拟滤波器Bap,Aap=zp2tf(Z,P,K);b,a=lp2lp(Bap,Aap,Wn); bz,az=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换H,W=freqz(bz,az); %绘制频率响应曲线figure(1)plot(W*Fs/(2*pi),abs(H)gridxlabel('频率Hz')ylabel('频率响应幅度')title('Butterworth')f1=filter(bz,az,x2);figure(2)subplot(2,1,1)plot(t,x2) %画出滤波前的时域图title('滤波前的时域波形');subplot(2,1,2)plot(t,f1); %画出滤波后的时域图title('滤波后的时域波形');sound(f1,22050); %播放滤波后的信号F0=fft(f1,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x2,1024);subplot(2,1,1);plot(f,abs(y2(1:512); %画出滤波前的频谱图title('滤波前的频谱')xlabel('Hz');ylabel('fuzhi');subplot(2,1,2)F1=plot(f,abs(F0(1:512); %画出滤波后的频谱图title('滤波后的频谱')xlabel('Hz');ylabel('fuzhi');程序4:窗函数法设计滤波器:fs=22050;x1=wavread('h:课程设计2shuzi.wav');t=0:1/22050:(size(x1)-1)/22050;Au=0.03;d=Au*cos(2*pi*5000*t)'x2=x1+d;wp=0.25*pi;ws=0.3*pi;wdelta=ws-wp;N=ceil(6.6*pi/wdelta); %取整wn=(0.2+0.3)*pi/2;b=fir1(N,wn/pi,hamming(N+1); %选择窗函数,并归一化截止频率figure(1)freqz(b,1,512)f2=filter(bz,az,x2)figure(2)subplot(2,1,1)plot(t,x2)title('滤波前的时域波形');subplot(2,1,2)plot(t,f2);title('滤波后的时域波形');sound(f2,22050); %播放滤波后的语音信号F0=fft(f2,1024);f=fs*(0:511)/1024;figure(3)y2=fft(x2,1024);subplot(2,1,1);plot(f,abs(y2(1:512);title('滤波前的频谱')xlabel('Hz');ylabel('fuzhi');subplot(2,1,2)F2=plot(f,abs(F0(1:512);title('滤波后的频谱')xlabel('Hz');ylabel('fuzhi');试验结果:图一(语音信号的采集)图二(语音信号频谱分析)图三(低通滤波器)图四(高通滤波器)图五(滤波前后频谱比较)7 设计总结通过这次设计,使我对语音信号有了全面的认识,对数字信号处理又有了深刻的理解,在之前数字信号与处理的学习中,已经使用过matlab,对其有了一些基础的了解和认识。通过这次练习使我进一步了解语音信号的采集、频谱分析以及滤波器设计放方法。以及在其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用matlab也可以很好的加深我对课程的理解,方便我的思维。这次设计使我学会分析滤波器的优劣和性能,提高分析与动手时间能力。同时我相信,进一步对matlab的学习与研究对我今后的学习将会起到很大的帮助。8 参考文献(1)唐建锋,游开明,陈列尊. 基于Matlab的数字滤波器设计研究型实验探讨(B). 现代电子技术 ,2006;14-001-02 ,1-2.(2)侯宁.Matlab在数字滤波器设计中的应用,化学工程与装备,2008;59-62.(3)李铖,蒋维.定点DSP中的数字滤波器应用 .仪器仪表用,2006;06-0067-02.(4)美哈里Y-F拉姆.模拟和数字滤波器设计与实现. 北京市:人民邮电出版社,1985.405-450.(5) 美A·安东尼奥.数字滤波器分析与设计. 西安市:陕西科学技术出版社,1984. 210-240. (6)邹理和.数字滤波器. 北京市:国防工业出版社 , 1979.80-100.题目二:DSP在数字识别中的应用1 课程设计的目的:1)掌握数字信号处理的基本概念、基本理论和基本方法; 2)掌握图像处理的常用算法; 3)掌握数字信号处理在数字识别中的应用及数字识别使用的基本算法;4)学会DSP的使用,掌握DSP的程序设计方法;5)学会用DSP对数字图像进行分析和处理。2 课程设计内容:把含有数字的图像,如车牌,身份证等读取到DSP的SDRAM中,利用图像处理算法把数字从图像中定位出来;首先把图像二值化,二值化算法选择固定阈值、直方图或最大类间方差法,比较各个二值化算法的效果;对二值化的图像做边缘提取,选择Sobel或者Laplace边缘提取算法并比较效果;经过二值化和边缘提取后的图像,利用投影法定位数字在图像中的位置,并给出数字在图像中的外接矩形;利用CCS把处理结果显示出来。3 课程设计基础:DSP编程基础、数字信号处理知识、图像处理知识。4 具体步骤与要求:4.1数字图像的采集拍摄含有数字的图像,或利用老师给的图像,在DSP CCS软件平台下,编程把图像读取到DSP的SDRAM中。4.2二值化要求完成固定阈值、直方图或最大类间方差法二值化算法,并比较算法处理结果,选择合适的二值化算法,得到二值化后的图像并显示。要求:(5) 固定阈值法,选择多个阈值比较处理,最终选择合适的阈值;(6) (选做)直方图阈值法,绘制直方图并显示。一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化。二值化方法:(1)全局二值化一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。 全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。 局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。 (2)局部自适应二值化局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。 局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。4.3边缘提取边缘提取采用Sobel或Laplace算法,要求:(1) Sobel和Laplace算法使用3*3模板;(2) (选做)Canny边缘提取算法。边缘提取编程比较:I=imread('lena.bmp');% 提取图像1) BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测2) BW2=edge(I,'roberts');%用Roberts算子进行边缘检测3) BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测4) BW4=edge(I,'log'); %用log算子进行边缘检测5) BW5=edge(I,'canny'); %用canny算子进行边缘检测4.4数字定位要求用自己设计的二值化结果对目标位置进行定位,给出数字的外接矩形和中心;(3) 利用投影法把二值化结果分别向水平和垂直方向投影,选择合适的阈值定位出数字位置,并输出目标位置;(4) 利用修改像素值的方法,把外接矩形绘制到图像中并通过CCS显示。5 数字识别方法综述模式识别(Pattern Recognition)是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智能的重要组成部分。模式识别又常称作模式分类,从处理问题的性质和解决问题的方法等角度,模式识别分为有监督的分类(Supervised Classification)和无监督的分类(Unsupervised Classification)两种。二者的主要差别在于,各实验样本所属的类别是否预先已知。模式还可分成抽象的和具体的两种形式。前者如意识、思想、议论等,属于概念识别研究的范畴,是人工智能的另一研究分支。我们所指的模式识别主要是对语音波形、地震波、心电图、脑电图、图片、照片、文字、符号、生物传感器等对象的具体模式进行辨识和分类。6 程序* Main Function Program#include "math.h"#include "stdio.h"#define IMAGE_WIDTH 128#define IMAGE_HEIGTH 32void main()FILE *fi;int i,j,k;int yIMAGE_HEIGTHIMAGE_WIDTH;int p128=0,p1128=0,p2128=0,m,temp,up,down,num=0,flag=0;unsigned char id128;fi=fopen("E:lu.bmp","rb");fread(char *)id,sizeof(char),54,fi);for (i=0; i<16; i+)fread(char *)id,sizeof(char),64,fi);for (i=0; i<IMAGE_HEIGTH; i+)fread(char *)id,sizeof(char),128,fi);for (j=0; j<IMAGE_WIDTH; j+)yij=idj;fclose(fi);i=0;for (i=0; i<IMAGE_HEIGTH; i+)for (j=0; j<IMAGE_WIDTH; j+)yij = 255*(yij)/200);for(i=0;i<IMAGE_HEIGTH;i+)for(j=0;j<IMAGE_WIDTH;j+)if(yij>=200)pi+;m=IMAGE_HEIGTH/2;temp=pm;for(i=m+1;i<IMAGE_HEIGTH;i+)if(temp>pi)temp=pi;down=i;if(temp=0) down=i;break;temp=pm;for(i=m-1;i>=0;i-)if(temp>pi)temp=pi;up=i;if(temp=0)up=i;break;/画线/*for(j=0;j<IMAGE_WIDTH;j+)yupj=255;yupj=255;for(j=0;j<IMAGE_WIDTH;j+)ydownj=255;ydownj=255;/fengefor(i=0;i<IMAGE_WIDTH;i+) for(j=0;j<IMAGE_HEIGTH;j+)if(yji=255)pi+; for(i=0;i<IMAGE_WIDTH;i+)if(pi>0)if(flag=0)p1num=i-1;flag=1;elseif(flag=1)p2num=i;flag=0; num+;if(flag=1)&&(i=IMAGE_WIDTH-1)p1num=0;p2num=0;num+;break;for(i=0;i<7;i+)for(k=up;k<down;k+)ykp1i=255;ykp2i=255;for(i=0;i<7;i+)for(j=p1i;j<p2i;j+) yupj=255;ydownj=255;* End of File 7 设计结果图一(实验过程)图二(试验结果)图三(试验结果)8 设计总结通过这次设计,使我对数字识别有了全面的认识,对dsp数字图像处理又有了深刻的理解,在之前数字信号与处理的学习中,已经使用过keil C,对其有了一些基础的了解和认识。通过这次练习使我进一步了解数字图像的采集、二值化、数字定位以及边缘提取。以及在其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用C语言也可以很好的加深我对课程的理解,方便我的思维。这次设计使我学会分析滤波器的优劣和性能,提高分析与动手时间能力。同时我相信,进一步对C的学习与研究对我今后的学习将会起到很大的帮助。感谢本次课程设计的指导教师,刘丽杰老师以及耿磊老师,是你们的耐心讲解和指导让我顺利的完成了本次设计实践,并且我对语音以及dap、模式识别有了更加深入的理解,编程方面也有了一定的提高,以后我将利用本次所学,再接再厉,不断扩宽自己的知识面,提高自己的能力。l 9 参考文献(1)陈展东,白宝兴,韩成,扬华民.数字识别算法研究.A).长春理工大学学报.2010, 01-0147-05,147-151.(2) 雷传华,张秀彬.连接数字语音识别系统的DSP实时实现.上海交通大学学报.1999. 1525-1528(3) 黄素贞,尹立新,苗宏庆.基于DSP的手写数字识别系统. 计算机工程.2005,178-180.(4) 纪宗男.DSP实用技术和应用实例. 北京市:航空工业出版社 , 2006.05.(5) 赵红怡.DSP技术与应用实例. 北京市:电子工业出版社 , 2008(6) 余英林.数字图象处理与模式识别 . 广州市:华南理工大学出版社 , 1990.10.