天天看点

matlab语音信号采集与处理6,基于MATLAB的语音信号的采集与处理详解

数字信号处理

然后对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图5-3。

fs=22050;%语音信号采样频率为22050

x1=wavread('D:\\MATLAB\\bin\\zx.wav');%读取语音信号的数据,赋给变量x1 sound(x1,22050);%播放语音信号

y1=fft(x1,1024);%对信号做1024点FFT变换

f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给f

subplot(2,1,1); %创建两行一列绘图区间的第1个绘图区间 plot(abs(y1(1:512))); %做原始语音信号的FFT频谱图 title('原始语音信号FFT频谱'); subplot(2,1,2);

plot(f,abs(y1(1:512)));?s是绝对值,plot是直角坐标下线性刻度曲线

第 6 页

数字信号处理

title('原始语音信号频谱');

图5-3:原始信号的FFT变换

5.2语音信号加噪与频谱分析

fs=22050; %语音信号采样频率为22050

x1=wavread('D:\\MATLAB\\bin\\zx.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

第 7 页

数字信号处理

Au=0.005; %噪声幅值

d=[Au*sin(2*pi*5500*t)]'; %所加的噪声是正弦信号 x2=x1+d; %将正弦信号噪声加在语音信号上 sound(x2,22050); %播放语音信号

y1=fft(x1,1024); %对信号y1做1024点FFT变换 y2=fft(x2,1024); %对信号y2做1024点FFT变换 figure(4); %创建图形窗1 plot(t,x2); %做加噪后的信号时域 title('加噪后的信号');

图5-4:加噪声后的语音信号

第 8 页

数字信号处理

5-3:巴特沃斯滤波器的设计:

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(6)

plot(W*Fs/(2*pi),abs(H)) %绘制Butterworth低通滤波器频率响应曲线

grid %添加图格 xlabel('频率/Hz') ylabel('频率响应幅度') title('Butterworth')

第 9 页