基于MATLAB的语音信号采集与处理
基于MATLAB的语音信号采集与处理
1.理论原理 利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信号的“ 短时谱”对于非平稳信号, 它是非周期的, 频谱随时间连续变化, 因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短断, 再进行傅里叶变换, 就可以得到该语音的短时谱。
- 具体流程 (1). 语音信号的采集及分析 源代码: fs=22050; x1=wavread( F:\Documents and Settings\Administrator\桌面\333.wav ); sound(x1,22050); y1=fft(x1,1024); f=fs*(0:511)/1024; figure(1) plot(x1) title( 原始语音信号 ); xlabel( 时间 ); ylabel( 幅值 ); figure(2) freqz(x1) title( 频率响应图 ) figure(3) subplot(2,1,1); plot(abs(y1(1:512))) title( 原始语音信号FFT频谱 ) subplot(2,1,2); plot(f,abs(y1(1:512))); title( 原始语音信号频谱 ) xlabel( Hz ); ylabel( 幅值 ); 原始语音信号波形: 语音信号频率响应图: 原始语音信号FFT及信号频谱: (2). 给原始信号加上一个高频噪声,5500Hz 源代码: fs=22050; x1=wavread( F:\Documents and Settings\Administrator\桌面\333.wav ); %读取语音信号的数据,赋给变量x1 f=fs*(0:511)/1024; %将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给f t=0:1/fs:(length(x1)-1)/fs; %将0到x1的长度减1后的值除以fs的值,且步长为1/fs的值,的序列的值,赋予t Au=0.5; %噪声幅值 d=Au
wp=0.25*pi; %通带截止频率 ws=0.3*pi; %阻带截止频率 Rp=1; %通带最大衰减(db) Rs=15; %阻带最大衰减(db) 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 ); %选择滤波器的最小阶数(估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc) [z,p,k]=buttap(N); %创建Butterworth低通滤波器原型 [Bap,Aap]=zp2tf(z,p,k); %将零极点增益转换为普遍分子,分母 [b,a]=lp2lp(Bap,Aap,Wn); %将普遍的分子和分母转换为以Wn为截止频率 [bz,az]=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换(模拟转换为数字) [H,W]=freqz(bz,az); %求频率响应 figure(9) plot(W*Fs/(2*pi),abs(H)) %绘制Butterworth低通滤波器频率响应曲线 grid