实验二 语音信号处理
语音信号处理综合运用了数字信号处理的理论知识,对信号进行计算及频谱分析,设计滤波器,并对含噪信号进行滤波。
一、(1)语音信号的采集:利用Windows下的录音机,录制一段话音。然后
在Matlab软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;
改变采样率为原来的1/2倍,1/4倍,1/20倍,1/50倍,1/100倍等,分别画出降采样前后的信号波形和频谱图,分析采样前后信号的变化。
程序:
y=wavread('a.wav');
>> [y,fs,bits]=wavread('a.wav'); >> y1=wavread('a.wav',1000);
>> y2=wavread('a.wav',[500,1500]);
>> subplot(311);plot(y);title('读a的信号图');
>> subplot(312);plot(y1);title('读取前1000点的采样值放在向量y中');
>> subplot(313);plot(y2);title('读取从500点到1500点的采样值放在向量y中');
y=wavread('a.wav');
>> [y,fs,bits]=wavread('a.wav');
>> y11=resample(y,1,2); %采样率变为原来的1/2倍 y12=fft(y11);
>> y21=resample(y,1,20);
>> y22=fft(y21);
>> subplot(211);plot(y11);title('采样率变为原来的1/2'); subplot(212);plot(abs(y12));title('采样率变为原来的1/2'); subplot(211);plot(y21);title('采样率变为原来的1/20');
>> subplot(212);plot(abs(22));title('采样率变为原来的1/20的频谱');
sound(y,22050,16); sound(y11,22050,16); 二、重构原信号:
降采样后,信号的采样率和采样点数同时变化。如采样率变为原来的1/2,即对原始信号每隔一个点采样。如果要恢复原始信号,即信号长度和采样率须变为原来同样大小。所以,必须对降采样后信号进行插值重构。
对采样后的真实语音信号进行插值重构,滤波,恢复原始信号。画出插值前后信号的波形以及频谱图,并将重构后信号与原始信号进行比较。
f=2;fs=22050; >> k=1:22050;
>> x=wavread('a.wav');
>> [x,fs,bits]=wavread('a.wav'); >> n=2;
y=zeros(1,n*length(x));
>> subplot(211);plot(x);title('原始信号'); y(1:n:length(y))=x;
>> subplot(212);plot(y);title('插值重构信号'); 差值信号的频谱
三、对原始信号加入噪声和频谱分析: 对原始语音信号加入
s=sin(2*pi*f*Ts*n)
的噪声,采样后可知Fs = 16000,选择f = 2500,播放加入噪声信号的语音信号,并绘制噪声信号和含噪语音信号;
function noise fs=16000;
[x,fs,bits]=wavread('a.wav'); X=abs(fftshift(fft(x)));
subplot(321);plot(x);title('?-ê?D?o?2¨D?'); t=(0:length(x)-1)/16000; f=fs*(0:1023)/2048; c1=0.01*sin (2*pi*5000*t); k=1:1024;
x=zeros(1,k*length(c1)); x(1:k:length(x))=c1; yn=x+c1;
Yn=abs(fftshift(fft (yn))); N=1;1000;
subplot(322);plot((-N/2:N/2-1)/length(k)*fs,X);title('原始信号频谱'); subplot(323);plot(yn);title('带噪声信号波形');
subplot(324);plot((-N/2:N/2-1)/length(k)*fs,Yn);title('′带噪声信号频谱');
四、设计滤波器:
计算滤波器的性能指标,设计滤波器,绘制滤波器的特性曲线;
设计一个Buttordworth高通数字滤波器,通带边界频率为3000Hz,阻带边界频率为
2000Hz,通带波纹小于1dB,阻带衰减大于20dB,采样频率为10000Hz。假设一个信号
x(t)?sin2?f1t?0.5cos2?f2t,其中f1=100Hz,f2=4000Hz。试将原信号与通过该滤波器
的输出信号进行比较。
function gaoba
Fs=10000; %采样频率
wp=3000*2/Fs;ws=2000*2/Fs; %根据采样频率将滤波器边界频率进行转换 Rp=1;Rs=20; %通带波纹和阻带衰减
Nn=128; %显示滤波器频率特性的数据长度
[N,Wn]=buttord(wp,ws,Rp,Rs); %求得数字滤波器的最小阶数和截止频率(归一化频率) [b,a]=butter(N,Wn,'high'); %设计Butterworth高通数字滤波器 figure(1)
[H,f]=freqz(b,a,Nn,Fs); %用Nn点绘出频率特性 subplot(2,1,1),plot(f,20*log10(abs(H))); xlabel('频率/Hz');ylabel('振幅/dB');grid on; subplot(2,1,2),plot(f,180/pi*unwrap(angle(H))) xlabel('频率/Hz');ylabel('相位/^o');grid on; n=0:127;
dt=1/Fs;t=n*dt; %时间序列 f1=10;f2=400; %输入信号频率
x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t); %输入信号 figure(2)
subplot(2,1,1),plot(t,x); title('输入信号') %绘制输入信号 y=filter(b,a,x); %对输入信号进行滤波
subplot(2,1,2),plot(t,y),title('输出信号') %绘制输出信号 xlabel('时间/s')
程序输出结果如下图,可看出所设计滤波器在大于3000Hz为通带,其衰减均小于1dB;在小于2000Hz为阻带,其衰减大于20dB,完全符合设计要求,但相频特性是非线性的。当滤波器输入100Hz和4000Hz两种信号后,滤波器滤除了100Hz的信号,使得4000Hz的信号通过滤波器,起到滤波的效果。