0

次のモデルで次の正弦波モデルに適合させようとしました。これは、決定論的モデル + ホワイト ノイズを意味します。

function [x]=generate(N,m,A3)
f1=100;
f2=200;
T=1/f1;
for t=0:N*T/m:N*T
    WN(t)=rand(1,t)*2-1;
    x(t)=20*sin(2*pi*f1*t)+30*cos(2*pi*f2*t)+A3*WN(t);
end;

しかし、次のコマンドを使用して実行すると:

generate(100,10,40)

次のエラーが発生しました:

Subscript indices must either be real positive integers or logicals.

Error in generate (line 6)
    WN(t)=rand(1,t)*2-1;

では、何が問題なのですか?私が知っているように、rand関数に2つのパラメーターを使用できますか? ここで何が問題ですか?

更新:それは私がそれを修正するために行ったことです

function [ x]=generate(N,m,A3)
WN=[];
f1=100;
f2=200;
T=1/f1;
k=0;
for t=0:N*T/m:N*T
   % WN(k)=rand(1,1)*2-1;
   % x(k)=20*sin(2*pi*f1*t)+30*cos(2*pi*f2*t)+A3*WN(k);
    %k=k+1;
    WN=rand*2-1;
     disp(20*sin(2*pi*f1*t)+30*cos(2*pi*f2*t)+A3*WN);
end;

と結果

 generate(1000,10,40)
   25.4143

   -1.4678

   66.9518

   -9.6293

   51.9928

   55.3843

   59.4956

   -3.2451

   21.9826

   10.7896

   54.0055
4

3 に答える 3

1

rand(1,t) は 1 x t 行列を生成し、rand(1,1) を使用してスカラー値を取得します

于 2013-03-21T10:52:23.223 に答える
1

sin と cos はベクトル引数を受け入れるので、for ループは必要ないことに注意してください。

T = 1 / fs;
t = (0:N-1)' * T; 
WN = rand(N, 1) * 2; 
WN = WN - mean(WN); 
x = 20 * sin(2*pi*f1*t) + 30 * cos(2*pi*f2*t) + A3 * WN;

さらに、T の値は 1 / f1 ではなく、1 / サンプル レートである必要があります (この周波数でサンプリングする場合を除きます。この場合、周波数が両方とも fs / 2 のナイキスト周波数を上回っているため、正しい結果が得られるとは期待できません)。であるため、エイリアシングが発生します)。また、平均が 0.5 (または 2 を掛けると 1) であると盲目的に仮定するのではなく、ベクトル WN 全体の平均を減算する必要があります。

于 2013-03-21T12:05:14.603 に答える
1

私は次のようにそれを解決しました:

function x = generate(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))';
wn = rand(length(t),1).*2 - 1;
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
end
于 2013-03-21T12:27:41.807 に答える