scipy.signal.deconvolve()的输出似乎不是预期的结果

时间:2017-02-15 00:27:53

标签: python scipy signals

我遇到了scipy.signal.deconvolve()的问题 我尝试了Understanding scipy deconvolve的答案但是没有用。 这是我的代码:

n = 3

s = 240
p = np.linspace(-s*n, s*n, s*n*2)
g = mlab.normpdf(p, 0, s)
f1 = g/max(g)

s = 1920
p = np.linspace(-s*n, s*n, s*n*2)
g = mlab.normpdf(p, 0, s)
g1 = g/max(g)

让信号像盒子一样

signal = g1

并使用高斯滤波器

滤波器应短于信号

过滤器应该比任何地方都大得多

gauss = f1
print gauss.min()  # = 0.013 >> 0

计算卷积(np.convolve和scipy.signal.convolve相同)

keywordargument mode =“same”确保卷积跨越相同的

形状作为输入数组。

filtered = scipy.signal.convolve(signal,gauss,mode ='same')

filtered = np.convolve(signal, gauss, mode='same') 

deconv,  _ = deconvolve( filtered, gauss )

deconvolution有n = len(信号) - len(高斯)+ 1分

n = len(signal)-len(gauss)+1

所以我们需要通过

扩展它
s = (len(signal)-n)/2
双方都是

deconv_res = np.zeros(len(signal))
deconv_res[s:len(signal)-s-1] = deconv
deconv = deconv_res

现在deconv包含deconvolution

扩展到原始形状(用零填充)

#### Plot #### 
fig , ax = plt.subplots(nrows=4, figsize=(6,7))

ax[0].plot(signal, color="#907700", label="original")
ax[1].plot(gauss, color="#68934e", label="gauss filter")

我们需要除以滤波器窗口的总和,以使卷积归一化为1

ax[2].plot(filtered/np.sum(gauss), color="#325cab", label="convoluted")
ax[3].plot(deconv, color="#ab4232", label="deconvoluted")
# ax[3].set_yscale('log')

for i in range(len(ax)):
    ax[i].set_xlim([0, len(signal)])
    ax[i].legend(loc=1, fontsize=11)
    if i != len(ax)-1 :
        ax[i].set_xticklabels([])

plt.show()    

enter image description here

解卷积曲线假设与原始高斯曲线相同。

0 个答案:

没有答案