所以我试图找出如何使卷积和解卷积正常工作。这是我的代码:
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()
当我对单个点(如b = [2])进行卷积时,而不是数组,它可以正常工作。但是当我试图超过1点或数组时,它只是不起作用。我收到错误,例如:
"ValueError: x and y must have same first dimension"
如果我改为使用:
,我会收到同样的错误a = np.arange(1, 50, 1)
b = np.array([1,2,1])
即使在这种情况下,我知道他们都是从1开始。如果我做同样的事情,但是
b = np.array([1,2,1])
我收到错误:
"ValueError: BUG: filter coefficient a[0] == 0 not supported yet"
任何人都有任何关于我做错的提示吗?
答案 0 :(得分: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]
(如果你不想这样做,那么使用mode='same'
的关键字参数convolve
来接收一个向量与输入具有相同的长度,但是这会导致解卷积输出长度出现问题。)signal.deconvolve(aconvolved, b)[0]