我正在尝试计算正弦函数的幅度和频率调制以及相位。
功能描述如下:
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 的值,所以一切正常。
问题是,我的函数的幅度和频率每一步线性增加,所以使用这种解决方案是不可能的。
如果每一步的频率和幅度都增加,有什么方法可以计算这些?我当然不是要求即时解决方案或完整代码,但我真的坚持这一点,在互联网上搜索了一段时间后,决定问我自己的问题。