如何使用非重叠块进行FFT平均

时间:2012-09-28 18:42:42

标签: fft scilab

我正在尝试对我捕获的一些数据进行FFT。我工作在10MHz-100MHz范围内,因此我的8192采样捕获量不足以在对它们进行FFT时传达任何有意义的信息。因此,我正在对正弦波进行许多非重叠捕获,并希望将它们放在一起。

我目前在每个文件的for循环中做的(在Scilab中)是:

temp1 = read_csv(filename,"\t");
temp1_fft = fft(temp1);
temp1_fft = temp1_fft .* conj(temp1_fft);
temp1_fft = log10(temp1_fft);
fft_code = fft_code + temp1_fft;

然后,当我完成所有文件后,我:     fft_code = fft_code./numFiles;

但我不确定我是否正确处理了这个问题。对于不重叠的样本,有没有更好的方法?

1 个答案:

答案 0 :(得分:0)

我认为你很接近,但你应该在采用temp1_fft之前平均频谱的幅度(log10)。否则你基本上最终将它们相乘而不是平均。所以相反,只需将log10移动到for循环之外就像这样(我不知道scilab语法):

for filename in files:
    temp1 = read_csv(filename,"\t");
    temp1_fft = fft(temp1);
    temp1_fft = temp1_fft .* conj(temp1_fft);
    fft_code = fft_code + temp1_fft;

fft_code = fft_code./numFiles;
fft_code = log10(fft_code);

您肯定想要使用幅度(当您乘以conj时,您已经这样做了),因为相位信息将取决于您的采样相对于信号开始的时间。如果您需要相位信息,则必须确保采集与信号同步。

这样做称为"Power Spectrum Averaging"

  

功率谱平均也称为RMS平均。 RMS平均计算平方幅度之和的加权平均值(FFT乘以其复共轭)。加权是线性的或指数的。 RMS平均值可减少数据中的波动,但不会降低实际本底噪声。通过足够数量的平均值,可以显示实际随机噪声基底的非常好的近似值。由于RMS平均仅涉及幅度,因此显示RMS平均值的实部或虚部或相位没有意义,功率谱平均值没有相位信息。