【发布时间】:2011-12-30 16:43:04
【问题描述】:
我是一位经验丰富的软件工程师,具有一些大学 DSP 知识。我正在开发一个智能手机应用程序来处理信号数据,例如来自麦克风(以 44100 Hz 采样)和加速度计(以 32-50 Hz 采样)的数据。例如,我的应用程序是音高检测器等。
我想在手机上实现一个低通滤波器 (LPF) 以去除混叠频率,特别是对于采样率较低的加速度计。 但是,我在尝试应用 fast FFT-based convolution 方法时发现了矛盾。我们将不胜感激。
这是我的推理路线:
我正在读取一个信号,我想使用 LPF 进行抗混叠(去除混叠频率)。
-
为了在我的智能手机上实现 LPF,我选择对时域信号应用 FIR 滤波器(即加窗 sinc 函数)。让 x[n] 是我的信号, f[n] 是我的滤波器内核的系数。所以我想在 x[n] 和 f[n] 之间进行卷积,其中 x[n] 的长度为 N(通常为 512),f[n] 的长度为 M(通常为 256)。
李> 我在我的智能手机(Android 和 iPhone)上实现了一个简单的一维卷积。该算法是typical nested loop version,运行时间为 O(N M)。对于 N=512 和 M=256,它在智能手机上运行太慢。
然后我查看了使用 FFT 并在 O(N lgN) 中运行的 fast convolution algorithm。具体来说,滤波后的信号来自:filtered x[n] = IFFT(FFT(x) .* FFT(f)),其中FFT是fft,IFFT是逆FFT,.*是逐元素乘法两个数组。
但是,我在该过程中发现了一个矛盾:IFFT(FFT(x) .* FFT(f))。这要求我对 x[n] 进行 FFT,但 x[n] 可能有混叠频率。这正是我在第 1 步中遇到的最初问题!
那么,我该如何解决这个矛盾呢?如果快速卷积内部需要 LPF,我如何使用快速卷积来实现 LPF?
注意:一些 EE 人员告诉我,有些麦克风内置了基于硬件的 LPF,但我无法确定智能手机的麦克风或加速度计。
【问题讨论】:
-
附带说明,如果您想加快音频应用的卷积过程,请考虑partitioned convolution。
标签: android iphone audio signal-processing fft