我正在尝试计算正弦函数的幅度和频率调制以及相位。
该功能描述如下:
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 :(得分:0)
如果你有y1和采样频率,你可以估算它们,而不是计算实际参数A1,B1,C1或D1。 您可以使用Cramer Rao下限或最大似然来找到这些参数的相当好的估计,因为您已经知道采样频率和输出y1,估计结果非常接近原始值。