2014-07-09 3 views
2

그래서 제대로 작동하려면 convolve 및 deconvolve를 얻는 방법을 알아 내려고합니다. 나는 "a"는 하나의 점에 대해 (나 같은 = [2]), 배열 대신, 그냥 잘 작동 컨 볼브 때두 개의 배열을 convolve 및 deconvolve

import numpy as np 
from scipy import interpolate 
from scipy import signal 
import matplotlib.pyplot as plt 

a = np.arange(0, 50, 1) 
b = np.array([1,2,1]) 

aconvolved = signal.convolve(np.sin(a), b) 
adeconvolved = signal.deconvolve(aconvolved, b) 

plt.figure() 
plt.plot(a, np.sin(a), 'g') 
plt.plot(a, aconvolved[0], 'r') 
plt.plot(a, adeconvolved[0], 'b') 
plt.draw() 

: 여기에 내 코드입니다. 그러나 1 포인트 이상 또는 배열에 대해 시도 할 때 작동하지 않습니다.

a = np.arange(1, 50, 1) 
b = np.array([1,2,1]) 

이 경우에도 불구하고, 나는 동일한 기능을 수행 할 경우 그들은 모두 1부터 시작합니까 알고 내가 대신 사용하는 경우 나는이 같은 오류가

"ValueError: x and y must have same first dimension" 

: I는 다음과 같은 오류가 발생

"ValueError: BUG: filter coefficient a[0] == 0 not supported yet" 
: 일이 있지만,

b = np.array([1,2,1]) 

와 나는의 오류

누구나 내가 잘못하고있는 것에 대한 조언이 있습니까?

답변

2

오류가 발생한다고 생각하지 않습니다. 이 작품 :

import numpy as np 
from scipy import interpolate 
from scipy import signal 
import matplotlib.pyplot as plt 

a = np.arange(0, 50, 1) 
b = np.array([1,2,1]) 

aconvolved = signal.convolve(np.sin(a), b) 
adeconvolved = signal.deconvolve(aconvolved, b)[0] 

plt.figure() 
plt.plot(a, np.sin(a), 'g') 
plt.plot(a, aconvolved[1:-1], 'r') 
plt.plot(a, adeconvolved, 'b') 
plt.draw() 

의 차이 :

  • 회선이 끝까지 몇 가지 추가 샘플을 만들고, 따라서 aconvolved[1:-1] (이 작업을 수행하지 않으려면, 다음 convolve에 대한 키워드 인수 mode='same'를 사용 입력과 길이가 같지만 deconvolution 출력 길이에 문제가있는 벡터를 수신합니다.
  • 디컨 볼 루션 그래서 나는 내가 잘못하고 있었는지의 작은 볼 작동합니까 따라서 signal.deconvolve(aconvolved, b)[0]
+0

최고 실제 결과는 첫 번째 부분 인 튜플을 반환합니다. 여전히 더 많은 해상도를 위해 동일한 예제를 변경하려고하면 x와 y의 첫 번째 오류가 동일하고 다른 첫 번째 차원이 있습니다. 사용 : "a = np.arange (0, 50, .5)"및 "b = np.array ([1,1.5,2, 1.5, 1]) – Kyle

+0

길이 교정은 필터의 길이에 따라 다릅니다. 필터 길이가 5가되면 양 끝에서 두 개의 샘플을 제거해야합니다 :'aconvolved [2 : -2]'. 출력 길이는 (이 모드에서) <입력 길이> + <필터 길이> - 1이며,이 경우 50 + 5-1 = 54입니다. – DrV