在MATLAB中查找音频峰值

在MATLAB中查找音频峰值,matlab,signal-processing,max,Matlab,Signal Processing,Max,我有一个大小约为7000000 x 1的音频信号。我在MATLAB中使用了peakfinderm文件来查找音频文件中高于特定阈值的所有峰值的位置。我现在试图找到一个帧大小为1000000 x 1的包含最大数量峰值的1000000 x 1。我完全不知道怎么做,任何帮助都将不胜感激。谢谢大家! 那么,峰值查找函数所做的就是求二阶导数,并查找结果为负值的任何地方。这表示局部最大值。所以你可以做一些非常类似的事情来找到任何局部最大值 一旦有了这些索引,您就可以打开包含位置逻辑表示的数组窗口,并计算有多少

我有一个大小约为7000000 x 1的音频信号。我在MATLAB中使用了
peakfinder
m文件来查找音频文件中高于特定阈值的所有峰值的位置。我现在试图找到一个帧大小为1000000 x 1的包含最大数量峰值的
1000000 x 1
。我完全不知道怎么做,任何帮助都将不胜感激。谢谢大家!

那么,峰值查找函数所做的就是求二阶导数,并查找结果为负值的任何地方。这表示局部最大值。所以你可以做一些非常类似的事情来找到任何局部最大值

一旦有了这些索引,您就可以打开包含位置逻辑表示的数组窗口,并计算有多少个峰值

下面的代码将实现我所说的。它将打开窗口,计算找到的峰值数量,并返回一个计数向量,然后您只需找到最大值,就可以得到起始索引

clc; close all; clear all;
A = randi(10,[1,100])
plot(A)
hold on
C = diff(diff(A))
indices = find(C < 0)+1;
scatter(indices,A(indices),'r')
temp = zeros(size(A));
temp(indices) = 1;
window = ones(1,5);
results = conv(temp,window,'same');
max(results)

这是一个简单的平均滤波器,有助于平滑一些噪声

您可能需要先应用一个滤波器来平滑数据,否则你可能会错过森林。我不确定我是否知道你的意思。我知道什么是过滤器以及如何平滑它,但你错过森林修辞意味着什么——你会错过噪音的信号。对于纯噪音的情况,我不知道这会有什么帮助!:)这也与问题无关,问题是如何找到峰值最多的区域,这是你用conv完成的。我知道这是不可能的,但如果你真的担心,你甚至可以在做任何导数之前设定阈值。简单到
temp=A(A>阈值);差异(差异(温度))
filt = (1/filtLength) * ones(1,filtLength);
A = conv(A,filt,'same')