音频进阶学习二十四——IIR滤波器设计方法

文章目录


前言

本章内容会先介绍滤波器的指标。设计一个IIR滤波器需要考虑到它的通带、阻带和过渡带,以及它的应用场景。随后再介绍设计IIR滤波器的方法和流程。

其中在设计数字滤波器时,需要考虑它的通带截止频率和阻带截止频率。而数字滤波器的设计方法时是依靠逼近模拟滤波器的方式实现,所以本文中会介绍三种常见的模拟滤波器,通过这三种模拟滤波器可以设计出在计算机中应用的数字滤波器。

|版本声明:山河君,未经博主允许,禁止转载


一、滤波器设计要求

1.选频滤波器种类

音频进阶学习十四------滤波器的种类和实现方式总已经对于滤波器的种类做了介绍,这里复习一下:

选频滤波器种类 原理 作用
低通滤波器(Low-Pass Filter, LPF) 允许低频信号通过,阻止高频信号 如从含噪声的信号中去除高频噪声
高通滤波器(High-Pass Filter, HPF) 允许高频信号通过,阻止低频信号 如去除信号中的低频干扰,如电力线噪声
带通滤波器(Band-Pass Filter, BPF) 允许某一频段范围内的信号通过,抑制其他频段的信号 如在通信系统中提取特定频段的信号
带阻滤波器(Band-Stop Filter, BSF) 阻止某一频段的信号通过,而允许其他频段信号通过 如去除50 Hz或60 Hz的电源噪声
全通滤波器(All-Pass Filter) 允许所有频率的信号通过,但会改变它们的相位而不是幅度 主要用于调整信号的相位响应

对于这几种滤波器可以以下图表示出来,其中左边高的地方允许频率通过,而右边方框内的是允许频率通过,其中两个红线以内的是一个周期内部的表现。

对于理想滤波器而言,系统的冲激响应应该是非因果和无限长的,而这种基本上是不可实现的,所以在数字滤波器中,是允许幅度响应存在一定范围内的误差,并且存在过度使得幅度响应变化更平滑。

2.通带、阻带、过度带

我们知道滤波器是一个系统,而滤波器作用的本质就是通过其冲激响应函数对输入信号进行卷积,从而得到输出信号。上文中对于幅度响应的误差的表述,在滤波器的频率响应中使用通带、阻带和过渡带来表征,它们帮助定义滤波器如何处理信号的不同频率成分。

结合图像表示

  • 通带
    • 定义:通带是指滤波器允许信号通过的频率范围。在这个频率范围内,信号几乎没有衰减,或者衰减非常小。
    • δ p \delta_p δp是通带峰波纹值, ω p \omega_p ωp是通带截止频率
    • 特征:在通带内,信号的幅度几乎保持不变。对于低通滤波器,通带是低频范围;对于高通滤波器,通带是高频范围;对于带通滤波器,通带是位于两个截止频率之间的频率范围。
  • 过度带
    • 定义:过渡带是指从通带到阻带的过渡区域,也就是说,是滤波器频率响应发生明显变化的区域。例如上图中 [ δ s , δ p ] [\delta_s,\delta_p] [δs,δp]之间。
    • 特征:过渡带的宽度决定了滤波器的频率响应变化的速率。过渡带越宽,滤波器的设计越简单;过渡带越窄,滤波器的设计越复杂。
  • 阻带
    • 定义:阻带是指滤波器显著衰减或完全阻止信号通过的频率范围。在这个范围内,信号的幅度衰减很大。例如上图中的 [ 0 , δ s ] [0,\delta_s] [0,δs]区间内。
    • δ s \delta_s δs是阻带峰波纹值, ω s \omega_s ωs是阻带截止频率
    • 特征:在阻带内,信号的幅度几乎被完全抑制。对于低通滤波器,阻带是高频范围;对于高通滤波器,阻带是低频范围;对于带通滤波器,阻带是位于两个截止频率外的频率范围。

值得注意的是: ω \omega ω是 Ω \Omega Ω的归一化处理,即 ω = 2 π f Ω \omega=\frac{2\pi f}{\Omega} ω=Ω2πf,例如采样率是 16 k H z 16kHz 16kHz,截止频率是 500 H z 500Hz 500Hz,那么 ω p = 2 π 5 × 1 0 2 16 × 1 0 3 = 0.0625 π \omega_p=\frac{2\pi 5\times 10^2}{16\times 10^3}=0.0625\pi ωp=16×1032π5×102=0.0625π

3.滤波器设计指标

滤波器设计的主要目标是使其满足特定的性能要求,不同的应用场景和要求会导致不同的滤波器设计指标。常见的滤波器设计指标包括:

  • 截止频率
    • 定义:滤波器区分通带和阻带的频率点,通常称为截止频率。对于低通滤波器,截止频率是信号通过的最高频率;对于高通滤波器,则是信号通过的最低频率;对于带通和带阻滤波器,则有两个截止频率。
    • 要求:需要明确设定在哪个频率处滤波器的行为发生显著变化。
  • 通带
    • 定义:滤波器允许信号通过的频率范围,在此范围内信号不受衰减或损失,或者衰减非常小(通常小于某个特定的阈值)。
    • 指标:需要指定通带的频率范围和最大允许的衰减(通常称为通带波动或通带增益)。
  • 阻带
    • 定义:滤波器抑制信号的频率范围,在此范围内信号的幅度应该被显著减少或完全抑制。
    • 指标:需要指定阻带的频率范围和最小的衰减量(通常称为阻带衰减)。
  • 过渡带
    • 定义:从通带到阻带的过渡区域,表示频率响应从允许信号通过到完全衰减的区域。过渡带越窄,滤波器的设计越复杂。
    • 要求:设计时需要控制过渡带的宽度,过渡带的宽度与滤波器的阶数密切相关,阶数越高,过渡带越窄。
  • 衰减量
    • 定义:滤波器在阻带内的信号衰减量,通常用分贝 (dB) 来表示。较高的衰减值表示滤波器能够更好地抑制不需要的频率。
    • 指标:需要指定阻带的最小衰减量,通常需要大于某个值(例如40 dB、60 dB等),计算方式为 d b = 20 log ⁡ 10 ∣ H ( e j ω ) ∣ db=20\log_{10}|H(e^{j\omega})| db=20log10∣H(ejω)∣。
  • 通带波动
    • 定义:滤波器在通带内的频率响应波动,表示在通带范围内的增益变化。
    • 指标:指定通带波动的最大值,通常以dB为单位。较小的通带波动意味着滤波器在通带内更加平坦,信号失真较小。
  • 群延迟
    • 要求:群延迟表示信号的各个频率成分在通过滤波器时的延迟差异。理想情况下,滤波器应该具有恒定的群延迟,以避免信号的相位失真。
    • 群延迟应尽可能平坦,以减少信号的相位失真。
  • 滤波器阶数
    • 要求:滤波器的阶数通常与其复杂度和过渡带的宽度成正比。阶数越高,滤波器的设计越复杂,过渡带越窄,性能越好,但计算量也增加。
    • 通过选择适当的阶数来平衡性能和计算复杂度。

二、IIR滤波器的设计过程

1.设计方法

在之前的文章音频进阶学习十四------滤波器的种类和实现方式总中,我们介绍过FIR滤波器和IIR滤波器的区别,IIR的存在反馈机制而FIR不存在反馈机制,因此IIR的表述方式是差分方程而FIR的表述方式是卷积和,这也就意味着IIR在设计时需要考虑极点在单位圆上(FIR不存在极点)才能保证系统稳定。

设计IIR滤波器的设计方法通常是由模拟滤波器设计的结果进行转换,过程如下图

而通过模拟滤波器来转换数字滤波器的原因有:

  • 直接设计数字滤波器需要考虑采样频率、量化误差、稳定性、失真度、复杂性等等因素
  • 模拟逼近技术可以保证精度更准确,更平滑,且有大量成熟的图表
  • 从模拟滤波器的 s s s域(拉普拉斯变换用于分析连续时间复平面)转为数字滤波器中的 z z z域方法成熟且稳定
    • s s s域的虚轴 j Ω j\Omega jΩ能够映射到 z z z平面的单位圆上
    • 稳定的模拟传递函数可以变成稳定的数字传递函数

值得注意的是:这种模拟滤波器转换方法不保证相位特性(FIR滤波器通常追求线性相位)。

2.常见的模拟滤波器设计

1)巴特沃斯滤波器(Butterworth Filter)

巴特沃斯滤波器是一种具有最大平坦频率响应的滤波器设计。巴特沃斯逼近技术通过最大化通带内频率响应的平坦性来设计滤波器,其特点是:

  • 滤波器的通带没有波纹(响应非常平坦)。
  • 频率响应的衰减速度相对较慢。

它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ( Ω Ω c ) 2 N |H_a(j\Omega)|^2=\frac{1}{1+(\frac{\Omega}{\Omega_c})^{2N}} ∣Ha(jΩ)∣2=1+(ΩcΩ)2N1

  • ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
  • Ω \Omega Ω:频率分量
  • Ω c \Omega_c Ωc:截止频率
  • N N N:滤波器阶数

使用matlab(代码见下文)画出来对于不同的滤波器阶数 2 , 4 , 6 , 8 2,4,6,8 2,4,6,8为:

2)切比雪夫滤波器(Chebyshev Filter)

切比雪夫逼近设计技术采用的是最小误差逼近的方法,这种方法允许滤波器在通带和阻带之间引入波纹,但是通过优化波纹的分布,使得总体的误差最小。切比雪夫滤波器分为两种:

  • 切比雪夫 I 型:在通带内有波纹,而在阻带内具有较快的衰减。
  • 切比雪夫 II 型:在阻带内有波纹,而在通带内具有较快的衰减。

切比雪夫逼近技术通常用于对快速衰减有较高要求,但可以容忍通带波纹的场景。

它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 C N 2 ( Ω Ω c ) |H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2C_N^2(\frac{\Omega}{\Omega_c})} ∣Ha(jΩ)∣2=1+ε2CN2(ΩcΩ)1

  • ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
  • Ω \Omega Ω:频率分量
  • Ω c \Omega_c Ωc:截止频率
  • N N N:滤波器阶数
  • C N C_N CN:N阶切比雪夫多项式。这个常数影响滤波器的频率响应特性。
  • ε \varepsilon ε:波纹系数。它决定了滤波器的频率响应的形状,尤其是在过渡带的宽度。

3)椭圆滤波器(Elliptic Filter)

椭圆逼近技术允许在通带和阻带之间同时引入波纹,这样可以进一步优化滤波器的性能,使得通带和阻带之间的过渡更快。椭圆滤波器的设计可以达到最佳的频率选择性,但也会有较大的波纹。

它幅频响应表示为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 J N 2 ( Ω Ω c ) |H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2J_N^2(\frac{\Omega}{\Omega_c})} ∣Ha(jΩ)∣2=1+ε2JN2(ΩcΩ)1

  • ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2:滤波器的幅频响应
  • Ω \Omega Ω:频率分量
  • Ω c \Omega_c Ωc:截止频率
  • N N N:滤波器阶数
  • J N J_N JN:这是N阶雅克比椭圆函数。这个常数影响滤波器的频率响应特性。
  • ε \varepsilon ε:波纹系数。它决定了滤波器的频率响应的形状,尤其是在过渡带的宽度。

3.三种滤波器设计对比

滤波器类型 通带特性 阻带特性 过渡带陡峭度 相位响应
巴特沃斯 平滑无波纹 平滑无波纹 过渡带较宽,较缓慢 相位线性,延迟小
切比雪夫 I 有通带波纹 阻带单调衰减 过渡带比巴特沃斯更陡 相位失真较大
切比雪夫 II 通带单调 阻带有波纹 过渡带比巴特沃斯更陡 相位失真较大
椭圆滤波器 通带和阻带都有波纹 过渡带最陡峭 最短过渡带 相位失真最大

三、matlab代码

1.巴特沃斯滤波器(Butterworth Filter)

matlab 复制代码
% 设定滤波器的截止频率(以单位频率表示,1为Nyquist频率的一半)
cutoff_freq = 0.3;

% 设定采样频率(假设采样频率为1)
sampling_freq = 1;

% 定义滤波器的阶数
orders = [2, 4, 6, 8];

figure;
hold on;

for i = 1:length(orders)
    % 设计巴特沃斯低通滤波器
    [b, a] = butter(orders(i), cutoff_freq);
    
    % 绘制频率响应
    [h, f] = freqz(b, a, 512, sampling_freq);
    plot(f, abs(h), 'DisplayName', ['Order ' num2str(orders(i))]);
end

legend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Butterworth Filter Frequency Response (Different Orders)');
grid on;
hold off;

2.切比雪夫滤波器(Chebyshev Filter)

matlab 复制代码
% 设置滤波器的截止频率
cutoff_freq = 0.3;  % 截止频率,归一化到Nyquist频率

% 设置滤波器的阶数
orders = [2, 4, 6, 8];

% 设置切比雪夫滤波器的波纹大小
ripple_cheby1 = 1;  % 以dB为单位,通带波纹大小
ripple_cheby2 = 20; % 以dB为单位,II型滤波器的阻带波纹大小,较小的波纹使阻带更低

figure;
hold on;
for i = 1:length(orders)
    % 设计切比雪夫I型低通滤波器
    [b1, a1] = cheby1(orders(i), ripple_cheby1, cutoff_freq);
    [h1, f] = freqz(b1, a1, 512, 1);
    plot(f, abs(h1), 'DisplayName', ['Chebyshev I - Order ' num2str(orders(i))]);
end

legend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Chebyshev I Filter Frequency Response (Different Orders)');
grid on;
hold off;

figure;
hold on;
for i = 1:length(orders)
    % 设计切比雪夫II型低通滤波器
    [b2, a2] = cheby2(orders(i), ripple_cheby2, cutoff_freq);
    [h2, f] = freqz(b2, a2, 512, 1);
    plot(f, abs(h2), '--', 'DisplayName', ['Chebyshev II - Order ' num2str(orders(i))]);
end

legend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Chebyshev II Filter Frequency Response (Different Orders)');
grid on;
hold off;

3.椭圆滤波器(Elliptic Filter)

matlab 复制代码
% 设置滤波器的截止频率
cutoff_freq = 0.3;  % 截止频率,归一化到Nyquist频率

% 设置滤波器的阶数和波纹大小
orders = [2, 4, 6, 8];  % 不同阶数
ripple_pass = 1;         % 通带波纹大小(dB)
ripple_stop = 30;        % 阻带波纹大小(dB)

% 创建一个图形窗口
figure;
hold on;

% 绘制不同阶数的椭圆滤波器频率响应
for i = 1:length(orders)
    % 设计椭圆滤波器
    [b, a] = ellip(orders(i), ripple_pass, ripple_stop, cutoff_freq);
    
    % 计算频率响应
    [h, f] = freqz(b, a, 512, 1);
    
    % 绘制频率响应
    plot(f, abs(h), 'DisplayName', ['Order ' num2str(orders(i))]);
end

% 添加图例、标签和标题
legend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Elliptic Filter Frequency Response (Different Orders)');
grid on;
hold off;

总结

本文中给出了滤波器设计时的指标,并且根据逼近模拟滤波器的方法设计数字滤波器的过程。其中通过模拟滤波器传递函数转换为数字滤波器的传递函数有两种方法:冲激响应不变法、双线性交换法。这两种方法各有优缺点和应用场景。

在文章最后,给出了常见的三种模拟滤波器以及通过matlab画出的幅频响应,那么下一章中,将使用巴特沃斯滤波器通过冲激响应不变法设计出一个低通滤波器。

反正收藏也不会看,不如点个赞吧!

相关推荐
双叶83626 分钟前
(C语言)虚数运算(结构体教程)(指针解法)(C语言教程)
c语言·开发语言·数据结构·c++·算法·microsoft
工一木子32 分钟前
大厂算法面试 7 天冲刺:第5天- 递归与动态规划深度解析 - 高频面试算法 & Java 实战
算法·面试·动态规划
安全方案2 小时前
精心整理-2024最新网络安全-信息安全全套资料(学习路线、教程笔记、工具软件、面试文档).zip
笔记·学习·web安全
士别三日&&当刮目相看2 小时前
JAVA学习*Object类
java·开发语言·学习
invincible_Tang2 小时前
R格式 (15届B) 高精度
开发语言·算法·r语言
独好紫罗兰3 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
zhslhm3 小时前
Moo0 VideoResizer,简单高效压缩视频!
音视频·视频压缩技巧·视频文件瘦身·数字媒体优化
序属秋秋秋3 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
玉树临风ives3 小时前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
爱吃馒头爱吃鱼4 小时前
QML编程中的性能优化二
开发语言·qt·学习·性能优化