我有2个数字伪随机信号。第二个信号是第一个信号的副本,但它在时间上移位以及按时间缩放并且添加了随机噪声。在mathspeak:s1=f(t)
而s2=f(a*t+c) + noise
。
我开始在任意时间t
对这对信号进行采样,因此这个时间与伪随机序列的“开始”的关系是未知的。
当a=1
,我可以使用互相关技术找到c
,但a!=1
抛出一个猴子扳手问题。
在给出这两个信号的情况下,找到a
和c
的最佳方法是什么?现在我很蛮力强迫a
和c
的许多组合,现代计算机上需要几个小时才能找到它们。
我不是在寻找一个现成的代码来解决这个问题。只是一个很好的通用算法。
附: 我可以很好地阅读C和C ++
没有太多关于你的信号的信息(例如,两个信号的长度是否相等,你的时移是循环的,或者当你做时间转移时你使用零填充...)。但我可以提供一般建议。您可以尝试使用一些最小化或拟合数据包/库。我成功使用MPFIT: A MINPACK-1 Least Squares Fitting Library in C完成了与你类似的任务。
您的任务有2个参数 - a和c。您的s2数据集是MPFIT中的“观察数据点”。 f(a*t+c)
- 是一个模特。 MPFIT找到最佳的a和c,它最小化s2和f(a*t+c)
之间差异的最小二乘。此方法的一个缺点是必须设置a和b的初始值,但通常已知良好的初始近似值。