MATLAB - 寻找峰和谷

时间:2016-03-16 16:22:00

标签: matlab audio signal-processing

所以我有2个.wav文件记录频率。一个是原始音频,另一个是过滤后的音频。两者都是立体声.wav文件。

现在,我应该找到这两个.wav文件的高峰和低谷。 有人告诉我,我必须连续3个数据并确定3个中的哪个是最大值或最小值。如果中间的是最大值或最小值,则找到峰值/谷值。重复此操作,直到没有更多数据。

我应该如何实现上述目标?

我被告知要做一个3号的滑动窗口,然后拿3分3点。

我用Google搜索但无法找到如何开始。有人可以帮忙吗。谢谢!

1 个答案:

答案 0 :(得分:1)

首先,您必须将音频文件转换为单个频道,这可以通过以下方式轻松完成:

a = audioread('filename');
b = sum(a,1)./2;

接下来,您可以将其拆分为3个框架 - 这可以通过重塑'来轻松实现。或者对您来说更方便,只需使用for循环:

reshapemethod = reshape(b,[floor(size(b,2)/3),3])

或循环:

for t=1:floor(size(b,2)/3)
   firstpoint = b((t-1)*3+1);
   secondpoint = b(firstpoint+1);
   thirdpoint = b(firstpoint+2)
   %//Use if statement to compare 
   %//OR just do
   [peaks(t) locationOfPeaks(t)]= findpeaks([firstpoint,secondpoint,thirdpoint]);
   %//For Valleys, just multiply first second and third point by -1 and then use the findpeaks function.
   [vallys(t) locationOfValleys(t)] = findpeaks([-1*firstpoint,-1*secondpoint,-1*thirdpoint]);
end

接下来你可以使用findpeaks来查找3个数据点中的峰值,或者只是使用if子句进行比较,这是非常基本的,所以我留给你做。