CN117609672A - 一种离散数据点拟合曲线改进方法及*** - Google Patents
一种离散数据点拟合曲线改进方法及*** Download PDFInfo
- Publication number
- CN117609672A CN117609672A CN202311728094.XA CN202311728094A CN117609672A CN 117609672 A CN117609672 A CN 117609672A CN 202311728094 A CN202311728094 A CN 202311728094A CN 117609672 A CN117609672 A CN 117609672A
- Authority
- CN
- China
- Prior art keywords
- data
- curve
- equations
- matrix
- parallel operation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000006872 improvement Effects 0.000 title claims abstract description 14
- 230000008569 process Effects 0.000 claims abstract description 31
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 20
- 238000013139 quantization Methods 0.000 claims abstract description 17
- 239000011159 matrix material Substances 0.000 claims description 48
- 239000000872 buffer Substances 0.000 claims description 29
- 238000006243 chemical reaction Methods 0.000 claims description 24
- 238000004364 calculation method Methods 0.000 claims description 20
- 125000004122 cyclic group Chemical group 0.000 claims description 6
- 230000009977 dual effect Effects 0.000 claims description 2
- 230000009466 transformation Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 11
- 238000004088 simulation Methods 0.000 description 7
- 230000000903 blocking effect Effects 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000001228 spectrum Methods 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000005452 bending Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/11—Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
- G06F7/78—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Data Mining & Analysis (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Operations Research (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种离散数据点拟合曲线改进方法及***,涉及信息技术领域,通过对三次样条插值算法的变换、化简和量化等操作,并运用数据流分拆、状态机迭代、并行运算和流水线处理等方法,得到了适合在fpga上运用的三次样条插值算法的实现方法和运算流程,解决了使用硬件描述语言实现该算法的代码编写难度大的问题;本发明仅使用fpga本身的逻辑资源和存储资源,无需其他处理器参与运算,无需外接扩展存储器;本发明不会对输入、输出和运算过程形成阻塞,插值运算的时延可预测,满足对数据流进行三次样条插值实时运算的需求。
Description
技术领域
本发明涉及信息技术领域,具体的是一种离散数据点拟合曲线改进方法及***。
背景技术
数学中样条(Spline)一词来源于它的直观几何背景:早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在形值点上,在其它地方让它自由弯曲,然后沿木条画下曲线,称为样条曲线。三次样条曲线实际上是一条能够用三次多项式函数组表示,并且能够通过所有已知形值点的光滑曲线。三次样条插值(Cubic Spline Interpolation)简称Spline插值,实际上是根据一系列已知的形值点,求出相对应的三次样条曲线函数组,进而计算出曲线上其他未知点(插值点)的过程。Spline插值算法既可以获得一条平滑的曲线,又可以避免龙格现象,是一种准确性高、拟合性好、收敛度高、应用广泛的重要拟合方法
FPGA(Field-Programmable GateArray),即现场可编程门阵列,它最初是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,它的出现既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。在FPGA设计实现过程中(FPGA设计使用一种硬件描述语言如Verilog或VHDL等,是可以用于芯片设计的一种计算机语言),涉及的设计流程有代码编写、代码综合(代码综合是通过电子设计自动化软件把硬件描述语言代码转化成电路的一个流程)、布局布线等步骤,常见的常数插值算法和线性插值算法比较容易实现,但是由于硬件描述语言规则和软件综合规则,当需要在FPGA中设计一条曲线时,绝大多数数学领域的算法公式都无法简单、直接且合适地应用于FPGA中。
目前,现有的仪器仪表中应用Spline插值算法,主要是在基于通用处理器(如PC机、服务器等)或嵌入式处理器(如ARM、DSP等)的软件中,使用高级语言编程实现和运用。上述处理器实现方案在运算过程中需要经历任务调度、指令存取、数据存取、数据运算和数据搬移等过程,难以在短时间(几个时钟周期)内完成插值点的运算,且运算完成时间是不确定的。并且,Spline插值算法输出结果(即插值点)的数据量,与输入数据(即形值点)的数据量的成倍数关系,当插值倍数较大且形值点以较高的数据流量输入时,现有实现方案必然出现阻塞现象。
因此,现有的拟合曲线实现方案在应用Spline插值算法计算的过程中存在计算性能和速度受限、数据吞吐能力难以提升、运算过程中存在阻塞、运算结果输出耗时不确定和运算实时性差的问题,从而导致在拟合曲线方法的运用过程中出现一定的问题。
发明内容
为解决上述背景技术中提到的不足,本发明的目的在于提供一种离散数据点拟合曲线改进方法及***。本发明运算过程中以时钟节拍驱动fpga内的逻辑电路直接对数据进行运算,以流水线无阻塞的方式完成运算,流水线各级运算所占用的时钟周期数是确定且可预测的,用fpga内的存储资源作为各级运算之间的缓冲其存取所占用的时钟周期数是确定且可预测的。
本发明的目的可以通过以下技术方案实现:一种离散数据点拟合曲线改进方法,方法包括以下步骤:
获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组,其中ai、bi、ci和di为第一预设参数,Ai、Bi、Ci和Di为第二预设参数;
设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组,其中A′i、B′i、C′i和D′i为第三预设参数;
利用基于FPGA的电子设备对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组和由A′i、B′i、C′i、D′i和mult构成的方程组进行求解,得到各个插值点的坐标值。
优选地,所述基于FPGA的运算采用无阻塞的多级流水线方式,从输入数据到输出结果的时延固定且可预测,基于fpga的所有量化因子参与的运算过程使用移位操作代替乘法和除法运算。
优选地,所述基于FPGA的运算过程中仅使用fpga本身的逻辑资源和存储资源。
优选地,所述基于FPGA对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组进行求解的过程包括以下步骤:
由输入形值点数据流获得Yi=yi-1,用流水线方式依次分别迭代计算出Pi、Qi、Ri和R′i;
运算过程从此处分成k路并行运算通道进行处理;将Yi、Pi和R′i拼接在一起形成一帧数据,并以帧为单位用轮询方式依次送入k路并行运算通道的输入fifo缓冲区中;
在当前并行运算通道中,从并行运算通道的输入fifo缓冲区中读取由Yi、Pi和R′i组成的一帧数据,将Yi、Pi和R′i组成的一帧数据输入本通道流水线的第一级状态机进行运算;
在当前并行运算通道的第一级状态机中,按照i从1到n的顺序循环迭代计算出H′i的值,并将Yi、Pi和R′i组成的一帧数据写入第一级乒乓缓存中;
从当前并行运算通道的第一级乒乓缓存中读取由Yi、Pi和H′i组成的一帧数据,输入至本通道流水线的第二级状态机进行运算;
在当前并行运算通道第二级状态机中,按照i从n到1的倒序循环迭代计算出M′i的值,并将Yi、Pi和M′i组成的一帧数据写入第二级乒乓缓存中;
从当前并行运算通道的第二级乒乓缓存中读取由Yi、Pi和M′i组成的一帧数据,送入本通道流水线的第三级状态机进行运算;
在当前并行运算通道第三级状态机中,按照i从n到1的倒序循环迭代计算出P′i、B′i、C′i和D′i的值,并将Yi、B′i、C′i和D′i组成的一帧数据,写入第三级乒乓缓存中;
运算过程从此处合并成一路进行处理;采用轮询的方式,依次从各并行运算通道的第三级乒乓缓存中,读取由Yi、B′i、C′i和D′i组成的数据帧,送入fifo缓冲区中;
从fifo缓冲区中读取由Yi、B′i、C′i和D′i组成的数据帧,并进一步获得A′i的值,最终得出A′i、B′i、C′i和D′i。
优选地,所述循环迭代运算占用的时钟周期数不大于k。
优选地,所述得出A′i、B′i、C′i和D′i后,代入由A′i、B′i、C′i、D′i和mult构成的方程组得到方程组中所有曲线段方程S(x)的完整三次多项式,再将各插值点的x坐标值代入对应的曲线段方程,就计算出对应的插值点的y坐标值,从而完成插值计算。
优选地,所述并行运算通道第一级、第二级和第三级乒乓缓存,均由双端口RAM分成两块存储区构成,向其中一块存储区写入数据时,从另一块存储区读出数据,读写是交替互斥的;双端口RAM的一个端口用于写入,另一个端口用于读出。
优选地,所述三次样条插值算法曲线方程组Si(x)中的每一条曲线段S(x)上都有一组插值点表示为(xj,yj);则n条曲线段对应n组插值点(xj,yj);
按照i从1到n的顺序在方程组Si(x)中选择对应的曲线段S(x),代入一组插值点的xj值,采用并行运算方式同时计算出一组对应的yj值,进行n次并行计算就完成整条三次样条曲线的插值计算。
第二方面,为了达到上述目的,本发明公开了一种离散数据点拟合曲线改进***,包括:
一次转换模块:用于获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组;
二次转换模块:用于设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组;
方程求解模块:用于利用基于FPGA对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组和由A′i、B′i、C′i、D′i和mult构成的曲线方程组进行求解,得到各个插值点的坐标值。
在本发明的另一方面,为了达到上述目的,公开了一种设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当一个或多个所述程序被一个或多个所述处理器执行,使得一个或多个所述处理器实现如上所述的一种离散数据点拟合曲线改进方法。
本发明的有益效果:
本发明基于fpga平台实现三次样条插值算法,其运算过程实时性强;运算过程采用流水线方式不会发生阻塞;其数据输入到结果输出的延时固定且可预测;可以采用增加并行运算通道的方法提高数据吞吐能力;计算性能和速度仅受fpga片上资源限制。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图;
图1是本发明方法流程示意图;
图2是本发明输入形值点数据帧的格式;
图3是本发明的fpga总体运算过程示意图;
图4是本发明fpga并行运算通道运算过程示意图;
图5是本发明fpga逻辑主流程图;
图6是本发明fpga并行运算通道的子流程图;
图7是本发明fpga插值点求解的子流程图;
图8是本发明各流程图的关系图;
图9是本发明fpga并行运算通道输入缓冲区数据拼接示意图;
图10是本发明fpga并行运算通道第一级输出数据拼接示意图;
图11是本发明fpga并行运算通道第二级输出数据拼接示意图;
图12是本发明fpga并行运算通道第三级输出数据拼接示意图;
图13是本发明fpga插值结果输出数据拼接示意图;
图14是matlab仿真运算结果图;
图15是fpga插值结果图;
图16是matlab仿真结果与fpga插值结果对比图;
图17是算法公式量化前仿真结果与fpga插值结果对比图;
图18是本实施例部署的***示意图;
图19是本发明***结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
如图1所示,一种离散数据点拟合曲线改进方法,fpga逻辑部分采用了分级流水线运算的方法,其总体运算结构如图3所示,逻辑部分主流程图如图5所示,图6和图7为图5的子流程图,图8描述了各流程图之间的关系。参数方程组求解过程中的部分运算,采用了k路并行运算通道进行分级流水线运算的方法,其内部的运算结构如图4所示,流程图如图6所示。k的取值应大于等于并行运算通道每一级流水线运算需要占用的最大时钟周期数。本发明中k的取值大于等于4。
方法包括以下步骤:
获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组,其中ai、bi、ci和di为第一预设参数,Ai、Bi、Ci和Di为第二预设参数;
在本实施例中三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵的构造过程:
假设有以下n+1个形值点组成一帧输入数据流,其结构如下所示:
三次样条曲线通过这些形值点并被它们分成n个区间。每个区间可表示为[xi,xi+1](i=0,1,…,n),其中两个端点是x0=a和xn=b。各区间内的曲线段均可表示为一个多项式方程。那么,整条三次样条曲线可表示为一个函数方程组,且函数方程组满足以下条件:
条件一:在每个区间[xi,xi+1](i=0,1,…,n)上的曲线段方程S(x)都是一个三次多项式,所有曲线段方程S(x)构成方程组Si(x),其中i=0,1,...,(n-1);
条件二:曲线通过所有形值点且满足插值条件,即在形值点xi处有S(xi)=yi(i=0,1,…,n);除了两端形值点外,在其他形值点处有Si(xi+1)=yi+1和Si+1(xi+1)=yi+1;
条件三:三次多项式S(x)及其导数S′(x)和二阶导数S″(x)是连续的,即曲线是光滑的。
由上述条件可推知以下方程:
设曲线段上插值点坐标x到形值点坐标xi的距离为(x-xi),则三次样条曲线函数方程组可构造成如下形式:
Si(x)=yi=ai+bi(x-xi)+ci(x-xi)2+di(x-xi)3,(i=0,1,2,…,n)
三次样条曲线函数方程组的一阶导数可表示为:
S′i(x)=bi+2ci(x-xi)+3di(x-xi)2,(i=0,1,2,…,n)
三次样条曲线函数方程组的二阶导数可表示为:
S″i(x)=2ci+6di(x-xi),(i=0,1,2,…,n)
设形值点处有mi=S″i(xi),则有mi=S″i(xi)=2ci(i=0,1,2,…,n)。
设形值点间距,即步长为:hi=xi+1-xi(i=0,1,2,…,n);
可进一步推导出三次样条曲线的参数方程组如下所示(其数学推导过程可方便的查知,本文不做详细阐述):
三次样条曲线函数方程组常见的边界约束条件有如下三种:
边界约束条件一:自由边界
在自由边界约束条件下,三次样条曲线首尾两端没有受到任何让它们弯曲的力,即S″0(x0)=0=S″n(xn),则有m0=0,mn=0。
根据上述内容,我们可构造以mi(i=0,1,2,…,n)为未知数的矩阵如下:
边界约束条件二:固定边界
在固定边界约束条件下,三次样条曲线首尾两端的一阶导数分别被指定为A和B,即S′0(x0)=A,S′n-1(xn)=B,则有
根据上述内容,我们可构造以mi(i=0,1,2,…,n)为未知数的矩阵如下:
边界约束条件三:非扭结边界(Not-A-Knot)
在非扭结边界约束条件下,曲线方程组的三次微分有如下关系:
S″′0(x0)=S″′1(x1),S″′n-2(xn-1)=S″′n-1(xn),则有
-h1m0+(h0+h1)m1-h0m2=0,
-hn-1mn-2+(hn-1+hn-2)mn-1-hn-2mn=0。
综上所述,我们可构造以mi(i=0,1,2,…,n)为未知数的矩阵如下:
参数方程组和矩阵的变换过程:
不同边界约束条件下以mi为未知数的矩阵仅首尾两行不同,其求解过程相似。步长hi=xi+1-xi(i=0,1,2,…,n)为可提前计算获得的已知量,可以直接代入方程或矩阵参与运算。
下文以自由边界约束条件下,以mi为未知数的矩阵在等步长情况下的求解为例进行说明:
在步长相等的情况下,有步长h=hi(i=0,1,2,…,n)。则以mi为未知数的矩阵,其左侧变换如下:
令Pi=yi-yi-1(i=1,2,…,n),Qi=Pi-Pi-1(i=2,3,…,n),则以mi为未知数的矩阵,其右侧矩阵变化如下:
令Mi=mi-1,(i=1,2,3,…,n+1),则以mi为未知数的矩阵可变换为以Mi为未知数的矩阵:
令Yi=yi-1,Ai=ai-1,Bi=bi-1,Ci=ci-1,Di=di-1,(i=1,2,3,…,n+1),并将h=hi,Pi=yi-yi-1代入三次样条曲线的参数方程组:
则有
设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组,其中A′i、B′i、C′i和D′i为第三预设参数;
曲线矩阵的求解的过程:已知三对角矩阵求解公式如下所示:
/>
xi=d′i-c′ixi+1,(i=(n-1),(n-2),…,1)
使用三对角矩阵公式求解以Mi为未知数的矩阵,则有:
xi=Mi(i=1,2,3,…,n+1),
令gi=c′i(i=1,2,3,…,n),可得:
即
令Hi=d′i(i=1,2,3,…,n+1),可得:
即
综合上述变换,根据三对角矩阵求解公式则有:
xi=Mi=Hi-gi×Mi+1(i=n,(n-1),…,1)。
所述曲线方程组和参数方程组的量化过程:由于在fpga上进行除法运算、小数运算和浮点运算会消耗较多的芯片资源。因此,需要尽量用移位操作替代除法运算,用整数运算替代小数运算和浮点运算,在保证适当运算精度的条件下减少资源消耗。
本发明对上述三次样条曲线方程组和矩阵进行了量化,并将量化后的方程组计算结果与未进行量化的方程组计算结果进行比较,从而选取合适的量化因子mult=2n,使得计算过程可以用移位操作替代部分乘除法运算,适应于在fpga上进行流水线运算的要求,并且计算误差控制在合理范围内。
方程组的量化说明如下:
令g′i=6×gi×mult,代入步长值h=hi,采用循环迭代法可分别计算出gi、gi×mult和g′i的值,其中i=1,2,3,…,n。
令Ri=6giQi×mult,则有Ri=g′i×Qi。
令H′i=Hi×mult,M′i=Mi×mult,则有:
令A′i=Ai×mult,B′i=Bi×mult,C′i=Ci×mult,D′i=Di×mult,则有:
则三次样条曲线函数方程组可变换为:
利用基于FPGA对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组和由A′i、B′i、C′i、D′i和mult构成的方程组进行求解,得到各个插值点的坐标值。
利用基于FPGA对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组的计算过程:
步骤一:由输入形值点数据流获得Yi=yi-1,用流水线方式依次分别计算出Pi、Qi、Ri和R′i,其中i=1,2,3,…,n+1。
步骤二:运算过程从此处分成k路并行运算通道进行处理;将Yi、Pi和R′i拼接在一起形成一帧数据,并以帧为单位用轮询方式依次送入k路并行运算通道的输入fifo缓冲区中。帧数据拼接示意图如图9。
步骤三:在当前并行运算通道中,从本通道的输入fifo缓冲区中读取一帧由Yi、Pi和R′i组成的数据帧,送入本通道流水线的第一级状态机进行运算。
步骤四:在当前并行运算通道的第一级状态机中,可由已经获得的mult、gi×mult和R′i,按照i从1到n的顺序循环迭代计算出H′i的值,并将Yi、Pi和H′i拼接在一起形成一帧数据,写入第一级乒乓缓存中。其中,与mult相关的乘除运算可用移位运算替代,状态机每一轮循环迭代运算占用的时钟周期数不大于k。第一级乒乓缓存由双端口RAM分成两块存储区构成,向其中一块存储区写入数据时,从另一块存储区读出数据,读写是交替互斥的,双端口RAM的A端口用于写入,B端口用于读出。帧数据拼接示意图如图10。
步骤五:从当前并行运算通道的第一级乒乓缓存中读取一帧由Yi、Pi和H′i组成的数据帧,送入本通道流水线的第二级状态机进行运算。
步骤六:在当前并行运算通道第二级状态机中,可由已经获得的mult、gi×mult和H′i,按照i从n到1的倒序循环迭代计算出M′i的值,并将Yi、Pi和M′i拼接在一起形成一帧数据,写入第二级乒乓缓存中。其中,与mult相关的乘除运算可用移位替代。每一次循环迭代运算占用的时钟周期数不大于k。第二级乒乓缓存由双端口RAM分成两块存储区构成,向其中一块存储区写入数据时,从另一块存储区读出数据,读写是交替互斥的,双端口RAM的A端口用于写入,B端口用于读出。帧数据拼接示意图如图11。
步骤七:从当前并行运算通道的第二级乒乓缓存中读取一帧由Yi、Pi和M′i组成的数据帧,送入本通道流水线的第三级状态机进行运算。
步骤八:在当前并行运算通道第三级状态机中,可由已经获得的mult、Yi、Pi和M′i,按照i从n到1的倒序循环迭代计算出P′i、B′i、C′i和D′i的值,并将Yi、B′i、C′i和D′i拼接在一起形成一帧数据,写入第三级乒乓缓存中。其中,与mult相关的乘除运算可用移位替代。每一次循环迭代运算占用的时钟周期数不大于k。第三级乒乓缓存由双端口RAM分成两块存储区构成,向其中一块存储区写入数据时,从另一块存储区读出数据,读写是交替互斥的,双端口RAM的A端口用于写入,B端口用于读出。帧数据拼接示意图如图12。
步骤九:运算过程从此处合并成一路进行处理;采用轮询的方式,依次从各并行运算通道的第三级乒乓缓存中,读取由Yi、B′i、C′i和D′i组成的数据帧,送入fifo缓冲区中。
步骤十:从fifo缓冲区中读取由Yi、B′i、C′i和D′i组成的数据帧,可进一步获得A′i的值,从而完成三次样条曲线参数方程组的求解。
将求解获得的A′i、B′i、C′i和D′i代入变换后的三次样条曲线函数方程组Si(x)中,可得到方程组中所有曲线段方程S(x)的完整三次多项式,再将各插值点的x坐标值代入对应的曲线段方程,就可计算出对应的插值点的y坐标值,从而完成插值计算。
设在每一条曲线段S(x)上都有一组插值点表示为(xj,yj),其中j=1,2,3,…,m。那么n条曲线段就对应n组插值点(xj,yj)。
按照i从1到n的顺序在方程组Si(x)中选择对应的曲线段S(x),代入一组插值点的xj值,采用并行运算方式可同时计算出一组对应的yj值,则进行n次并行计算就可完成整条三次样条曲线的插值计算。将计算出的每一组yj值按组拼接后依次写入输出fifo缓冲区中。输出数据拼接示意图如图13。
所述基于FPGA的运算采用无阻塞的多级流水线方式,从输入数据到输出结果的时延固定且可预测,基于fpga的所有量化因子参与的运算过程使用移位操作代替乘法和除法运算。所述基于FPGA的运算过程中仅使用fpga本身的逻辑资源和存储资源。
本实施例以附图18所示***为基础,在fpga上应用本发明所述方法,对由ADC模块采集,经数据采集模块信道化处理后获得的离散数据进行插值为例,对本发明提供的一种离散数据点拟合曲线改进方法和流程进行阐述。
本实施例应用于手持式测试仪中,测试仪需要将采集到的32个数据点在宽496个像素的屏幕区域内显示为一条平滑曲线。因此,需要将32个点的数据插值运算为496个点的数据,用于在屏幕上绘制曲线。
离散数据的xi值可用数组表示为:
x[32]={1,17,33,49,65,81,97,113,129,145,161,177,193,209,225,241,257,273,289,305,321,337,353,369,385,401,417,433,449,465,481,497};
离散数据的yi值用数组表示为:
y[32]={119,128,145,142,157,163,207,402,366,135,115,107,73,103,80,125,42,26,37,21,7,30,31,51,82,84,74,93,82,65,98,61};
由上文所述可知,本实施例的形值点数量为32个且分布均匀,插值区间为31个,则有步长h=hi=16。令量化因子mult=218=262144,可计算得gi、gi×mult和g′i的值。
根据前文推得的公式,在fpga上先依次计算Pi=yi-yi-1、Qi=Pi-Pi-1、Ri=g′i×Qi和然后,在并行运算通道各级流水线中,用循环迭代法分别计算H′i、M′i、P′i、B′i、C′i和D′i,进一步得到A′i=Yi×mult。至此参数方程组计算完成,可由此获得完整的曲线方程组Si(x)。
利用完整的曲线方程组Si(x),在fpga上按照i从1到31的顺序,依次并行计算每条曲线上的16个插值点,可得到全部496个点的数据,根据数据绘制出曲线。
附图18是本实施例部署的***示意图,其主要包括ADC模块、fpga***和显示模块三个部分。在fpga***中主要部署了数据采集模块、显示驱动模块和本发明的多个实例。ADC模块对模拟信号进行采样并转换为数字信号,送入fpga***的数据采集模块中;数据采集模块对数字信号进行信道化处理,形成不同类型的离散数据(如波形数据、频谱数据、场强数据等),分别送入本发明各实例进行处理;同时部署的本发明的多个实例对离散数据进行插值,产生相应的曲线数据(如波形曲线、频谱曲线、场强曲线等),由显示驱动模块送往显示模块并呈现出来。
附图14是本实施例matlab仿真运算结果图,其中三角形符号为输入的形值点坐标,细曲线为matlab自带库函数的三次样条插值结果(非扭结边界条件);图15是本实施例fpga插值结果图,其中三角形符号为输入的形值点坐标,圆点为fpga的三次样条插值结果(自由边界条件);图16是本实施例matlab仿真结果与fpga插值结果对比图,其中三角形符号为输入的形值点坐标,圆点为fpga的插值结果(自由边界条件),细曲线为matlab自带库函数的插值结果(非扭结边界条件);图17是本实施例算法公式量化前仿真结果与fpga插值结果对比图,其中圆环为量化前仿真结果(自由边界条件),圆点为fpga的插值结果(自由边界条件)。
在另一方面,为了达到上述目的,如图19所示,本发明实施例公开了一种离散数据点拟合曲线改进***,包括:
一次转换模块:用于获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组;
二次转换模块:用于设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组;
方程求解模块:用于利用基于FPGA对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组和由A′i、B′i、C′i、D′i和mult构成的方程组进行求解,得到各个插值点的坐标值。
在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上显示和描述了本公开的基本原理、主要特征和本公开的优点。本行业的技术人员应该了解,本公开不受上述实施例的限制,上述实施例和说明书中描述的只是说明本公开的原理,在不脱离本公开精神和范围的前提下,本公开还会有各种变化和改进,这些变化和改进都落入要求保护的本公开范围内容。
Claims (8)
1.一种离散数据点拟合曲线改进方法,其特征在于,方法包括以下步骤:
获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组,其中ai、bi、ci和di为第一预设参数,Ai、Bi、Ci和Di为第二预设参数;
设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组,其中A′i、B′i、C′i和D′i为第三预设参数;
利用基于FPGA的电子设备对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组和由A′i、B′i、C′i、D′i和mult构成的曲线方程组进行求解,得到各个插值点的坐标值。
2.根据权利要求1所述的一种离散数据点拟合曲线改进方法,其特征在于,所述基于FPGA的电子设备对以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组进行求解的过程包括以下步骤:
由输入形值点数据流获得Yi=yi-1,用流水线方式依次分别迭代计算出Pi、Qi、Ri和R′i;
运算过程从此处分成k路并行运算通道进行处理;将Yi、Pi和R′i拼接在一起形成一帧数据,并以帧为单位用轮询方式依次送入k路并行运算通道的输入fifo缓冲区中;
在当前并行运算通道中,从并行运算通道的输入fifo缓冲区中读取由Yi、Pi和Ri′组成的一帧数据,将Yi、Pi和R′i组成的一帧数据输入本通道流水线的第一级状态机进行运算;
在当前并行运算通道的第一级状态机中,按照i从1到n的顺序循环迭代计算出H′i的值,并将Yi、Pi和R′i组成的一帧数据写入第一级乒乓缓存中;
从当前并行运算通道的第一级乒乓缓存中读取由Yi、Pi和H′i组成的一帧数据,输入至本通道流水线的第二级状态机进行运算;
在当前并行运算通道第二级状态机中,按照i从n到1的倒序循环迭代计算出M′i的值,并将Yi、Pi和M′i组成的一帧数据写入第二级乒乓缓存中;
从当前并行运算通道的第二级乒乓缓存中读取由Yi、Pi和M′i组成的一帧数据,送入本通道流水线的第三级状态机进行运算;
在当前并行运算通道第三级状态机中,按照i从n到1的倒序循环迭代计算出P′i、B′i、C′i和D′i的值,并将Yi、B′i、C′i和D′i组成的一帧数据,写入第三级乒乓缓存中;
运算过程从此处合并成一路进行处理;采用轮询的方式,依次从各并行运算通道的第三级乒乓缓存中,读取由Yi、B′i、C′i和D′i组成的数据帧,送入fifo缓冲区中;
从fifo缓冲区中读取由Yi、B′i、C′i和D′i组成的数据帧,并进一步获得A′i的值,最终得出A′i、B′i、C′i和D′i。
3.根据权利要求2所述的一种离散数据点拟合曲线改进方法,其特征在于,所述循环迭代运算占用的时钟周期数不大于k。
4.根据权利要求2所述的一种离散数据点拟合曲线改进方法,其特征在于,所述得出A′i、B′i、C′i和D′i后,代入由A′i、B′i、C′i、D′i和mult构成的方程组得到方程组中所有曲线段方程S(x)的完整三次多项式,再将各插值点的x坐标值代入对应的曲线段方程,就计算出对应的插值点的y坐标值,从而完成插值计算。
5.根据权利要求2所述的一种离散数据点拟合曲线改进方法,其特征在于,所述并行运算通道第一级、第二级和第三级乒乓缓存,均由双端口RAM分成两块存储区构成,向其中一块存储区写入数据时,从另一块存储区读出数据,读写是交替互斥的;双端口RAM的一个端口用于写入,另一个端口用于读出。
6.根据权利要求1所述的一种离散数据点拟合曲线改进方法,其特征在于,所述三次样条插值算法曲线方程组Si(x)中的每一条曲线段S(x)上都有一组插值点表示为(xj,yj);则n条曲线段对应n组插值点(xj,yj);
按照i从1到n的顺序在方程组Si(x)中选择对应的曲线段S(x),代入一组插值点的xj值,采用并行运算方式同时计算出一组对应的yj值,进行n次并行计算就完成整条三次样条曲线的插值计算。
7.一种离散数据点拟合曲线改进***,其特征在于,包括:
一次转换模块:用于获取三次样条插值算法曲线方程组Si(x)和包含ai、bi、ci和di的参数方程组,以及以mi为未知数的矩阵,设定一次中间变量,将以mi为未知数的矩阵转换为以Mi为未知数的矩阵,将包含ai、bi、ci和di的参数方程组转换为以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组;
二次转换模块:用于设定二次中间变量,采用三对角矩阵求解公式对以Mi为未知数的矩阵进行求解,得到Mi的计算公式,设定三次中间变量以及量化因子mult=2n,将以Mi为未知数由Ai、Bi、Ci和Di组成的参数方程组转换为以M′i为未知数由A′i、B′i、C′i和D′i组成的参数方程组,将Si(x)转换为由A′i、B′i、C′i、D′i和mult构成的方程组;
方程求解模块:用于利用基于FPGA的电子设备对以M′i为未知数由A′i、B′i、Ci′和Di′组成的参数方程组和由Ai′、Bi′、Ci′、Di′和mult构成的曲线方程组进行求解,得到各个插值点的坐标值。
8.一种设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当一个或多个所述程序被一个或多个所述处理器执行,使得一个或多个所述处理器实现如权利要求1-6中任一所述的一种离散数据点拟合曲线改进方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311728094.XA CN117609672A (zh) | 2023-12-15 | 2023-12-15 | 一种离散数据点拟合曲线改进方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311728094.XA CN117609672A (zh) | 2023-12-15 | 2023-12-15 | 一种离散数据点拟合曲线改进方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117609672A true CN117609672A (zh) | 2024-02-27 |
Family
ID=89949898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311728094.XA Pending CN117609672A (zh) | 2023-12-15 | 2023-12-15 | 一种离散数据点拟合曲线改进方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117609672A (zh) |
-
2023
- 2023-12-15 CN CN202311728094.XA patent/CN117609672A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101782893B (zh) | 可重构数据处理平台 | |
US10379816B2 (en) | Data accumulation apparatus and method, and digital signal processing device | |
CN100388630C (zh) | 具有矩阵转换技术的循环冗余码计算方法及*** | |
CN112106078A (zh) | 神经网络处理元件 | |
US20190235834A1 (en) | Optimization apparatus and control method thereof | |
CN102622207B (zh) | 定点化处理方法及装置 | |
CN101937424A (zh) | 基于fpga实现高速fft处理的方法 | |
CN1554072A (zh) | 最大后验概率(map)解码器的管线架构 | |
CN110543939A (zh) | 一种基于fpga的卷积神经网络后向训练的硬件加速实现架构 | |
Catthoor et al. | Application-specific architectural methodologies for high-throughput digital signal and image processing | |
CN117609672A (zh) | 一种离散数据点拟合曲线改进方法及*** | |
Shan et al. | A CNN Accelerator on FPGA with a Flexible Structure | |
CN102004720B (zh) | 可变长快速傅立叶变换电路及实现方法 | |
CN103533378A (zh) | 基于fpga的三维整数dct变换***及其变换方法 | |
CN116578819A (zh) | 一种稀疏分数傅里叶变换fpga实现方法及*** | |
US7519642B2 (en) | Parallel computation structures to enhance signal-quality, using arithmetic or statistical averaging | |
JP2001056806A (ja) | 高速フーリエ変換装置 | |
Conti et al. | A New Family of Interpolatory Non‐Stationary Subdivision Schemes for Curve Design in Geometric Modeling | |
Pang et al. | A 16-bit carry skip adder designed by reversible logic | |
Timarchi et al. | Area-time-power efficient maximally redundant signed-digit modulo 2 n− 1 adder and multiplier | |
Givaki et al. | High-performance deterministic stochastic computing using residue number system | |
Sestito et al. | Design-Space Exploration of Quantized Transposed Convolutional Neural Networks for FPGA-based Systems-on-Chip | |
CN217034731U (zh) | 选择控制器及运算电路及芯片 | |
RU2786204C1 (ru) | Цифровое сглаживающее устройство | |
CN111583092B (zh) | 一种变分光流fpga实现方法、***、存储介质、终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |