为什么我们做纯粹的延迟来制作因果冷杉过滤器?

信息处理 有限脉冲响应 因果关系
2022-02-12 10:42:05

有时,我们会遇到像这张图这样的非因果 FIR 滤波器问题,在此处输入图像描述 左边是频率响应的 ifft,右边是时移 FIR 滤波器作为噪声消除问题中的因果滤波器,延迟是非常烦人的事情。

我的问题是,如果我在频域中进行滤波处理,可以使用理想滤波器(即不会因为使 fir 滤波器成为因果而延迟)?

我不明白为什么我必须做这个纯粹的延迟来制作因果过滤器。

当我用非因果冷杉滤波器的频率响应过滤信号时有什么问题?我认为这只是乘法过程

谢谢你

4个回答

左边是频率响应的IFFT,右边是时移fir滤波器作为噪声消除问题的因果滤波器,延迟是非常烦人的事情。

您在左侧图片中误解了 IFFT 的结果。这来自使用 IFFT,您应该正确地使用逆 DTFT。

DFT(FFT 的来源)具有离散和循环的输出域,其中任何给定的频率θ与任何其他频率一致θ+2πm. (如通常实现的那样,这意味着对于一个N点IFFT,任何样本n与任何其他样本一致n+N m)。

您的问题来了,因为您正在谈论在时域中对所有整数进行操作的实际物理过滤器。为此,DFT(以及因此的 FFT 和 IFFT)不适合。形式上,您应该使用逆 DTFT,其中输出的域是所有整数。

在哪里执行此操作,您会发现滤波器的脉冲响应h(n)有非成分n<0. 这就是使您的过滤器成为非因果性的原因回想起来很明显 - 如果过滤器在输入之前响应,那么它就不能存在于物理世界中。

让我重申一下:

  • 在输入发生之前开始响应输入的过滤器是非因果的。
  • 我们生活在一个因果宇宙中。
  • 非因果过滤器不是真实的。

现在,有人会反对,不,非因果过滤器真实的,他们一直将它们应用于记录的数据。好的,好的,如果您对记录的数据应用过滤器,那么您正在模拟一个您对“未来”有先验知识的宇宙,然后您可以在模拟的上下文中拥有“非因果关系” “ 筛选。

但是,如果您要对实时数据应用真实过滤器,那么您不能再使用非因果过滤器,因为您可以比光速更快*。

我的问题是,如果我在频域中进行滤波处理,可以使用理想滤波器(即不会因为使 fir 滤波器成为因果而延迟)?

在真实的宇宙中,我们生活在时域中。是的,您可以采用预先记录的数据,您可以采用 FFT,乘以滤波器的频率响应,然后采用其 IFFT。

但这并不是对数据进行实时操作。它对记录的数据进行操作。而且因为你已经记录了数据,你确实增加了延迟。

我不明白为什么我必须做这个纯粹的延迟来制作因果过滤器。

参见上文因果过滤器的定义。 这是绝对基础的,根据定义,在输入发生之前响应输入的过滤器是非因果的。

如果您牢记这个定义,那么添加延迟以使过滤器因果关系的需求应该是显而易见的。

当我用非因果冷杉滤波器的频率响应过滤信号时有什么问题?我认为这只是乘法过程

在您记录足够的数据之后,它“只是”频域中的乘法,您可以对其执行 FFT。记录该数据需要时间,“需要时间”与“添加延迟”是同义词——所以当您“只是”在频域中相乘时,您必须首先在现实世界中添加延迟

* 显然这实际上是广义相对论的结果。我还没有完全理解它,但是——好吧,当图表还在屏幕上时,我理解演示文稿,而且我不是广义相对论者,所以我会认为这是理所当然的。

我认为这只是乘法过程

频域中的乘法实现的是循环卷积,而不是线性卷积。这就是为什么您需要使用重叠添加或重叠保存等算法进行频域过滤。

由于延迟太大,频域处理也不太适合大多数主动降噪问题。为了进行长度的 FFTN你需要等到你积累N样品。通常,基于 FFT 的系统的延迟为2N样品。

如果您只关心传递函数的大小,则可以通过使用最小相位而不是零相位来最小化延迟(并保持因果关系)。

更新:我现在意识到 OP 在问为什么我们必须在滤波器实现中有任何“烦人”的延迟,因为我们可以乘以频率上的零相位滤波器。Tim 在下面用我之前的回答回答了这个问题,我提供了关于为什么 OP 的左图是非因果关系(并且需要fftshift更正)的详细信息,以及为什么在频域中简单地乘以 FFT 箱不是一个好的原因滤波方法,除非我们只对 FFT bin 感兴趣(例如 OFDM)。

之前的回答:


如果用户的意思是通过“在频域中相乘”直接改变 DFT bin 进行滤波的过程,那么这就是滤波器设计的“频率采样方法”,对于大多数应用来说,这是一种较差的执行滤波方法。对于我们对连续频率范围内的频率响应感兴趣的所有情况,而不仅仅是 FFT 的确切 bin 中心处的频率,它是次要的。

这类似于如果我们想消除特定频率而不是其他陷波滤波技术,则不建议仅将频率箱置零的原因(请参阅@hotpaw2 的著名答案here;正如我在此处使用一般滤波器设计方法所展示的那样结果将是滤波器(DTFT)的连续频率响应的通带和阻带中的纹波比我们用其他设计方法所能得到的要多。这意味着对于给定的要求,我们可能需要更多的样本(滤波器系数)来满足这些要求.

也就是说,OP 在此示例中使用频率采样方法设计了一个滤波器,结果将是相同的:在频率上直接将信号的 FFT 乘以采样的频率响应,从而产生所示的脉冲响应(循环时间如 Hilmar 所详述的那样,这将需要块处理和重叠添加或重叠保存以用于流式传输结果,或者作为使用循环时移 IFFT 值的 FIR 滤波器,然后可以逐个样本地流式传输。

OP取得非因果结果的根本原因是因为频率上的原始目标响应具有零相位;这不能用 FIR 滤波器物理实现。可以实现的 FIR 滤波器将在频率中具有线性相位分量,其相位斜率与频率成正比,与延迟成正比(0 到2π从 DC 到每个单位采样延迟的采样率的弧度)。如果 OP 以幅度和相位的目标响应开始,并具有足够的可实现延迟,则右侧的 IFFT 结果将直接实现。然而,当我们只关心幅度并想要一个线性相位(固定延迟)并及时进行简单校正(在 MATLAB、Octave 和Python scipy.signal)。

还要注意我们如何通过后处理实现“零相位”滤波器(例如工具中的“filtfilt”),这与频率乘法方法相似,因为在我们收到一个整数之前我们不能实际乘法数据块 - 无论哪种方式都会有延迟!

很抱歉以这种形式提出问题,因为我无法根据您的回答发表评论。@Dan Boschen 看了上面的答案,我明白了左图的原因是记录数据的频域乘法导致出现延迟。但是在阅读了您对非因果出现的解释后,我有一个关于“OP取得非因果结果的根本原因是因为频率中的原始目标响应具有零相位”的问题。如果频率响应不为零-相,做IFFT的时候会出现和左图一样的结果,为什么?换句话说,原始目标响应不是指滤波器的频率响应吗?