Plot 如何确定FFT结果指标频率并绘制幅频图

Plot 如何确定FFT结果指标频率并绘制幅频图,plot,fft,frequency,amplitude,Plot,Fft,Frequency,Amplitude,我有一个假设性的问题来理解这个概念 假设我捕获了一个采样率为8000hz的单声道语音片段,数据量为4096字节。。 通过256大小的FFT输入前512字节(16位编码),将返回128个值,并将其转换为振幅。 所以我的输出频率是 FFT BIN #1 0: 0*8000/256 1: 1*8000/256 . . 127: 127*8000/256 到目前为止还好吗?现在我只剩下3584字节的未处理数据。因此,我对512字节的数据执行另一个256大小的fft。并得到同样数量的结果。。 因此,对于

我有一个假设性的问题来理解这个概念

假设我捕获了一个采样率为8000hz的单声道语音片段,数据量为4096字节。。 通过256大小的FFT输入前512字节(16位编码),将返回128个值,并将其转换为振幅。 所以我的输出频率是

FFT BIN #1
0: 0*8000/256
1: 1*8000/256
.
.
127: 127*8000/256
到目前为止还好吗?现在我只剩下3584字节的未处理数据。因此,我对512字节的数据执行另一个256大小的fft。并得到同样数量的结果。。 因此,对于这一点,我再次拥有以下频率:

FFT BIN #2:
Example1:
0: 0*8000/256
1: 1*8000/256
.
.
127: 127*8000/256

因为我想画这个振幅/频率图。但我不明白这些fft单元是应该像examaple1一样重叠在相同的频率上,还是像第二个例子那样分散开来

还是我想做一些完全多余的事情?因为我想做的是找到每30-50ms时间段的峰值放大器值,用于比较其他声音文件


如果有人能帮我澄清这一点,我将不胜感激。

您的FFT结果箱在每个FFT中表示相同的频率集,如您的示例#1所示,但用于不同的时间片

每个FFT将允许您在大约12毫秒的时间窗口内绘制幅值与频率的关系图


您还可以将FFT幅值矢量相加,得到更长时间范围内的Welch方法PSD(功率谱密度)。

如果您想找到每30-50ms时间范围内的峰值安培值,只需绘制每个时间范围内信号的安培谱


此外,如果对每帧进行256个采样的FFT,则应该得到129个而不是128个频率分量。第一个是直流分量,最后一个是奈奎斯特频率分量。

原始信号/数据应填充零,以允许对指定的基数进行变换。如果我理解你的问题,并且你正在使用一个公认的库来进行转换,那么你所做的看起来还可以。@Killercam在我的问题中有三种可能性。要么我可以使用Example1或Example2绘制图形,要么我无法绘制图形。也许我理解你的答案是错误的,但基本上你对一个选择问题说的是“是”是的,我是说你可以画出整个数值范围的图形,因为FFT会处理你在没有填充数据的箱子中的任何“零”值。但是,对于像您(256)这样小的数据集,您需要对边缘效应感到厌倦,并且可能有必要对数据进行窗口/包装,以避免FFT拾取虚假周期。@Killercam,因此我将根据我的示例2进行绘图?所以公式是:i*Samplerate/fftwindowsize。我会一直增加“i”,直到没有更多的数据了?我想我明白了,你有两个时间序列(2x30-50ms样本),你想比较每个时间序列的FFT结果。然后使用上面的第一个示例计算第一个FFT并绘制。然后取下一个时间序列,使用相同的范围做完全相同的事情-基本上将第二次采样视为一个独立的时间序列/数据集。我希望这有帮助。这就是我要找的信息。谢谢
FFT BIN #2
Example2:
128: 129*8000/256
139: 130*8000/256
.
.
255: 255*8000/256