【问题标题】:How can I use fast FFT-based convolution to implement a LPF if the fast convolution requires a LPF?如果快速卷积需要 LPF,如何使用基于 FFT 的快速卷积来实现 LPF?
【发布时间】:2011-12-30 16:43:04
【问题描述】:

我是一位经验丰富的软件工程师,具有一些大学 DSP 知识。我正在开发一个智能手机应用程序来处理信号数据,例如来自麦克风(以 44100 Hz 采样)和加速度计(以 32-50 Hz 采样)的数据。例如,我的应用程序是音高检测器等。

我想在手机上实现一个低通滤波器 (LPF) 以去除混叠频率,特别是对于采样率较低的加速度计。 但是,我在尝试应用 fast FFT-based convolution 方法时发现了矛盾。我们将不胜感激。

这是我的推理路线:

  1. 我正在读取一个信号,我想使用 LPF 进行抗混叠(去除混叠频率)。

  2. 为了在我的智能手机上实现 LPF,我选择对时域信号应用 FIR 滤波器(即加窗 sinc 函数)。让 x[n] 是我的信号, f[n] 是我的滤波器内核的系数。所以我想在 x[n] 和 f[n] 之间进行卷积,其中 x[n] 的长度为 N(通常为 512),f[n] 的长度为 M(通常为 256)。

    李>
  3. 我在我的智能手机(Android 和 iPhone)上实现了一个简单的一维卷积。该算法是typical nested loop version,运行时间为 O(N M)。对于 N=512 和 M=256,它在智能手机上运行太慢。

  4. 然后我查看了使用 FFT 并在 O(N lgN) 中运行的 fast convolution algorithm。具体来说,滤波后的信号来自:filtered x[n] = IFFT(FFT(x) .* FFT(f)),其中FFT是fft,IFFT是逆FFT,.*是逐元素乘法两个数组。

  5. 但是,我在该过程中发现了一个矛盾:IFFT(FFT(x) .* FFT(f))。这要求我对 x[n] 进行 FFT,但 x[n] 可能有混叠频率。这正是我在第 1 步中遇到的最初问题!

那么,我该如何解决这个矛盾呢?如果快速卷积内部需要 LPF,我如何使用快速卷积来实现 LPF?

注意:一些 EE 人员告诉我,有些麦克风内置了基于硬件的 LPF,但我无法确定智能手机的麦克风或加速度计。

【问题讨论】:

标签: android iphone audio signal-processing fft


【解决方案1】:

简单地说:计算FFT(x)不会引入混叠。

每次采样信号时都会引入混叠。我认为您困惑的根源在于音频信号有两个采样过程:一次是获取连续声音并使其成为 44.1 kHz 信号,然后是您要添加的下采样步骤。

假设有一个 30 kHz 的杂音(例如):它必须被智能手机的硬件拒绝。一旦你有了那些 44.1 kHz 的样本,你就会被采样器得到的任何别名产品所困。采样后您无法撤消混叠(严格来说这不是真的,但对于基带信号来说确实如此,这就是您正在处理的问题)。您应该继续假设手机设计人员做对了,您不必担心高于 ~20 kHz 的信号内容产生的混叠产品。

这将我们带到第二个采样步骤。您非常正确,您需要在下采样之前应用另一个抗混叠滤波器。任何低于 20 kHz 但高于 2 倍下采样率的信号内容都会混叠到输出中,除非您先对其进行衰减。关键是您在下采样之前计算 FFT(x),然后应用滤波器,然后下采样。这就是让您获得受别名保护的输出的原因。

智能手机很可能有一个 delta-sigma ADC,它使用一个相对柔和的模拟抗混叠滤波器(1 极或 2 极),然后以极高的速率(64 * 44.1 kHz 或更高)采样,然后应用数字滤波器在其下采样过程中。 MEMS 加速度计同样具有内在的抗混叠保护。如果您想对此进行测试,请使用连接到电动振动器(或坚固的低音炮锥体)的正弦波源,并以几 kHz 的频率摇动您的手机。您应该看到加速度计信号上没有输出。然后以 30 kHz 驱动一个高音扬声器,看看麦克风是否有任何显示。

【讨论】:

  • 您声明:“关键是您在下采样之前计算 FFT(x),然后应用过滤器,然后下采样。”这正是我的观点。由于我是通过快速卷积应用滤波器,而快速卷积在内部使用 FFT(x),因此 FFT(x) 可能会捕获混叠频率,从而导致数据错误,因此快速卷积的最终输出可能是错误的。跨度>
  • ADC 之后的 x 将为 44.1 kHz 且无混叠,对吗?我不确定您为什么认为 FFT(x) 引入了混叠。只有(重新)采样会引入混叠。在快速卷积中使用零填充的 FFT(x) 只是对常规卷积的加速,结果是相同的。
【解决方案2】:

智能手机上的麦克风总是在采样之前具有模拟低通滤波器。如果信号中已经出现混叠,一般情况下是不可能消除的。出于这个原因,每个麦克风的 A/D 转换器都在模拟域中实现了低通滤波——甚至在离散化发生之前。除非您自己以某种方式对信号进行下采样或重新采样,否则您不必担心混叠。快速卷积和时域离散循环卷积在数学上是等效的,因此如果另一个没有混叠,则没有理由有混叠。

【讨论】:

  • 如何检查智能手机中的麦克风和加速度计是否具有模拟低通滤波器?它会在各个组件(麦克风和加速度计)的规格中吗?
  • 他们总是有他们。没有 LPF,什么都不会采样。
【解决方案3】:

低通滤波器必须放置在ADC 之前,即它必须是某种模拟电路。您无法从采样信号中去除混叠,因为您不知道采样信号的哪一部分是由混叠引起的,这就是混叠成为问题的全部原因。

【讨论】:

    【解决方案4】:

    基于 FFT 的卷积是一种优化,适用于当您需要一个截止频率低于采样前抗混叠所需的低通滤波器的低通滤波器时。例如2 个低通滤波器,一个在硬件中,一个在软件中。这通常在 2 个低通滤波器可以创建比采样器之前的一个硬件滤波器更好或更便宜的给定滤波器质量(通带平坦度等)时执行,或者如果采样器本身在频谱中引入噪声(大部分)高于所需信号。

    【讨论】:

      【解决方案5】:

      没有矛盾。 X 频率很高。 Y = X*F 不再具有高频,因为 F 过滤(即相乘)它们。

      【讨论】:

      • 我认为你误解了这个问题,或者我错了。我通过使用基于 FFT 的快速卷积来实现 x*f,并且在这个卷积内部,需要 fft(x)。我担心 fft(x) 似乎在捕获混叠频率。
      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多