【问题标题】:Fit sinusoidal models拟合正弦模型
【发布时间】:2013-03-10 19:59:10
【问题描述】:

我尝试通过以下模型拟合以下正弦模型,这意味着确定性模型+白噪声:

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

【问题讨论】:

  • 看来t 的至少一个值不是正整数...
  • 怎么可能?t正在从积极变为积极
  • 为什么不打印出t 的值并确认呢?
  • t 不是整数,它是实数,比如 0.3 等等
  • 那当然不行!您不能索引到具有非整数值的数组/矩阵。

标签: matlab noise period spectral


【解决方案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

【讨论】:

    【解决方案2】:

    注意 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)。

    【讨论】:

      【解决方案3】:

      rand(1,t) 生成 1 x t 矩阵,要获得标量值,您可以使用 rand(1,1)

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多