我最近访问了此页面,以便在MATLAB中根据信号数据确定频率:
Determine frequency from signal data in MATLAB
在此页面中,回答者回复了以下代码:
[maxValue,indexMax] = max(abs(fft(signal-mean(signal))));
从我所看到的,对名为signal
的信号进行快速傅立叶变换,通过使用' abs'来保持其幅度,并计算最大值。最大值将位于maxValue
,indexMax
将包含maxValue
的位置。但是,有人可以解释signal-mean
的含义,以及它的用途是什么?
答案 0 :(得分:3)
它基本上将矢量signal
标准化,因此它的平均值为零(从signal
减去平均值)。所以signal
- mean(signal)
看起来像signal
,除了在y
轴上移位,因此它的均值为零。希望很清楚。
在您在链接中发布的示例中,信号的平均值大约为-2
,因此通过减去平均值,您最终会在y=0
轴附近向上移动信号。
答案 1 :(得分:3)
如vsoftco's answer所述,signal-mean(signal)
减去信号的均值。
然而,关键点是:为什么这样做了?如果你不减去均值,很可能FFT中的最大峰出现在频率0(直流分量)。但是你不想将其视为频率"您的信号,即使它确实是最高频谱成分。所以你通过减去平均值来删除那个零频率组件。这样,max
操作将检测最大非零频率组件,这可能是您想要的。