2017-04-02 3 views
0

私は畳み込みの後に現れるアーティファクトの原因を調べようとしています。プロットarround x = -.0016とx = .0021(以下のコードを参照してください)に表示されます。私は "lorentzian"関数(またはlangevin関数の導関数)をコードに定義しています.2つのDiracインパルスは関数 "ditrib"にあります。
私はあなたの助けに感謝します。 ここで をありがとう私のコードです:この畳み込み信号のアーチファクトの原因は何ですか?

import numpy as np 
    import matplotlib.pyplot as plt 

    def Lorentzian(xx): 
     if not hasattr(xx, '__iter__'): 
      xx = [ xx ] 
     res = np.zeros(len(xx)) 
     for i in range(len(xx)): 
      x = xx[i] 
      if np.fabs(x) < 0.1: 
       res[i] = 1./3. - x**2/15. + 2.* x**4/189. - x**6/675. + 2.* x**8/10395. - 1382. * x**10/58046625. + 4. * x**12/1403325. 
      else: 
       res[i] = (1./x**2 - 1./np.sinh(x)**2) 
     return res 


    amp = 18e-3 
    a = 1/.61e3 
    b = 5.5 
    t_min = 0 
    dt = 1/5e6 
    t_max = (10772) * dt 
    t = np.arange(t_min,t_max,dt) 
    x_min = -amp/b 
    x_max = amp/b 
    dx = dt*(x_min-x_max)/(t_min-t_max) 
    x = np.arange(x_min,x_max,dx) 

    func1 = lambda x : Lorentzian(b*(x/a)) 

    def distrib(x): 
     res = np.zeros(np.size(x)) 
     res[int(np.floor(np.size(x)/3))] = 1 
     res[int(3*np.floor(np.size(x)/4))] = 3 
     return res 
    func2 = lambda x,xs : np.convolve(distrib(x), func1(xs), 'same') 

    plt.plot(x, func2(x,x)) 
    plt.xlabel('x (m)') 
    plt.ylabel('normalized signal') 

答えて

0

はfunc1の

func1(x)[0], func1(x)[-1] 
Out[7]: (0.0082945964013920719, 0.008297677313152443) 

の "台座" を削除してみてくださいちょうど

func2 = lambda x,xs : np.convolve(distrib(x), func1(xs)-func1(x)[0], 'same') 

を減算によって、滑らかな畳み込み曲線に

を与えますあなたが望む結果に戻るには、それをafデラックの合計で重み付けされた合計:

+0

こんにちは。ありがとう、あなたの助けをありがとう、私はこれを試し、あなたに戻って取得します。 – MaximeMusterFrau

+0

ありがとう、それは働いた!なぜあなたはそれをやるべきなのか私に説明してもらえますか?前もって感謝します。 – MaximeMusterFrau

+0

Dirac Impulseを定数で導くと、ステップが得られます。理想的には、「有限範囲のペデスタルをハックするのではなく、すべての「lorentzian」を使用しますが、+/-無限に定義されているからです。 – f5r5e5d

関連する問題