分段插值实现多字节快速算法
2013-08-08高俊勇王明明
高俊勇,王明明
(空军航空大学基础部,吉林长春 130022)
目前,多种多样的测控系统广泛应用于各行各业中,尤其是时效性要求比较高的实时控制、通信、飞行、制导等系统,数据处理和运算的速度和时间对于系统的技术性能更加重要和关键。各种从简单到复杂的数据处理和运算主要是使用传统的基于多字节乘除法的计算方法,这种计算方法主要采用重复循环方式实现多字节运算,字节越多计算所需的时间就越长,具有效率低、速度慢的特点,严重制约了系统的性能[1]。本文探讨一种针对特定要求的新的高速计算方法,可以大幅度提高特定运算的计算速度,从而提高实时测控系统的性能。
1 系统项目概况及数学模型
本文以MCS51-89C2051 CPU、LM331压频转换和4位LED数码管等器件构成的能实现监测压力、温度等模拟量的仪表为例,说明分段插值实现多字节快速运算的算法实现过程。
在仪表的模拟量输入接口,需要将输入的温度(量程为10℃~50℃)通过温度变送器转变为电流信号并输送至仪表模拟接口,在仪表内部通过LM331压频变换电路将对应的模拟电流信号转换成数字频率信号以实现A/D变换。上述对应关系如下:
图1 计数值与温度值的线性关系
设x为对应温度输入电流和LM331计数值,y为计算出的实际温度值,始点(x0,y0)表示10℃对应的计数0664;终点(xe,ye)表示50℃对应的计数6512。计数值与温度值是线性关系如图1所示。
所以实际的温度数据为:
在该计算公式中,参与运算的数据都大于255,需用两个字节来表示,也就是对于单字节的89C2051 CPU需要调用双字节的运算子程序进行实时计算。
2 传统算法
计算框图及双字节除法框图如图2和图3所示:
图2 计算框图
图3 双字节除法框图
传统算法需调用双字节乘除法子程序[3]。仅16位的双字节除法子程序CPU就要执行16次循环。每次计算需要机器周期998个,运行时间为988us。
3 分段插值查表算法
采用传统算法工作效率低的主要原因是,计算时需要调用采用多次循环的乘除法子程序,字节数越多则计算速度越慢[3]。因此,分段插值法的设计思想是,在计算中回避直接对多字节进行乘除运算,预先将多字节的乘除运算处理形成数据表[4]。高字节数据通过查表得到计算结果和差值,低字节数据通过进行简单的单字节乘除运算得到,最后将两部分合成得出最终计算结果。其计算思路过程如图4所示。
图4 计算思路过程
图5 线性关系图
具体实现步骤如下:
步骤一:制作数据表
在计数的量值范围内预先进行多组典型抽样,然后根据公式计算结果并形成数据表。
(1)选定插值节点(本系统以计数值256的倍数为各节点);(2)对各节点的计数值xn按公式(1.1)计算出对应的温度值yn;(3)计算每两个节点间对应温度值yn和yn+1的差值。
表1 插值数据表
步骤二:实际数据处理时,取实际计数净值的高位字节,通过查表得出对应的温度值和差值(如:计数净值2770,高位字节是10,查表计算结果为275,差值为18);再取计数净值的低位字节按下面公式计算(计数净值2770的低位字节为2770-2560)。
步骤三:根据公式1.2进行计算
4 结论
实际编程运行,针对上述具体问题计算,两种算法实例对比数据如表2所示。
表6 两种算法实例对比数据
综上可知,分段插值查表算法无论是指令条数,还是运算时间与传统算法相比都减少很多,它较好地解决了计算机的多字节复杂运算计算速度慢的问题,可以大幅度提高计算机在实时测控系统中的运算速度,提高测控系统的性能。尤其是对特定的嵌入式专项测控系统效果更佳。本算法的不足之处主要是目前只适用对速度有特殊要求的固定运算。
[1]吕勇,谢长生,高三红.实时测控计算机应用系统的可靠性保障技术[J].计算机应用,2003(6):101-103.
[2]J.M.奥特加.数值分析[M].北京:高等教育出版社,1984.
[3]张越.分段插值在嵌入式系统中的应用[J].南京广播电视大学期刊,2010.
[4]李庆扬,王能超,易大义.数值分析[M].4版.北京:清华大学出版社,2001.