2014-10-10 30 views
0

我想用這樣的時變頻率創建正弦時間序列。我們觀察時間從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); 
+0

你的問題,然後'randn()'在你的x,y定義的末尾。您正在嘗試添加不同維度的數組。大小(t)的結果是't(t <1)' or 't(t> 1)'的另一個值。 – 2014-10-10 10:31:58

+0

aa所以我應該在 – 2014-10-10 10:32:36

+0

之前定義它或者你可以使用'randn(size(t(t <1)))'或者你可以忽略它並且在你定義'z'之後做'z = z + 10 * randn(size (噸))'。這些都應該工作 – 2014-10-10 10:33:50

回答

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

這些應該都工作。
另一種微小的錯誤就是你「刪除」您的t==1您必須使用X無論是t(t<=1)或y中定義t(t>=1)或Z的尺寸和T將是不一樣的

+0

我看到更優化的版本,在此先感謝 – 2014-10-10 11:01:05

+0

對不起@datodatuashvili我不明白你的意思。我看到更優化的版本...這只是意味着如何解決它的一種方式...以及爲什麼提前致謝?你仍然有關於這個問題的問題? – 2014-10-10 11:46:57

+0

不,D:D抱歉誤解,當我說我看到更優化的版本時,我的意思是你的代碼,而不是產生白噪聲兩次,在你的代碼中產生一次,這就是我的意思 – 2014-10-10 12:06:20

2

我分離出來的「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」。

+0

請看我的更新版本。感謝您的幫助 – 2014-10-10 10:38:41

+1

您編輯的代碼無誤地工作。還有問題嗎? – danny 2014-10-10 10:43:05

+0

不,不,我已經檢查過,邏輯是正確的 – 2014-10-10 10:44:16