www.pudn.com > FSM22.rar > FSM22.m


%用任意响应滤波器设计方法(cremez函数)设计四种FIR滤波器对音频信号进行滤波 
%音频信号生成的.wav文件导入MATLAB   
x=wavread('2.wav'); 
N=length(x); 
n=1:N; 
plot(n,x); 
title('导入的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
t=3.93; 
fs=N/t; 
sound(x,fs); 
pause 
figure; 
%用FFT计算此音频信号的频谱 
XX=fft(x); 
X=fftshift(XX); 
f=-fs/2:fs/N:fs/2-1/N; 
subplot(3,1,1); 
plot(f,abs(X)); 
title('音频信号的频谱经过低通FIR滤波器滤波'); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%设计一个低通的FIR滤波器 
b1=cremez(50,[0,0.2,0.3,1],{'lowpass'}); 
[h1,w1]=freqz(b1,1,512,'whole'); 
subplot(3,1,2); 
ww1=(w1/pi-1)*11037.2; 
plot(ww1,fftshift(abs(h1))); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%用此低通滤波器对音频信号进行滤波 
y1=filter(b1,1,x); 
YY1=fft(y1); 
Y1=fftshift(YY1); 
subplot(3,1,3); 
plot(f,abs(Y1)); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
pause 
figure; 
subplot(2,1,1); 
plot(n,x); 
title('导入的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(x,fs); 
pause 
subplot(2,1,2); 
plot(n,y1); 
title('经过低通FIR滤波器滤波后的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(y1,fs); 
pause 
figure; 
%用FFT计算此音频信号的频谱 
XX=fft(x); 
X=fftshift(XX); 
f=-fs/2:fs/N:fs/2-1/N; 
subplot(3,1,1); 
plot(f,abs(X)); 
title('音频信号的频谱经过高通FIR滤波器滤波'); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%设计一个高通的FIR滤波器 
b2=cremez(50,[0,0.2,0.3,1],{'highpass'}); 
[h2,w2]=freqz(b2,1,512,'whole'); 
subplot(3,1,2); 
ww2=(w2/pi-1)*11037.2; 
plot(ww2,fftshift(abs(h2))); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%用此高通滤波器对音频信号进行滤波 
y2=filter(b2,1,x); 
YY2=fft(y2); 
Y2=fftshift(YY2); 
subplot(3,1,3); 
plot(f,abs(Y2)); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
pause 
figure; 
subplot(2,1,1); 
plot(n,x); 
title('导入的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(x,fs); 
pause 
subplot(2,1,2); 
plot(n,y2); 
title('经过高通FIR滤波器滤波后的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(y2,fs); 
pause 
figure; 
%用FFT计算此音频信号的频谱 
XX=fft(x); 
X=fftshift(XX); 
f=-fs/2:fs/N:fs/2-1/N; 
subplot(3,1,1); 
plot(f,abs(X)); 
title('音频信号的频谱经过带通FIR滤波器滤波'); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%设计一个带通的FIR滤波器 
b3=cremez(50,[0,0.1,0.2,0.3,0.4,1],{'multiband',[0,0,1,1,0,0]}); 
[h3,w3]=freqz(b3,1,512,'whole'); 
subplot(3,1,2); 
ww3=(w3/pi-1)*11037.2; 
plot(ww3,fftshift(abs(h3))); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%用此带通滤波器对音频信号进行滤波 
y3=filter(b3,1,x); 
YY3=fft(y3); 
Y3=fftshift(YY3); 
subplot(3,1,3); 
plot(f,abs(Y3)); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
pause 
figure; 
subplot(2,1,1); 
plot(n,x); 
title('导入的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(x,fs); 
pause 
subplot(2,1,2); 
plot(n,y3); 
title('经过带通FIR滤波器滤波后的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(y3,fs); 
pause 
figure; 
%用FFT计算此音频信号的频谱 
XX=fft(x); 
X=fftshift(XX); 
f=-fs/2:fs/N:fs/2-1/N; 
subplot(3,1,1); 
plot(f,abs(X)); 
title('音频信号的频谱经过带阻FIR滤波器滤波'); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%设计一个带阻的FIR滤波器 
b4=cremez(50,[0,0.1,0.2,0.3,0.4,1],{'multiband',[1,1,0,0,1,1]}); 
[h4,w4]=freqz(b4,1,512,'whole'); 
subplot(3,1,2); 
ww4=(w4/pi-1)*11037.2; 
plot(ww4,fftshift(abs(h4))); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
%用此带阻滤波器对音频信号进行滤波 
y4=filter(b4,1,x); 
YY4=fft(y4); 
Y4=fftshift(YY4); 
subplot(3,1,3); 
plot(f,abs(Y4)); 
xlabel('实际频率(Hz)'); 
ylabel('幅度响应'); 
pause 
figure; 
subplot(2,1,1); 
plot(n,x); 
title('导入的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(x,fs); 
pause 
subplot(2,1,2); 
plot(n,y4); 
title('经过带阻FIR滤波器滤波后的音频信号的时域波形'); 
xlabel('数据个数N'); 
ylabel('量化幅度'); 
sound(y4,fs);