我试图以捕捉原始图的大部分特征的方式对图进行反卷积。当我使用以下代码时,有两个主要问题:
def Gaussian(x, mean, sd):
Gaussian = []
for i in range(x.size):
norm += [1.0/(sd*np.sqrt(2*np.pi))*np.exp(-(x[i] - mean)**2/(2*sd**2))]
return np.array(norm)
x_value = np.arange(100)
fun = lambda x: np.exp(-(0.1*x-6)**2+4) + np.exp(-(0.1*x-4.75)**2+2)
y_value1 = fun(x_value) + np.random.normal(0,1,len(x_value))*3
m, dm, sd1, sd2, h1, h2 = [60, 10, 1, 1, 5, 2]
p = [m, dm, sd1, sd2, h1, h2] # Initial guesses for leastsq
y_init = norm(x_value, m, sd1)*h1 + norm(x_value, m + dm, sd2)*h2 # For final comparison plot
def res(p, y, x):
m, dm, sd1, sd2, h1, h2 = k
m1 = m
m2 = m1 + dm
y_fit = Gaussian(x, m1, sd1) * h1 + Gaussian(x, m2, sd2) * h2
err = y - y_fit
return err
ls = least_squares(res, p, args = (y_value1, x_value))
第一个主要问题是它提供了多个解决方案。下面显示的真实数据实际上非常可靠。很明显,它将有两个卷积图。然而,在我们有更一般的数据形状的情况下,结果开始变得非常不同。我不认为去卷积图可以解释原始图的固有特征。
第二个问题是我必须手动设置峰值的数量。我想要一些能自动但最佳地确定峰值的东西。你们碰巧知道做这件事的任何功能吗?
还是我完全错过了一些重要的事情?我找不到解决这些问题的答案。
==================================================== =========================== 编辑:我从这里导入 peakdet https://gist.github.com/antiface/7177333 并且它有效对于上面显示的图表。但是,出现了另一个问题,它没有检测到如下图的曲线拐点:
我正在尝试从 peakdet 稍微修改代码以检测这些点。请帮忙!

