【问题标题】:Finding peaks from a spectrogram picture从频谱图中查找峰值
【发布时间】:2013-05-07 21:16:50
【问题描述】:
So, i have this code:

    [sound,fs,bits] = wavread(file);
    [S,F,T] = spectrogram(sound, 256, 200, 256, fs);
    plot(F,abs(S));
[sorted index] = sort(list,'descend');

现在我需要找到 S 中幅度的最高 3 个峰值(在频率 0 和 1000、1000 和 2000 以及 > 2000 之间),为此,我执行以下操作:

ind = length(F);
for k=1:1:ind
    if F(k) >= 0 && F(k) < 1000
        listaAmpF1(k) = sorted(k);
    else

    if F(k) >= 1000 && F(k) < 2000
        listaAmpF2(k) = sorted(k);
    else

    if F(k) >= 2000
        listaAmpF3(k) = sorted(k);
    end

    end

    end
end

maxAmpF1 = max(listaAmpF1);
maxAmpF2 = max(listaAmpF2);
maxAmpF3 = max(listaAmpF3);

假设我现在拥有我需要的所有最大 3 安培,我现在需要找到相应的频率,我该怎么做?

编辑:S 和 F 的长度不同

【问题讨论】:

  • 看看max的第二个输出参数

标签: matlab spectrogram


【解决方案1】:

你可以使用findpeaks函数:

F = [100 15 2010 1350 450 2500 1100 720 2900 26]; % just to make an example.
S = [1.1 2.9 3.7 4.0 3.0 1.1 2.9 3.7 4.0 3.0]; % just to make an example.

spect_orig = timeseries(abs(S), F,'Name','spect');
spect_resampled = resample(spect_orig, [1:max(F)]);
[peak_values, peak_frequencies] = findpeaks(reshape(spect_resampled.data, 1, []), 'MINPEAKDISTANCE', 500);

您可以调整参数MINPEAKDISTANCE,使峰值位于您想要的区间内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2018-05-26
    • 2018-06-16
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多