语音信号预处理方法研究.docx
一、设计目的与要求本次课程设计的目的是利用MATLAB对语音信号进行数字信号处理和分析,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析和特征提取;并对所采集的语音信号使用适宜的滤波器滤除噪声,分析比拟不同滤波器的性能。要求利用MATLAB来读入采集)语音信号,将它赋值给某一向量。再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。特征提取包括对原信号进行预加重处理,然后分帧并加窗,采样和量化,端点检测等。然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。二、设计方案论证2.1 设计理论依据采样定理在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中,最高频率fmax的2倍时,即:fs.max>=2fax,那么采样之后的数字信号完整地保存了原始信号中的信息、,一般实际应用中保证采样频率为信号最高频率的510倍;采样定理又称奈奎斯特定理。1924年奈奎斯特(NyqUiSt)就推导出在理想低通信道的最高大码元传输速率的公式:理想低通信道的最高大码元传输速率=2W*log2N(其中W是理想低通信道的带宽,N是电平强度)。采样频率采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。采样频率越高,即采样的间隔时间越短,那么在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音复原成为原来的声音。这就是说采样频率是衡量声卡采集、记录和复原声音文件的质量标准。.3采样位数与采样频率采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的复原就越真实越自然。采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。每增加一个采样位数相当于力度范围增加了6dB。采样位数越多那么捕捉到的信号越精确。对于采样率来说你可以想象它类似于一个照相机,44.1kHz意味着音频流进入计算机时计算机每秒会对其拍照达441000次。显然采样率越高,计算机摄取的图片越多,对于原始音频的复原也越加精确。预加重通过一个一阶有限鼓励响应高通滤波器,使信号的频谱变得平坦,不易受到有限字长效应的影响。分帧根据语音的短时平稳特性,语音可以以帧为单位进行处理,实验中选取的语音帧长为32ms,帧叠为16msoMatlab中用函数:y=enframe(x,framelength,step)进行分帧,每帧长framelength,分得的帧数是nf=fix(nx-framelength+step)/step);其中nx是X的长度。y是framelengthXnf或nf×framelength的数组,取决于X是列数据还是行数据。调用格式也可写为y=enframe(x,hanning(framelength),step);这时每帧数据都乘了窗函数hanning(framelength)o加窗采用汉明窗对一帧语音加窗,以减小吉布斯效应的影响。快速傅立叶变换(FastFourierTransformation,FFT)将时域信号变换成为信号的功率谱。2.2 语音信号的分析及处理方法语音的读入与回放在MATLAB中,y,fs,bits=WaVread('Blip',NIN2);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。NIN2表示读取从NI点到N2点的值假设只有一个N的点那么表示读取前N点的采样值)。sound(x,fs,bits);用于对声音的U放。向量y那么就代表了一个信号也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。时域信号的FFT分析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;假设向量X的长度大于N,那么函数截短X使之长度为N;假设X为矩阵,按相同方法对X进行处理。数字滤波器设计原理数字滤波是数字信号分析中最重要的组成局部之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。数字滤波器的设计步骤不管是11R滤波器还是FIR滤波器的设计都包括三个步骤:(1)按照实际任务的要求,确定滤波器的性能指标。(2)用一个因果、稳定的离散线性时不变系统的系统函数去逼近这一性能指标。根据不同的要求可以用11R系统函数,也可以用FIR系统函数去逼近。(3)利用有限精度算法实现系统函数,包括结构选择、字长选择等。IIR滤波器与FIR滤波器的性能比拟FIR:FiniteImpulseresponse,有限冲击响应HR:InfiniteImpulseresponse,无限冲击响应从性能上来说,11R滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,那么相位非线性越严重。相反,FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数到达高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比HR滤波器高510倍,结果,本钱较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,那么IIR滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。整体来看,11R滤波器到达同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大。三.程序代码及仿真结果3.1语音的读入与回放程序代码:%原始语音信号读入与翻开;x,fs,bits=wavread(,D:anthem.wav',1024,15120);sound(x,fs,bits);X=fft(x,4096);figure(1);subplot(211);plot(x);title(,原始信号时域图');xlabel(,时间轴')ylabel(,幅值轴')axis(0,4500,-2,2);subplot(212);plot(abs(X);title(,原始信号频谱图');Xlabelf频率/Hz轴');ylabel(,幅值轴');仿真波形:原始信号时域图050010001500200025003000350040004500时间轴原始信号频谱图600050010001500200025003000350040004500频率/Hz轴OOOO42®蛔三03.2 语音量化处理程序代码:P=10;A=Ipc(x,10);figure(3);subplot(211);plot(八);title(,量化的波形');xlabel(,频率/Hz');ylabel('幅值');z=T*abs(fft(八));subplot(212);stem(三);title(,量化的频谱图');仿真结果:3.3 语音经高通滤波处理程序代码:%N阶高通滤波器;N=5;wc=0.3;b,a=butter(N,wc,high,);h=fliter(b,a,x);H=fft(三);figure(2);subplot(211);plot(三);title(,IIR滤波后信号的波形');subplot(212);plot(abs(三));title(,IIR滤波后信号的频谱');%sound(三);z=fftfilt(b,x);Z=fft(三);figure(4);subplot(211);plot(三);title(,FIR滤波后信号的波形');subplot(212);plot(abs(三));title(,FIR滤波后信号的频谱');%sound(三);仿真波形:IIR滤波后信号的波形3.4语音预加重处理程序代码:%预加重处理xx=double(x);xx=filter(1-0.9375,1,xx);XX=fft(xx,4096);figure(4);subplot(211);plot(xx);title(,预加重后信号波形');subplot(212);plot(abs(XX);title(,预加重后信号频谱');仿真波形:程序代码:%窗函数设计低通滤波器:fp=1000;fc=1200;as=100;ap=l;fs=22000;wp=2*fpfs;wc=2*fcfs;N=ceil(as-7.95)/(14.36*(wc-wp)/2)+1;beta=0.1102*(as-8.7);Window=Kaiser(N+l,beta);b=firl(N,wc,window);freqz(b,1,512,fs);d=fliter(b,a,x);D=fft(d);figure(4);subplot(211)plot(d);title(,滤波后的声音波形')subplot(212)plot(abs(D)titlef滤波后的声音频谱')%sound(d);仿真波形:3.6语音分帧处理程序代码:%分帧%设定帧移和帧长step=219;%帧移是否设置的比拟大,可以试试80framelength=256;%分帧后如果有结余,那么补足最后一帧数据IengthOfTailPad=framelength-rem(length(xx),framelength);%求余数tailPad=xx(length(xx)-IengthOfTailPad+1:length(xx);%xx=xx;taiIPad;%补足最后一帧nf=fix(length(xx)-framelength+step)/step);%向0取整计算帧数%219*256sn=zeros(n