簡體   English   中英

Matlab:如何找到線性增加的頻率和相位的正弦函數的頻率,幅度和相位?

[英]Matlab: How to find frequency, amplitude and phase of a sinusoidal function with linerary increasing frequency and phase?

我正在嘗試計算正弦函數的幅度和頻率調制以及相位。

該函數描述如下:

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的值,所以一切正常。

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

如果頻率和幅度每步都增加,有什么方法可以計算出來? 我當然不是在尋求即時的解決方案或完整的代碼,但我確實堅持了這一點,並且在互聯網上搜索了一段時間后,決定問自己一個問題。

如果您有y1和采樣頻率,則可以估算它們而不是計算實際參數A1,B1,C1或D1。 您可以使用Cramer Rao下界或最大似然來為這些參數找到一個很好的估計,因為您已經知道采樣頻率和輸出y1,估計結果與原始值非常接近。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM