【发布时间】:2014-06-27 00:44:33
【问题描述】:
所以我得到了一个信号,我尝试使用两种我认为应该在数值上等效的方法来拟合曲线,但显然不是。
方法一:用最小二乘法显式拟合正弦曲线:
def curve(x, a0, a1, b1, a2, b2):
return a0 + a1*np.cos(x/720*2*math.pi) + b1*np.sin(x/720*2*math.pi) + a2*np.cos(x/720*2*math.pi*2) + b2*np.sin(x/720*2*math.pi*2)
def fit_curve(xdata, ydata):
guess = [10, 0, 0, 0, 0]
params, params_covariance = optimize.curve_fit(curve, xdata, ydata, guess)
return params, params_covariance
方法2:使用内置FFT算法做同样的事情:
f = np.fft.rfft(y,3)
curve = np.fft.irfft(f, width)
我有两个问题。第一个是次要的,FFT 是“超出比例的”,所以我应用一个比例因子mean(y)/mean(curve) 来修复它,这有点小技巧。我不知道为什么会这样。
我遇到的主要问题是我相信这些应该产生几乎相同的结果,但事实并非如此。每次显式拟合都会产生比 FFT 结果更紧密的拟合 - 我的问题是,应该吗?
【问题讨论】:
-
我目前正被这个问题所困扰,到目前为止我收集到的信息告诉我,最小二乘拟合不知何故没有利用傅里叶变换的真正力量,因此不太“强”。我找不到任何文献证明它们是等价的。
标签: python numpy scipy fft curve-fitting