如何检查正弦波的FFT结果?


9

我获得了一个1000Hz的音频文件(正弦波)作为FFT算法的输入。我在阵列中得到了8192个功率谱样本。

检查我的输出是对还是错的最佳和最简便的方法是什么?

如果我给出一个无声音频文件,则所有样本的输出均为零。在正弦波中,o / p从20(第0个样本)增加到26059811(743个样本),然后逐渐降低到40。

如果我对输出范围有所了解,则可以从技术上证明FFT是否有效。

任何想法都会有所帮助。

如有任何技术疑问,请参考此链接


1
你可以绘制数组吗?(也许是在电子表格软件中?)

数组中有8192个值。您希望我手动进行绘制,否则电子表格将对其进行处理。我正在研究MAC

2
我已经在MS Excel中绘制了数以万计的示例;数字或其他数字也适用。还是gnuplot。

别忘了开放办公室
假名称

@Fake名称:我不能够绘制图形..

Answers:


4

看来您正在通过平均10个窗口(不重叠?)来获得频谱,以得到8192或8193频率(从0到Nyquist,但某些算法可能会降低bin 8192处的Nyquist频率)的幅度平方。

首先要检查的是峰在正确的仓中。您没有说采样率是多少,但是bin 743是采样率的743/16384倍。如果信号确实为800 Hz,则Fs约为17640个样本/秒。好像错了 您的测试信号可能采用标准速率,例如8000、16000、22050、32000、44100或48000。对于Fs = 22050,峰值将在bin 800/22050 * 16384 = 594中急剧变化。

另一个要检查的标准是,信号的总能量在时域和频域都大致相同。这是Python中的示例:

In [1]: NFFT = 2048; N = 10*NFFT; n = arange(N); Fs = 22050
In [2]: x = 0.4*cos(2*pi*400/Fs*n) + 0.6*cos(2*pi*800/Fs*n)

In [3]: y,freqs = psd(x, NFFT=NFFT, Fs=Fs, pad_to=16384)  # PSD by Welch's Method

In [4]: sum(x**2)/Fs           # time-domain energy
Out[4]: 0.24149869319296949
In [5]: sum(y) * N/16384       # frequency-domain energy
Out[5]: 0.24148752834391252

输入信号x由两个以Fs = 22050个样本/秒采样的正弦曲线组成,被分割为10个非重叠窗口,大小为NFFT = 2048个样本。调用psd(功率谱密度)可将频谱y计算为十个16384点DFT(实际上是8193点,因为x为实值)的幅度平方的平均值。

计算的频域能量具有N / 16384的缩放因子,因为psd函数将y缩放为DFT大小而不是总信号长度。这是否是一个问题取决于系统如何处理PSD规范化。另一个可选的归一化是按1 / Fs缩放。这使能量与原始模拟信号匹配。默认规范化应该在库中有据可查。


我测试了正弦波信号,它是1000 Hz。我的FFT给出了正确的答案,谢谢您的帮助。

10

您需要绘制FFT输出的幅度。我不熟悉您的编程语言,但是在Python中,您将使用plot(abs(fft(a)))。对于静音输入,输出应全为零。对于正弦波输入,您应该看到两个尖峰:

替代文字

对于真实信号,尖峰将从左到右对称。但是,如果您正在执行真实的FFT(这在计算上更加有效),则只会得到图的左半部分作为输出,因为它会忽略冗余镜像。

如果频率较高,则尖峰将更靠近中心。如果频率与块大小完全同步,则尖峰将只有一个点宽,而其他所有峰都将恰好为0。否则,它将像上面一样具有逐渐变细的“裙边”。


您是说功率谱值就是振幅吗?

t->参考时间?

不用担心时间。如果您只是检查FFT是否正常工作,那么您要做的就是检查幅度的形状是否与此相似。
endlith 2010年

无论如何,我无法绘制出正确的FFT。我肯定会在空闲时间尝试实现该图表。非常感谢。

1
@clabacchio:哦。FFT在图的开始和结束处产生一个f = 0轴的输出。曲线的中点是f = fs / 2轴。通常有一个fftfreq或fftshift函数可以重新布置图,使0频率位于中心。flic.kr/p/arVeZT
endolith

0

我已经使用Excel Analysis Toolpak中的傅立叶分析工具对数据和结果进行了快速检查。


我正在研究MAC。

@Warrior-然后使用MacPorts或Fink安装Gnumeric(如果需要,还可以在此页面上查看鸭嘴兽包装的一些信息)
Kevin Vermeer 2010年
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.