当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、滤波器设计要求
    • 1.选频滤波器种类
    • 2.通带、阻带、过度带
    • 3.滤波器设计指标
  • 二、IIR滤波器的设计过程
    • 1.设计方法
    • 2.常见的模拟滤波器设计
      • 1)巴特沃斯滤波器(Butterworth Filter)
      • 2)切比雪夫滤波器(Chebyshev Filter)
      • 3)椭圆滤波器(Elliptic Filter)
    • 3.三种滤波器设计对比
  • 三、matlab代码
    • 1.巴特沃斯滤波器(Butterworth Filter)
    • 2.切比雪夫滤波器(Chebyshev Filter)
    • 3.椭圆滤波器(Elliptic Filter)
  • 总结


前言

本章内容会先介绍滤波器的指标。设计一个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=20log10H(e)
  • 通带波动
    • 定义:滤波器在通带内的频率响应波动,表示在通带范围内的增益变化。
    • 指标:指定通带波动的最大值,通常以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)

% 设定滤波器的截止频率(以单位频率表示,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))]);
endlegend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Butterworth Filter Frequency Response (Different Orders)');
grid on;
hold off;

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

% 设置滤波器的截止频率
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))]);
endlegend 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))]);
endlegend show;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Chebyshev II Filter Frequency Response (Different Orders)');
grid on;
hold off;

3.椭圆滤波器(Elliptic Filter)

% 设置滤波器的截止频率
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画出的幅频响应,那么下一章中,将使用巴特沃斯滤波器通过冲激响应不变法设计出一个低通滤波器。

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


http://www.mrgr.cn/news/96661.html

相关文章:

  • VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
  • NVR接入录像回放平台EasyCVR视频融合平台城市/乡镇污水处理厂解决方案
  • 蓝桥杯专项复习——二分查找、二分答案
  • Laravel APP_KEY 生成方法
  • 力扣每日一题:2712——使所有字符相等的最小成本
  • 苍穹外卖项目结构
  • 网络架构搭建中的 QinQ 与端口安全策略
  • DAY 32 leetcode 242--哈希表.有效的字母异位词
  • Oracle数据库数据编程SQL<3.5 PL/SQL 存储过程(Procedure)>
  • 魔改chromium——基础环境搭建
  • Open GL ES ->GLSurfaceView在正交投影下的图片旋转、缩放、位移
  • OpenCV图像输入输出模块imgcodecs
  • 什么是 CSSD?
  • OCCT(2)Windows平台编译OCCT
  • OpenCV图像输入输出模块imgcodecs(imwrite函数的用法)
  • Oracle数据库数据编程SQL<3.4 PL/SQL 自定义函数(Function)>
  • 初始ARM
  • 同步SVPWM调制策略的初步学习记录
  • 3-栈、队列、数组
  • 《大模型部署》——ollama下载及deepseek本地部署(详细快速部署)