2017-06-03 191 views
0

我正在嘗試計算正弦函數的幅度和頻率調製以及相位。Matlab:如何查找具有線性增加頻率和相位的正弦函數的頻率,幅度和相位?

fs = 128; 
x1 = 1/fs:1/fs:1; 
A1 = 50*x1; 
B1 = 10*x1; 
C1 = 1; 
D1 = 1; 
y1 = D1 + A1.*sin(C1 + B1.*x1); 

因此,我已獲得的正弦函數:

功能如下描述下。它的幅度和頻率隨時間而增加,並且取決於時間。我只需要使用128個採樣,因此採樣頻率變爲128Hz。假設我不知道A1,B1,C1或D1參數,並且只知道「y1」的採樣頻率和結果,是否可以計算所有這些參數?

我想要的是能夠確定任何給定時間點的頻率,振幅和函數的偏移。

我知道它是可以計算的所有那些在幾個方面穩定參數的函數,我親自試過這樣:

zastep2 = 1 + 40.*sin(1 + 10.*x1); 

x = x1'; 
y = zastep2'; 

calc = @(d) [ones(size(x)),sin(d*x),cos(d*x)]\y; 
calc2 = @(d) sum((y-[ones(size(x)),sin(d*x),cos(d*x)]*calc(d)).^2); 

Bw = fminbnd(calc2,1,50) 
abb = calc(Bw); 
Dw = abb(1) 
Aw = norm(abb([2 3])) 
Cw = acos(abb(2)/Aw) 

「zastep2」用於模擬與不變參數的函數。結果,我得到Dw = 1,Cw = 1,Aw = 40和Bw = 10的值,所以一切都很好。

問題是,我的功能在每一步的幅度和頻率線性增加,所以使用這種解決方案是不可能的。

如果在每個步驟中頻率和振幅都增加,有什麼方法可以計算出來嗎?我當然不會要求即時的解決方案或完整的代碼,但是我真的很堅持這一點,在互聯網上搜索了很長時間之後,我決定提出自己的問題。

回答

0

除了計算實際參數A1,B1,C1或D1,如果您有y1和採樣頻率,您可以估算它們。 您可以使用Cramer Rao下限或最大似然來爲這些參數找到一個相當好的估計值,因爲您已經知道採樣頻率和輸出y1,估計結果非常接近原始值。

https://en.wikipedia.org/wiki/Estimation_theory