2

我正在尝试对我捕获的一些数据进行 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;

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

4

1 回答 1

0

我认为你已经接近了,但你应该temp1_fft在取log10. 否则,您实际上最终将它们相乘而不是平均。因此,只需log10像这样将 for 移到 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),因为相位信息将取决于您的采样相对于信号开始的时间。如果您需要相位信息,您必须确保您的采集与信号同步。

这称为“功率谱平均”

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

于 2012-10-01T14:34:40.703 回答