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点的坐标。 由于时间原因,先写背景和方法原理,具体的实现代码、仿真测试和方法的适用条件下次继续写。为了不错过最新的更新,欢迎大家关注公众号与作者交流。 |
2147 浏览 2 评论
1317 浏览 0 评论
1420 浏览 0 评论
598 浏览 0 评论
AG32软件包SDK更新:加入新例程(可实现至少15个UART串口)
1268 浏览 0 评论
6675 浏览 115 评论
2713 浏览 58 评论