我想将信号转换为频域。所需的频率范围为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
(额外的计算)。
我的问题是,是否有标准方法可以计算具有特定频率范围和高分辨率的信号的频域?
Answers:
也可能使用频率扭曲(也可以用作放大镜,因为对于相同大小的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实现。值的数据。”