【问题标题】:MATLAB Code ClarificationMATLAB 代码说明
【发布时间】:2014-09-21 11:41:30
【问题描述】:

我最近访问了这个页面,以便从 MATLAB 中的信号数据中确定频率:

Determine frequency from signal data in MATLAB

在这个页面中,一个回答者回复了以下代码:

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

据我所知,对名为signal 的信号进行了快速傅立叶变换,使用“abs”保持其幅度,并计算最大值。最大值将在maxValue 中,indexMax 将包含maxValue 的位置。但是,有人可以解释signal-mean 是什么意思,它的目的是什么?

【问题讨论】:

  • 尝试x = 1:numel(signal); plot(x,signal,x,signal-mean(signal),'r') 直观地查看它的作用

标签: matlab


【解决方案1】:

它基本上标准化了向量signal,因此它的均值为零(从signal 中减去均值)。所以 signal - mean(signal) 看起来像 signal 只是在 y 轴上移动,所以它的均值为零。希望清楚。

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

【讨论】:

  • +1 - 正确。这会降低均值的趋势,使信号或多或少以 0 为中心,从而使信号以 y=0 为中心。
  • 太棒了!非常感谢 vsoftco 的澄清 :)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2013-09-12
    • 2017-01-23
    • 2016-06-01
    • 2015-01-13
    • 2015-08-16
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多