数字信号处理课程设计报告语音信号去噪处理.doc
数字信号处理课程设计报告题目: 语音信号去噪处理 专业班级 XXXXXXXXX 学 号 XXXXXXXXXXXXX 学生姓名 XXXXXX 指导教师 张培玲 教师评分 2016年 1月 13日语音信号滤波去噪使用脉冲响应不变法设计的巴特沃斯滤波摘要 本课程设计主要运用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析,根据结果和学过的理论得出合理的结论。关键词 课程设计;滤波去噪;巴特沃斯滤波器;脉冲响应不变法;MATLAB目 录一、设计目的与要求. 4二、总体设计方案. 5 2.1实验步骤 5 2.2设计内容 . 6 2.3语音信号的频谱分析 7 2.4滤波器设计. 8 2.5结果分析. 13三、设计原理结果与仿真分析 13 3.1设计原理 . 13 3.2 仿真结果与分析 13四、结论 14五、心得体会 14参考文献 14附录. 15一、设计目的与要求1.1 课程设计目的数字信号处理课程设计是在学生完成数字信号处理和MATLAB的结合后的基本实验以后开设的。本课程设计的目的是为了让学生综合数字信号处理和MATLAB并实现一个较为完整的小型滤波系统。这一点与验证性的基本实验有本质性的区别。开设课程设计环节的主要目的是通过系统设计、软件仿真、程序安排与调试、写实习报告等步骤,使学生初步掌握工程设计的具体步骤和方法,提高分析问题和解决问题的能力,提高实际应用水平。1.2 课程设计的要求(1)滤波器指标必须符合工程设计。(2)设计完后应检查其频率响应曲线是否满足指标。(3)处理结果和分析结论应该一致,而且应符合理论。(4)独立完成课程设计并按要求编写课程设计报告。二、 总体设计方案2.1设计步骤开始语音信号滤波去噪使用脉冲不变响应法设计的巴特沃斯滤波器的设计流程如图3.1.1所示:语音信号的采集(wavread函数),画时域图快速傅里叶变换,并且画频谱图设定滤波器性能指标,通带截止频率fb=1100,阻带截止频率fc=1200,通带波纹Ap=1,阻带波纹As=20脉冲响应不变法法设计巴特沃斯滤波器验证并进行频谱分析设计好的滤波器进行滤波处理比较滤波前后语音信号的波形及频谱回放语音信号结束图2.1.1 脉冲响应不变法巴特沃斯滤波器对语音信号去噪流程图2.2设计内容 用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析点击windows系统桌面的“开始”按钮,点击开始菜单栏里的“附件”,选择“录音机”选项,点击录音机“文件”选项,进入“声音选定”设置,把属性一栏设置成“8000Hz,8位,单声道,7KB/秒”(见图3.2.1)。点击确定,然后开始语言信号的采集,采集时间为1秒左右为最佳。采集的声音文件以“.wav”格式存储(见图3.2.2)。图2.2.1 采集声音的参数设置图2.2.2 采集声音2.3语音信号的频谱分析在MATLAB中编辑m函数,使用wavread函数读取采集的声音文件(.wav)将它赋值给某一向量,再对其进行采样,然后使用plot语句画出相关的频谱图形在figure(1)上。(1)Wavread函数调用格式:y,Fs,nbits=wavread(file)功能说明:采样值放在向量y中,Fs表示采样频率(Hz),nbits表示采样位数。(2)快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft(x,n)参数x为被变换的时域序列向量,N是DFT变换区间长度,当n大于x的长度时,fft函数自动在x后面补零。,当n小于xn的长度时,fft函数计算x的前n个元素,忽略其后面的元素。在本次课程设计中,我们利用fft函数对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。(3)声音采样文件读取的程序(文件名:c.wav)%用麦克风采集一段8000Hz,8k的单声道语音信号,绘制波形并观察其频谱x, Fs, nbits = wavread('c.wav')figure(1)n=length(x)x1=fft(x,n)x2=abs(x1)x3=angle(x1)subplot(4,1,1);stem(x);title('原信号时域')subplot(4,1,2);stem(x1);title('原信号fft')subplot(4,1,3);stem(x2);title('fft幅值')subplot(4,1,4);stem(x3);title('fft相角')所得语音频谱分析图见图2.3.1图2.3.1 声音信号的频谱分析(第一幅是时域波形;采样1是FFT后波形;采样2是频域幅度谱;采样3是频域相位谱)2.4滤波器设计设计指标:通带截止频率为1100Hz,阻带截止频率为1200Hz,通带波纹为1dB,阻带波纹为20dB,用脉冲(冲激)响应不变法设计的一个满足上述指标的巴特沃思IIR滤波器%巴特沃思低通滤波器Fs=8000; %采样频率wp=1100*2/Fs;ws=1200*2/Fs;%根据采样频率将滤波器边界进行转化Rp=1;Rs=20;%通带波纹和阻带波纹Nn=128;N,Wn=buttord(wp,ws,Rp,Rs);%求滤波器的最小阶数和3dB固有频率b,a=butter(N,Wn)%设计BUTTERWORTH低通滤波器,返回滤波器的系数矩阵figure(2);H,f=freqz(b,a,Nn,Fs);%用Nn点求得频率特性,H为N个点处的频率响应复值输出向量;F为与第N点处对应的频率值f(Hz)subplot(2,1,1);plot(f,20*log10(abs(H);title('滤波器特性')%20log10(abs(H)DB为频响幅值曲线幅值xlabel('频率/Hz');ylabel('振幅/dB');grid on;%滤波器幅频特性subplot(2,1,2);plot(f,180/pi*unwrap(angle(H);%angle(H)为频响相位曲线相位值xlabel('频率/Hz');ylabel('相位/o');grid on;%滤波器相频特性巴特沃思低通滤波器的相位谱和振幅谱见图2.4.1图2.4.1 利用脉冲响应不变法设计的数字巴特沃斯滤波器(w(单位:)使用巴特沃思低通滤波器对语音信号进行去噪处理,编写程序如下:dt=1/Fs;%采样间隔t=0;(length(x1)-1)*dt;%时间序列figure(3)subplot(2,1,1);plot(x1);title('输入信号');y=filter(b,a,x1);%对输入信号进行滤波subplot(2,1,2);plot(y);title('输出信号');%绘制输出信号xlabel('时间/s')%比较滤波前后语音信号的波形Am=abs(y);pha=angle(y);figure(4);subplot(4,1,1);plot(Am);title('滤波后幅值')subplot(4,1,2);plot(pha);title('滤波后相位')subplot(4,1,3);plot(x2);title('滤波前幅值')subplot(4,1,4);plot(x3);title('滤波前相位') %比较滤波前后语音信号的频谱滤波前后的波形见图2.4.2图2.4.2滤波前后波形比较图滤波前后波形的频域幅值谱和相位谱的比较图2.4.3图2.4.3 滤波前后波形的频域幅值谱和相位谱的比较图%用麦克风采集一段8000Hz,8k的单声道语音信号,绘制波形并观察其频谱x, Fs, nbits = wavread('c.wav')figure(1)n=length(x)x1=fft(x,2000)x2=abs(x1)x3=angle(x1)subplot(4,1,1);plot(x);title('原信号时域')subplot(4,1,2);plot(x1);title('原信号fft')subplot(4,1,3);plot(x2);title('fft幅值')subplot(4,1,4);plot(x3);title('fft相角')%巴特沃思低通滤波器Fs=8000; %采样频率wp=1100*2/Fs;ws=1200*2/Fs;%根据采样频率将滤波器边界进行转化Rp=1;Rs=20;%通带波纹和阻带波纹Nn=128;N,Wn=buttord(wp,ws,Rp,Rs);%求滤波器的最小阶数和3dB固有频率b,a=butter(N,Wn)%设计BUTTERWORTH低通滤波器,返回滤波器的系数矩阵figure(2);H,f=freqz(b,a,Nn,Fs);%用Nn点求得频率特性,H为N个点处的频率响应复值输出向量;F为与第N点处对应的频率值f(Hz)subplot(2,1,1);plot(f,20*log10(abs(H);title('滤波器特性')%20log10(abs(H)DB为频响幅值曲线幅值xlabel('频率/Hz');ylabel('振幅/dB');grid on;%滤波器幅频特性subplot(2,1,2);plot(f,180/pi*unwrap(angle(H);%angle(H)为频响相位曲线相位值xlabel('频率/Hz');ylabel('相位/o');grid on;%滤波器相频特性dt=1/Fs;%采样间隔t=0;(length(x1)-1)*dt;%时间序列figure(3)subplot(2,1,1);plot(x1);title('输入信号');y=filter(b,a,x1);%对输入信号进行滤波subplot(2,1,2);plot(y);title('输出信号');%绘制输出信号xlabel('时间/s')%比较滤波前后语音信号的波形Am=abs(y);pha=angle(y);figure(4);subplot(4,1,1);plot(Am);title('滤波后幅值')subplot(4,1,2);plot(pha);title('滤波后相位')subplot(4,1,3);plot(x2);title('滤波前幅值')subplot(4,1,4);plot(x3);title('滤波前相位')%比较滤波前后语音信号的频谱2.5 结果分析 根据3.5.1 的滤波前后波形的频域幅值谱和相位谱的比较图(图3.5.2)得:从幅值的大小来说,滤波后的幅值变小;从相位的稀疏度来说,滤波后的相位较为稀疏。由此可以得出,通过巴特沃思低通滤波器的滤波,滤除了采样文件中夹杂的噪声,滤波成功。三、设计原理结果与仿真分析3.1 设计原理用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析。3.2结果与分析 在这次的课程设计中我们设计的滤波器对语音信号的滤噪处理或多或少会因为我们的疏忽或者实践能力不够还是会遇到问题的,当遇到问题时我们不但运用自己学到的知识还得到同学和老师的帮助将其解决,不断完善和修改。设计中出现的问题及解决方法如下:(1)所有的时间波形横坐标都要化为时间,滤波前后频谱的横坐标应是频率,这样在观察通带截止频率和阻带截止频率时更加精确,误差较小。(2)在运用Matlab设计滤波器时,当编辑完前面两条程序时无法放出声音,后来发现我们应当把采集的语音信号wav文件放到Matlab的work文件夹中。(3)还要在滤波器性能曲线的wc处画一根竖线,这样更方便看出结果,其中wc处线的确定还需计算出wb/pi的值。(4)设计的滤波器达不到要求,因为在采集语音信号时,录音机的音频格式应该是PCM 8000kHz,8位,单声道。四、结论课程设计总结拿到语音信号滤波去噪使用脉冲响应不变法设计的巴特沃斯滤波题目后,我通过去图书馆查阅相关书籍及在网上搜集相关的资料,获得了有关于滤波器的仿真相关的信息,经过学习建出巴特沃斯滤波器的仿真模型,在调试过程中,有金晓华老师的悉心指导,整个设计过程较为顺利。很早的就完成了任务。通过本周实习,不仅使我对数字信号处理这门课有了更深刻的了解,加强了对理论知识的学习。而且使我切体会到数字信号处理技术在我们现实生活中的用处之大,懂得如何更好更熟练地进行有用资料的收集,有益于我今后的学习。总而言之,本周的课程设计使我受益匪浅。五、心得体会本次MATLAB课程设计主要任务是完成FIR数字滤波器的设计,对我来说这个题目还是很有挑战性的,因为自己对MATLAB中有关滤波器的设计知识了解较少,但正是这种有挑战性的题目才能提高自己的能力,才有研究价值,入手这个题目后我查阅了相关的资料,也从网上获得了不少有关MATLAB设计滤波器的资料,加上自己之间对MATLAB有一定的了解,因而设计思路渐渐明朗,经过自己的不断尝试和探索,终于弄明白了FIR滤波器的工作原理,通过查阅相关资料和研究MATLAB中提供的帮助信息,我也明白了FIR滤波器设计相关的一些函数的使用方法,并用它们来设计FIR滤波器,最终完成了题目。 在设计过程中,我也遇到了很多不懂得地方,程序经常出现错误,尤其是在利用所设计的滤波器对模拟出来的数字序列滤波时,出现很多错误,但经过自己的不断努力和尝试,最终还是解决了问题。同时,在书写报告的过程中,更加深入的学会了对Word的使用,其中遇到最大的困难就是如何在Word中添加设计FIR数字滤波器过程中计算所需的公式,虽然书写起来很麻烦,但是最终通过不断的探索和努力还是完成了。参考文献1 郭士剑,王宝顺,贺志国,杨可心 等. MATLAB7.X数字信号处理,北京:人民邮电出版社.2006年12月 2 程佩青. 数字信号处理教程.北京:清华大学出版社.2010年5月 3 徐明远,刘增力. MATLAB仿真在信号处理中的应用.西安:西安电子科技大学出版社.2007年11月4 罗军辉,罗勇江,白义臣,庞娜 等. MATLAB7.0在数字信号处理中的应用.北京:机械工业出版社.2005年5月5 万永革. 数字信号处理的MATLAB实现.北京:科学出版社.2007年4月附录利用wavread函数对语音信号进行采样,其程序如下:y,Fs,bits=wavread('1.wav'); y=y(:,1); sigLength=length(y); Y = fft(y,sigLength); Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2); f=Fs*(0:halflength)/sigLength; figure;plot(f,Pyy(1:halflength+1);xlabel('Frequency(Hz)'); t=(0:sigLength-1)/Fs; figure;plot(t,y);xlabel('Time(s)');利用函数fftfilt对语音信号进行滤波。程序如下:y,fs,nbits=wavread('1.wav'); N=length(y) Y=fft(y,N); sound(y); figure(4); plot(y); figure(5);plot(abs(Y); Fp=1200; Fs=1100; Ft=8000; As=20; Ap=1; wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;fp=2*Ft*tan(wp/2);fs=2*Ft*tan(ws/2);n,wn=buttord(wp,ws,Ap,As, 's'); b,a=butter(n,wn, 's'); num,den=bilinear(b,a,1); h,w=freqz(num,den); figure(2)d=Au*cos(2*pi*3800*t)'x2=x1+d;y1=fft(x1,2048); y2=fft(x2,2048);figure(3)plot(w*8000*0.5/pi,abs(h);z=filter(num,den,y);sound(z);m=z; figure(1)subplot(2,2,3);plot(abs(m), 'r');grid;subplot(2,2,4);plot(z, 'b');grid;subplot(2,2,2);plot(y,'b');grid;subplot(2,2,1);plot(abs(Y),'r');grid;