Matlab:如何找到具有线性增加频率和相位的正弦函数的频率,幅度和相位?

时间:2017-06-03 15:10:09

标签: matlab frequency sin phase amplitude

我正在尝试计算正弦函数的幅度和频率调制以及相位。

该功能描述如下:

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的值,所以一切都很好。

问题是,我的函数的幅度和频率在每一步都会增加,所以使用这种解决方案是不可能的。

如果频率和振幅在每一步都增加,有没有办法计算出来?我当然不是要求立即解决方案或完整的代码,但我真的坚持这一点,在互联网上搜索了很长一段时间后,我决定提出自己的问题。

1 个答案:

答案 0 :(得分:0)

如果你有y1和采样频率,你可以估算它们,而不是计算实际参数A1,B1,C1或D1。 您可以使用Cramer Rao下限或最大似然来找到这些参数的相当好的估计,因为您已经知道采样频率和输出y1,估计结果非常接近原始值。

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