使用 DSP 补偿模拟滤波器的群延迟

信息处理 转换功能 模拟 群延迟
2022-02-18 04:43:52

我在当前的项目中遇到了一个问题,我需要同时测量不同的生物信号(如 ECG)。

由于仪器硬件是由不同的人随着时间的推移而开发的,因此它们彼此并不相同。在它们的最终放大阶段之前,它们都具有不同阶的低通和高通滤波器。这些滤波器大多集中在 [0.5-35] Hz 的通带附近。我想通过设计自己的数字滤波器来补偿那些模拟滤波器引起的相位色散。我已经使用啁啾信号测量了这些通道的传递函数,为了了解一下,请查看下图。传递函数的计算可能存在小的数值误差。 通道 1 的传递函数 通道 2 的传递函数

不仅消除各个通道中的相位色散,而且补偿这些通道的不同延迟量也很重要,这样我就可以分析完全“同步”的信号。到目前为止,我一直在尝试使用iirgrpdelay函数在 Matlab 中设计一个全通滤波器。但是,创建的补偿过滤器并不令人满意。其原因可能是 [1 15] Hz 之间的群延迟(见第一个图)的巨大变化,这是我想要补偿的区域。增加过滤器的顺序并没有帮助,因为我主要从 Matlab 得到以下错误:

条件较差的 Hessian 矩阵。无法准确计算优化,因为逼近误差非常小(尝试减少极点或零点的数量)或滤波器规格产生巨大的幅度变化,例如 mag=[1 1e9 0 0]。

我不想让这个问题变得这么宽泛,但我想征求在数字领域设计此类补偿滤波器的建议,以便我可以中和模拟仪器中的这种相位色散和延迟。

1个回答

设计 FIR 滤波器来补偿群延迟通常更容易。同时,如有必要,它们还可以补偿幅度。最简单的方法是使用复最小二乘法,归结为求解滤波器系数的线性方程组。

困难的部分是在所需相位响应的定义中选择适当的体延迟。一个好的起点是选择平均延迟接近滤波器长度的一半。

查看此答案以获取 FIR 群延迟均衡的示例。

您可以使用 Matlab/Octave 函数lslevin.m来设计具有规定幅度和相位响应的 FIR 滤波器。