MATLAB代码澄清

时间:2014-07-29 23:26:11

标签: matlab

我最近访问了此页面,以便在MATLAB中根据信号数据确定频率:

Determine frequency from signal data in MATLAB

在此页面中,回答者回复了以下代码:

[maxValue,indexMax] = max(abs(fft(signal-mean(signal)))); 

从我所看到的,对名为signal的信号进行快速傅立叶变换,通过使用' abs'来保持其幅度,并计算最大值。最大值将位于maxValueindexMax将包含maxValue的位置。但是,有人可以解释signal-mean的含义,以及它的用途是什么?

2 个答案:

答案 0 :(得分:3)

它基本上将矢量signal标准化,因此它的平均值为零(从signal减去平均值)。所以signal - mean(signal)看起来像signal,除了在y轴上移位,因此它的均值为零。希望很清楚。

在您在链接中发布的示例中,信号的平均值大约为-2,因此通过减去平均值,您最终会在y=0轴附近向上移动信号。

答案 1 :(得分:3)

vsoftco's answer所述,signal-mean(signal)减去信号的均值。

然而,关键点是:为什么这样做了?如果你不减去均值,很可能FFT中的最大峰出现在频率0(直流分量)。但是你不想将其视为频率"您的信号,即使它确实是最高频谱成分。所以你通过减去平均值来删除那个零频率组件。这样,max操作将检测最大非零频率组件,这可能是您想要的。