我正在分析两条交叉线的图像(如+符号),我正在提取垂直于其中一条线的像素线(nx1
numpy数组)。这给了我一个浮点值数组(代表颜色),然后我可以绘制。我正在用matplotlib绘制数据,我在180到200之间得到了一堆噪声数据,中间有一个明显的峰值,下降到100左右。
我需要找到这些数据的FWHM。我想我需要首先过滤噪音,所以我使用了高斯滤波器,它平滑了我的数据,但它仍然不是顶部的超平。
我想知道是否有更好的方法来过滤数据。
如何找到此数据的FWHM?
我想尽可能使用numpy,scipy和matplotlib。
这是原始数据:
以下是过滤后的数据:
答案 0 :(得分:0)
我最终没有使用任何过滤器,而是使用了原始数据。 我使用的程序是:
difference = max(arr_y) - min(arr_y)
HM = difference / 2
nearest = (np.abs(arr_y - HM)).argmin()
我不知道(或者认为)这是最好的方法,但是根据比较,它可行并且似乎相当准确。
答案 1 :(得分:0)
您的脚本已经进行了正确的计算。
但是当nearest
和pos_extremum
之间的距离变为nearest_above
和nearest_below
之间的距离时,可以减少距离之间的误差 - 这些位置是极值的一半(最大值) /最小)两边。
import numpy as np
# Example data
arr_x = np.linspace(norm.ppf(0.00001), norm.ppf(0.99999), 10000)
arr_y = norm.pdf(arr_x)
# Effective code
difference = max(arr_y) - min(arr_y)
HM = difference / 2
pos_extremum = arr_y.argmax() # or in your case: arr_y.argmin()
nearest_above = (np.abs(arr_y[pos_extremum:-1] - HM)).argmin()
nearest_below = (np.abs(arr_y[0:pos_extremum] - HM)).argmin()
FWHM = (np.mean(arr_x[nearest_above + pos_extremum]) -
np.mean(arr_x[nearest_below]))
对于此示例,您应该收到FWHM与标准差之间的关系:
FWHM = 2.355
乘以Wikipedia上提到的标准偏差(此处为1)。