代码之家  ›  专栏  ›  技术社区  ›  Hiddenguy

洛伦兹曲线拟合的FFT焊接

  •  0
  • Hiddenguy  · 技术社区  · 7 年前

    所以我有一条洛伦兹曲线适合我的数据,但我注意到了一些奇怪的小事情,我正在寻找答案。也许你能帮忙。

    这是我的数据,你可以看到我拿了 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 以及为什么我使用 光谱 我的一些数据被破解了? enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   mikuszefski    7 年前

    由于振幅不同,可能是由于初始参数值。注意 spectrum density 应该有不同的单位(见文档)…你的数据太吵了,不能做一个简单的窗口快速傅立叶变换吗?