我有一个有趣的问题,需要一些编码帮助。我有一个用于驱动电流源的硬件DAC。通过设置特定的DAC值,我得到一个特定的电流读数。这也取决于总电源电压。
总体目标是在我需要的源中设置所需的电流来计算DAC值。该项目是一个测试设备,因此在校准阶段我读取指定电压下DAC值的所有电流。这一切都很好,在过去我只是做了一个简单的计算得到Y = aX + c并计算了a和c,其中X是所需的电流,Y是DAC的值。最合适的线条足够简单,工作正常。但是我现在需要大大提高准确性。
DAC和电流的曲线基本上是线性的,但在中间范围内,只有很小的驼峰,但足以将精度限制在2%,对于这个版本的硬件我需要0.1%,我可以得到2048个样本点这么好的数据范围。
我希望特征的二阶或三阶多项式表示有助于提高准确性。虽然数学并没有超出我的编码范围!基本上我是一名嵌入式硬件工程师,C#编程花了我一点时间来思考。硬件是嵌入式Atmel处理器,校准编码使用Visual Studio与外部参考仪表和目标硬件进行通信。
基本上,多项式方程将使用校准期间计算的系数位于目标硬件中。
所以任何帮助都将不胜感激! 标记
答案 0 :(得分:2)
还可以尝试一个有理函数,立方除以二次方。渐近线性,可能在中间出现凹凸。
例如,1+x+0.01/(1+x²)
就是那种形式。
通用公式为y = (a*x³+b*x²+c*x+d)/(e*x²+f*x+1)
。要获得系数中线性的形式,请乘以分母得到
0 = a*x³+b*x²+c*x+d - e*x²y-f*xy-y
这给出了一个带行
的系数矩阵[ x³, x², x, 1, -x²*y, -x*y, -y ]
表示每个数据点(x, y)=(x[k], y[k])
。然后将QR分解应用于此矩阵并求解R*v=0
v=[ a, b, c, d, e, f, 1]^T
(显然忽略系统的最后第7行)。