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

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

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

评论

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

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

约束在于,持续时间需要尽可能短。 100s太长。我们大约需要10秒以上的时间

#1 楼

我认为解决您问题的最好方法是使用线性调频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实现。值的数据。“

评论


$ \ begingroup $
滑动DFT在实时频谱分析中非常有用,在实时频谱分析中,输入序列很长,并且需要以规则的间隔重新计算频谱。如果只需要计算几个DFT值,则Goertzel算法非常有效。由于所需的频率点数量太大,因此对于解决给定的问题将没有用。
$ \ endgroup $
– Matt L.
13年5月23日在12:32

$ \ begingroup $
感谢@MattL。指出Goertzel算法的弱点。
$ \ endgroup $
– NcJie
13年5月27日在1:07

#3 楼

频率分辨率为
$$
\ Delta f = \ frac {f_ \ mathrm {s}} {N}
其中$ f_ \ mathrm {s} $是采样频率,$ N $是FFT大小。因此,实际上增加采样频率会提高频率分辨率(我假设“更好”是指您的频率更低)。因此,您应该增加FFT大小$ N $,即。 e。 FFT在一个数据块中处理的采样数,以降低频率分辨率。在您的示例中,您至少需要300个采样才能达到所需的频率分辨率。

如果由于计算复杂性而无法增加$ N $,则可以在FFT之前对带宽受限的信号进行频移。假设$ s(t)$为连续信号,$ f_ \ mathrm {c} $为中心频率,$ f_ \ mathrm {b} $为带宽。 $ x(n)$是$ s(t)$的采样版本,即$ x(n)= s(n / f_ \ mathrm {s})$。然后可以通过
$$
\ tilde {x}(n)= x(n)e ^ {-j2 \ pi k_ \ mathrm {0} / N}
$$
其中$ k_ \ mathrm {0} = f_ \ mathrm {c} / f_ \ mathrm {s} $。现在可以降低采样频率,因为信号的截止频率为$ f_ \ mathrm {b} $,而截止频率为$ f_ \ mathrm {b} + f_ \ mathrm {c} $在移频之前根据采样定理,新采样频率$ \ tilde f_ \ mathrm {s} $必须大于或等于$ f_ \ mathrm {b} $,因此$ \ tilde x(n)$可以下采样一个因子$ M = f_ \ mathrm {s} / f_ \ mathrm {b} $,因此在保持$ N $不变的同时提高了频率分辨率。

仅当$ s(t)$严格限制带宽时,此方法才有效。如果不是,则必须事先应用带通滤波以滤出所需的频带。另请注意,按小数$ M $进行下采样还会引入额外的计算复杂性。