【问题标题】:generate sinusoidal model with time varying frequency生成具有时变频率的正弦模型
【发布时间】:2014-10-10 10:28:07
【问题描述】:

我想像这样创建具有随时间变化的频率的正弦时间序列。我们的观察时间从 2.93 秒,从 0 到 1 秒>

 %   non stationary signal with time varying frequency
fs=100 ; % sampling frequency
ts=1/fs;
t=(0:ts:2.93);  % time vector 
%  i want to create   signal which consist of sinusoidal components in
%  addtiive of white noise ,  frequencies are defined in time as
x=25*sin(2*pi*23*t(t<1))+20*cos(2*pi*24*t(t<1))+24*sin(2*pi*22*t(t<1))+10*randn(size(t));
y=21*sin(2*pi*20*t(t>1))+26*cos(2*pi*17*t(t>1))+21*sin(2*pi*29*t(t>1))+10*randn(size(t));
z=[x';y'];
plot(t',z);

但它向我显示错误 Error using +

Matrix dimensions must agree.

Error in time_frequency (line 7)
x=25*sin(2*pi*23*t(t<1))+20*cos(2*pi*24*t(t<1))+24*sin(2*pi*22*t(t<1))+10*randn(size(t)); 

我在哪里有错误的尺寸?在解决这个问题之后,我认为代码对应于我想要的情况吗?提前谢谢

更新:

%   non stationary signal with time varying frequency
fs=100 ; % sampling frequency
ts=1/fs;
t=(0:ts:2.93);  % time vector 

t1=t(t<1);
t2=t(t>=1);
wn=10*randn(size(t1));
wn1=10*randn(size(t2));
%  i want to create   signal which consist of sinusoidal components in
%  addtiive of white noise ,  frequencies are defined in time as
x=25*sin(2*pi*23*t(t<1))+20*cos(2*pi*24*t(t<1))+24*sin(2*pi*22*t(t<1))+wn;
y=21*sin(2*pi*20*t(t>=1))+26*cos(2*pi*17*t(t>=1))+21*sin(2*pi*29*t(t>=1))+wn1;
z=[x';y'];
plot(t',z);

【问题讨论】:

  • 您的问题是在 x,y 定义的末尾randn()。您正在尝试添加不同维度的数组。 size(t) 产生的值不是t(t&lt;1)t(t&gt;1)
  • aa 所以我应该在之前定义它
  • 您可以使用randn(size(t(t&lt;1))),也可以忽略它,在定义z 之后执行z=z+10*randn(size(t))。这些都应该工作
  • 另一个小错误是您“删除”了t==1 您必须在 x 中使用 t(t&lt;=1) 或在 y 定义中使用 t(t&gt;=1),否则 z 和 t 的尺寸将不一样
  • 我更新了请看

标签: matlab signals signal-processing


【解决方案1】:

我分离出“x=”行来隔离错误:

x1 = 25*sin(2*pi*23*t(t<1));
x2 = 20*cos(2*pi*24*t(t<1));
x3 = 24*sin(2*pi*22*t(t<1));
x4 = 10*randn(size(t(t<1)));

现在 x1、x2、x3 和 x4 的大小相同。您只能对相同大小的数组求和。现在这段代码不会出错了:

>> x = [x1 + x2 + x3 + x4];
>> plot(t, x)

然后对 y 重复,将“小于 1”替换为“大于或等于 1”。

【讨论】:

  • 您编辑的代码可以正常工作。还有问题吗?
  • @danny 我认为你最后对 x 的定义是错误的。您只是添加 3 个正弦波,然后在最后添加大小为 t 的噪声。他想要他的信号中的噪声,即 [x,y]。
  • @danny 很抱歉再次打扰您,但现在您的解决方案是正确且有效的,但是您的代码块之间的文本是错误的,因为它仍然引用您的旧解决方案
【解决方案2】:

你的问题是在你的 x,y 定义的末尾randn()。您正在尝试添加不同维度的数组。 size(t) 产生的值不同于 t(t&lt;1)t(t&gt;1)

你可以使用

x=25*sin(2*pi*23*t(t<1))+20*cos(2*pi*24*t(t<1))+24*sin(2*pi*22*t(t<1))+10*randn(size(t(t<1)));
y=21*sin(2*pi*20*t(t>=1))+26*cos(2*pi*17*t(t>=1))+21*sin(2*pi*29*t(t>=1))+10*randn(size(t(t>=1)));

或者你可以忽略它,在你定义z之后做:

x=25*sin(2*pi*23*t(t<1))+20*cos(2*pi*24*t(t<1))+24*sin(2*pi*22*t(t<1));
y=21*sin(2*pi*20*t(t>=1))+26*cos(2*pi*17*t(t>=1))+21*sin(2*pi*29*t(t>=1));
z= [x,y];
z=z+10*randn(size(t));

这些都应该工作。
另一个小错误是您“删除”了t==1 您必须在 x 中使用 t(t&lt;=1) 或在 y 定义中使用 t(t&gt;=1),否则 z 和 t 的尺寸将不一样

【讨论】:

  • 对不起@datodatuashvili 我不明白你的意思。我看到了更优化的版本……这只是解决它的一种方法……为什么要提前感谢?您对这个问题还有疑问吗?
  • no no, :D :D 抱歉误解,当我说我看到更优化的版本时,我的意思是您的代码,而不是两次生成白噪声,在您的代码中生成一次,即是我的意思
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多