在matlab中平均多个FFT

信息处理 matlab fft 功率谱密度 平均
2022-02-04 06:05:31

我有多个真实的音频信号,我正在接受 FFT。尽管它们不是来自相同的记录,但这些信号代表相同的东西(生物学上)。有人告诉我,我可以将这些 fft 组合起来并将它们平均在一起,以获得平均信号的良好表示。我正在考虑为此目的使用 matlab 函数“pwelch”,但我有很多问题,我无法通过谷歌搜索找到答案。

  1. 我已经用matlab函数'pwelch'对ffts本身进行了平均以减少噪音。将它们组合在一起时,我应该只使用普通 FFT 的输出而不是 pwelch (P) 的输出吗?

  2. 我的信号长度不完全相同,这将使它们无法组合成矩阵。我应该在平均之前将它们全部剪成相同的长度吗?或者有没有办法解决这个问题?

  3. 我如何实际结合它们?我在想这样的事情:

avg = (abs(P1) + abs(P2) + abs(P3)) / 3;

然后像这样使用函数 pwelch:

[Pavg, Favg] = welch(avg,ones(SegmentLength,1),0,NFFTavg,fs,'power');

任何见解或帮助将不胜感激。谢谢!

1个回答

Welch 方法是一种在您只有一个时间序列可供使用时减少频谱功率估计中的波动(噪声)的方案。因为你有多个时间序列,我不相信韦尔奇的方法是你想要的。如果你有时间序列x1(n),x2(n), 和x3(n)不同长度的,我建议你对较短的序列进行零填充,这样它们的长度就等于原始序列中最长的x1(n),x2(n), 和x3(n)序列。(我猜不需要时域汉宁或汉明窗。)执行三个 FFT 并计算三个相应的频谱功率序列P1(m),P2(m), 和P3(m). 最后,将三个光谱功率序列逐个元素平均为:

Spec_Pwr_Ave = P1 + P2 + P3;

然后绘制您的“Spec_Pwr_Ave”功率谱序列。