1 前言
为了进一步理解快速傅里叶变换(FFT),我们首先选取一个小项目来练练手。我们从语音信号的处理出发,采用不通滤波器和FFT来对其进行处理得到新的语音信号。我们将得到的语音信号与原语音信号进行对比,并对此进行频谱分析,加深我们对信号处理流程的理解。
本次仿真采用matlab软件,在matlab上进行相应的语音信号处理。值的提醒的是,在开始该项目前我们需寻找一段录音,录音格式见后续代码。
2 语音信号处理代码(matlab)
1 信号采集程序
fs=22050;
x1=wavread('C:\Users\Lenovo\Desktop\signal .wav'); sound(x1,22050);
y1=fft(x1,1024);
f=fs*(0:511)/1024;
figure(1)
plot(x1)
title('原始语音信号');
xlabel('time n');
ylabel('fuzhi n');
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('fuzhi');
2 加上5kHz高频余弦噪声后的信号采集程序
fs=22050;
x1=wavread(' C:\Users\Lenovo\Desktop\signal .wav ');
f=fs*(0:511)/1024;
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
sound(x2,22050);
y2=fft(x2,1024);
figure(1)
plot(t,x2)
title('加噪后的信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2);
plot(f,abs(y2(1:512)));
title('加噪后的信号频谱');
xlabel('Hz');
ylabel('fuzhi');
3 窗函数法设计滤波器程序
fs=22050;
x1=wavread(' C:\Users\Lenovo\Desktop\signal .wav ');
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1));
figure(1)
freqz(b,1,512)
f2=filter(bz,az,x2)
figure(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2,22050);
F0=fft(f2,1024);
f=fs*(0:511)/1024;
figure(3)
y2=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F2=plot(f,abs(F0(1:512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');