具有洛伦兹曲线拟合的FFT韦尔奇

时间:2018-05-29 15:15:32

标签: python-2.7 signal-processing curve-fitting

所以我有这个洛伦兹曲线适合我的数据,但我注意到奇怪的小东西,我正在寻找答案。也许你可以提供帮助。

这是我的数据,因为你可以看到我带了scaling='density',但当我拿spectrum我的代码做了一些奇怪的事情。

for dataset in [Bxfft]:
    dataset = np.asarray(dataset)
    freqs, psd = signal.welch(dataset, fs=266336/300, window='hamming', nperseg=16192, scaling='density')
    plt.semilogy(freqs[30:-7000], psd[30:-7000]/dataset.size**0, color='r', label='Bx')
    x = freqs[100:-7900]
    y = psd[100:-7900]

这是我的曲线拟合模型:

所以这段代码是第一条黑线(弯曲的一条):

model = Model(lorentzian)
params = model.make_params(amp=6, cen=5, sig=1)
result = model.fit(y, params, x=x)
final_fit = result.best_fit
print(result.fit_report(min_correl=0.25))
plt.plot(x, final_fit, 'k-', linewidth=2)

这适用于第二条黑线(上图弯曲,下图直线):

# 14 Hz
x2 = freqs[200:-7800]
y2 = psd[200:-7800]

model2 = Model(lorentzian)
pars2 = model2.make_params(amp=6, cen=5, sig=1)
pars2['amp'].value = 6
result2 = model2.fit(y2, pars2, x=x2)
final_fit2 = result2.best_fit
print(result2.fit_report(min_correl=0.25))
plt.plot(x2, final_fit2, 'k-', linewidth=2)

查看情节。你有什么想法? 总结我的问题,当你使用density时,你知道为什么一切都很好(上图),为什么当我使用spectrum我的一些数据被破解时? local storage

1 个答案:

答案 0 :(得分:1)

由于幅度不同,可能是由于初始参数值。请注意,spectrumdensity应该有不同的单位(请参阅文档)...您的数据是否过于嘈杂,无法制作简单的窗口fft?