Matlab数字滤波器的设计(IIR与FIR)(内含Matlab代码)

Matlab数字滤波器的设计(IIR与FIR)(内含Matlab代码)

FIR滤波器的优缺点
优点:相位线性度好,处理速度快,没有反馈回路稳定性强于IIR。
缺点:FIR幅频特性精度较之于IIR低
IIR滤波器
优点:相同阶数下IIR滤波效果更好
缺点:相位非线性程度较高,矫正时需要双向滤波进行矫正,不易控制。
FIR滤波器最关键的在于窗函数:这里介绍
汉明窗:
FIR——Hamming窗

  1. 较低的旁瓣幅度,尤其是第一旁瓣;
  2. 旁瓣幅度要下降得快,以利于增加阻带衰减;
  3. 主瓣宽度要窄,这样滤波器过渡带较窄。
    N=40
    泄露系数0.04%,相对旁瓣抑制-42.1dB,主瓣宽度0.0625 (归一化后的频率)
    在这里插入图片描述
    N越大,计算时间越长,群时延越长。取N=40(根据不同的情况,滤波器阶数可以取不同的值,这里我们对一段特定的音频信号进行滤波,因此取40)
    N越大,计算时间越长,群时延越长。取N=40

在这里插入图片描述
滤波结果展示:
在这里插入图片描述
蓝色为滤波前信号;红色为FIR滤波后的信号
利用IIR椭圆滤波器对音频信号进行滤波:
在这里插入图片描述
滤波结果展示:在这里插入图片描述
直接对歌曲进行IIR_ Eliptic(椭圆)滤波
FIR滤波(黄色),IIR滤波后(紫色)
对于不同的音频信号,对原始频谱进行分析后,只需要改动滤波器的设计参数,即可实现数字滤波。
下面请看代码:

[x,fs]=audioread('C:\Users\a\Desktop\大三上\精密仪器\讨论课题目\新闻(加噪声).wav');
n=length(x);
  y=fft(x,n);       %做FFT变换
  f=fs*(0:n/2-1)/n;
  subplot(2,1,1);
  plot(x);
 axis([0 1400000 -1.5 1.5]);
  title('原始新闻信号采样后的时域波形'); 
xlabel('时间轴')
ylabel('幅值A')
subplot(2,1,2); 
plot(f,abs(y(1:n/2))); 
axis([0 1000 0 5000]);
title('原始新闻信号采样后的频谱图'); 
xlabel('频率Hz'); 
ylabel('频率幅值');
% n=0:N-1;
% w=2*n*pi/N;
FIRsignal=IIR_BANDPASSCheby;
outsignal=filter(FIRsignal,x);
%  IIRsignal=IIR_BANDPASSEliptic;
%  outsignal2=filter(IIRsignal,outsignal);
% set(gca,'fontsize',15,'tickdir','out')
% axis([0 5.0E-4 -2 2])
% xlabel('Time');ylabel('Amplitude')
% legend('FIR低通数字滤波器后的信号')  
 m=fft(outsignal,n);
 f=48000*(0:n/2-1)/n;
 figure
 subplot(211);
  plot(outsignal);
   axis([0 1400000 -1.5 1.5]);
  title('新闻滤波信号时域波形');
xlabel('时间轴')
ylabel('幅值A')
 subplot(212);
 plot(f,abs(m(1:n/2)))
 axis([200 2700 0 5000]);
  title('新闻滤波信号频谱图'); 
xlabel('频率Hz'); 
ylabel('频率幅值');
    sound(1.5*outsignal,44100);
%    audiowrite('C:\Users\a\Desktop\精密仪器\讨论课题目\新闻(IIR滤波后).wav',outsignal2,44100);
%    sound(x,44100);

第一次发,欢迎大家指正交流,不喜勿喷!!!!在这里插入图片描述

发布了1 篇原创文章 · 获赞 3 · 访问量 40

猜你喜欢

转载自blog.csdn.net/qq_43944539/article/details/105103056