《数字信号处理》课程设计基于MATLAB的语音信号设计.doc

上传人:土8路 文档编号:10380786 上传时间:2021-05-13 格式:DOC 页数:12 大小:356.50KB
返回 下载 相关 举报
《数字信号处理》课程设计基于MATLAB的语音信号设计.doc_第1页
第1页 / 共12页
《数字信号处理》课程设计基于MATLAB的语音信号设计.doc_第2页
第2页 / 共12页
《数字信号处理》课程设计基于MATLAB的语音信号设计.doc_第3页
第3页 / 共12页
《数字信号处理》课程设计基于MATLAB的语音信号设计.doc_第4页
第4页 / 共12页
《数字信号处理》课程设计基于MATLAB的语音信号设计.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《数字信号处理》课程设计基于MATLAB的语音信号设计.doc》由会员分享,可在线阅读,更多相关《《数字信号处理》课程设计基于MATLAB的语音信号设计.doc(12页珍藏版)》请在三一文库上搜索。

1、成 绩指导教师:日 期:数字信号处理课程设计 题 目:基于MATLAB的语音信号设计姓 名: 院 系: 电子信息工程系 专 业: 通信工程 班 级: 092 学 号: 指导教师: 2012年 6 月基于MATLAB的语音信号设计(电子信息工程学系 指导教师:)1. 课程设计目的1.了解语音信号的产生、采集,能绘制语音信号的频率响应曲线及频谱图;2.学会用MATLAB对语音信号进行分析和处理;3.掌握用滤波器去除语音信号噪声的方法,观察去噪前后的语音信号。2. 课程设计基本要求 1. 学会 MATLAB 的使用,掌握 MATLAB 的程序设计方法。 2. 掌握在 Windows 环境下语音信号采

2、集的方法。 3. 掌握数字信号处理的基本概念、基本理论和基本方法。 4. 掌握 MATLAB 设计 FIR 和IIR数字滤波器的方法。 5. 学会用 MATLAB 对信号进行分析和处理。3. 课程设计原理数字滤波器根据其冲激响应函数的时域特性,可分为2种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。FIR和IIR的滤波原理都是进行卷积,就是对数入信号进行某种计算。a.利用模拟滤波器设计IIR数字滤波器方法(1)根据所给出的数字滤波器性能指标计算出相应的模拟滤波器的设计指标。 (2)根据得出的滤波器性能指标设计出相应的模拟滤波器的系统函数H(S)。(3)根据得出的模拟滤波器

3、的系统函数H(S),经某种变换得到对该模拟滤波器相应的。b.FIR滤波器的窗函数设计法FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。(2)由性能指标确定窗函数W(n)和窗口长度N。(3)求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。c.在matlab中本次设计涉及到的几个重要函数(1)采样:y,fs,nbit=wavread,返回采样值放在向量y中,fs为采

4、样频率(Hz),nbit为采样位数。 (2)快速傅里叶变换:Y=fft(y,N),其中x为有限长序列,N为序列y的长度,Y为序列y的DFT。 (3)数字滤波器的频率响应:h,w=freqz(b,a,n),返回数字滤波器的n点复频率响应,b和a是滤波器系数的分子和分母向量;h是复频率响应,w是频率点,n默认为512。(模拟滤波器的频率响应用函数freqs)。4.课程设计内容基本要求:(1)录制一段自己的语音信号,并对录制的信号进行采样;(2)画出采样后语音信号的时域波形和频谱图;(3)给定滤波器的性能指标,采用窗函数法或双线性变换设计FIR滤波器或设计IIR滤波器,并画出滤波器的频率响应;(4)

5、然后用自己设计的滤波器对采集的语音信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;(5)回放语音信号。扩展部分:(1)设计GUI界面进行对该语音处理系统的界面化管理。(2)实现matlab界面中的直接录音功能5.详细设计过程与调试分析5.1 语音信号的采集 录制原始语音:我们利用Windows的录音机,录制了一段自己的声音(“同志们,我们一起吃饭吧”,单声道),时间在3s左右。接着保存为WAV格式(存在matlab软件的work文件夹下,命名为“chifan”)。5.2 原始语音信号的分析利用函数wavread对语音信号进行采样,并读取语音的相关信息,

6、并通过函数sound听到采样后自己所录的一段声音,并画出它的时域和频域的图形。程序如下:fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音 %s 的信息:n, fileName);fprintf(语言长度 = %g 秒n, length(y1)/Fs);fprintf(取样频率 = %g 取样点/秒n, Fs);fprintf(解析度 = %g 位元/取样点n, nbits);sound(y1,Fs);M=length(y1);time=0:1/Fs:(M-1)/Fs; % 时间轴的向量yf1=fft(y1);figur

7、e;subplot(2,2,1);plot(time,y1);axis(0,4,-1.5,1.5);title(原信号的时域图);xlabel(时间);ylabel(幅度);subplot(2,2,2);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf1);axis(0,25000,0,1200);title(原始语音信号频谱);xlabel(频率);ylabel(幅度)运行结果: 图1 原始信号分析5.3 对语音信号进行加噪处理利用函数awgn给语音信号加上高斯白噪声,调用sin函数来单音正弦信号。通过函数sound来听到加完噪声后的声音,并画出它的时域和频域的图形。程序如下:

8、fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音 %s 的信息:n, fileName);fprintf(语言长度 = %g 秒n, length(y1)/Fs);fprintf(取样频率 = %g 取样点/秒n, Fs);fprintf(解析度 = %g 位元/取样点n, nbits);M=length(y1);time=0:1/Fs:(M-1)/Fs;% 时间轴的向量g=awgn(y1,20); %给语音信号加上高斯白噪声sound(g,Fs); %回放加噪信号G=fft(g); %对加噪后的语音信号进行DFT变换

9、N=0.5*sin(2*pi*7000*time);%噪声为7kHz的正弦信号y2=y1+N;wavplay(y2,Fs,async);%播放加噪声后的语音信号yf2=fft(y2);figure;subplot(2,2,1);plot(time,g);axis(0,4,-1.5,1.5);title(加高斯噪声后语音信号时域图);xlabel(时间);ylabel(幅度);subplot(2,2,2);plot(0:Fs/(M):Fs*(M-1)/M,abs(G);axis(0,25000,0,1200);title(加高斯噪声后语音信号频谱图);xlabel(频率);ylabel(幅度);

10、subplot(2,2,3);plot(time,y2);axis(0,4,-1.5,1.5);title(加正弦信号的时域图);xlabel(时间);ylabel(幅度);subplot(2,2,4);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf2);axis(0,25000,0,1200);title(加正弦信号的频谱图);xlabel(频率);ylabel(幅度)运行结果: 图2 原始信号加噪信号的时域和频谱图 5.4 设计数字滤波器和画出其频谱响应5.4.1设计个巴特沃斯低通滤波器设定通带截止频率(fp=1000)、阻带截止频率(fs=3000)、通带波纹系数(rp=

11、0.5)、阻带波纹系数(rs=40)、抽样频率(fc=22050)。程序如下:%巴特沃斯低通滤波器fp=1000;fs=3000;rp=0.5;rs=40;fc=22050;wp=2*fp/fc;ws=2*fs/fc; %将模拟域转化成数字域。N,Wc=buttord(wp,ws,rp,rs); %估算巴特沃思滤波器的阶数N和3dB截止频率Wc。B,A=butter(N,Wc); %求传输函数的分子和分母多项式的系数。figure;freqz(B,A,256,fc); %求滤波器的频率响应。title(巴特沃斯低通滤波器的幅频和相频特性图);运行结果: 图3 巴特沃斯滤波器的性能5.4.2用k

12、aiser窗设计个FIR低通滤波器 通带截止频率(fp=1000)、阻带截止频率(fs=2000)、通带波纹系数(Ap=1)、阻带波纹系数(As=100)、抽样频率(fc=22050)。程序如下:%用kaiser窗设计的低通滤波器fp=1000;fc=1200;As=100;Ap=1;fs=22050;wc=2*fc/fs;wp=2*fp/fs; %wc为通带截止频率N=ceil(As-7.95)/(14.36*(wc-wp)/2)+1;%计算kaiser窗所需阶数Nalph=0.1102*(As-8.7); %计算kaiser窗的控制参数alphWin=Kaiser(N+1,alph); h

13、n=fir1(N,wc,Win); %调用kaiser计算低通滤波器的系数向量hnfigure;freqz(hn,1,512,fs); %计算数字滤波器的频率响应title(低通滤波器的幅频和相频特性图);运行结果: 图3 FIR低通滤波器性能5.5用滤波器对信号进行滤波滤波处理5.5.1用巴特沃斯滤波器对加噪语音进行滤波处理 对语音信号进行滤波处理,测试设计好的滤波器是否对我们的语音信号进行了处理。这里用的是IIR滤波器,所以利用函数filter对信号进行滤波。,即x= filter(b,a,y),x即是滤波后的语音信号,我们将滤波前后的时域波形进行对比,看是否有处理好,并且我们对其进行快速

14、傅里叶变换,即X=fft(signal),目的是对比滤波前后的频域频谱,进一步具体分析我们设计的滤波器是否达到我们的设计要求。程序如下:%用巴特沃斯低通滤波器进行滤波fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音 %s 的信息:n,fileName);fprintf(语言长度= %g 秒n, length(y1)/Fs);fprintf(取样频率 = %g 取样点/秒n, Fs);fprintf(解析度 = %g 位元/取样点n, nbits);M=length(y1);time=0:1/Fs:(M-1)/Fs;%

15、时间轴的向量N=0.5*sin(2*pi*8000*time);%噪声为8kHz的正弦信号y2=y1+N;yf1=fft(y1);yf2=fft(y2);figure;fp=1000;fs=3000;rp=0.5;rs=40;fc=22050;wp=2*fp/fc;ws=2*fs/fc; %将模拟域转化成数字域。N,Wc=buttord(wp,ws,rp,rs); %估算巴特沃思滤波器的阶数N和3dB截止频率Wc。B,A=butter(N,Wc); %求传输函数的分子和分母多项式的系数。h,w=freqz(B,A,256,fc) %求滤波器的频率响应。x=filter(B,A,y2); %由传

16、输函数的分子和分母多项式的系数得到模拟滤波器X=fft(x); %将x信号进行快速傅里叶变换。sound(x,fc,nbits); %将滤波后的信号x进行回放。subplot(3,2,1);plot(time,y1);axis(0,4,-1.5,1.5);title(原信号的时域图);xlabel(时间);ylabel(幅度);subplot(3,2,2);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf1);axis(0,25000,0,1200);title(原始语音信号频谱);xlabel(频率);ylabel(幅度);subplot(3,2,3);plot(time,y2

17、);axis(0,4,-1.5,1.5);title(加正弦噪声信号的时域图);xlabel(时间);ylabel(幅度);subplot(3,2,4);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf2);axis(0,25000,0,1200);title(加正弦噪声信号的频谱图);xlabel(频率);ylabel(幅度);subplot(3,2,5);plot(time,x);axis(0,4,-1.5,1.5);title(滤波后信号的时域图);xlabel(时间);ylabel(幅度);subplot(3,2,6);plot(0:Fs/(M):Fs*(M-1)/M,a

18、bs(X);axis(0,25000,0,1200);title(滤波后信号的频谱图);xlabel(频率);ylabel(幅度);运行结果: 图4 巴特沃斯低通滤波器对加正弦噪声语音进行处理 图5 巴特沃斯低通滤波器对加白噪声信号进行处理5.5.2用kaiser窗设计的FIR低通滤波器对语音进行滤波处理程序如下:(只需把5.4.1中的滤波器对应的程序段改成如下)fp=2000;fc=3000;As=100;Ap=1;fs=22050; %kaiser窗设计的低通滤波器wc=2*fc/fs;wp=2*fp/fs;N=ceil(As-7.95)/(14.36*(wc-wp)/2)+1;beta=

19、0.1102*(As-8.7);Win=Kaiser(N+1,beta);b=fir1(N,wc,Win);x=fftfilt(b,y2);X=fft(x);运行结果: 图6 FIR低通滤波器对加正弦噪声信号进行滤波处理 图7 FIR低通滤波器对加正弦噪声信号进行滤波处理5.6实现matlab录音 可以实现在matlab界面中进行录音,并能保存该录音文件并调用播放器对其进行播放。程序如下:%用matlab实现录音fs=22050;% 取样频率duration=5;% 录音时间waveFile=test.wav;% 存储的文件名fprintf(按任意键开始 %g 秒录音:, duration);

20、 pausefprintf(录音中.);y=wavrecord(duration*fs, fs);fprintf(录音结束n);fprintf(按任意存储录音至 %s 档案., waveFile); pausenbits=8;% 每点的解析度为 8-bitwavwrite(y, fs, nbits, waveFile);fprintf(存档结束n);fprintf(按任意键开始播放 %s.n, waveFile);dos(start , waveFile);% 开启wav对应的播放器播放所录得语音运行结果:按任意键开始 5 秒录音:录音中.录音结束;按任意存储录音至 test.wav 档案.存

21、档结束;按任意键开始播放 test.wav.的语音。5.7.GUI界面设计并导入程序设计GUI界面如下,并将上面对应的程序写到界面中各个按钮对应的回调函数中。 图8 GUI界面设计6.结果分析与体会6.1运行结果分析 1.滤波器的作用就是滤除掉阻带内有频率分量,保留通带内的频率分量。通过观察滤波前后语音信号波形的变化,即观察图4和图5,可以知道,时域中我们观察到滤波后的语音信号发生了衰减,同时去除了噪音分量,说明滤波器起到了滤波作用,但语音信号发生了衰减;从频域波形中我们可以明显看到我们设计的滤波器对我们的语音信号进行了滤波处理,可以看出滤波器滤掉了一部分频率范围内的信号,同时将噪声进行了滤除

22、;分别听原始语音和滤波后的语音信号,发现滤波后的语音信号噪声几乎没了,同时滤波后的语音信号强度稍有减弱,音色有一点低沉,不过基本达到了滤波的效果。所以本次设计的两个滤波器达到了设计要求。2. 滤波器指标的设定是很关键的一步,ws,和wp要设置合适,ws设置太大噪音太多。wp设置太小会导致声音的丢失。我们应该认真查看频谱,再确定ws,和wp。由频谱图可以看出:我的语音信号大多集中在03000Hz,所以我取了fp=1000Hz,fs=3000Hz。6.2出现的问题及解决方法(1)画图时刚开始直接用plot(y),而没有加入取样个数及取样间隔导致话出来的图和理论推导的坐标点的值不一致,通过加入取样个

23、数及取样间隔如plot(0:Fs/(M):Fs*(M-1)/M,abs(yf1);解决了这问题。(2)由于我的电脑是Win7的系统,我使用录音把我的原始声音给录下来时,发现格式不是wav格式,后来我用格式工厂软件把它给转换成wav,但MATLAB还是不能读取信号,后来我又改变了路径,但还是不行,最后没办法,只能去同学那里录一段声音文件。6.3设计心得体会在之前数字信号与处理的学习以及实验课的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。通过本次实验使我进一步了解了信号的产生、采样及频谱分析的方法。 以及其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本

24、知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。结束语: 总的来说,这次课程设计还是比较成功的,在设计中遇到了很多问题,不过通过上网查询及同学的帮助,问题基本都解决了。觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,参考文献:1高西全 丁玉美.数字信号处理(第三版).西安:西安电子科技大学出版社,20082张磊.MATLAB实用教程.北京:人民邮电出版社,20083程佩青.数字信号处理教程(第三版).清华大学出版社,2007.24薛年喜MATLAB 在数字信号处理中的应用北京:清华大学出版社5候朝焕.实用FFT信号处理技术(第一版).海洋出版社,1990.106付丽琴 桂志国 王黎明. 数字信号处理原理及实现.国防工业出版社,2004.47余成波.杨青.数字信号处理及MATLAB实现.清华大学出版社,2005.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1