2017-06-03 4 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); 

私は正弦関数を取得している次のよう

機能がdecribedされます。時間とともに振幅と周波数が増加し、時間に依存します。私は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の下限またはMaximum likelihoodを使用すると、サンプリング頻度と推定値がすでにわかっているため、これらのパラメータの推定値をかなり正確に求めることができます。

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

関連する問題