STOLT插值实现方法及装置与流程

文档序号:18741222发布日期:2019-09-21 01:47阅读:3337来源:国知局
STOLT插值实现方法及装置与流程

本发明涉及电子技术领域,尤其涉及一种STOLT插值实现方法及装置。



背景技术:

合成孔径雷达(SAR,Synthetic Aperture Radar)具有高分辨、不受时间、天气等自然因素影响、并具有穿透遮蔽物等特点,被广泛的应用于灾害检测、矿物勘察等民用和军用领域。

目前,成熟的SAR成像算法有很多,ωK算法便是其中应用较为广泛的算法之一。其中,ωK算法主要流程包括雷达数据、二维快速傅里叶变换(FFT,Fast Fourier Transformation)、参考函数相乘、STOLT插值、二维FFT、输出图像这几个过程。其中,参考函数相乘完成了参考距离处的精确聚焦,但是其他距离处的目标存在残余相位。而STOLT插值,通过距离频率轴的映射,精确的消除了其他位置处的残余相位,完成了对全部场景的精确聚焦。因此STOLT插值是ωK算法的核心。此外,出于实现精度的考虑,一般采用双精度浮点在现场可编程门阵列(FPGA,Field-Programmable Gate Array)上实现STOLT插值模块。但是已有在FPGA实现的技术存在以下问题:

(1)算法复杂,传统基于寄存器传输级RTL(RTL,Register-Transfer Level)语言实现难度大。FPGA和CPU一个明显的区别在于:CPU需要软件支持,而FPGA是软硬件一体。这就意味着开发者可以在CPU中采用实现效率更高的高级语言并且不需要考虑硬件实现结构实现算法功能。而FPGA更接近于IO,采用硬件描述性语言实现算法不经过指令系统的翻译,直接转换为晶体管电路的组合。因此,在采用FPGA实现复杂算法的时候,需要更多的考虑硬件电路组合。复杂的算法,逻辑控制实现困难,运算模块实现工作量大,这就会导致算法实现周期长,并存在无法实现的情况。

(2)调试周期长。FPGA是软硬件一体的结构,使得算法调试无法采用单步调试的方法。一般采用VIO、ILA核来监视、抓取内部信号的状态。这使得FPGA的调试效率偏低,调试周期过长。

(3)优化困难。传统的基于硬件描述语言的FPGA实现,无法通过简单的优化指令来实现设计的优化,而是在设计中,需要考虑针对某种的特定优化形式,进行特定的实现。如果要改变优化方式,则需要更改实现代码。这使得模块优化空间十分狭窄。

(4)移植性差。不同类型的FPGA芯片的电路设计不同,同一种算法在不同FPGA芯片的实现电路不同,实现的编码也有所差别。因此,移植性较差。



技术实现要素:

本发明的主要目的在于提供一种STOLT插值实现方法及装置,可解决上述至少一个技术问题。

为实现上述目的,本发明实施例第一方面提供一种STOLT插值实现方法,包括:

S1、采用VIVADO HLS进行STOLT插值算法设计,得到STOLT插值算法;

S2、将输入数据输入至所述STOLT插值算法,得到输出结果;

S3、搭建测试平台,在所述测试平台中验证所述STOLT插值算法,得到验证结果;

S4、判断所述验证结果和所述输出结果是否一致;

若所述验证结果和所述输出结果不一致,则根据所述验证结果,再次执行步骤S1至S4;若所述验证结果和所述输出结果一致,则执行步骤S5、检验所述STOLT插值算法的时序,得到时序结果;

S6、判断所述时序结果是否正确;

若所述时序结果不正确,则根据所述时序结果,再次执行步骤S1至S6;若所述时序结果正确,则执行步骤S7、根据所述STOLT插值算法,生成相应的IP核,并将所述IP核添加到VIVADO中相对应的FPGA芯片的IP库中。

进一步地,所述将输入数据输入至STOLT插值算法,得到输出结果包括:

获取雷达的系统参数;

根据所述系统参数,计算距离向频率轴;

根据stolt映射关系,将所述距离向频率轴映射回已知频率轴,计算待插值的频率坐标;

若所述待插值的频率坐标在[0,NR]之间,则对所述待插值的频率坐标进行sinc插值,所述NR为距离向采样点;

若所述待插值的频率坐标小于0,则输出所述输入数据的第一个数据;

若所述待插值的频率坐标大于NR,则输出所述输入数据的最后一个数据。

进一步地,所述对所述待插值的频率坐标进行sinc插值包括:

获取所述待插值的频率坐标周围距离向的N个采样点的频率坐标;

根据所述N个采样点的频率坐标生成对应的N个sinc函数值;

将所述N个采样点的频率坐标和所述N个sinc函数值一一对应累乘相加,得到结果数据;

输出所述结果数据。

进一步地,所述输入数据的虚部采用[-127,128]锯齿波循环数据,实部为0。

进一步地,在实现所述STOLT插值算法的过程中,将实现过程设置为数据流模式,初始化时间间隔为1。

本发明实施例第二方面提供一种STOLT插值实现装置,包括:

设计模块,用于采用VIVADO HLS进行STOLT插值算法设计,得到STOLT插值算法;

输入模块,用于将输入数据输入至所述STOLT插值算法,得到输出结果;

测试模块,用于搭建测试平台,在所述测试平台中验证所述STOLT插值算法,得到验证结果;

第一判断模块,用于判断所述验证结果和所述输出结果是否一致;

第一调整模块,用于若所述验证结果和所述输出结果不一致,则根据所述验证结果,返回所述设计模块;

检验模块,用于若所述验证结果和所述输出结果一致,则检验所述STOLT插值算法的时序,得到时序结果;

第二判断模块,用于判断所述时序结果是否正确;

第二调整模块,用于若所述时序结果不正确,则根据所述时序结果,返回所述设计模块;

生成添加模块,用于若所述时序结果正确,则根据所述STOLT插值算法,生成相应的IP核,并将所述IP核添加到VIVADO中相对应的FPGA芯片的IP库中。

进一步地,所述输入模块包括:

第一获取子模块,用于获取雷达的系统参数;

第一计算子模块,用于根据所述系统参数,计算距离向频率轴;

映射子模块,用于根据stolt映射关系,将所述距离向频率轴映射回已知频率轴,计算待插值的频率坐标;

插值子模块,用于若所述待插值的频率坐标在[0,NR]之间,则对所述待插值的频率坐标进行sinc插值,所述NR为距离向采样点;

第一输出子模块,用于若所述待插值的频率坐标小于0,则输出所述输入数据的第一个数据;

第二输出子模块,用于若所述待插值的频率坐标大于NR,则输出所述输入数据的最后一个数据。

进一步地,所述插值子模块包括:

第二获取子模块,用于获取所述待插值的频率坐标周围距离向的N个采样点的频率坐标;

函数值生成子模块,用于根据所述N个采样点的频率坐标生成对应的N个sinc函数值;

第二计算子模块,用于将所述N个采样点的频率坐标和所述N个sinc函数值一一对应相乘后相加,得到结果数据;

第三输出子模块,用于输出所述结果数据。

进一步地,所述输入数据的虚部采用[-127,128]锯齿波循环数据,实部为0。

进一步地,将所述输入模块设置为数据流模式,初始化时间间隔为1。

本申请采用上述技术方案,具有以下有益效果:

(1)本发明在VIVADO HLS中采用PIPELINE指令,实现STOLT模块流水线处理,能够在延时一定的时钟周期之后,以后的每一个时钟周期都产生一个输出数据,极大的提升了数据处理效率。

(2)本发明采用VIVADO HLS实现STOLT插值的模块设计,实现了模块的软件化调试,提升了模块仿真速度,大大缩减了模块的调试时间。

(3)本发明采用VIVADO HLS实现STOLT插值模块设计,统一时序以及接口设计,避免了RTL语言实现过程中大量的时序对齐工作,简化了设计流程,提升了设计效率。

(4)本发明采用VIVADO HLS实现STOLT插值模块设计,是通过C++语言进行设计,采用HLS实现高级语言C++到RTL语言转化,一定程度上解除了算法实现和底层硬件电路的耦合关系,提升了模块的可移植性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一实施例提供的STOLT插值实现方法的流程示意图;

图2为本发明一实施例提供STOLT插值实现方法中步骤S2的流程示意图;

图3为本发明一实施例提供的STOLT插值实现装置的结构示意图;

图4为本发明一实施例提供的STOLT插值实现装置中输入模块的结构示意图;

图5为本发明一实施例提供的STOLT插值实现装置中插值子模块的结构示意图。

具体实施方式

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,图1为本发明一实施例提供的STOLT插值实现方法的流程示意图,该方法主要包括以下步骤:

S1、采用VIVADO HLS进行STOLT插值算法设计,得到STOLT插值算法;

VIVADO HLS是指一种集成设计仿真软件。更多的,在使用VIVADO HLS进行插值设计之前,需要采用MATLAB预先进行STOLT插值算法设计,并验证STOLT插值算法的正确性。在确保算法正确的前提之下进行本实施例。

对应的,在FPGA硬件设计中,STOLT插值算法为STOLT插值模块。

S2、将输入数据输入至STOLT插值算法,得到输出结果;

输入数据可在matlab中产生,其虚部采用[-127,128]锯齿波循环数据,实部为0。同时,将输入数据保存为.dat文件。

在本发明实施例中,STOLT插值算法可划分为频率映射、位置计算、读取数据、sine插值四个步骤。

S3、搭建测试平台,在测试平台中验证STOLT插值算法,得到验证结果;

测试平台是指可以测试STOLT插值算法相应的test_bench文件,是一种软件测试程序。

S4、判断验证结果和输出结果是否一致;

若所述验证结果和所述输出结果不一致,则根据验证结果,再次执行步骤S1至S4;若验证结果和输出结果一致,则执行步骤S5、检验STOLT插值算法的时序,得到时序结果;

S6、判断时序结果是否正确;

时序结果正确,例如:在HLS生成RTL模块时,自动生成相应的握手信号:ap_start、ap_done、ap_idle以及ap_ready,即为时序结果正确。

其中,ap_start控制模块执行,逻辑为1时开始运行。它应保持逻辑1直到相应的输出握手ap_ready被置位。当ap_ready变高时,决定了是否继续保持ap_start置位并执行其他事物或设置ap_start为逻辑0,当前事务的结束时允许设计暂停。如果在ap_ready为逻辑1之前ap_start被置为低,设计有可能没有把所有输入端口读完,并可能拖延下一个输入读取操作。

ap_ready表明设计已经准备好接受新数据。当准备好接受新的输入时,ap_ready信号设置为逻辑1。表明所有为这次事物的输入读已经完成。如果设计不是流水线操作,直到下一次事物才开始执行新的读。这个信号是用来决定何时在端口上用新的值,决定是否用一个ap_start输入信号来启动一个新的事务。如果ap_start信号没有被设置为高,当设计在当前事务完成中所有的操作,这个信号变为低电平。

ap_done表明设计在当前的事务中完成所有的操作。输出逻辑1表明设计已经完成了这个事务的所有操作。因为在事务结束时,该信号为逻辑1还表示ap_return端口上的数据是有效的。

ap_idle表示设计正在操作或闲置状态(无操作)。输出端口上用逻辑1表明是空闲状态。一旦设计开始运行,该信号为低电平。该信号为高电平时,设计完成操作,未进行任何进一步的操作。

若时序结果不正确,则根据时序结果,再次执行步骤S1至S6;若时序结果正确,则执行步骤S7、根据STOLT插值算法,生成相应的IP核,并将IP核添加到VIVADO中相对应的FPGA芯片的IP库中。

更多的,在步骤S7之前,可优化STOLT插值算法的设计,以加快数据的吞吐率、优化资源利用率,加快处理速度,具体优化流程如下:

STOLT插值算法设置成数据流模式,尽量多的采用同步操作,充分利用FPGA并行化的特点,即把程序设置为PIPELINE(流水线)模式,初始化时间间隔为1。如果不设置数据流处理,模块执行的过程中将会存在数据阻塞的现象,拉低了数据处理的速度。

采用HLS进行硬件设计时,接口性能对系统至关重要。根据STOLT插值模块的需求,将雷达数据的输入端口设为ap_memory类型,采用的存储资源类型为RAM_S2P_BRAM类型。

在另一实施例中,请参阅图2,步骤S2包括:

S21、获取雷达的系统参数;

雷达系统参数,例如,f0为雷达中心频率,Kr线性调频斜率,Vst飞机飞行速度等。

S22、根据系统参数,计算距离向频率轴;

根据ωK算法原理,假设经过参考函数相乘之后,二维频域内经过补偿之后的相位为:

式中,fr为距离向频率,fa为方位向频率,y为目标方位位置,v为平台飞行速度,f0为雷达中心频率,y为目标方位位置,R为雷达照射区某一点目标到飞行航迹的垂距,Rref是参考距离处或者测绘带中心到飞行航迹的垂距,c为光速。

对于不同的fa,通过对数据进行STOLT插值,可将相位变成关于f′r的线性函数。即为:

fr′为fr经过映射之后的新的距离向频率轴。其中,fr和f′r的关系如下所示:

S23、根据stolt映射关系,将距离向频率轴映射回已知频率轴,计算待插值的频率坐标;

将旧的频率轴,映射到新的频率轴之后,由于原有数据是在旧的频率轴空间。因此,需要将新的频率轴再映射回旧的频率轴。然后计算待插值的频率坐标。

若待插值的频率坐标在[0,NR]之间,则执行步骤S24、对待插值的频率坐标进行sinc插值,NR为距离向采样点;

若待插值的频率坐标小于0,则执行步骤S25、输出输入数据的第一个数据;

若所述待插值的频率坐标大于NR,则执行步骤S26、输出输入数据的最后一个数据。

其中,步骤S24包括:

获取所述待插值的频率坐标周围距离向的N个采样点的频率坐标;

在本发明实施例中,N以16为例。假设计算出的待插值的频率坐标为add_a,那么周围16个点位置为[add_a-8,add_a+7]。

根据N个采样点的频率坐标生成对应的N个sinc函数值;

将N个采样点的频率坐标和N个sinc函数值一一对应累乘相加,得到结果数据。

请参阅图3,该装置主要包括:

设计模块101,用于采用VIVADO HLS进行STOLT插值算法设计,得到STOLT插值算法;

输入模块102,用于将输入数据输入至所述STOLT插值算法,得到输出结果;

测试模块103,用于搭建测试平台,在所述测试平台中验证所述STOLT插值算法,得到验证结果;

第一判断模块104,用于判断验证结果和输出结果是否一致;

第一调整模块105,用于若验证结果和输出结果不一致,则根据所述验证结果,返回所述设计模块;

检验模块106,用于若所述验证结果和所述输出结果一致,则检验所述STOLT插值算法的时序,得到时序结果;

第二判断模块107,用于判断所述时序结果是否正确;

第二调整模块108,用于若所述时序结果不正确,则根据所述时序结果,返回所述设计模块;

生成添加模块109,用于若所述时序结果正确,则根据所述STOLT插值算法,生成相应的IP核,并将所述IP核添加到VIVADO中相对应的FPGA芯片的IP库中。

进一步地,请参阅图4,输入模块102包括:

第一获取子模块1021,用于获取雷达的系统参数;

第一计算子模块1022,用于根据所述系统参数,计算距离向频率轴;

映射子模块1023,用于根据stolt映射关系,将所述距离向频率轴映射回已知频率轴,计算待插值的频率坐标;

插值子模块1024,用于若所述待插值的频率坐标在[0,NR]之间,则对所述待插值的频率坐标进行sinc插值,所述NR为距离向采样点;(获取周围16个点的位置数据,若所述位置数据)

第一输出子模块1025,用于若所述待插值的频率坐标小于0,则输出所述输入数据的第一个数据;

第二输出子模块1026,用于若所述待插值的频率坐标大于NR,则输出所述输入数据的最后一个数据。

进一步地,请参阅图5,插值子模块1024包括:

第二获取子模块10241,用于获取所述待插值的频率坐标周围距离向的N个采样点的频率坐标;

函数值生成子模块10242,用于根据所述N个采样点的频率坐标生成对应的N个sinc函数值;

第二计算子模块10243,用于将所述N个采样点的频率坐标和所述N个sinc函数值一一对应相乘后相加,得到结果数据;

第三输出子模块10244,用于输出所述结果数据。

进一步地,所述输入数据的虚部采用[-127,128]锯齿波循环数据,实部为0。

进一步地,将所述输入模块设置为数据流模式,初始化时间间隔为1。

本申请采用上述技术方案,具有以下有益效果:

(1)本发明在VIVADO HLS中采用PIPELINE指令,实现STOLT模块流水线处理,能够在延时一定的时钟周期之后,以后的每一个时钟周期都产生一个输出数据,极大的提升了数据处理效率。

(2)本发明采用VIVADO HLS实现STOLT插值的模块设计,实现了模块的软件化调试,提升了模块仿真速度,大大缩减了模块的调试时间。

(3)本发明采用VIVADO HLS实现STOLT插值模块设计,统一时序以及接口设计,避免了RTL语言实现过程中大量的时序对齐工作,简化了设计流程,提升了设计效率。

(4)本发明采用VIVADO HLS实现STOLT插值模块设计,是通过C++语言进行设计,采用HLS实现高级语言C++到RTL语言转化,一定程度上解除了算法实现和底层硬件电路的耦合关系,提升了模块的可移植性。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上为对本发明所提供的STOLT插值实现方法和装置,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1