0

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

功能描述如下:

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

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

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

4

1 回答 1

0

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

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

于 2017-06-04T02:57:02.547 回答