举个例子,简单说说如何推导IIR滤波器和FIR滤波器的参数

前言

最近看这两个滤波器设计嘛,就试着来写一下

主要从双线性变换,z变换,然后举一个例子来进行一下滤波器的设计。

例子

我们考虑传递函数如下的low pass filter

IIR滤波器

脉冲响应不变法

考虑这个传递函数H(s)=w02s2+w0Qs+w02H(s)=\frac{w_0^2}{s^2+\frac{w_0}{Q}s+w_0^2}H(s)=s2+Qw0s+w02w02

为了更好地将H(s)拆分开来,我们考虑分母的因式分解

假设H(s)H(s)H(s)存在两个根,解一元二次方程,有:

p1,2=−w02Q±1−14Q2 p_{1,2}=-\frac{w_0}{2Q} \pm \sqrt{1-\frac{1}{4Q^2}} p1,2=2Qw0±14Q21

为了方便计算,我们记

α=−w02Q \alpha =-\frac{w_0}{2Q} α=2Qw0

β=w01−14Q2 \beta = w_0\sqrt{1-\frac{1}{4Q^2}} β=w014Q21

因此我们知道

p1=α+jβ p_1=\alpha + j\beta p1=α+jβ

p2=α−jβ p_2=\alpha-j\beta p2=αjβ

那我们的H(s)此时变成了:

H(s)=w02(s−p1)(s−p2) H(s)=\frac{w_0^2}{(s-p_1)(s-p_2)} H(s)=(sp1)(sp2)w02

我们假设这个式子可以展开,那么我们可以得到H(s)如下:

H(s)=As−p1+Bs−p2 H(s)=\frac{A}{s-p1} + \frac{B}{s-p_2} H(s)=sp1A+sp2B

这里A和B是待定的,我们有

w02(s−p1)(s−p2)=As−p1+Bs−p2 \frac{w_0^2}{(s-p_1)(s-p_2)}=\frac{A}{s-p_1}+\frac{B}{s-p_2} (sp1)(sp2)w02=sp1A+sp2B

这里我们其实可以计算出来,两边同时乘以分母,就有

A(s−p2)+B(s−p1)=w02 A(s-p_2)+B(s-p_1)=w_0^2 A(sp2)+B(sp1)=w02

求得A和B如下:

A=w02p1−p2B=w02p2−p1 A = \frac{w_0^2}{p_1-p_2} \\ B=\frac{w_0^2}{p_2-p_1} A=p1p2w02B=

<think>好的,用户现在想找一个用MATLAB设计IIR滤波器简单例子。之前我回答过关于FIR滤波器设计的例子,现在需要转换到IIR。首先,我需要回顾一下用户提供的引用内容,特别是引用[1][3]提到filterDesigner工具designfilt函数,这些都是设计IIR的关键工具。 用户可能已经了解FIR的设计,现在转向IIR,可能需要对比两者的不同。IIR通常使用模拟滤波器转数字的方法,比如巴特沃斯、切比雪夫等。我需要选择一个简单的方法,可能用butter函数,因为巴特沃斯滤波器比较常见,而且MATLAB中的butter函数使用方便。 接下来,我需要确定示例参数。低通滤波器比较基础,截止频率设为15Hz,采样频率100Hz,这样归一化截止频率是0.3,之前的FIR例子一致,方便用户对比。阶数选择4阶,因为IIR的阶数较低就能达到较好的效果,这也是IIR的优势。 然后,生成测试信号,包含低频高频成分,比如5Hz30Hz,这样滤波后可以看到30Hz被衰减。使用filter函数应用滤波器,但要注意IIR是递归的,可能需要注意稳定性,但用MATLAB内置函数设计的话,通常会是稳定的。 绘图部分需要展示时域信号对比频率响应。时域波形显示滤波效果,频率响应则展示滤波器的特性。同时,可能需要用fvtool来查看更详细的滤波器特性,如群延迟、相位响应等。 还需要考虑用户可能的问题,比如如何调整参数、选择不同类型的IIR滤波器(比如切比雪夫或椭圆),以及导出系数到其他应用。所以,在相关问题里可以提到这些点,帮助用户进一步学习。 检查引用内容,引用[3]提到了designfilt函数,这也是一个更灵活的方法,可以在示例代码中加入两种方法:传统的butter函数designfilt函数,让用户了解不同的实现方式。这样代码更全面,也展示了MATLAB的多样性。 最后,确保代码正确,语法无误,注释清晰,用户能够复制粘贴直接运行。同时,解释关键函数步骤,比如butter的参数含义,归一化频率的计算,以及如何验证设计结果。可能还需要提到滤波器阶数选择,比如使用buttord来估计最小阶数,但为了简单起见,示例直接指定了4阶。 总结,步骤包括确定参数、设计滤波器、生成信号、应用滤波器、可视化结果,并解释相关函数扩展方法。相关问题要引导用户深入,比如比较IIRFIR,不同设计方法的影响,以及实际应用中的注意事项。</think>以下是通过MATLAB设计IIR滤波器的完整示例及分步说明,使用**巴特沃斯滤波器**作为典型设计方法: --- ### 示例目标 设计一个**4阶低通IIR滤波器**,截止频率15Hz(采样频率100Hz),验证其对含5Hz30Hz混合信号的滤波效果。 --- ### MATLAB代码实现 ```matlab % 设计参数 Fs = 100; % 采样频率100Hz fc = 15; % 截止频率15Hz order = 4; % 滤波器阶数 % 方法1:直接使用butter函数设计 [b, a] = butter(order, fc/(Fs/2), 'low'); % 巴特沃斯低通滤波器设计 % 方法2:使用designfilt函数(更灵活的参数设置) % d = designfilt('lowpassiir', 'FilterOrder', order, ... % 'HalfPowerFrequency', fc, 'SampleRate', Fs); % [b, a] = tf(d); % 获取传递函数系数 % 生成测试信号(含5Hz30Hz成分) t = 0:1/Fs:1; x = sin(2*pi*5*t) + 0.5*sin(2*pi*30*t); % 应用滤波器 y = filter(b, a, x); % IIR滤波需要同时使用ba系数 % 绘制结果 subplot(211) plot(t, x, 'b', t, y, 'r') title('时域波形对比'), legend('原始信号','滤波后') subplot(212) freqz(b, a, 1024, Fs) % 绘制频率响应 title('巴特沃斯滤波器频率特性') ``` --- ### 关键步骤说明 1. **参数归一化** 截止频率需转换为归一化频率:$f_{\text{norm}} = f_c / (F_s/2) = 15/50 = 0.3$ 对应代码中的`fc/(Fs/2)`,确保频率值在0~1范围内[^1] 2. **滤波器设计函数** - `butter(order, Wn)`:生成巴特沃斯滤波器系数 - `order`决定过渡带陡峭度(阶数越高越陡) - `Wn`为归一化截止频率 - `designfilt`函数支持更多参数设置(通带纹波、阻带衰减等)[^3] 3. **系数结构** IIR滤波器传递函数为: $$ H(z) = \frac{\sum_{k=0}^M b_k z^{-k}}{1 + \sum_{k=1}^N a_k z^{-k}} $$ 对应`filter(b, a, x)`中的`b`(分子系数)`a`(分母系数) --- ### 设计效果验证 1. **时域波形** - 高频成分(30Hz)被显著衰减(见红色滤波后波形) - 低频成分(5Hz)保持完整 2. **频率响应** - 截止频率处增益为-3dB(巴特沃斯滤波器特性) - 阻带衰减约24dB/oct(4阶滤波器理论值)[^2] --- ### 进阶工具推荐 使用`filterDesigner`工具进行可视化设计(命令行输入`filterDesigner`): 1. 选择滤波器类型:IIR → Butterworth 2. 设置阶数:4 3. 输入截止频率:15Hz 4. 点击"Design Filter"生成系数 5. 通过菜单导出系数到MATLAB工作区[^1] --- $$ \text{巴特沃斯滤波器幅度响应:} |H(j\omega)| = \frac{1}{\sqrt{1 + (\omega/\omega_c)^{2n}}} $$ 其中$n$为滤波器阶数,$\omega_c$为截止频率[^2] --- ### 相关问题 1. 如何选择IIR滤波器的类型(巴特沃斯/切比雪夫/椭圆)? 2. IIR滤波器设计中如何避免相位非线性失真? 3. 如何将MATLAB设计的IIR滤波器系数移植到嵌入式系统中? [^1]: 滤波器设计工具filterDesigner使用方法参考 [^2]: 巴特沃斯滤波器理论特性公式 [^3]: designfilt函数的扩展参数设置说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值