我必须校准一个距离测量仪器,它提供电容作为输出,我可以使用numpy polyfit
找到一个关系并应用它获得距离。但我需要包括0.0008 m的检测限,因为它是仪器的分辨率。
我的数据是:
cal_distance = [.1 , .4 , 1, 1.5, 2, 3]
cal_capacitance = [1971, 2336, 3083, 3720, 4335, 5604]
raw_data = [3044,3040,3039,3036,3033]
我需要将距离值设置为.1008,。4008,表示仪器检测的极限。
我使用了以下代码:
coeffs = np.polyfit(cal_capacitance, cal_distance, 1)
new_distance = []
for i in raw_data:
d = i*coeffs[0] + coeffs[1]
new_distance.append(d)
我有一个csv文件并且实际上使用带有日期时间索引的pandas数据帧来存储原始数据,但为了简单起见,我在这里给出了一个列表。 我需要在校准过程中包括检测限,以使其正确。
答案 0 :(得分:0)
检测限是测量的准确性(您可以解决的最小'步骤') polyfit为您提供关系最佳拟合函数f的“模型” 距离= f(电容) 你使用1作为多项式的次数,所以你基本上拟合一条线。
所以,首先你需要调查拟合的准确性:这是通过使用第三个参数full = True返回的。 (有关详细信息,请参阅文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html) 你会得到合适的剩余部分。 它实际上比LOD小吗?否则你的限制因素是拟合 准确性。在您的特定情况下,它看起来像0.00017021,所以确实低于0.0008 LOD。
其次,为什么'加'LOD到阅读?你的阅读就是阅读。然后LOD是距离实际可能在的+/-范围。将它添加到最终结果似乎没有意义。 您应该将最终值报告为“新距离”+/- LOD。
您的原始数据是否所有测量距离相同?如果是这样,你可以看到使用拟合的这个测量的标准偏差是0.0029680362423331122,(numpy.std(new_distance))和范围是0.0087759439302268483,这是LOD的10倍,所以这里你的限制因素实际上似乎是测量条件。
答案 1 :(得分:0)
不要打败死马,但LOD和精确度是两个完全不同的东西。 LOD通常定义为仪器噪声标准偏差的三倍,这相当于仪器可以检测到的最小电容(或距离,这与电容有关)。即任何小于该值的东西都等于零(或多或少)。但是,您的精度是您的仪器可以检测到的电容的最小变化,可能会或可能不会低于LOD。这些术语(除准确性外)是混淆的常见原因。虽然当你说LOD(并且其他人可能都能理解你真的意味着精确度)时你可能知道你在谈论什么,但使用正确的符号是有益的。只是一个想法...