滤波器设计模拟到数字

Posted 芥末的无奈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滤波器设计模拟到数字相关的知识,希望对你有一定的参考价值。

系列文章目录

前言

【音频处理】IIR滤波器设计(一) 中,我们介绍了多种滤波器,并给出它们的差分方程、变换方程等。针对每种滤波器,我们都举了一个具体的实例来说明。同时,还讨论了零点和极点对频响的影响,已经如何用平面几何的方法计算频响。最后引出了双二阶滤波器(Biquad),并给出了它的 C++ 实现代码。

本文将理论付诸于实践,开始制作一些音频滤波器。我们知道 Biquad 的系数决定了其频谱响应和其他性质,那么如何确定这些系数呢?本文主要介绍一种从模拟信号滤波器到数字信号滤波器的转换方法。

一、模拟信号滤波器到数字信号滤波器的转换

在数字信号普及以前,科学家们在模拟信号领域做了很多研究,设计非常多优秀的滤波器。我们只需要找到一种能够将模拟信号滤波器转换为数字信号滤波器的方法,那么就能够高效、便捷地进行数字信号滤波器的设计。当然,滤波器设计还有很多其他的办法,在一些其他书籍中(例如 Audio Effects: Theory, Implementation and Application)你会看到其他设计方法。

虽然模拟信号滤波器设计并不在我们的讨论范围内,但这两个设计世界中有许多相似之处。例如模拟和数字滤波器设计中都设计到传递函数,你可以通过操作产生零点和极点,它们也都使用一个变换将时域转换到频域。一个根本的区别是,在模拟世界中,没有 Nyquist 限制,它包含 − ∞ -\\infty + ∞ +\\infty + 多有频率。另外,模拟滤波器使用电容器、电感器等元件来完成积分或者微分功能,数字滤波器则使用 delay 模块来产生偏移。下表总结了这些异同点。

数字滤波器设计模拟滤波器设计
使用传递函数来关联输入与输出使用传递函数来关联输入与输出
使用 delay 模块产生相位偏移和延迟电容、电感器等元件的集成
使用 z 变换(离散时间到频域的转换)使用 Laplace 变换(连续时间到频域的转换)
零点和极点位于 z 域中零点和极点位于 s 域中
Nyquist 限制所有频率
极点必须在单位圆内,以保证信号稳定极点必须在s平面的左手部分,以保证信号稳定

二、S域与Z域

s 域与 z 域都是复数域,s 域表示为:
s = σ + j ω s = \\sigma + j\\omega s=σ+jω
σ ∈ R , ω ∈ R \\sigma \\in R, \\omega \\in R σR,ωR,它的图像长这样:

关于 z 域和 s 域的关系可以总结为

z = e s T s z = e^sT_s z=esTs ,z 域是 s 域的进一步映射,z 变换和拉普拉斯变换通过某种映射连接在一起

s = σ + j ω s = \\sigma + j\\omega s=σ+jω,当 σ = 0 \\sigma = 0 σ=0时, s = j ω s=j\\omega s=jω,对应的是 s 域的虚轴,而此时 x = e j ω T x=e^j\\omega T x=ejωT 对应的是单位圆,也就是说 z 变换将 s 域的虚轴映射成 z 域的单位圆。

σ > 0 \\sigma > 0 σ>0时, s = σ + j ω s = \\sigma + j\\omega s=σ+jω,对应的是 s 域的正半轴,而此时 z = e σ e j ω T z=e^\\sigmae^j\\omega T z=eσejωT,由于 e σ > 1 e^\\sigma > 1 eσ>1 ,也就是说此时 z 变换将 s 域正半轴映射到了z域的单位圆外部。

σ < 0 \\sigma < 0 σ<0 时, s = σ + j ω s = \\sigma + j\\omega s=σ+jω,对应的是 s 域的负半轴,而此时 z = e σ e j ω T z=e^\\sigmae^j\\omega T z=eσejωT ,由于 e σ < 1 e^\\sigma < 1 eσ<1,也就是说此时 z 变换将 s 域负半轴映射到了 z 域的单位圆内部。

三、模拟信号滤波器

我们的目标是将模拟信号滤波器转换为数字滤波器,因此首先需要对模拟信号滤波器进行介绍。先看一个最基本的滤波器,其传递函数为:
H ( s ) = ω c s + ω c = 1 1 ω c s + 1 H(s) = \\frac\\omega_cs + \\omega_c = \\frac1\\frac1\\omega_cs+1 H(s)=s+ωcωc=ωc1s+11
现在我们只考虑稳态时系统的响应,也就是让 s = j ω s=j\\omega s=jω,于是传递函数变化为:
H ( ω ) = 1 j ω ω c + 1 H(\\omega) = \\frac1j\\frac\\omega\\omega_c+1 H(ω)=jωcω+11
进一步分析这个传递函数,显然:
ω → 0 \\omega \\rightarrow 0 ω0 时, ∣ H ( ω ) ∣ → 1 |H(\\omega)| \\rightarrow 1 H(ω)1
ω → ω c \\omega \\rightarrow \\omega_c ωωc 时, ∣ H ( ω ) ∣ → 1 2 |H(\\omega)| \\rightarrow \\frac1\\sqrt 2 H(ω)2 1
ω → ∞ \\omega \\rightarrow \\infty ω 时, ∣ H ( ω ) ∣ → 0 |H(\\omega)| \\rightarrow 0 H(ω)0
这说明, H ( ω ) H(\\omega) H(ω)在低频中响应最大,在 ω c \\omega_c ωc 处响应衰减至 1 2 \\frac1\\sqrt 2 2 1,当频率增加到无限大时,响应几乎是 0。因此这个是以低通滤波器。从数学角度开看,该滤波器幅度响应为:
∣ H ( ω ) ∣ = 1 ( ω / ω c ) 2 + 1 = ω c ω 2 + ω c 2 |H(\\omega)|=\\frac1\\sqrt\\left(\\omega / \\omega_c\\right)^2+1=\\frac\\omega_c\\sqrt\\omega^2+\\omega_c^2 H(ω)=(ω/ωc)2+1 1=ω2+ωc2 ωc
相位响应为:
∠ H ( ω ) = − atan ⁡ ( ω ω c ) \\angle H(\\omega)=-\\operatornameatan\\left(\\frac\\omega\\omega_c\\right) H(ω)=atan(ωcω数字信号处理6:IIR滤波器设计

数字信号处理6:IIR滤波器设计

数字信号处理6:IIR滤波器设计

模拟滤波器到数字滤波器的转化

用matlab设计低通滤波器

怎样写数字滤波程序?