问题:我在时域中有一个以 51.2KHz 采样的信号。我想应用一个通过频率为 20 Hz 的高通滤波器。
问题:使用 Matlab 来做这个,滤波器的设计需要永远设计。对此进行了一些研究,似乎这是因为的比率很高。
这让我想知道,关于这个数量是否有经验法则?
问题:我在时域中有一个以 51.2KHz 采样的信号。我想应用一个通过频率为 20 Hz 的高通滤波器。
问题:使用 Matlab 来做这个,滤波器的设计需要永远设计。对此进行了一些研究,似乎这是因为的比率很高。
这让我想知道,关于这个数量是否有经验法则?
除了@David 对理论结果的评论之外,您还可以采用另一种方法。这个想法是用低通滤波器过滤,然后下采样,然后重复 N 次。LPF 不需要很长,并且序列中的每个过滤器都比前一个过滤器简单,因为它以较慢的采样率工作。
一个特别有趣的用例是当您使用半带滤波器时,因为它们的计算复杂度非常低。这些滤波器的截止频率为。
在您的情况下,第一个 HB 滤波器的 kHz,然后是一个抽取器,将采样率降低一半。随后的低通滤波器的截止频率分别为 12.8、6.4、3.2、1.6 kHz、800、400、200、100、50、25 Hz。所以你会有 11 个串联的滤波器,也许最后一个可以去掉最后的 5 Hz。
即使你有大量的过滤器/下采样器,我认为你会发现这比一个单一的、极高阶的过滤器更容易设计。
我最喜欢的关于这个主题的参考是
Bellanger, M.、Daguet, J. 和 Lepagnol, G. 1974。“数字滤波器中的插值、外插和计算速度降低”。IEEE 声学、语音和信号处理汇刊 22 (4): 231-235。doi:10.1109/TASSP.1974.1162581。
在最一般的情况下,实际上并没有关于过滤器应该多长时间的公式。有论文显示了滤波器过渡宽度、通带纹波和阻带衰减之间的经验关系。您通常有 - 对于固定的采样频率:
也就是说,对于 remez 类型的设计,有几个已发布的公式可以为您提供过滤器的估计长度。在 Matlab 中,您可以使用 remezord() 函数。这些公式工作得相当好,但当过渡频率接近 0 Hz 或 fs/2 时,它们确实会遇到问题。
如果我没记错的话,有一些已发表的论文给出了使用 Kaiser 窗口进行窗口 Sinc 设计的滤波器长度方程 - 但您对滤波器的规格没有太多控制权。
过滤器必须看到的数据长度大致与过滤器的过渡宽度成反比(其他情况类似)。
想象一下,如果您要对以 50kHz 采样的信号进行 FFT,以查看该信号频谱在 15Hz 和 20Hz 之间的差异。您需要一个长度为 10,000 或更长的 FFT,以便这两个频率最终出现在单独的 FFT 结果箱中。要在 20 Hz 截止频率以下看到一个干净的 5 Hz 宽过渡带,您可能需要比 20k 样本更长的 FFT。
FIR 滤波器内核需要具有与 FFT 大致相同的长度数量级,以便从信号中收集足够的信息以产生相同的滤波器转换分离(低通或高通)。对于 FIR 滤波器来说,这可能是一个不切实际的长度,因为累积的数值噪声可能会主导整个过程。具有接近单位圆的极点的 IIR 滤波器也将接近或超过数值稳定性的极限。
如果更宽的过渡带满足您的需求,您可以尝试将信号下采样几个数量级,对结果进行低通滤波,将低通结果上采样到原始采样率,并从原始信号中减去低频内容. 或者,如果不是,则使用具有非常长 FFT 的 FFT/IFFT 重叠相加/保存快速卷积,长度可能约为 128k 个样本,等等。