This question already has answers here:
Getting FFT peaks from data

(2个答案)


4年前关闭。




我正在尝试查找我的.wav文件的峰值,并已使用findpeaks方法
a = audioread('FilterNew.wav');
[pks,locs] = findpeaks(a)

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

使用findpeaks时出错
期望Y为 vector 。

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] ...

我曾尝试使用Google搜索,但未找到任何答案,因此希望在这里有所帮助。代码有什么问题?还是我的.wav文件已损坏?!?

谢谢

感谢mathematician1975,成功绘制了图表。

现在,我试图绘制峰图并标记左右两个峰,但这给了我一个错误
使用绘图时出错
vector 的长度必须相同

所以我检查了尺寸
>> 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 - MATLAB-如何在wav文件中查找峰-LMLPHP

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

最佳答案

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

a = audioread('filename.wav');

应该返回音频样本矩阵。 Findpeaks()需要一个 vector ,因此您只需要选择矩阵中要关注的数据列即可:
[pks,locs] = findpeaks(a(:,1));

07-24 09:39