最初に自己相関を使用してエコー信号のパラメーターを見つけることにより、エコー キャンセラを実装しています。信号に複数の遅延があります。s=xcorr(x,x) を使用した後、s のピークの値を抽出するにはどうすればよいですか? max 関数は s の中心の値を提供し、findpeaks() は最大ピークのすぐ隣にあるが実際の遅延ピークよりも高いピークの値を提供します。
質問する
1189 次
1 に答える
1
要するに
自己相関の平滑化バージョンに SORTSTR を適用して findpeaks を使用します。
もっと言えば
信号のノイズの程度によって異なりますが、問題の迅速な解決策は、最初に自己相関を平滑化してノイズの影響を制限することです。これにより、関心のあるピークの周りに複数の極大値が導入される可能性があります。次に、降順で並べ替えられたピークを取得できます。
一緒に遊んだり、組み合わせたりする他のオプション:
- 「MINPEAKHEIGHT」は、しきい値を超えるピークを検出します (たとえば、自己相関の最大値の 10% を超えます)。
- 'MINPEAKDISTANCE' は、極大値が互いに近づきすぎないようにします
または、独自のコードを作成するだけです。これは、コードを正確に実行するために最終的に行う必要がある場合があります。
コード内:
% Create right portion of autocorrelation of a sinusoid with some noise
% This should lead to peaks of decreasing amplitude around positions 1, 26, 51, 76
% Note: This is a quick example. A more realistic signal would show better peaks.
x=.4*sin(2*pi*(1:N)/N*4)+rand(1,N);
autocorr=xcorr(x);
autocorr=autocorr(N:(2*N-1));
% Smooth out the autocorrelation
autocorrFiltered=filter([1 1 1 1 1],[1],autocorr);
subplot(2,1,1);
plot(autocorr);
xlabel('Autocorrelation')
subplot(2,1,2);
plot(autocorrFiltered);
xlabel('Smoothed autocorrelation')
[peaks,locations]=findpeaks(autocorrFiltered,'SORTSTR','descend');
% Display locations, correcting for the filter offset
locations-3
ans =
2 23 49 73 92
画像:
これは、フィルターとフィルター処理されていない自己相関を並べて比較したもので、平滑化がピークの検出に役立つ理由を示しています。
于 2013-03-22T03:25:47.973 に答える