在 Matlab 中设计具有任意幅度和相位响应的滤波器

信息处理 matlab 过滤器 过滤器设计 有限脉冲响应 无限脉冲响应
2022-02-12 09:50:37

有谁知道在 Matlab 中设计具有任意幅度和相位响应的滤波器的方法?

2个回答

对于 FIR,最简单的方法是对两侧复频响应进行 FFT 反演:

h[n]=iFFT{H[k]}

(使用Kaiser 窗口将 FIR 窗口化到可以实现的长度。)

我假设您可以访问firpm( )和/或firls( )

所以首先将您的复杂频率响应分为实部和虚部:

Hr[k]=|H[k]|cos(arg{H[k]})
Hi[k]=|H[k]|sin(arg{H[k]})

发送两个Hr[k]Hi[k]Parks-McClellan 或最小二乘法最优 FIR 设计器,但设置ftype'hilbert'Hi[k].

将两个得到的实值 FIR 相加得到你的结果。

最后,如果您想将 IIR 设计为任意幅度和相位规格,那么这是一个更大的问题和考虑因素。也许使用 Prony 来设计你的脉冲响应h[n]或者使用我现在第一次了解到的 Matt 的论文,或者使用Greg Berchin 的 FDLS我不知道。那里没有快速的解决方案。

有一篇博士论文的标题中正好有这个短语(包括 Matlab 程序):

具有任意幅度和相位响应的数字滤波器的约束设计算法