4

次のコードがあるとします

function [ x ] = generate1(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = randn(length(t),1); %zero mean variance 1
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
%[pks,locs] = findpeaks(x);
 plot(x)
end

次のコマンドを使用して信号を生成しました

y=generate1(3,500,1);

そして、私は501の長さのサンプルを持っています.今、私は音楽法を使用して周波数、つまり100と200を検出したいと思います.パラメータの数が2であると仮定します.

pmusic(y,4)

ここに画像の説明を入力

この画像から実際に周波数を決定する方法は?私は正規化された周波数から実際の周波数に変換する必要があると思います.すべきですか?

4

1 に答える 1

4

サンプリング レートの半分を掛ける必要があります。すなわち、正規化された周波数「1.0」は Fsample/2 です。

簡単な例として、4KHz でサンプリングされた 200 Hz 信号を次に示します。

x=sin(2*pi*200/4000*[0:1000])

実行pmusic(x, 2)すると、正規化された周波数 0.1 で顕著なピークが得られます。Hz に変換すると、これは 0.1*4000/2 = 200 Hz です。

分析しやすくするために関数を変更しました(正弦関数は1つだけで、ランダム性はありません):

 function x = gen(N,m)
    f1 = 100;
    T  = 1/f1;
    dt = N*T/m;

    x = sin(2*pi*f1*dt*[0:num_of_samples]);
 end

 x = gen(3,500,1e3);

より良い解像度を得るには、 を使用しますpmusic(x,2,[0:.01:0.2])

于 2014-02-16T14:51:18.183 に答える