数字信号处理
然后对语音信号进行频谱分析,在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 页