特定频率范围的FFT。


11

我想将信号转换为频域。所需的频率范围为0.1 Hz1 Hz频率分辨率为0.01 Hz

采样率为时30 Hz,FFT给出的频率分量高达15 Hz。提高采样率可提供更好的频率分辨率。但是,FFT可以提供更宽的频率范围。就我而言,我只是想0.1 Hz1 Hz,FFT放弃对15 Hz(额外的计算)。

我的问题是,是否有标准方法可以计算具有特定频率范围和高分辨率的信号的频域?


2
听起来像您想要Zoom FFT arc.id.au/ZoomFFT.html
endolith 2013年

如果仅以2 Hz的采样率和100 s的持续时间进行标准DFT,则将获得0 Hz至1 Hz的分辨率为0.01 Hz的频带。您只有10%的样本不在您感兴趣的范围内。为解决此相对较小的计算效率问题,为解决“非标准”算法的细节而付出的努力真的值得吗?
Photon

约束是,持续时间需要尽可能短。100s太长。我们需要大约10余秒
-NcJie

Answers:


5

我认为解决您问题的最佳方法是使用线性调频DFT。它就像某个频率范围内的放大镜。它比DFT的直接实现(不带FFT)更有效,因为FFT算法可以与一些适当的预处理和后处理一起使用。基本上,您需要使用线性调频信号调制信号,然后使用FFT进行滤波,然后再次线性调频调制信号以获得所需的频率响应。有关如何实现线性调频DFT的详细信息,请参见此处此处


2

也可能使用频率扭曲(也可以用作放大镜,因为对于相同大小的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的因数,并且是基数2的实现)。

但是,应该考虑其他因素,这些因素有利于Goertzel。只是引用维基页面:“ FFT的实现和处理平台对相对性能有重大影响。一些FFT的实现[9]执行内部复数计算以动态生成系数,从而显着增加了它们的“每千个成本K FFT和DFT算法可以使用预先计算的系数值表来提高数值效率,但这需要更多访问外部存储器中缓冲的系数值,这可能导致增加的缓存争用,这抵消了某些数值优势。”

“当使用实数值而不是复数值输入数据时,两种算法的效率大约提高2倍。但是,这些增益对于Goertzel算法是很自然的,但如果不使用某些专门用于转换实数的算法变体,则无法通过FFT实现。值的数据。”


1
滑动DFT实际上在实时频谱分析的上下文中很有用,在实时频谱分析中,输入序列很长,并且需要以规则的间隔重新计算频谱。如果仅需要计算几个DFT值,则Goertzel算法非常有效。由于所需的频率点数量太大,因此对于解决给定的问题将没有用。
Matt L.

谢谢@MattL。指出Goertzel算法的弱点。
NcJie

1

ΔF=Fsñ
Fsññ

ñsŤFCFbXñsŤXñ=sñ/Fs

Xñ=XñË-Ĵ2πķ0/ñ
ķ0=FC/FsFbFb+FCFsFbXñ中号=Fs/Fbñ

sŤ中号

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.