1,背景
利用FPGA做数据处理、系统控制时,经常需要做线性插值。如图(1)所示,给点A和B的x,y坐标,需要求A,B中间某一点C的坐标。限定x取整数。
图(1) 插值示意图
根据A,B两点即可求出直线的方程,很快就能够得到C点的坐标为:
y = y1 + (y2-y1) / (x2-x1) * (x-x1)
由公式可以看出,需要计算出y,需要做乘法和除法运算。对于FPGA,除法不能够直接被综合,并且做除法会消耗大量的资源。
本文提出一种基于查找法实现线性插值的算法,不需要利用除法实现线性插值。
2,方法原理
由当D是A,B的中点时,可以求出D的坐标为:
x' = (x1 + x2) / 2;
y '= (y1 + y2) / 2;
由此可知,当知道一段两端点的坐标时候,可以求出中间点的坐标。
因此可以通过不断的查找中间点的方式,找到C点,从而求出C点的坐标。
具体的方法如下:
1,定义左侧端点L(XL,YL),右侧端点H(XH,YH),中间点M(XM,YM);
2, 将A点的坐标赋值给L,B点的坐标赋值给H;
3, 求出中点M的坐标。比较XM和X的大小,如果XM = X,则C点和M点为同一个点,转到步骤6。如果X > XM, 则转到第4步,否则转到第5步骤。
4,将L点的坐标用M点替代, H点不变。回到步骤3。
5,将H点的坐标用M点替代, L点不变。回到步骤3。
6,输出M点的坐标,即为C点的坐标。
由于时间原因,先写背景和方法原理,具体的实现代码、仿真测试和方法的适用条件下次继续写。为了不错过最新的更新,欢迎大家关注公众号与作者交流。
|