我试图通过以下模型拟合下列正弦模型,这意味着确定性模型+白噪声:
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 :(得分:1)
rand(1,t)通过t矩阵生成1,得到一个标量值,你可以使用rand(1,1)
答案 1 :(得分: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)。
答案 2 :(得分: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