【问题标题】:Detection of peaks in the frequency spectrum without using FFTs MATLAB在不使用 FFT MATLAB 的情况下检测频谱中的峰值
【发布时间】:2014-06-26 16:55:49
【问题描述】:

假设我有一个信号 x(t),我是否可以在不使用 FFT 的情况下检测频谱中的峰值(即能量含量最高的频率)?

*PS - 我在小波分解中看到了一个叫做 scale2freq() 的东西。我在 MATLAB 帮助页面中查看了它,结果让我感到困惑。该函数与频率表示有什么关系吗?如果是,我如何使用它找到峰值频率?

【问题讨论】:

    标签: matlab frequency-analysis


    【解决方案1】:

    您可能想要的称为音高检测算法,在时域或频域(或两者兼有)中有多种算法。请在 google 中搜索“音高检测算法”以获取更多参考,或查看所选链接以获得快速概览:

    在时域中,一些简单的方法是定位自相关函数的峰值。事实上,自相关在 t=0 时最大,然后下一个峰值给出了主周期的估计:

    ncount = 10000;
    Ts = 0.0001; % Sampling period
    t = (1:ncount) * Ts; % Sampling times
    f = sin(2*pi*60*t) + 0.1*sin(2*pi*200*t) + 0.01 * randn(1, length(t)); % Signal
    
    R = xcorr(f);
    [~, locs] = findpeaks(R);
    meanLag = Ts * mean(diff(locs));       
    pitch = 1 / meanLag; ===> Will be around 60 Hz
    

    这种方法适用于非常基本的信号,您可能需要根据具体情况(噪声级别、周期性、多音等)对其进行改进。有关更精细的算法,请参阅上述参考资料。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多