【问题标题】:MATLAB - How to find the peaks in a wav file [duplicate]MATLAB - 如何在 wav 文件中找到峰值 [重复]
【发布时间】:2016-03-15 11:55:16
【问题描述】:

我正在尝试查找 .wav 文件的峰值并使用 findpeaks 方法

a = audioread('FilterNew.wav');
[pks,locs] = findpeaks(a)

但是当我运行脚本时,它给了我 3 个错误

使用 findpeaks 时出错 期望 Y 是一个向量。

findpeaks 中的错误>parse_inputs(第 189 行) validateattributes(Yin,{'numeric'},{'nonempty','real','vector'},...

findpeaks 中的错误(第 131 行) [y,yIsRow,x,xIsRow,minH,minP,minW,maxW,minD,minT,maxN,sortDir,annotate,refW] ...

我试过谷歌搜索,但没有找到任何答案,所以我希望在这里得到一些帮助。代码有什么问题?还是我的 .wav 文件损坏了?!?

谢谢


感谢 mathematician1975 设法绘制图表。

现在,我正在尝试绘制峰值图并标记左右两边的峰值,但它给了我一个错误 使用绘图时出错 向量的长度必须相同

所以我检查了尺寸

>> size(a(1,:))

ans =

     1     2

>> size(a(:,2))

ans =

      467712           1

我的代码

a = audioread('FilterNew.wav');
[pks,locs] = findpeaks(a(:,1));

[pks2,locs2] = findpeaks(a(:,2));

 figure
 x = (1:length(a));
 plot(x,a,'k');

 figure
 z = (1:length(a));
 plot(z,a,'k');

 hold on
 plot(locs,pks,'go');

 hold on
 plot(locs2,pks2,'ro');

我该如何解决?再次感谢您!

【问题讨论】:

    标签: matlab audio max signal-processing


    【解决方案1】:

    在 Matlab 2015a 中,函数 audioread() 的输出是双重的,一个矩阵和一个采样频率。只需输入:

    a = audioread('filename.wav');
    

    应该返回一个音频样本矩阵。 Findpeaks() 需要一个向量,因此您只需选择矩阵中的哪一列数据是您感兴趣的:

    [pks,locs] = findpeaks(a(:,1));
    

    【讨论】:

    • 谢谢。有用。我在更新的问题中有另一个问题
    • @user1730935 通常您应该提出一个新问题,而不是更新原始问题。您的绘图代码的问题是您在 a 的大小上犯了一个错误。如果你输入 size(a) 你会得到 467712 行和 2 列。 p是什么?
    • 对不起,我打错了。应该是pks和pks2。现在它没有向量长度错误。但是我现在要做的是绘制左右的图形并分别找到峰值。之后标记它们。但似乎我做错了。请参阅问题处的图片。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多