音频进阶学习二十五——脉冲响应不变法实现低通滤波器

文章目录


前言

上一篇文章中,我们介绍了滤波器的设计流程,并且提到了从模拟滤波器传递函数到数字滤波器传递函数的两种转变方法:脉冲响应不变法、双线性转换法。

本篇文章将使用脉冲响应不变法设计出一个低通滤波器。在文章的开始,将会对于脉冲响应不变法原理、频域、幅频响应做一个深入解析。然后根据给定的指标,通过巴特沃斯滤波器得到数字滤波器的传递函数,并且在计算机中进行低通滤波的验证。

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


一、脉冲响应不变法

1.定义

保持模拟系统的冲激响应不变,而离散化后的数字滤波器具有与原模拟滤波器相同的冲激响应。即 h a [ t ] h_a[t] ha[t]是模拟滤波器的单位冲激响应,而 h [ n ] = h a [ n T ] h[n]=h_a[nT] h[n]=ha[nT],其中 T T T为采样周期。从而实现 H c ( s ) H_c(s) Hc(s)到 H ( z ) H(z) H(z)的转换。

整体过程如下:

注意,梳理下文中所有用到的公式:

  • H c ( s ) = ∫ − ∞ ∞ h a ( t ) e − s t d t H_c(s)=\int_{-\infty}^{\infty}h_a(t)e^{-st}dt Hc(s)=∫−∞∞ha(t)e−stdt:连续时间(模拟)系统的传递函数
  • H c ( s ) = ∑ k = 1 N A k s − s k H_c(s)=\sum_{k=1}^N\frac{A_k}{s-s_k} Hc(s)=∑k=1Ns−skAk:模拟系统的传递函数为以部分分式展开的形式
  • H a ( j Ω ) = H c ( s ) ∣ s = j Ω = ∫ − ∞ ∞ h a ( t ) e − j Ω t d t H_a(j\Omega)=H_c(s)|{s=j\Omega}=\int{-\infty}^{\infty}h_a(t)e^{-j\Omega t}dt Ha(jΩ)=Hc(s)∣s=jΩ=∫−∞∞ha(t)e−jΩtdt:传递函数的傅里叶变换,即模拟系统的幅频响应
  • H ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n H(e^{j\omega})=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n} H(ejω)=∑n=−∞∞x[n]e−jωn:离散系统的幅频响应
  • H ( z ) = ∑ n = − ∞ ∞ x [ n ] z − n H(z)=\sum_{n=-\infty}^{\infty}x[n]z^{-n} H(z)=∑n=−∞∞x[n]z−n:离散时间(数字)系统的传递函数
  • H s ( s ) = ∑ n = − ∞ ∞ ∫ − ∞ ∞ h a ( t ) δ ( t − n T s ) e − s t d t H_s(s)=\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}h_a(t)\delta(t-nTs)e^{-st}dt Hs(s)=∑n=−∞∞∫−∞∞ha(t)δ(t−nTs)e−stdt:离散时间系统的拉普拉斯变换(下文中推导)

接下来,我们就具体分析其中的步骤

2.模拟系统冲激响应的周期采样

由上文可知,首先设计利用冲激串 s ( t ) s(t) s(t)进行周期采样,采样周期为 T s T_s Ts:
s ( t ) = ∑ n = − ∞ ∞ δ ( t − n T s ) s(t)=\sum_{n=-\infty}^{\infty}\delta(t-nTs) s(t)=n=−∞∑∞δ(t−nTs)

再对于模拟滤波器冲激响应进行采样:
h [ n ] = h a ( t ) ∣ t = n T s = h a [ n T s ] = h s [ n T s ] , h s ( t ) = h a ( t ) s ( t ) h[n]=h_a(t)|_{t=nT_s}=h_a[nT_s]=h_s[nT_s],\quad h_s(t)=h_a(t)s(t) h[n]=ha(t)∣t=nTs=ha[nTs]=hs[nTs],hs(t)=ha(t)s(t)

由上文可知:连续时间信号的系统的传递函数,以及连续时间系统频率响应分别为
H c ( s ) = ∫ − ∞ ∞ h a ( t ) e − s t d t , H a ( j Ω ) = H c ( s ) ∣ s = j Ω H_c(s)=\int_{-\infty}^{\infty}h_a(t)e^{-st}dt, \quad H_a(j\Omega)=H_c(s)|_{s=j\Omega} Hc(s)=∫−∞∞ha(t)e−stdt,Ha(jΩ)=Hc(s)∣s=jΩ

其中, s s s是复数,为 σ + j Ω \sigma+j\Omega σ+jΩ ,由此对于模拟系统的幅频响应的采样为:
H s ( s ) = ∫ − ∞ ∞ h a ( t ) ∑ n = − ∞ ∞ δ ( t − n T s ) e − s t d t H_s(s)=\int_{-\infty}^{\infty}h_a(t)\sum_{n=-\infty}^{\infty}\delta(t-nTs)e^{-st}dt Hs(s)=∫−∞∞ha(t)n=−∞∑∞δ(t−nTs)e−stdt

对于上式同样有线性性,那么上式为:
H s ( s ) = ∑ n = − ∞ ∞ ∫ − ∞ ∞ h a ( t ) δ ( t − n T s ) e − s t d t , t = n T s = ∑ n = − ∞ ∞ h a ( n T s ) e − s n T s H_s(s)=\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}h_a(t)\delta(t-nTs)e^{-st}dt, \quad t=nT_s\\ =\sum_{n=-\infty}^{\infty}h_a(nT_s)e^{-snT_s} Hs(s)=n=−∞∑∞∫−∞∞ha(t)δ(t−nTs)e−stdt,t=nTs=n=−∞∑∞ha(nTs)e−snTs

此时对比Z变换 H ( z ) = ∑ n = − ∞ ∞ h [ n ] z − n H(z)=\sum_{n=-\infty}^{\infty}h[n]z^{-n} H(z)=∑n=−∞∞h[n]z−n,即当 z = e s T s z=e^{sT_s} z=esTs时,两者相等,此时 H ( z ) = H s ( s ) ∣ s = ln ⁡ ( z ) / T s H(z)=H_s(s)|_{s=\ln(z)/T_s} H(z)=Hs(s)∣s=ln(z)/Ts。这就是脉冲响应不变法的原理推导。

3.模拟系统和数字系统的频域响应关系

1)S域和Z域的关系

上文中说当 z = e s T s z=e^{sT_s} z=esTs时, H ( z ) = H s ( s ) ∣ s = ln ⁡ ( z ) / T s H(z)=H_s(s)|_{s=\ln(z)/T_s} H(z)=Hs(s)∣s=ln(z)/Ts,我们知道:

  • s = σ + j Ω s=\sigma+j\Omega s=σ+jΩ
  • z = r e j ω z=re^{j\omega} z=rejω

则将上式转为实部与虚部 r e j ω = e ( σ + j Ω ) T s = e σ T s e j Ω T s re^{j\omega}=e^{(\sigma+j\Omega)T_s}=e^{\sigma T_s}e^{j\Omega T_s} rejω=e(σ+jΩ)Ts=eσTsejΩTs,此时就有:

  • r = e σ T s r=e^{\sigma T_s} r=eσTs,决定了模值
  • ω = Ω T s \omega=\Omega T_s ω=ΩTs,决定了角度

然而由于指数函数在虚部方向是周期性的 e s T s + 2 π k T s = e s T s ∗ 1 e^{sT_s+2\pi kT_s}=e^{sT_s} * 1 esTs+2πkTs=esTs∗1,即对于不同频率分量 k k k实际上映射到了同一点,这也就是多重映射:

  • σ = 0 \sigma=0 σ=0时, ∣ z ∣ = 1 |z|=1 ∣z∣=1,此时S域中虚轴就变成了Z域上的单位圆
  • σ < 0 \sigma<0 σ<0时, ∣ z ∣ < 1 |z|<1 ∣z∣<1,此时S域就映射到了单位圆内部,此时为因果稳定系统
  • σ > 0 \sigma>0 σ>0时, ∣ z ∣ > 1 |z|>1 ∣z∣>1,此时S域就映射到了单位圆外

2)幅频响应的关系

从连续时间傅里叶变换CTFT到DTFT,即描述连续时间系统频率响应和离散时间系统频率响应关系存在以下公式:
H ( e j ω ) = 1 T s ∑ k = − ∞ ∞ H a ( j ω T s − j 2 π k T s ) H(e^{j\omega})=\frac{1}{T_s}\sum_{k=-\infty}^{\infty}H_a(j\frac{\omega}{T_s}-j\frac{2\pi k}{T_s}) H(ejω)=Ts1k=−∞∑∞Ha(jTsω−jTs2πk)

  • 混叠
    根据采样定理:采样过程实际上是在时域对信号进行周期性地重复。采样后的信号的频域会变成周期性的。也就是在频域上,信号会以采样频率 f s = 1 / T s f_s=1/T_s fs=1/Ts为周期出现重复。此时会发生:
    • 连续时间的频率响应基本上是非带限的信号,具有无限带宽,所以在S域映射到Z域(如上图)时,高频信号会折叠到低频信号,但是这种折叠在低频时可以忽略不计
    • 如果冲激响应的的最高频率很高,但是采样频率低,这种重复可能会导致幅频响应 H ( e j ω ) H(e^{j\omega}) H(ejω)的混叠,如下图

所以冲激响应不变法只适用于低通滤波器。

  • 增益
    我们知道,在实际应用中,语音是先通过模数转换为数字信号处理,然后通过数模转为为模拟信号播出,在数模转换时现在给出增益为 T s T_s Ts。在滤波器中,我们知道到输出的频谱是输入的频谱乘上冲激响应频谱:
    Y ( e j ω ) = X ( e j ω ) H ( e j ω ) Y(e^{j\omega})=X(e^{j\omega})H(e^{j\omega}) Y(ejω)=X(ejω)H(ejω)
    而根据上式我们知道 X ( e j ω ) H ( e j ω ) X(e^{j\omega})H(e^{j\omega}) X(ejω)H(ejω)对于频谱缩小了 1 / T s 2 1/T_s^2 1/Ts2,即使数模转换时的增益时 T s T_s Ts依旧缩小了 1 / T s 1/T_s 1/Ts,所以在实际对于连续时间冲激响应的周期采样实际上是对于 T s H ( s ) T_sH(s) TsH(s)采样。

4.通过有理函数设计滤波器

由上文可知,对于模拟系统的传递函数为以部分分式展开的形式表示为
H c ( s ) = ∑ k = 1 N A k s − s k H_c(s)=\sum_{k=1}^N\frac{A_k}{s-s_k} Hc(s)=k=1∑Ns−skAk

其中:

  • s k s_k sk:系统的极点
  • A k A_k Ak:每个极点对应的系数
  • N N N:代表系统的极点个数。

对于它的反变换得到 h ( t ) h(t) h(t):
h ( t ) = ∑ k = 1 N A k e s k t u ( t ) h(t)=\sum_{k=1}^NA_ke^{s_kt}u(t) h(t)=k=1∑NAkesktu(t)

由上文可知对其进行采样,需要扩大增益为 T s T_s Ts,即:
h [ n ] = T s h ( t ) ∣ t = n T s = > h [ n ] = T s ∑ k = 1 N A k e s k n T s u [ n T s ] h[n]=T_sh(t)|{t=nT_s} \quad =>\quad h[n]=T_s\sum{k=1}^NA_ke^{s_knT_s}u[nT_s] h[n]=Tsh(t)∣t=nTs=>h[n]=Tsk=1∑NAkesknTsu[nTs]

在以前的文章中音频进阶学习十三------Z变换二(有理z变换、稳定性与反变换),我们知道 a n u [ n ] a^nu[n] anu[n]的Z变换为 1 1 − a z − 1 \frac{1}{1-a^z{-1}} 1−az−11,所以上式的Z变换为
H ( z ) = ∑ k = 1 N T s A k 1 − e s k T s z − 1 H(z)=\sum_{k=1}^N\frac{T_sA_k}{1-e^{s_kT_s}z^{-1}} H(z)=k=1∑N1−eskTsz−1TsAk

5.总结

从模拟系统通过脉冲响应不变法设计数字系统的总过程分为:

  1. 通过模拟系统的有理传递函数得到脉冲响应
  2. 通过模拟系统的脉冲响应采样得到数字系统的脉冲响应
  3. 通过数字系统的脉冲响应得到数字系统的有理传递函数

最终表示为:
H ( z ) = ∑ k = 1 N T s A k 1 − e s k T s z − 1 H(z)=\sum_{k=1}^N\frac{T_sA_k}{1-e^{s_kT_s}z^{-1}} H(z)=k=1∑N1−eskTsz−1TsAk

其中需要注意的是:

  • 在低频段可以保持远小于采样频率,而高频段会出现混叠,所以脉冲响应不变法更适合于低通滤波器
  • 由于使得数字系统脉冲响应很好地逼近原始系统的频率响应,所以时域逼近良好
  • 相位线性变换,可以保持线性相位
  • 为了满足数模转换幅频相同,所以要对于系统进行 T s T_s Ts的增益

二、低通滤波器的设计实例

在上一篇文章音频进阶学习二十四------滤波器设计方法中,给定了数字滤波器设计的总过程如下图:

现在结合实例来一步步设计一个数字滤波器

1.给定数字滤波器指标

现在给出通带截止频率和阻带截止频率,设计一个低通的数字滤波器
{ 0.89125 ≤ ∣ H ( e j ω ) ∣ < 1 , ∣ ω ∣ ≤ 0.2 π ∣ H ( e j ω ) ∣ < 0.17783 , 0.3 π ≤ ∣ ω ∣ ≤ π \begin{cases} 0.89125 \leq |H(e^{j\omega})| < 1, \quad |\omega| \leq 0.2\pi \\ |H(e^{j\omega})| < 0.17783, \quad 0.3\pi\leq|\omega| \leq \pi \end{cases} {0.89125≤∣H(ejω)∣<1,∣ω∣≤0.2π∣H(ejω)∣<0.17783,0.3π≤∣ω∣≤π

即如下图

也就是说,如果采样率是1k,那么根据归一化频率 ω = 2 π f / Ω \omega=2\pi f/\Omega ω=2πf/Ω:

  • 通带截止频率: 2 π f 0.2 π = 1000 , f = 100 H z \frac{2\pi f}{0.2\pi}=1000, \quad f=100Hz 0.2π2πf=1000,f=100Hz
  • 通带截止频率: 2 π f 0.3 π = 1000 , f = 150 H z \frac{2\pi f}{0.3\pi}=1000, \quad f=150Hz 0.3π2πf=1000,f=150Hz

2.转换模拟滤波器指标

根据脉冲响应不变法, Ω = ω / T s \Omega=\omega/T_s Ω=ω/Ts,则模拟滤波器的指标为:
{ 0.89125 ≤ ∣ H ( j Ω ) ∣ < 1 , ∣ Ω ∣ ≤ 0.2 π T s ∣ H ( j Ω ) ∣ < 0.17783 , 0.3 π T s ≤ ∣ Ω ∣ ≤ π T s \begin{cases} 0.89125 \leq |H(j\Omega)| < 1, \quad |\Omega| \leq \frac{0.2\pi}{T_s} \\ |H(j\Omega)| < 0.17783, \quad \frac{0.3\pi}{T_s} \leq|\Omega| \leq \frac{\pi}{T_s} \end{cases} {0.89125≤∣H(jΩ)∣<1,∣Ω∣≤Ts0.2π∣H(jΩ)∣<0.17783,Ts0.3π≤∣Ω∣≤Tsπ

如下图所示

3.模拟滤波器的设计

根据上一篇文章中给定的巴特沃斯滤波器
∣ 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 ( j 0.2 π T s ) ∣ ≥ 0.89125 ∣ H ( j 0.3 π T s ) ∣ ≤ 0.17783 = > { 1 + ( 0.2 π T s Ω c ) 2 N = ( 1 0.89125 ) 2 1 + ( 0.3 π T s Ω c ) 2 N = ( 1 0.17783 ) 2 \begin{cases} |H(j\frac{0.2\pi}{T_s})| \geq 0.89125 \\ |H(j\frac{0.3\pi}{T_s})| \leq 0.17783\end{cases} => \begin{cases} 1+(\frac{0.2\pi}{T_s\Omega_c})^{2N} =(\frac{1}{0.89125 })^2 \\ \\ 1+(\frac{0.3\pi}{T_s\Omega_c})^{2N} =(\frac{1}{0.17783})^2 \end{cases} {∣H(jTs0.2π)∣≥0.89125∣H(jTs0.3π)∣≤0.17783=>⎩ ⎨ ⎧1+(TsΩc0.2π)2N=(0.891251)21+(TsΩc0.3π)2N=(0.177831)2

对于该式求解:
{ 1 + ( 0.2 π T s Ω c ) 2 N = ( 1 0.89125 ) 2 1 + ( 0.3 π T s Ω c ) 2 N = ( 1 0.17783 ) 2 = > { ( 0.2 π T s Ω c ) 2 N = 0.2589 ( 0.3 π T s Ω c ) 2 N = 30.622 = > ( 0.2 π 0.3 π ) 2 N = 0.008456 \begin{cases} 1+(\frac{0.2\pi}{T_s\Omega_c})^{2N} =(\frac{1}{0.89125 })^2 \\ \\ 1+(\frac{0.3\pi}{T_s\Omega_c})^{2N} =(\frac{1}{0.17783})^2 \end{cases} => \begin{cases} (\frac{0.2\pi}{T_s\Omega_c})^{2N} =0.2589\\ \\ (\frac{0.3\pi}{T_s\Omega_c})^{2N} =30.622\end{cases} =>(\frac{0.2\pi}{0.3\pi})^{2N}=0.008456 ⎩ ⎨ ⎧1+(TsΩc0.2π)2N=(0.891251)21+(TsΩc0.3π)2N=(0.177831)2=>⎩ ⎨ ⎧(TsΩc0.2π)2N=0.2589(TsΩc0.3π)2N=30.622=>(0.3π0.2π)2N=0.008456

此时取对数 ( 4 9 ) N = 0.008456 , N = 5.8858 (\frac{4}{9})^N=0.008456 , \quad N=5.8858 (94)N=0.008456,N=5.8858,即得到的指标为:
{ 1 + ( 0.2 π T s Ω c ) 12 = ( 1 0.89125 ) 2 1 + ( 0.3 π T s Ω c ) 12 = ( 1 0.17783 ) 2 = > Ω c = 0.7032 / T s \begin{cases} 1+(\frac{0.2\pi}{T_s\Omega_c})^{12} =(\frac{1}{0.89125 })^2 \\ \\ 1+(\frac{0.3\pi}{T_s\Omega_c})^{12} =(\frac{1}{0.17783})^2 \end{cases} =>\Omega_c=0.7032/T_s ⎩ ⎨ ⎧1+(TsΩc0.2π)12=(0.891251)21+(TsΩc0.3π)12=(0.177831)2=>Ωc=0.7032/Ts

4.模拟滤波器的传递函数

在上文中说过,对于模拟系统的频率响应和传递函数关系为: H a ( j Ω ) = H c ( s ) ∣ s = j Ω H_a(j\Omega)=H_c(s)|_{s=j\Omega} Ha(jΩ)=Hc(s)∣s=jΩ,

音频进阶学习十八------幅频响应相同系统、全通系统、最小相位系统中对于幅频响应相同系统的特点,对于巴特沃斯滤波器存在 H ( s ) H ∗ ( − s ∗ ) = 1 1 + ( s j Ω c ) 2 N H(s)H^*(-s^*)=\frac{1}{1+(\frac{s}{j\Omega_c})^{2N}} H(s)H∗(−s∗)=1+(jΩcs)2N1,由就可以得到对于给定指定模拟系统的极点
( s j Ω c ) 12 = − 1 = > s j Ω C = e j 2 π k 12 = > s = j Ω c e j 2 π k 12 (\frac{s}{j\Omega_c})^{12}=-1 \quad =>\quad \frac{s}{j\Omega_C}=e^{j\frac{2\pi k}{12}}=>s=j\Omega_ce^{j\frac{2\pi k}{12}} (jΩcs)12=−1=>jΩCs=ej122πk=>s=jΩcej122πk

此时可知 k = 0 , 1 , 2 , . . . , 11 k=0,1,2,...,11 k=0,1,2,...,11,也就是说共有12个极点,且均匀地分布在一个以原点为中心,半径为 Ω c \Omega_c Ωc的圆上。所以每个极点的角度为 2 π / 12 = π / 6 2\pi/12=\pi/6 2π/12=π/6.根据上文可知,S域的左半平面映射到Z平面保证在单位圆内,由此选取所左边平面的一组6个极点为:
{ [ − 0.182 ± j ( 0.679 ) ] / T s [ − 0.497 ± j ( 0.497 ) ] / T s [ − 0.679 ± j ( 0.182 ) ] / T s \begin{cases} [-0.182\pm j(0.679)]/T_s \\ [-0.497\pm j(0.497)]/T_s \\ [-0.679\pm j(0.182)]/T_s \end{cases} ⎩ ⎨ ⎧[−0.182±j(0.679)]/Ts[−0.497±j(0.497)]/Ts[−0.679±j(0.182)]/Ts

如同下图

将极点代入到模拟系统的传递函数为以部分分式展开为连加形式:
H c ( s ) = ∑ k = 1 N A k s − s k = 0.7032 / T s × 0.7032 / T s ( s − ( − 0.182 − j ( 0.679 ) / T s ) ( − 0.182 + j ( 0.679 ) / T s ) × 0.7032 / T s × 0.7032 / T s ( s − ( − 0.497 − j ( 0.497 ) / T s ) ( − 0.497 + j ( 0.497 ) / T s ) × 0.7032 / T s × 0.7032 / T s ( s − ( − 0.679 − j ( 0.182 ) / T s ) ( − 0.679 + j ( 0.182 ) / T s ) H_c(s)=\sum_{k=1}^N\frac{A_k}{s-s_k}=\\ \frac{0.7032/T_s \times 0.7032/T_s}{(s-(-0.182 - j(0.679)/T_s)(-0.182 + j(0.679)/T_s)} \\ \times \frac{0.7032/T_s \times 0.7032/T_s}{(s-(-0.497- j(0.497)/T_s)(-0.497+ j(0.497)/T_s)} \\ \times \frac{0.7032/T_s \times 0.7032/T_s}{(s-(-0.679- j(0.182 )/T_s)(-0.679+ j(0.182 )/T_s)} Hc(s)=k=1∑Ns−skAk=(s−(−0.182−j(0.679)/Ts)(−0.182+j(0.679)/Ts)0.7032/Ts×0.7032/Ts×(s−(−0.497−j(0.497)/Ts)(−0.497+j(0.497)/Ts)0.7032/Ts×0.7032/Ts×(s−(−0.679−j(0.182)/Ts)(−0.679+j(0.182)/Ts)0.7032/Ts×0.7032/Ts

5.转换为数字系统的传递函数

根据 H ( z ) = ∑ k = 1 N T s A k 1 − e s k T s z − 1 H(z)=\sum_{k=1}^N\frac{T_sA_k}{1-e^{s_kT_s}z^{-1}} H(z)=∑k=1N1−eskTsz−1TsAk,将 A k , s k A_k,s_k Ak,sk代入,得到数字滤波器的传递函数为
H ( z ) = ∑ k = 1 N A k s − s k = 0.1435 − 0.2486 i 1 − ( 0.6485 − 0.5237 i ) z − 1 + 0.1435 + 0.2486 i 1 − ( 0.6485 + 0.5237 i ) z − 1 − 1.0714 − 0.0001 i 1 − ( 0.5346 + 0.2901 i ) z − 1 + − 1.0714 + 0.0001 i 1 − ( 0.5346 − 0.2901 i ) z − 1 0.9278 − 1.6093 i 1 − ( 0.4986 + 0.0916 i ) z − 1 + 0.9278 + 1.6093 i 1 − ( 0.4986 − 0.0916 i ) z − 1 H(z)=\sum_{k=1}^N\frac{A_k}{s-s_k}=\\ \frac{0.1435-0.2486i}{1-(0.6485- 0.5237i)z^{-1}}+ \frac{0.1435+0.2486i}{1-(0.6485+0.5237i)z^{-1}}\\ \frac{-1.0714-0.0001i}{1-(0.5346+0.2901i)z^{-1}}+ \frac{-1.0714+0.0001i}{1-(0.5346-0.2901i)z^{-1}} \\ \frac{0.9278-1.6093i}{1-(0.4986+0.0916i)z^{-1}}+ \frac{0.9278+1.6093i}{1-(0.4986-0.0916i)z^{-1}} H(z)=k=1∑Ns−skAk=1−(0.6485−0.5237i)z−10.1435−0.2486i+1−(0.6485+0.5237i)z−10.1435+0.2486i1−(0.5346+0.2901i)z−1−1.0714−0.0001i+1−(0.5346−0.2901i)z−1−1.0714+0.0001i1−(0.4986+0.0916i)z−10.9278−1.6093i+1−(0.4986−0.0916i)z−10.9278+1.6093i

三、使用matlab实现

1.通过传递函数实现

对于上文最终得到的传递函数,使用matlab画出频率响应,并给出信号为 50Hz 和 200Hz 叠加信号,进行滤波器过滤

matlab 复制代码
% 合并共轭对为二阶分式(实数系数)

% 第一对:项1和项2
A1 = 0.1435 - 0.2486i;  % 分子系数
p1 = 0.6485 - 0.5237i;  % 极点

% 计算二阶分式的分子和分母
num_biquad1 = [2*real(A1), -2*real(A1*conj(p1))];  % 分子多项式
den_biquad1 = [1, -2*real(p1), abs(p1)^2];         % 分母多项式

% 第二对:项3和项4
A2 = -1.0714 - 0.0001i;
p2 = 0.5346 + 0.2901i;

num_biquad2 = [2*real(A2), -2*real(A2*conj(p2))];
den_biquad2 = [1, -2*real(p2), abs(p2)^2];

% 第三对:项5和项6
A3 = 0.9278 - 1.6093i;
p3 = 0.4986 + 0.0916i;

num_biquad3 = [2*real(A3), -2*real(A3*conj(p3))];
den_biquad3 = [1, -2*real(p3), abs(p3)^2];

% 创建传递函数并相加(实数系数)
sys_total = tf(num_biquad1, den_biquad1, 1, 'Variable', 'z^-1') + ...
            tf(num_biquad2, den_biquad2, 1, 'Variable', 'z^-1') + ...
            tf(num_biquad3, den_biquad3, 1, 'Variable', 'z^-1');

% 验证系数为实数
disp('分子系数:');
disp(sys_total.Numerator{1})
disp('分母系数:');
disp(sys_total.Denominator{1})

% 计算频率响应(采样率16kHz,实际设置Ts=1/16000)
Fs = 1000;
N_freq = 1024;
[H_total, w] = freqz(sys_total.Numerator{1}, sys_total.Denominator{1}, N_freq, Fs);

% 归一化频率(0到π)
f_normalized = w / (Fs/2) * pi; 

% 绘制归一化幅频响应
figure;
plot(f_normalized/pi, 20*log10(abs(H_total))); % 归一化为 ×π rad/sample
xlabel('Normalized Frequency (×π rad/sample)');
ylabel('Magnitude (dB)');
title('Normalized Frequency Magnitude Response');
grid on;


% 进行滤波测试
t = 0:1/Fs:1; % 1秒信号
x = sin(2*pi*50*t) + sin(2*pi*200*t); % 50Hz 和 200Hz 叠加信号
y = filter(b, a, x); % 通过滤波器

% 画出滤波前后的信号
figure;
subplot(2,1,1);
plot(t, x);
title('输入信号 (50Hz + 200Hz)');
xlabel('时间 (s)');
ylabel('幅值');
grid on;

subplot(2,1,2);
plot(t, y);
title('滤波后信号');
xlabel('时间 (s)');
ylabel('幅值');
grid on;

2.使用matlab工具

matlab自带的工具转换,只需要输入指标

matlab 复制代码
clc; clear; close all;

% 设计巴特沃斯滤波器
N = 3; % 阶数 (可能需要调整)
Wp = 0.2 * pi;  % 归一化通带频率
Ws = 0.3 * pi;  % 归一化阻带频率
Rp = -20 * log10(0.89125); % 通带最大衰减 (dB)
Rs = -20 * log10(0.17783); % 阻带最小衰减 (dB)

% 设计模拟低通巴特沃斯滤波器
[~, Wn] = buttord(Wp/pi, Ws/pi, Rp, Rs);
[b, a] = butter(N, Wn);

Fs=1000;
% 计算数字滤波器频率响应
[H, w] = freqz(b, a, 1024, Fs);
f_normalized = w / (Fs/2) * pi; 

% 绘制幅频响应
figure;
subplot(2,1,1);
plot(f_normalized/pi, abs(H)); grid on;
xlabel('归一化频率 (\times\pi rad/sample)');
ylabel('幅值');
title('滤波器幅频响应');


% 进行滤波测试
t = 0:1/Fs:1; % 1秒信号
x = sin(2*pi*50*t) + sin(2*pi*200*t); % 50Hz 和 200Hz 叠加信号
y = filter(b, a, x); % 通过滤波器

% 画出滤波前后的信号
figure;
subplot(2,1,1);
plot(t, x);
title('输入信号 (50Hz + 200Hz)');
xlabel('时间 (s)');
ylabel('幅值');
grid on;

subplot(2,1,2);
plot(t, y);
title('滤波后信号');
xlabel('时间 (s)');
ylabel('幅值');
grid on;

总结

本篇文章给定的采样率是1kHz,根据给出的滤波器指标,我们过滤的是100Hz以上的语音信号,过渡带的范围是在150H以内。有兴趣的同学可以将给出的matlab程序修改一下验证其他采样率的过滤效果。

那么我们也通过对于脉冲响应不变法的原理和频域分析知道,对于脉冲响应不变法设计滤波器时,存在混叠的影响,所以适合于低通滤波器。那么下一章将介绍另外一种滤波器设计方法:双线性变换法。

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

相关推荐
教练 我想学编程5 分钟前
学习记录706@微信小程序+springboot项目 真机测试 WebSocket错误: {errMsg: Invalid HTTP status.}连接不上
spring boot·学习·微信小程序
星空寻流年8 分钟前
css之定位学习
前端·css·学习
花落已飘12 分钟前
音视频基础(音视频的录制和播放原理)
音视频
纪元A梦16 分钟前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
Panesle32 分钟前
广告推荐算法:COSMO算法与A9算法的对比
人工智能·算法·机器学习·推荐算法·广告推荐
张张张31238 分钟前
4.1学习总结 拼图小游戏+集合进阶
java·学习
月亮被咬碎成星星1 小时前
LeetCode[15]三数之和
数据结构·算法·leetcode
9527华安1 小时前
Xilinx系列FPGA实现HDMI2.1视频收发,支持8K@60Hz分辨率,提供2套工程源码和技术支持
fpga开发·音视频·8k·hdmi2.1
RadNIkMan1 小时前
Python学习(二)操作列表
网络·python·学习
半盏茶香1 小时前
启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
java·开发语言·数据结构·c++·python·算法·链表