《语音信号的采集与频谱分析(附代码).docx》由会员分享,可在线阅读,更多相关《语音信号的采集与频谱分析(附代码).docx(22页珍藏版)》请在课桌文档上搜索。
1、信号与系统大作业语音信号的采集与频谱分析基于MatIab的语音信号处理XIDIANUNIVERSITY学生姓名:学号:专业班级:电子工程学院卓越班指导老师:2015年6月22日摘要本设计用苹果手机自带的录音设备采集了原始语音,并导入了电脑转成WaV格式,然后用MATLAB和Adobeaudition对其进行时域分析。接着利用傅里叶变换进行了频域分析,绘制频谱图,再录制一段加上歌曲的伴奏的语音与原唱进行了对比分析,得出了我与歌星在频域上的差别。本设计给信号加了两种噪声并通过观察加噪后的频谱和试听回放效果比较加噪前后的差别,最后,设计了FIR数字低通滤波器和带通滤波器,分析滤波前后的频谱。再次试听
2、回放效果,得出结论。关键词:语音、FFT、频谱图、噪声、滤波器AbstractThisdesignisbasedonthegeneralfunctionofMatlabandAdobeeditiontodealwithAudiosignals.TheoriginalsignalsarecollectedbyiPhone,sbuilt-inrecordingequipment.First,Icomparethefilegeneratedbymyselfwiththatofthesamesongsangbyafamoussinger.Theemphasisisgenerallylaidonanal
3、ysingthedifferenceinfrequncydomain,buttimedomainwillbeincludedtoo.Afterthat,twonoisesignalsareaddedtotheoriginalsignalrespectivelyandletthempassafiltertoanalyseit.Inthetwoprocessmentionedbefore,Imakecomparisonbetweenthebeforeandafterfrequencydomain.SamplingTheoremisthebaseofmydesign.ltisbysamplingwe
4、cangetdiscretesignalsfromtheoriginaloneanddrawtheimageintimedomain.Also,fastfouriertransformisemployed(FFT)togetthesignalsinfrequencydomain.Theayalysisoffrequencydomainisthehighlightofthisdesign.Throughthisdesign,IcandeepenmycomprehensionofprinciplesofaudiosignalsandIhaveIeamthowtodealwithit.Through
5、metwithmuchhindrance,!improvedmyskillsfinally.Keywords:audiosignalTTTnoise、filter1绪论1.1 课题的研究意义语音信号处理属于信息科学的一个重要分支,它是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科,因此我们进行语言信号处理具有时代的意义。学会运用MATLAB的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处理,观察其时域和频域特性,加深对信号处理理论的理解,这为今后熟练使用MATLAB进行系统的分析仿真和设计奠定基础。1.2 课题的目的与要求利用
6、Matlab和Adobeaudition对语音信号进行数字信号处理和分析,要求采集语音信号后,在软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,再进行频谱分析和再播放来感受噪声滤除的效果。2.理论依据2. 采样频率、采样位数的概念,采样定理;时域信号的FFT分析;数字滤波器设计原理和方法,各种不同类型滤波器的性能比较。3. 1.时域信号的FFT分析FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它利用“一分为二”的思想不断进行,点数越多,运算量的节
7、约就越大,这就是FFT的优越性。在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,X是序列,y是序列的FFT,X可以为一向量或矩阵,若X为一向量,y是X的FFT且和X相同长度;若X为一矩阵,则y是对矩阵的每一列向量进行FFT。如果X长度是2的事次方,函数fft执行高速基一2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式为y=fft(x,N),式中,X,y意义同前,N为正整数。函数执行N点的FFT,若X为向量且长度小于N,则函数将X补零至长度N;
8、若向量X的长度大于N,则函数截短X使之长度为N;若X为矩阵,按相同方法对X进行处理。3.1. 2采样定理采样定理,又称香农采样定律、奈奎斯特采样定律,是信息论,特别是通讯与信号处理学科中的一个重要基本结论。采样是将一个信号(即时间或空间上的连续函数)转换成一个数值序列(即时间或空间上的离散函数),这个数值序列即是一个数字信号。采样定理是将连续的模拟信号转变为离散的数字信号的方法。对于一个时域连续的信号f(t)利用开关函数s(t)进行采样,或者冲激函数序列进行采样(牛)。两种取样都具有一定的取样间隔,同时要求f(t)为频带带限信号,否则取样后将发生频谱混合重叠,破坏原信号。采样定理公式如下:/W
9、=f(nTdTS吟)=-O乙其中TS为采样间隔,设f(t)的频谱区间在(一纵3之誓间,即信号频带带2乃限,需满足的采样条件为:2卷,其中fs为采样频率,这样便完成了对于连续信号的采样形成离散的数字信号方便处理。2.1. 2数字滤波器数字滤波器是一个输入输出都是离散时间信号的特定功能装置。应用数字滤波器处理模拟信号(对应模拟频率)时,首先须对输入模拟信号进行限带、抽样和模数转换。数字滤波器输入信号的数字频率(2n*ffs,f为模拟信号的频率,fs为采样频率,注意区别于模拟频率),按照奈奎斯特取样定理,要使抽样信号的频谱不产生重叠,应小于折叠频率(ws2=),其频率响应具有以2兀为间隔的周期重复特
10、性,且以折叠频率即=点对称。为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换。数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。数字滤波器有低通、高通、带通、带阻和全通等类型。它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。应用最广的是线性、时不变数字滤波器,以及FlR滤波器。从单位脉冲响应的角度,可以把数字滤波器分为:IIR滤波器(无限长单位冲激响应滤波器)和FIR滤波器(有限长单位冲激响应滤波器)3.设计思想3.1 语音信号的采集此次我选择的歌曲是赵薇的情深深雨蒙蒙,用苹果手机自带的录音功能(VoiCeMemos)录音,和WindOWS自带的录音机
11、程序相比,优点是方便,而且可以忽略电脑运行本身的噪声。然后将其导入到电脑,转换格式存为WaVe格式,并对从网上下载原唱的语音用同样的方式转换格式,并保存到正确的目录,以便以后能在matlab中打开。同时手机自带的录音功能还能完成简单的音频剪辑操作,减掉多余的不需要的部分。4. 2语音处理工具的选择 MatlabMatlab是大家都熟悉的一种科学计算软件,在信号与系统中运用很广泛,优点是可编程性强,且具有很好的可移植性和可扩展性,而且和专业信号与系统关联更大。但缺点是数据都以矩阵形式进行处理,对我来说不够直观。 AdobeauditionAdObeaUditiOn是一款专门处理音频的软件,可提供
12、先进的编辑、混音、控制和效果处理功能,优点是很方便,比如采样频率可以直接选择,处理效果很直观,缺点是和信号与系统相关性较小,可编程性差。这次设计的频谱分析主要是采用了matlab进行分析,但对原始语音频谱的分析以及由采样频率不同带来的变化中我同时采用了Biatlab和adobeaudition来分析。 .3噪声函数的选择rand函数产生随机噪声,具体语句将在下面的列表中列出高斯白噪声GaUSSianWhiteNoise此噪声在随机信号分析课程中已学过,此次向原始信号中加入此噪声,加强理解。3.4滤波器的选择设计中选择的是FIR有限长单位冲激响应滤波器,相比于IIR滤波器,它有如下的优点:FlR
13、滤波器,由于冲激响应有限长,可以用快速傅里叶变换,这样运算速度可以快很多;FlR滤波器可以做到严格的线性相位,而若要IIR得到严格的线性相位,则要大大增加滤波器的阶数,FlR滤波器主要采用非递归结构,因而从理论上以及时性从实际的有限精度的运算中,都是稳定的。有限精度运算误差也较小,HR滤波器必须采用递归的结构,极点必须在Z平面单位圆内,才能稳定,这种结构,运算中的四舍五人处理,有时会引起寄生振荡。但是IIR也有相同技术指标下阶数较少,存储单元少,运算次数少的有点,此处不再加以赘述。两种滤波器:低通巴特沃斯滤波器巴特沃斯滤波器的特点为的通频带频率响应最为平滑,阻带缓慢衰减。用窗函数法设计低通滤波
14、器,具体指标为fp=3000Hzfc=4000HzAp=IdBAs=100dB高通滤波器具体指标为:fp=35ooHzfc=4000HzAp=IdBAs=IOdB3. 5Matlab函数的选择(1) y,fs,bits-wavread(filename)wavread函数可读入语音信号y是采样获得的离散时域信号,fs是返回的采样频率,bits是采样位数,filename是音频信号的文件名。(2) wavwrite(y,fs,bits,fiIename,)wavwrite函数,改变采样频率,可以将22.05KHz或者IL025KHz的信号写回并观察这样的采样频率会产生什么样的结果。其中y是已经获
15、得的时域离散信号,fs为写回的频率,bits是写回的位数,filename为要写回的文件名。(3) sound(y,fs,bits)sound函数,播放存在的离散音频信号其中的三个参数同wavread中的相同(4) rnt=rand(a,b)rand函数,为产生随机噪声,从而在信号中加入噪声。改随机噪声是在(0,1)内的随机数,均值为0.5其中a、b为产生随机数矩阵的行和列。(5) fy=fft(y)y为离散时域信号,fft函数是所有程序分析的核心。fft函数提供了以快速傅立叶变换算法的离散傅里叶变换的计算,等于对一个离散信号进行DFT离散傅立叶变换。(6) yl=awgn(y,q,measu
16、red,)awgn函数,为向一个现有的离散信号加入高斯白噪声的函数,y为被添加噪声的信号,q为信噪比,一般要大于LIneaSUred是一种控制名称。(7) n,fo,ao,w=firpmord(f,a,dev,fs)firpmord函数,为设计滤波器阶数的函数,f是滤波器的参数,主要为带边沿的参数,低通滤波器则是通带与阻带截止频率。a是通带与止带的幅频响应的幅度,也是一个向量。dev是通带与止带的震荡幅度大小比例(介于0到1),也是一个向量,fs则是采样频率。左边的4个参数,n是滤波器阶数,f是频率向量,a是幅频特性向量,W是权重。这四个参数是用来下一步制作模拟滤波器的。(8) h=firpm
17、(n,fo,ao,w)firpm函数,利用firpmord所产生的参数制作模拟滤波器,后面四个参数是firpmord所计算出的。(9) ht,w=freqz(h)frcqz函数,对一个设计好的滤波器求冲激响应,h为前一步firmp设计好的滤波器,ht为频率响应,用abs取绝对值得到幅频特性,或者用log转化成dB作图。W是频率范围(归一化的)(10) yf=fftfilt(h,y)fftfilt函数,用设计好的滤波器滤波(数字信号)h为设计好的滤波器,y为待滤的信号。(11) h=firl(n,w,window)firl函数,用于使用做好的窗函数进行带通滤波器设计,做好窗函数如hanning窗
18、(MATLAB也有这个函数),根据相应其他参数做出带通滤波器。MndOw是已经做好的窗,n是滤波器阶数,w是通带范围(一定要在0到1之间),为一个向量(因为是带通滤波器)。(13) a=mean(y)mean函数,用于求一个离散序列的均值,在实验中求采样所得的音频信号的均值y是一个向量(数组),a是该数组的均值。(14) a=var(y)Var函数,用于求离散序列的方差,在实验中用于求采样所得音频信号的方差,y为一个数组,a为该数组的方差。4.课程设计的具体实现及仿真结果分析4.1 语音信号的采集、录入、与打开把我的原始语音信号保存为qingshenshen.wav保存在相应路径,此语音信号的
19、长度小于30so通过matIab的函数wavread()可读入一个.wav格式的音频文件,例如下面的语句y,fs,bits=wavread(iqingshenshen.wav,);读入WaV文件并放入向量y中,对于双声道的音频文件,y有两行,此处我们仅对一个声道的音频进行分析。fs为采样频率,.wav格式默认的采样频率为44.IKHz,下文将比较不同采样频率对语音信号的影响。回放声音:用SOUnd()函数,例如:sounf(x,fs,bits);此处我将我唱的歌和伴奏合起来保存为qingshenshen.wav(具体程序见附录一)运行结果如下原始语音信号时域频域图此时可在WorkSPaCe中看
20、到fs的值VaIUe为44100田fs4414410044100;通过调整放大第三章小图,可以看出我声音的频率范围主要集中在200-450hz之间属用Adobeaudition画出的频域图为,分析可得频域范围与MatIab分析所得很接近,只是Adobeaudition的横轴显示的标准不同。i频率解析XS线性查看自举:(JJ叵)LJ;-36;-72 ; dB HzHz 500010000150指针:10930 Hz, L-83.89 dB, R=-83.89 dB频率:L= 236.09 Hz (A#3 +22), R= 236.09 Hz (A.,区域加上扫描选区 高级II然后我将原唱赵薇的(
21、带伴奏)进行同样的分析,(具体程序见附录一)时域波形图原唱语音信号时域频域图原唱语音信号频域幅值图通过对比可以发现,赵薇的频域更宽,从几十到100Ohz都有较大的分布,算是个女高音吧,但大部分集中在几十到60OhZ这个区间段,看来我在高音部分与原唱有较大差距,怪不得唱她的歌的时候总有种唱不上去的感觉。特征值的分析:通过matlab函数mean()和var()的计算,可以得出原唱的均值与方差为:ml=1.0e-003*0.1372vl=0.8996而我的语音的均值与方差为:m2=l.0e-005*0.5838v2=0.0046比对可知,我唱的歌在均值和方差上和原唱差距都很差,说明我对歌曲的还原度
22、不高,还需要加强唱歌技巧的联系。特别要注意的是,在这次作图过程中,有两个横坐标的量要加以特别的控制,一个是时域分析的横坐标时间,所以加入了对横坐标的控制语句t=(0:nT)/fs;,使它的单位为时间s;二是频域分析的横坐标控制语句yol=(0:Iength(X)T)*fs/Iength(X);如果不加这句很可能出来的不是应有的频率范围。上面的分析都是默认频率44.IKHz下进行的,可以通过wavwrite函数改变采样频率,例如:wavwrite(x,220500,qingshenshen.wav,)以上语句便使得采样频率变成了22.05khz然后用sound函数试听,发现音乐失真很大,速度变得
23、很快,原本30s的音频几秒便放完了,同时音调也变得很高,这是我最直观的感受。同理,如果用500hz的频率去采样,声音就变得很低沉,像风的呼啸与野兽的低喘,可在WOrkSPaCe中观察到fs的值变了田fs5005005004.2 噪声的加入此处,我对我的原始语音分别加入了两个噪声,一个是随机序列噪声,一个是高斯白噪声。注意,以下的分析全都是基于44.Ikhz的采样频率下进行的。随机序列噪声程序中用rand函数产生与采样获得的信号y维度相同的噪声信号,加入原信号中,同样进行时域与频域的分析,画出时域图像、幅频特性,相频特性用处不大在此忽略不画。这里rand的维度通过y的维度得到,可用语句WhoS查
24、看,(具体程序见附录二)运行结果如下:加噪语音信号的时域波形与上文未加噪声的波形对比,可看出时域波形幅值变化较大,波形更加参差不齐,二频域波形变化不大。用SoUnd回放,可明显感觉到有杂音,就像老式的电视机放出的那种刺啦刺啦的声音。然后再计算加噪后的均值与方差:mean=l.0e-004*0.1374var=O.048与加噪声前相比,均值变增大了135%,而方差只变化了4.3%,主要因为加入了大小同信号大小幅度差不多的噪声,并且全都在大于O的区域。此处分析时我仅仅分析了我翻唱的音频信号,对翻唱的信号加噪声分析,对于原唱的分析类似,只要改变文件名即可,因此不再赘述。同样在画图时有坐标控制,此后的
25、程序也有,不再加以称述。高斯白噪声用函数&wgn()产生高斯白噪声,这里取信噪比为IOdB,防止噪声太大而淹没原始信号。(具体程序如下见附录二)运行结果如下:加高斯白噪声后的歌声信号时域图像X 10,加噪声后的歌声信号幅度谱从图片上可以看出,通过对比可以明显看出加完噪声后时域幅值变大,频域变化不大。加入高斯白噪声后试听的效果同加入随机噪声的结果都有刺啦刺啦的声音但相对而言高斯白噪声的噪声更大。同样对于歌星原唱的音频信号不再重复操作。均值与方差分别为:mean2=l.0e-001*l.2676var2=0.0460与未加噪声前相比,均值变化很大,而方差仍基本没有变化。4. 3滤波器的设计及漉波结
26、果低通滤波器具体的指标为:通带截止频率为3000Hz,阻带截止频为4000Hz,通带最大衰减为IdB,阻带最大衰减为100dB.通带阻带的幅频相应幅度一个是1一个是0,震荡比例在通带是0.05,阻带为0.01。并用frez计算频率响应。(具体程序见附录三)设计出滤波器后,画出幅频响应和相频响应图为:频率(HZ)通过滤波器前后的噪声的时域和频域图为:300020001000滤波前信号的频谱滤波后信号的频谱对比可看出,低频部分,尤其是频率小于300OhZ的部分的频谱基本没有发生变化,而在蓝色的途中看以明显看出绿色图中的高频部分被滤除了。试听感觉,声音相比未滤波之前的更加沉闷一些,因为高频成分被滤去
27、的缘故。高通滤波器此处采用凯塞窗函数构成高通滤波器,设计指标为:阻带截止频率为3500Hz,通带截止频率为4000Hz,阻带衰减为IdB,通带衰减为100dBo(具体程序见附录三)滤波器的频率响应图为:FIR高通滤波器加噪信号通过滤波器前后频谱的变化如下图: 10滤波后信号的频谱 104滤波前信号的波形滤波后的信号波形051015x10从视觉上可以很明显地看出,通过滤波器后,低频信号都被滤除了,只剩蓝色的高频分量,同时滤波前后的波形变化也很大,滤波后的波形更为规整。试听后觉得声音很尖,是因为低频部分的分量被滤除的原因。5. 设计中遇到的问题及总结5.1 问题遇到的问题首先与矩阵的维度有关,Ma
28、tlab是以矩阵形式存储和处理数据的,而我经常忽略矩阵的维度而直接对两个矩阵进行加减运算,无疑会出现矩阵维度不匹配的问题,一开始我并不知道数据的维度究竟是多少,也不知道如何解决,但后来我学会了用Whos语句查看变量的维度,之后又学会了怎么取出矩阵的某一行某一列,问题便得到了解决。然后遇到的问题是如何改变采样频率,一开始我会直接在程序开头定义采样频率为2205OHZ或者550OHZ,但之后发现这样做出来的试听效果是一样的,后来查阅了才知道wave格式默认的采样频率为44.IkHz,要用wavwrite函数改变信号的采样频率,问题迎刃而解。接着还遇到了滤波器怎么设计的问题,这方面老师上课虽然有提到
29、过,但是并没有深入地讲,但我记得老师说过滤波器是一个很专业的东西,有人为此设计了一辈子。然后我通过查阅资料了解了11R滤波器和FIR滤波器,并知道了通过Matlab如何去模拟滤波器。虽然如此我觉得我设计的滤波器还只是最最简单的,从滤波效果来看,还有许多问题,还需加强对滤波器的学习。5.2设计的5.2感悟与总结通过这次设计,又加深了我对傅里叶变换以及采样定理的理解,深感信号与系统真是博大精深,我们平时所学都只是冰山一角,只是皮毛,更多的内容在等着我们去探索。一开始想直接用Adobeaudition进行滤波,但是说来惭愧,连教程都看不懂,想要将歌曲的伴奏滤都做的很差。想想也是,哪有那么轻易的事,怎
30、么可能用简答的几步就完成人家苦苦研究的课题。后来用MatIab编程,感觉自己的编程能力还是很欠缺,遇到了很多问题,一些细节一些小的指令总是被我轻易的忽略。但我同时也再次感受到了Matlab的神奇,它有那么多功能,和信号与系统一样,也许我原来知道的只是其中很小的一部分。总的来说,在以后的学习中,要一手抓理论知识,即掌握老师上课讲的内容,同时也要加强编程能力的锻炼。对于这次试验所做的内容,其实只是对语音信号的一个粗略的分析,通过结果也可以看出,滤波器设计得并不理想。由于本人能力和时间有限,所以未进行更深层次的研究,以后一定会加强。参考资料:11郭宝龙,闫允一,朱娟娟,吴宪祥.工程信号与系统M.北京
31、:高等教育出版社.【2】王祯飞.基于MATLAB的语音信号分析和处理LC.福建师范大学协和学院.3丁玉美,高西全,数字信号处理.3版M.西安:西安电子科技大学出版社,2008.附录附录一:语音信号的打开与频域分析%我的语音(原始语音)fs=441001%44.IKHz为默认采样频率,可改变x,fs,bits=wavread(,qingshenshen.wav,);为读入原始语音:情深深雨蒙蒙sound(x,fs,bits);X=fft(x);aX=abs(X):figure;%产生一个新图形界面n=length(x);t=(0:n-l)/fs;%取y数据的长度;%求时间单位S的运算公式;sub
32、plot(311);plot(t,x);xlabelCs,);titlo(时域波形图)subplot(312);plot(X);title(,原始信号频谱);%绘制以时间单位S的时域波形先画出原始信号频谱图subplot(313);yol=(0:Iength(X)-I)*fslength(X);plot(yol(1:length(yol)2),aX(l:length(yol)2);axis(0150003000);%控制横坐标范围%画出原始信号频谱的幅值XIabeI(Hz);title(,原始信号幅值);m2=mean(x);v2=var(x);%原唱语音fs=44100;x,fs,bits=
33、wavread(yuanchang.wav,);%44.IKHz为默认采样频率,可改变%读入原始语音:yuanchang.wavsound(x,fs,bits);X=fft(x);aX=abs(X);figure;n=length(x);t=(0:n-l)/fs;%产生一个新图形界面%取y数据的长度;%求时间单位S的运算公式;subplot(311);plot(t,x,g);xlabel(,s,);titlo(时域波形图)subplot(312);plot(X);title(原始信号频谱);%绘制以时间单位S的时域波形先画出原始信号频谱图subplot(313);yol=(0:length(X
34、)-l),*fslength(X);%控制横坐标范围plot(yol(1:length(yol)2),aX(l:length(yol)/2);%画出原始信号频谱的幅值axis(0150003000);xlabel(,Hz,);title(,原始信号幅值);ml=mean(x);vl=var(x);附录二:像原始语音中加入噪声的Matlab程序加入随机噪声%在原始语音中加入rand产生的随机噪声y,fs,bits=wavread(qingshenshen.wav,);%打开原始语音(qingshenshon.wav)wavwrite(y,44100,qingshenshen.wav);N=Ien
35、gth(y);为求出语音信号的长度Noise=O. 01*randn(N, 2);同Si=y+Noise;sound(Si, fs, bits);subplot (2, 1, 1);n=length(y);t=(O:n-l)/fs;plot(t,Si);XlabeI ( s);title(,加噪语音信号的时域波形);S=abs(fft(Si);subplot (4, 1, 4);yol=(0:length(S)-l), *fslength(S);%随机函数产生噪声,列数为两列,与原始信号维度相%语音信号加入噪声先取y数据的长度;%控制时间轴的坐标S先画出加噪后的时域波形为傅里叶变换%控制频域轴
36、坐标plot(yol(1:length(yol)2),S(1:length(yol)/2);%画出加噪后的频谱XIabeI(Hz);%坐标范围控制axis(100100003000);title(,加噪语音信号的频域波形);加入高斯白噪声%加入高斯白噪声y,fs,bits=wavread(,qingshenshen.wav,);y=y*3;%放大信号y2=awgn(y,10,measured);%加入高斯白噪声sound(y2,fs,bits)先试听加高斯白噪声后的音频fy2=fft(y2);%做傅里叶变换y21=(0:length(fy2)-l),*fslength(fy2);subplot
37、(211),plot(y2);%画出加入噪声后的时域图像title(,加高斯白噪声后的歌声信号时域图像);axis(0,1200000,-1,1);%坐标范围控制subplot(212),plot(y21(1:length(y21)/2),abs(fy2(1:length(y21)/2);%画出加入噪声后的频域图像axis(0200004000);titleC加噪声后的歌声信号幅度谱);附录三滤波器的设计与滤波的Matlab程序低通滤波器的设计与滤波%设计低通滤波器fs=44100;%通带、阻带截止频率%设计滤波器阶数%制作滤波器f=3000,4000;n=l,0;rip=0.05,0.01;
38、N,fo,mo,w=firpmord(f,n,rip,fs);N=N+1;hn=firpm(N,fo,mo,w);%求频率响应先转换单位为dBh,W=freqz(hn);hl=abs(h);hl=20*logl0(hl);subplot(211),plot(W*fs(2*pi),hl);%画出滤波器的幅频响应xlabel(,频率(Hz),);ylabel(幅度(dB);title(低通滤波器幅频特性);axis(0,8000,-100,10);subplot(212),PIot(W*fs(2*pi),angle(h);%画出滤波器的想频响应xlabel(,频率(Hz);title(低通滤波器相
39、频特性);%用设计的低通滤波摘滤波y,fs,bits=wavroad(qingshenshen.wav,);n=length(y);先求出语音信号的长度noise=0.01*randn(n,2);舟随机函数产生噪声s=y+noise;%语音信号加入噪声S=fft(s);先傅里叶变换z21=fftfilt(hn,s);先让加噪信号通过滤波器hnsound(z21,fs,bits);m21=fft(z21);%求滤波后的信号subplot(2,2,1);y20=(0:length(三)-1),*fslength(三);plot(y20(l:length(y20)/2),abs(S(l:length
40、(y20)/2),g,);%画出未滤波器按信号的频谱titlo(滤波前信号的频谱);subplot(2,2,2);y21=(0:length(m21)-1)*fslength(m21);plot(y21(1:1ength(y21)2),abs(m21(1:1ength(y21)2);%Lffli出滤波后信号的频谱titlo(滤波后信号的频谱);subplot(2,2,3);plot(s);title(滤波前信号的波形);subplot(2,2,4);plot(z21);titleC滤波后的信号波形);高通滤波器的设计与滤波%设计高通滤波器rp=l;rs=100;p=l-10.(-rp20);%
41、通带阻带波纹s=10.(-rs20);w=0.9;ws=0.7;fpts=wsw;mag=01;dev=ps;n23,wn23,beta,ftye=kaiserord(fts,mag,dev);b23=firl(n23,wn23,high,Kaiser(n23+l,beta);%由firl设计滤波器h,w=freqz(b23,1);%得到频率响应plot(w*12000*0.5pi,abs(h);%画出频率响应图titlo(FIR高通滤波器);axis(3000600001.2);%用设计的高通滤波器绿除噪声y,fs,bits=wavread(qingshenshen.wav,);n=leng
42、th(y);%求出语音信号的长度noise=0.01*randn(n,2);%随机函数产生噪声s=y+noise;%语音信号加入噪声S=fft(s);%傅里叶变换z21=fftfilt(b23,s);%让加噪信号通过滤波器hnsound(z21,fs,bits);m21=fft(z21);%求滤波后的信号subplot(2,2,1);y20=(0:length(三)-1),*fslength(三);plot(y20(l:length(y20)/2),abs(S(l:length(y20)/2),g,);%画出未滤波器按信号的频谱titlo(滤波前信号的频谱);subplot(2,2,2);y21=(0:length(m21)-1)*fslength(m21);plot(y21(1:length(y21)/2),abs(m21(1:length(y21)2);先画出滤波后信号的频谱titlo(滤波后信号的频谱);subplot(2,2,3);plot(s);title(滤波前信号的波形);subplot(2,2,4);Plot(Z21);title(滤波后的信号波形);