私は約サイズの音声信号を持っています7000000 x 1
。MATLABの m ファイルを使用してpeakfinder
、特定のしきい値を超えるオーディオ ファイル内のすべてのピークの位置を見つけました。1000000 x 1
現在、最大量のピークを含むフレーム サイズを見つけようとしています。私はこれを行う方法について完全に迷っており、どんな助けも大歓迎です。ありがとうございました!
1 に答える
1
さて、ピーク ファインダー関数が行っているのは、2 次導関数を取得し、結果の値が負になる場所を探すことだけです。これは極大値を示します。したがって、極大値を見つけるために非常によく似たことができます。
これらのインデックスを取得したら、位置の論理表現を含む配列をウィンドウ化し、そこにあるピークの数を数えることができます。
以下のコードは、私が言っていることを実行します。ウィンドウを横切って検出されたピークの数をカウントし、カウントのベクトルを返します。これにより、最大値を見つけることができ、開始インデックスが得られます。
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)
これはもちろんペットの例です.Aはあなたの行列で、windowはあなたが調べたい範囲の長さの行列です.あなたの場合は1000000です.
編集
以下のコメントで Try Hard が指摘しているように、この方法はノイズの影響をかなり受けやすいため、最初にできることは、微分を行う前に、次のように信号に対して平滑化フィルターを実行することです。
filt = (1/filtLength) * ones(1,filtLength);
A = conv(A,filt,'same')
これは単純な平均化フィルタで、ノイズの一部を滑らかにするのに役立ちます
于 2013-07-22T16:32:15.793 に答える