Excel中的FFT – 如何获得最真实的频谱

我试图使用Excel获取这些数据的FFT频谱: gggttt.host.sk/sample.xls 。 @Paul R在另外一个问题上帮了我很大的忙,弄清楚垃圾桶的含义,但是还有一些问题我想了解。

首先,即使模型以对数标度表示,Excel也不会以dB为单位显示它们。 你怎么做这些幅度转换为dB?

此外,还有一个关于窗口函数,锯齿等的问题。由于我正在从一个时期开始处理数据,似乎不需要应用窗口函数。 另外,因为我只需要基本的,二次和三次谐波,而且在上面的箱子中没有其他的峰值,所以照顾混淆似乎也不是必须的。 然而,非常值得关注的是非n ^ 2点数 – 1253。我试图用零填充到2048或者在第一个1024上进行FFT,忽略剩余的229点,最后每6然后删除每一个第52点,最后一个点加倍以获得必要的1024.最后,用零填充结果是最糟糕的方法 – 在整个频谱中重复高低条。 截断数据(仅处理前1024个点)似乎效果最好。 我真的很想知道在信号处理方面有什么经验的人会推荐作为产生最真实光谱的最佳方法。

下面是在这些数据上应用FFT的两种不同方式的示例:

gggttt.host.sk/fig_truncated.jpg

gggttt.host.sk/fig_padded.jpg

gggttt.host.sk/fig_every_6th_and_52nd_point_deleted.jpg

如果您只有一个周期的数据,则应该使用恰好相同长度的FFT(或DFT,如果没有fft可用)。 理论上,FFT不限于2的幂。

这是由Octave(MATLAB克隆)使用所有1253个数据点生成的PSD图:

 > t = load('sample.txt'); > m = mean(t) m = -13.679 > periodogram(t,[],'onesided',1253,1e9) 

周期图(T,[], '单侧',1253,1e9)

正如你所看到的那样,有一个很大的直stream分量,非直stream分量看起来就像一个典型的本底噪声,没有明显的峰值。 我的猜测是,如果您怀疑噪音中真的存在峰值,那么您需要收集更多的数据 – 然后您可以使用时间平均或整体平均来提取这些数据。


这里只是PSD的前十点:

 > Pxx = periodogram(t,[],'onesided',1253,1e9); > plot(10*log10(Pxx(1:10))) 

绘图(10 * log10(Pxx(1:10)))