📄 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -