MATLAB,平均多个fft,相干积分

时间:2014-07-07 11:44:07

标签: matlab fft

我有录音。 我想检测正弦模式。 如果我做常规fft我的结果是SNR差。 例如 我的信号内容有4个高频: enter image description here

结果: enter image description here

为了减少噪音,我想按照本文所述进行相干整合:http://flylib.com/books/en/2.729.1.109/1/

但我找不到任何MATLAB示例如何做到这一点。抱歉英文不好。请帮忙)

3 个答案:

答案 0 :(得分:2)

我几乎每天都看光谱,但我从来没有听说过连贯的整合'作为一种计算方法。正如Jason所提到的,相干积分仅在您平均每个FFT期间信号具有固定相位时才有效。

您更有可能想要执行文章所称的“不连贯的整合”。这通常被称为计算periodogram(或Welch's method,稍微更好的变体),其中您平均各个FFT的平方绝对值以获得功率谱密度。要以正确的方式计算PSD,您需要注意一些细节,例如在执行每个FFT之前应用合适的Fourier window,进行适当的归一化(以便在Volt ^ 2 /中正确校准结果) Hz)并使用半重叠窗口来使用您的所有数据。所有这些都在Matlab的pwelch函数中实现,该函数是信号处理工具箱的一部分。有关如何使用pwelch的类似问题,请参阅my answer

答案 1 :(得分:1)

FFT帧的积分或平均仅相当于逐帧添加帧并除以帧数。由于MATLAB提供了向量运算,因此您只需使用+运算符添加帧即可。

coh_avg = (frame1 + frame2 + ...) / Nframes

其中frameX是复数FFT输出帧。

如果你想进行非相干平均,你只需要在将帧组合在一起之前考虑复杂元素的大小。

noncoh_avg = (abs(frame1) + abs(frame2) + ...) / Nframes

另请注意,为了使相干平均效果最佳,感兴趣信号的起始相位需要对每个FFT帧都相同。否则,具有信号的FFT仓可以以振幅抵消的方式相加。这通常是一个严格的要求,以确保在不了解信号或某些外部触发的情况下,因此使用非相干平均更为常见。

非相干积分不会降低噪声功率,但会增加信噪比(信号功率与噪声功率的比较),这可能是你真正想要的。

答案 2 :(得分:0)

我认为您正在寻找的是Matlab中的“频谱图”功能,它计算输入信号的短时傅里叶变换(STFT)。

STFT

Spectrogram