MATLAB - 如何在 wav 文件中找到峰值

MATLAB - How to find the peaks in a wav file

我试图找到我的 .wav 文件的峰值并使用了 findpeaks 方法

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

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

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

findpeaks 错误>parse_inputs(第 189 行) 验证属性(尹,{'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 2015a 中,函数 audioread() 的输出是双重的,矩阵和采样频率。只需输入:

a = audioread('filename.wav');

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

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