【matlab】iir滤波器

本文详细介绍了IIR滤波器的基本概念、直接I型和直接II型结构,并提供了MATLAB代码示例,演示了如何设计和应用IIR滤波器进行信号滤波。此外,还提到了使用FDATOOL设计滤波器并导出到MATLAB以及Verilog的实现方法,展示了滤波效果的仿真结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.IIR滤波器

    IIIR滤波器的单位冲击响应是无限的!用差分方程表示为:
在这里插入图片描述
     从上式可以看出,计算输出y(n)的时候,需要以前的输出值与输入值。换言之,iirl滤波器有反馈环节。当 a k a_k ak为零的时候,这个滤波器由于没有反馈,其单位冲击响应是有限的,是FIR滤波器。当 a k a_k ak为不为0是时候,是IIR滤波器。

二.IIR滤波器的结构

(1)直接I型

     直接由差分方程得到的IIR滤波器称为直接I型结构,如下图所示,左边为零点部分,右边为极点部分:
在这里插入图片描述

(2)直接II型

     将相同延迟单元合并得到是直接II型
在这里插入图片描述

三.参考示例

(1)基础知识

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(2)直接I型示例

     设计一个滤波器阶数为7,采样频率为20Mhz,截止频率5Mhz,阻带衰减为60dB的一个matlab滤波器(以cheby2为例);
方法一:调用matlab自带函数
[b,a]=cheby2(n, R p R_p Rp, W n W_n Wn)
n:滤波器的阶数
R p R_p Rp:通带波纹最大衰减
W n W_n Wn:截止频率,fs归一化到 2 π 2\pi 2π, W n = f s t o p / f s ∗ 2 W_n=f_{stop}/fs*2 Wn=fstop/fs2

clc;
clear all;
fs=2000e4;   
f0=200e4;    
f1=800e4;    
M=1999;
n=0:(M-1);
N=11; %量化的位数
% signal = sin(2*pi*f0/fs*n);
signal = sin(2*pi*f0/fs*n)+sin(2*pi*f1/fs*n);
[b,a]=cheby2(7,60,0.5);  % 500/2000*2=0.5
signal_f = filter(b,a,signal);
fft_plot(signal,fs,'滤波前的信号');
fft_plot(signal_f,fs,'滤波后的信号');
signal=round(signal./max(signal))*(2^N-1);
fid = fopen('sin1.txt','w');
fprintf(fid,'%d\n',signal);  % x代表16进制  d代表十进制
fclose(fid);
fft_plot(signal,fs,'滤波前量化后的信号');
signal_f = filter(b,a,signal);
fft_plot(signal_f,fs,'滤波后量化的的信号');
function fft_plot(y,fs,s_name)
    L_i = 2^nextpow2(length(y)*100);
    s_i_fft = fft(y,L_i);
    s_i_fftshfit = fftshift(s_i_fft);
    P = abs(s_i_fftshfit)/length(y)*2;   %对于非直流分量或者0来说是除以N乘以2,对于直流分量来说是直接除以N 
%     fshift = (-L_i/2:L_i/2-1)*(fs/L_i);
    fshift = linspace(-fs/2,fs/2,L_i);
    figure;
    plot(fshift,P);
    title([s_name,'的双边谱 ']);
    xlabel('f (Hz)');
    ylabel('|P(f)|');
end

方法二:FDATOOL
参数如下所示:
在这里插入图片描述
选择Export
在这里插入图片描述
在这里插入图片描述
导出SOS和G到工作空间,将SOS和G转为[b,a],具体公式如下:

[b1,a1]=sos2tf(SOS,G)

通常观察系数发现,两者设计的系数一致。
matlab仿真的结果如下所示:
在这里插入图片描述
从图中可以看出8Mhz的信号被滤波。
方法三:verilog的实现【具体参考文献2】

在这里插入图片描述
仿真结果:
在这里插入图片描述

四. 参考资料

  1. IIR滤波器设计(调用MATLAB IIR函数来实现)
  2. FPGA数字信号处理(六)直接型IIR滤波器Verilog设计
  3. 关于Matlab中用fdatool设计滤波器
  4. 数字滤波器设计专题(一)——FDATool使用教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值