MATLAB - 寻找峰谷[关闭]

Posted

技术标签:

【中文标题】MATLAB - 寻找峰谷[关闭]【英文标题】:MATLAB - Finding Peaks and Valleys [closed] 【发布时间】:2016-03-16 16:22:00 【问题描述】:

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

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

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

我被告知要做一个大小为 3 的滑动窗口,并取 3 点乘以 3 点。

我用谷歌搜索了它,但找不到如何开始。任何人都可以帮忙吗?谢谢!

【问题讨论】:

【参考方案1】:

首先您必须将音频文件制作成单声道,这可以通过以下方式轻松完成:

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

接下来,您可以将其拆分为 3 帧 - 这可以通过“reshape”轻松实现,或者对您来说更简单,只需使用 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 子句进行比较,这是非常基本的,所以我留给您去做。

【讨论】:

以上是关于MATLAB - 寻找峰谷[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Matlab Coder生成的C代码的自动微分[关闭]

机器学习和自然语言处理 [关闭]

MATLAB:如何关闭“哔”声?

Matlab GUI中的无限循环导致关闭GUI时Matlab冻结?

MATLAB:嵌入式系统的范围是啥[关闭]

升级旧的 MATLAB 代码文件的步骤是啥? [关闭]