2013-03-21 48 views
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功能的两个参数吗?这里有什么问题?

更新: 这就是我已经固定它

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 
+0

这样看来,t'的'至少一个值是不是正整数... – 2013-03-21 10:48:27

+0

这怎么可能t从正面积极的变化? – 2013-03-21 10:50:21

+0

为什么不打印't'的值并确认? – 2013-03-21 10:51:24

回答

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 
1

兰特(1,T)产生1的T矩阵,让你的标值完成可以使用rand(1,1)

+0

所以它意味着兰特(1,1)* 2-1 – 2013-03-21 10:54:02

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 /采样率,而不是1/f1(除非你在这个频率采样,在这种情况下你不能期望看到正确的结果,因为你的频率都在奈奎斯特以上频率fs/2,所以会出现混叠)。此外,你应该减去整个向量WN的平均值,而不是盲目地假设平均值为0.5(或1,一旦它乘以2)。