生成具有时变频率的正弦模型

时间:2014-10-10 10:28:08

标签: matlab signals signal-processing

我想用这样的时变频率创建正弦时间序列。我们有观察时间从2.93秒,从0到1秒我想创建正弦数据加白噪声与一组频率,而从1到2.93秒另一组频率,为此我写了下面的代码

 %   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);

但它显示错误使用+

时出错
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);

2 个答案:

答案 0 :(得分:2)

我分离了&#34; x =&#34;用于隔离错误的行:

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,替换&#34;少于1&#34;用&#34;大于或等于1&#34;。

答案 1 :(得分:1)

您的问题在x,y定义的末尾是randn()。您正在尝试添加不同维度的数组。 size(t)会产生另一个值,而不是t(t<1)t(t>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));

那些应该都有效。
另一个小错误是你&#34;删除&#34;您的t==1您必须使用x中的t(t<=1)或y定义中的t(t>=1)或z和t的维度相同