2017-04-02 15 views
0

컨볼 루션 이후에 나타나는 아티팩트의 원인을 찾으려고 시도하고 있는데, arround x = -.0016 및 x = .0021 줄거리에서 볼 수 있습니다 (아래 코드 참조). 나는 코드에서 정의한 "lorentzian"함수 (또는 langevin 함수의 파생어)를 "ditrib"함수에 2 개의 Dirac 임펄스와 함께 convoluting합니다.
귀하의 도움에 감사드립니다.이 회선 신호의 인공물의 원인은 무엇입니까?

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