我想将信号转换为频域。所需的频率范围为0.1 Hz
,1 Hz
频率分辨率为0.01 Hz
。
在 的采样率下30 Hz
,FFT 给出了高达 15 Hz 的频率分量。提高采样率可以提供更好的频率分辨率。然而,FFT 提供更宽的频率范围。就我而言,我只想0.1 Hz
,1 Hz
FFT 放弃15 Hz
(额外计算)。
我的问题是,有没有标准的方法可以计算具有特定频率范围和高分辨率的信号的频域?
我想将信号转换为频域。所需的频率范围为0.1 Hz
,1 Hz
频率分辨率为0.01 Hz
。
在 的采样率下30 Hz
,FFT 给出了高达 15 Hz 的频率分量。提高采样率可以提供更好的频率分辨率。然而,FFT 提供更宽的频率范围。就我而言,我只想0.1 Hz
,1 Hz
FFT 放弃15 Hz
(额外计算)。
我的问题是,有没有标准的方法可以计算具有特定频率范围和高分辨率的信号的频域?
还有可能使用频率扭曲(也可以用作放大镜,因为您可以在相同尺寸的 FFT 的感兴趣的频率范围内提高分辨率,但会以较高频率下的较低分辨率为代价)。但是,您不会保存任何 MIPS,因为 FFT 大小并没有减少,而且频率扭曲也远非便宜。
如果您只想计算 FFT 中的某些 bin(从而节省 MIPS),有几种方法可以做到这一点。例如滑动 DFT。本文中的参考资料给出了很好的解释http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf。我也认为 goertzel 算法做了类似的事情,但我不知道。
然后可以选择在 FFT 之前进行下采样。这可能还会节省一些 MIPS。
编辑:只是为了澄清关于 Goertzel 算法没有用的评论。通过直接将值插入此 wiki 页面底部的表达式http://en.wikipedia.org/wiki/Goertzel_algorithm,当所需 FFT 的大小大于 128 时,Goertzel 方法将比 FFT 更复杂(假设 FFT 大小是 2 的因子和 radix-2 实现)。
但是,还有其他有利于 Goertzel 的因素需要考虑。仅引用 wiki 页面:“FFT 实现和处理平台对相对性能有重大影响。一些 FFT 实现 [9] 执行内部复数计算以即时生成系数,显着增加了它们的“成本 K per FFT 和 DFT 算法可以使用预先计算的系数值表来提高数值效率,但这需要更多地访问缓冲在外部存储器中的系数值,这可能导致缓存争用增加,从而抵消了一些数值优势。”
“当使用实值而不是复值输入数据时,这两种算法的效率都提高了大约 2 倍。然而,这些增益对于 Goertzel 算法来说是很自然的,但如果不使用专门用于转换实数的某些算法变体,FFT 将无法实现这些增益。 ——有价值的数据。”
频率分辨率为
如果由于计算复杂性不能增加,带限信号可以在 FFT 之前进行频移。让是连续信号,它的中心频率和它的带宽。是的采样版本,即. 然后可以通过以下方式实现频移
此方法仅在以下情况下有效是严格带宽限制的。如果不是,则必须提前应用带通滤波来滤除所需频带。另请注意,按小数进行下采样还将引入额外的计算复杂性。