基于块浮点的FBLMS算法的FPGA实现装置及方法
技术领域
本发明属于实时自适应信号处理技术领域,具体涉及了一种基于块浮点的FBLMS算法的FPGA实现装置及方法。
背景技术
自适应滤波算法的理论研究与硬件实现一直是信号处理领域的研究热点之一。当输入信号和噪声统计特性未知或者发生变化时,自适应滤波器在满足某种准则的前提下能自动调整自身参数,始终实现最优滤波。自适应滤波器已经被广泛应用于信号检测、数字通信、雷达、工程物探、卫星导航及工业控制等众多领域。从系统设计的角度考虑,运算量、结构、鲁棒性是选择自适应滤波算法的三个最重要的衡量标准。由Widrow和Hoff提出的最小均方误差(LMS)算法具有众多的优点,它结构简单,性能稳定,鲁棒性强,计算复杂性低,易于硬件实现,具有更强的实用性。
频域分块最小均方误差(FBLMS)算法是LMS算法的一种改进形式,简单来讲是以频域实现时域分块的LMS算法,可以利用FFT技术用频域相乘来替代时域线性卷积和线性相关运算,降低了计算量,更易于硬件实现。目前FBLMS算法的硬件实现主要分为基于CPU平台、DSP平台和GPU平台三种方式:基于CPU平台的实现方式,受限于CPU的处理能力,一般用于非实时处理;基于DSP平台的实现方式,仅在系统实时性不高的场合能很好的满足要求;基于GPU平台的实现方式,利用GPU强大的并行计算及浮点计算能力,非常适合于FBLMS算法的实时处理,但是由于GPU的接口难以与ADC信号采集接口直接互连且一般功耗较大,不利于系统的高效集成及室外环境下的现场部署。
现场可编程门阵列(FPGA)具有大规模并行处理能力和硬件可编程的灵活性。其内部计算资源丰富,有大量的硬件乘法器及加法器,适用于进行计算量大、算法结构规整的实时信号处理;接口形式多样,可直接与各种ADC高速采集接口相连,集成度高;功耗低,速度快,工作可靠,适合各种环境下的现场部署;可提供众多性能稳定的信号处理IP核,如FFT、FIR等,易于开发、维护和功能扩展。基于上述优点,FPGA已广泛应用于各种信号处理算法的硬件实现,但是,FPGA在处理高精度的浮点运算时存在不足,会耗费大量的硬件资源,甚至使得复杂算法难以实现。
总的来说,FBLMS算法在滤波输出和更新权向量时都存在乘法运算,且具有递归结构,权向量从初始值逐渐收敛到最优值,要求硬件实现时所采用的数据格式具有较大的动态范围和较高的数据精度,尽量减少有限字长效应对算法性能的影响,同时为便于硬件实现,又要求快速简单,在保证算法性能和运算速度的同时占用较少的硬件资源;此外,由于FBLMS算法结构相对复杂,在实现时需要通过时序控制保证各计算节点的数据精确对齐,这些成为采用FPGA实现FBLMS算法时亟待解决的问题。
发明内容
为了解决现有技术中的上述问题,即现有FPGA装置实现FBLMS算法时性能、速度与资源之间存在冲突的问题,本发明提供了一种基于块浮点的FBLMS算法的FPGA实现装置,该装置包括输入缓存变换模块、滤波模块、误差计算与输出缓存模块、权值调整计算模块、权值更新存储模块;
所述输入缓存变换模块,配置为依据重叠保留法对输入的时域参考信号进行分块缓存重组,将分块缓存重组的信号由定点制转换为块浮点制后进行FFT变换、尾数缓存,获得块浮点制的频域参考信号,将所述块浮点制的频域参考信号输出至所述滤波模块、权值调整计算模块;
所述滤波模块,配置为将所述块浮点制的频域参考信号与所述权值更新存储模块发送的频域块权值复乘,并根据分块复乘结果中的最大绝对值判定有效位后进行动态截位,获得滤波后的频域参考信号,将所述滤波后的频域参考信号发送至所述误差计算与输出缓存模块;
所述误差计算及输出缓存模块,配置为对所述滤波后的频域参考信号进行IFFT变换;还配置为对输入的目标信号进行乒乓缓存,并将缓存后的目标信号转换为块浮点制;还配置为对转换为块浮点制的目标信号与IFFT变换后的参考信号求差,获得误差信号;还配置为将所述误差信号分为相同的两路,一路发送至所述权值调整计算模块,另一路转换为定点制后通过循环缓存的方法获取持续输出的对消结果信号;
所述权值调整计算模块基于所述块浮点制的频域参考信号以及所述误差信号,获取块浮点制的频域块权值调整量;
所述权值更新存储模块将所述块浮点制的频域块权值调整量转为扩展位宽定点制后按块更新并进行存储;还用于进行更新后的频域块权值的动态截位后转换为块浮点制,并发送至所述滤波模块。
在一些优选的实施例中,所述输入缓存模块包括RAM1、RAM2、RAM3、重组模块、转换模块1、FFT变换模块1、RAM4;
所述RAM1、RAM2、RAM3通过循环缓存的方法将所述输入的时域参考信号分为长度为N的数据块;
所述重组模块依据重叠保留法对所述长度为N的数据块进行重组,获得块长为L点的输入参考信号;其中,L=N+M-1,M为滤波器阶数;
所述转换模块1用于将所述块长为L点的输入参考信号由定点制转换为块浮点制,并发送至所述FFT转换模块1;
所述FFT变换模块1用于对所述转换模块1发送的数据进行FFT变换,获得块浮点制的频域参考信号;
所述RAM4用于缓存所述块浮点制的频域参考信号的尾数。
在一些优选的实施例中,“依据重叠保留法对输入的时域参考信号进行分块缓存重组”,其方法为:
步骤F10,依次将输入的时域参考信号中的K个数据存储到RAM1的末尾;其中,K=M-1,M为滤波器阶数;
步骤F20,依次将K个数据之后的第一批N个数据存储到RAM2中;
步骤F30,依次将第一批N个数据之后的第二批N个数据存储到RAM3中,同时将RAM1中末尾的K个数据以及RAM2中的N个数据作为块长为L点的输入参考信号;L=K+N;
步骤F40,依次将第二批N个数据之后的第三批N个数据存储到RAM1中,同时将RAM2中末尾的K个数据以及RAM3中的N个数据作为块长为L点的输入参考信号;
步骤F50,依次将第三批N个数据之后的第四批N个数据存储到RAM2中,同时将RAM3中末尾的K个数据以及RAM1中的N个数据作为块长为L点的输入参考信号;
步骤F60,跳转步骤F30并循环执行步骤F30-步骤F60直至输入的时域参考信号数据处理完毕。
在一些优选的实施例中,所述滤波模块包括复乘模块1、RAM5、动态截位模块1;
所述复乘模块1将所述块浮点制的频域参考信号与所述权值更新存储模块发送的频域块权值进行复乘;
所述RAM5用于缓存复乘运算后数据的尾数;
所述动态截位模块1根据分块复乘结果中的最大绝对值判定数据有效位后进行动态截位,获得滤波后的频域参考信号。
在一些优选的实施例中,“根据分块复乘结果中的最大绝对值判定有效位后进行动态截位”,其方法为:
步骤G10,获取本块复乘结果中最大绝对值的数据;
步骤G20,从所述最大绝对值的数据的最高位开始检测,寻找第一个不为0的比特位;
步骤G30,所述第一个不为0的比特位为第一个有效数据位,第一个有效数据位后的第一位为符号位;
步骤G40,以所述符号位为截取开始位置进行尾数数据截取并调整块指数,获得滤波后的频域参考信号。
在一些优选的实施例中,所述误差计算及输出缓存模块包括IFFT变换模块1、删除模块、RAM6、RAM7、转换模块2、求差运算模块、转换模块3、RAM8、RAM9、RAM10;
所述IFFT变换模块1用于对所述滤波后的频域参考信号进行IFFT变换;
所述删除模块用于删除IFFT变换后的数据块的前M-1个数据,得到块长为N点的参考信号;M为滤波器阶数;
所述RAM6、RAM7对所述输入的目标信号进行乒乓缓存,获得块长为N点的目标信号;
所述转换模块2将所述块长为N点的目标信号按块转换为块浮点制;
所述求差运算模块用于对转换为块浮点制的目标信号与所述块长为N点的参考信号求差,获得误差信号;所述误差信号分为两路并分别发送至所述权值调整计算模块、转换模块3;
所述转换模块3将所述误差信号转换为定点制;
所述RAM8、RAM9、RAM10通过循环缓存的方法将所述定点制的误差信号转换为持续输出的对消结果信号。
在一些优选的实施例中,所述权值调整计算模块包括取共轭模块、插零模块、FFT变换模块2、复乘模块2、RAM11、动态截位模块2、IFFT变换模块2、置零模块、FFT变换模块3、乘积模块;
所述取共轭模块用于对输入缓存变换模块输出的块浮点制的频域参考信号进行求共轭运算;
所述插零模块用于在所述误差信号的前端插入M-1个0;M为滤波器阶数;
所述FFT变换模块2用于对插零后的误差信号进行FFT变换;
所述复乘模块2用于将求共轭后的数据与FFT变换后的数据进行复乘运算;
所述RAM11用于缓存复乘结果数据的尾数;
所述动态截位模块2根据所述复乘模块2分块复乘结果中的最大绝对值判定数据有效位后进行动态截位,获得频域块权值更新量;
所述IFFT变换模块2,用于对所述频域块权值更新量进行IFFT变换;
所述置零模块用于将所述IFFT变换模块2变换后的数据块的后端L-M个数据点置0;
所述FFT变换模块3用于对置零模块输出的数据进行FFT变换;
所述乘积模块用于将所述FFT变换模块3变换后的数据与设定的步长因子进行乘积运算,获得块浮点制的频域块权值调整量。
在一些优选的实施例中,所述权值更新存储模块包括转换模块4、求和运算模块、RAM12、动态截位模块3、转换模块5;
所述转换模块4用于将所述权值调整计算模块输出的块浮点制的频域块权值调整量转换为扩展位宽定点制;
所述求和运算模块用于进行扩展位宽定点制的频域块权值调整量与存储的原频域块权值的求和运算,得到更新后的频域块权值;
所述RAM12用于缓存所述更新后的频域块权值;
所述动态截位模块3用于根据缓存的更新后的频域块权值中最大绝对值判定数据有效位后进行动态截位;
所述转换模块5用于将所述动态截位模块3输出的数据转换为块浮点制,获得所述滤波模块需要的频域块权值。
本发明的另一方面,提出了一种基于块浮点的FBLMS算法的FPGA实现方法,基于上述的基于块浮点的FBLMS算法的FPGA实现装置,该方法包括:
步骤S10,将输入的时域参考信号x(n)根据重叠保留法进行分块缓存重组,由定点制转为块浮点制后进行FFT变换得到X(k);
步骤S20,X(k)与当前频域块权值W(k)相乘,并根据本块数据中最大绝对值判定有效位后进行动态截位,得到滤波后的频域参考信号Y(k);
步骤S30,Y(k)经IFFT变换并舍点后得到时域滤波输出y(k),同时把目标信号d(n)分块缓存转为块浮点制得到d(k),d(k)与y(k)进行相减得到误差信号e(k);
步骤S40,误差信号e(k)转为定点制后经缓存输出,得到最终的持续输出的对消结果信号e(n)。
在一些优选的实施例中,所述频域块权值W(k)随X(k)与误差信号e(k)同步进行调整计算与更新,其方法为:
步骤X10,e(k)插入零块并FFT变换得到频域误差E(k);
步骤X20,求X(k)的共轭并与E(k)相乘,然后与设定的步长因子μ相乘得到频域块权值调整量ΔW(k);
步骤X30,ΔW(k)转为扩展位宽定点制,与当前频域块权值W(k)相加得到更新后频域块权值W(k+1);
步骤X40,更新后频域块权值W(k+1)在存储时判定有效位,输出时动态截位并转为块浮点制,作为下一阶段的频域块权值。
本发明的有益效果:
(1)本发明基于块浮点的FBLMS算法的FPGA实现装置及方法,针对FBLMS算法的递归结构,在滤波及权值调整计算过程中采用块浮点数据格式,保证数据具有较大的动态范围,同时根据当前数据块的实际大小进行动态截位,避免有效数据位的损失,提高了数据精度;权值更新与存储时采用扩展位宽的定点数据格式,计算过程中不截位,保证了权值系数的精度。通过在不同计算节点对应采用块浮点及定点数据格式,有效降低了有限字长效应的影响,在保证算法性能和运算速度的同时节省了硬件资源。
(2)本发明在数据计算及缓存过程中采用有效标志同步控制方法,实现复杂时序控制,保证了各计算节点的数据精确对齐。
(3)本发明采用模块化的设计方法,将复杂的算法流程分解成五个功能模块,提高了复用性和扩展性,可通过例化多个实例实现多通道的自适应滤波功能,也可通过提高工作时钟速率来增大可处理的数据带宽。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本发明基于块浮点的FBLMS算法的FPGA实现装置的框架示意图;
图2是本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的输入缓存变换模块数据重叠保留循环存储示意图;
图3是本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的滤波模块数据动态截位流程示意图;
图4是本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的动态截位过程中小数点移位过程示意图;
图5是本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的误差计算与输出缓存模块求差运算流程示意图;
图6是本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的杂波对消应用误差收敛曲线对比图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本发明的一种基于块浮点的FBLMS算法的FPGA实现装置,该装置包括输入缓存变换模块、滤波模块、误差计算与输出缓存模块、权值调整计算模块、权值更新存储模块;
所述输入缓存变换模块,配置为依据重叠保留法对输入的时域参考信号进行分块缓存重组,将分块缓存重组的信号由定点制转换为块浮点制后进行FFT变换、尾数缓存,获得块浮点制的频域参考信号,将所述块浮点制的频域参考信号输出至所述滤波模块、权值调整计算模块;
所述滤波模块,配置为将所述块浮点制的频域参考信号与所述权值更新存储模块发送的频域块权值复乘,并根据分块复乘结果中的最大绝对值判定有效位后进行动态截位,获得滤波后的频域参考信号,将所述滤波后的频域参考信号发送至所述误差计算与输出缓存模块;
所述误差计算及输出缓存模块,配置为对所述滤波后的频域参考信号进行IFFT变换;还配置为对输入的目标信号进行乒乓缓存,并将缓存后的目标信号转换为块浮点制;还配置为对转换为块浮点制的目标信号与IFFT变换后的参考信号求差,获得误差信号;还配置为将所述误差信号分为相同的两路,一路发送至所述权值调整计算模块,另一路转换为定点制后通过循环缓存的方法获取持续输出的对消结果信号;
所述权值调整计算模块基于所述块浮点制的频域参考信号以及所述误差信号,获取块浮点制的频域块权值调整量;
所述权值更新存储模块将所述块浮点制的频域块权值调整量转为扩展位宽定点制后按块更新并进行存储;还用于进行更新后的频域块权值的动态截位后转换为块浮点制,并发送至所述滤波模块。
为了更清晰地对本发明基于块浮点的FBLMS算法的FPGA实现装置进行说明,下面结合图1对本发明实施例中各模块展开详述。
本发明一种实施例的基于块浮点的FBLMS算法的FPGA实现装置,包括输入缓存变换模块、滤波模块、误差计算与输出缓存模块、权值调整计算模块、权值更新存储模块,各模块详细描述如下:
各模块之间的连接关系为:输入缓存变换模块分别连接至滤波模块、权值调整计算模块;滤波模块连接至误差计算与输出缓存模块;误差计算与输出缓存模块连接至权值调整计算模块;权值调整计算模块连接至权值更新存储模块;权值更新存储模块连接至滤波模块。
输入缓存变换模块依据重叠保留法对输入的时域参考信号x(n)进行分块缓存重组,并将分块缓存重组的信号由定点制转换为块浮点制后进行FFT变换和数据缓存,本模块的接口定义如表1所示:
表1
输入的时域参考信号x(n)分为实部xn_re和虚部xn_im两部分,且实部和虚部的位宽均为16bit。FBLMS算法是利用FFT在频域实现自适应滤波运算,由于FFT的处理是按照设定的点数进行的,这样需要对数据进行分段处理,但是频域法对输入数据分段处理后,各处理结果之间拼接可能会出现失真的问题。为了解决这一问题,本发明采用了重叠保留法。输入的时域参考信号为x(n),滤波器阶数为M,把x(n)分成长度相同的段,每段长度记为L,且L要求为2的幂次方,以便进行FFT/IFFT变换操作。相邻分段之间重叠K点,对于重叠保留法,K越大,运算量也越大,最好的情况是重叠点数等于滤波器阶数减1,即K=M-1。每个新数据块的长度为N点,且N=L-M+1。
如图2所示,为本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的输入缓存变换模块数据重叠保留循环存储示意图,依据重叠保留法对输入的时域参考信号进行分块缓存重组的过程包括:
步骤F10,依次将输入的时域参考信号中的K个数据存储到RAM1的末尾;其中,K=M-1,M为滤波器阶数;
步骤F20,依次将K个数据之后的第一批N个数据存储到RAM2中;
步骤F30,依次将第一批N个数据之后的第二批N个数据存储到RAM3中,同时将RAM1中末尾的K个数据以及RAM2中的N个数据作为块长为L点的输入参考信号;L=K+N;
步骤F40,依次将第二批N个数据之后的第三批N个数据存储到RAM1中,同时将RAM2中末尾的K个数据以及RAM3中的N个数据作为块长为L点的输入参考信号;
步骤F50,依次将第三批N个数据之后的第四批N个数据存储到RAM2中,同时将RAM3中末尾的K个数据以及RAM1中的N个数据作为块长为L点的输入参考信号;
步骤F60,跳转步骤F30并循环执行步骤F30-步骤F60直至输入的时域参考信号数据处理完毕。
每个存储RAM配置成简单双端口模式,深度均为N,相应的实现过程中分为一个写控制模块和一个读控制模块,由状态机完成相应的功能。写时钟为低速时钟clk_L,读时钟为高速处理时钟clk_H。在读写控制过程中还要产生write_en_flag和read_en_flag两个标志信号,这两个标志信号送给误差计算模块,用于控制目标信号的缓存和读取过程,以保证参考信号和目标信号在时间上是对齐地。
由于Xilinx最新的FFT核性能很高,为简化编程难度,提高效率,使用FFT核来实现FFT变换。从运算时间和硬件资源两方面进行折衷考虑,采用Radix-4,Burst I/O的实现结构,并采用块浮点方法表示数据处理的结果来提高动态范围。进入FFT核的数据为复数,实部为xn_re,虚部为xn_im,位宽均为16bit,最高位为符号位,其余位为数据位,设定小数点在符号位和第一个数据位之间,即输入数据的实部和虚部均为绝对值小于1的纯小数。每L点的数据为一段,由FFT核进行变换处理。由于设定结果的数据格式为块浮点,所以FFT核的处理结果分为块指数和尾数数据两部分。块指数blk_xk为6bit的有符号数,尾数数据部分的格式与输入数据的格式相同。
FFT变换后的数据要先后用到两次,一次是发送至滤波模块与频域块权值进行卷积运算,一次是发送至权值调整计算模块与误差信号进行相关运算,所以需要对FFT后的数据进行缓存。对于尾数数据,用深度为L的简单双端口RAM进行存储,对于块指数,由于L点的一块数据具有相同的块指数,可用寄存器进行寄存。尾数数据的缓存也分为写控制和读控制两个控制模块,写控制过程中,当FFT结果有效标志data_valid有效时,进入写状态,写完L个数据后回到初始状态。一旦写状态结束,读控制过程由初始状态进入读状态,并令xk_valid_filter标志有效,将数据和有效标志送入滤波模块;同时还要令re_weight标志有效,通知权值更新存储模块开始读取权值送给滤波模块。当ek_flag标志有效时,再次进入读状态,并令xk_valid_weight标志有效,将数据和有效标志送入权值调整计算模块。
滤波模块通过频域复乘代替时域卷积实现滤波作用,并根据分块复乘结果中的最大绝对值判定有效位后进行动态截位,本模块的接口定义如表2所示:
表2
滤波过程的核心是一个复数乘法器,实现频域参考信号和频域权值系数的复数乘法。需要注意的是,进行复乘的两路数据都是块浮点格式,其结果也为块浮点格式。按照运算法则,结果的块指数为两路数据的块指数blk_xk与blk_wk之和,结果的尾数为两路数据的尾数的复数乘积。两路数据尾数的复乘运算可以利用XILINX的复乘核实现,选用硬件乘法器,有4个时钟周期的延迟。在复乘之前,需根据数据有效标志xk_valid_filter和wk_valid将两路数据对齐。两路复数数据的实虚部位宽均为16bit,其复数乘积的位宽扩展为33bit。
由于FBLMS算法的闭环结构,必须对乘积结果进行截位,否则其位宽将不断扩展,直至不可实现。从33bit的结果中截取16bit有多种方法,在截位过程中既要保证不发生溢出,又要考虑充分利用数据的有效位数,提高数据的精度,因此不能固定地从某一位开始截取16bit,而应根据数据的实际大小变动截取位置。设复乘结果的数据有效标志为data_valid,复乘结果数据的实部为data_re,虚部为data_im,如图3所示,为本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的滤波模块数据动态截位流程示意图,其流程包括:
步骤G10,要找出本块复乘结果中L个数据的最大绝对值,为实现这一目的,需将复乘结果数据边比较边存入RAM中暂存,RAM的深度为L,位宽为33bit,当L个数据存储完毕后,便得到了最大绝对值;
步骤G20,从所述最大绝对值的数据的最高位开始检测,寻找第一个不为0的比特位;
步骤G30,设最大绝对值的第n(相对于最低位)位不为0,则第n位即为第一个有效数据位,那么第n+1位即为符号位,也即开始进行数据截取的位置;
步骤G40,将L个数据从RAM中逐个读出,并从第n+1位开始截取16bit,这样既不会溢出,又充分利用了数据的有效位数。
截位后数据的格式与之前相同,即最高位为符号位,小数点在符号位和第一个数据位之间,可见截位过程中小数点发生了移动,为保证数据的实际大小不变,需要相应的调整块指数的大小。如图4所示,为本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的动态截位过程中小数点移位过程示意图,进行复乘的两路数据位宽均为16bit,1位符号位,15位小数位,因此复数乘积应有30bit的小数位,小数点在第30位,截位后相当于将小数点右移到了第n位,共右移了(30-n)位,数据被放大了230-n倍,因此块指数应当再减去(30-n)。所以最终输出数据Y(k)的块指数如式(1)所示:
blk_yk=blk_xk+blk_wk-(30-n) 式(1)
其中,blk_yk代表滤波输出数据的块指数,blk_xk代表频域参考信号的块指数,blk_wk代表频域权值系数的块指数,(30-n)代表截位后小数点右移的位数。
误差计算与输出缓存模块对目标信号d(n)进行分块缓存后转为块浮点制,和滤波输出信号进行相减运算,得到误差信号,并将误差信号转为定点制后缓存输出,得到最终持续输出的对消结果信号e(n),本模块的接口定义如表3所示:
表3
滤波模块的输出Y(k)是频域数据,在对消之前需将其变回到时域。通过控制FFT核的FWD_INV端口,可以方便地实现IFFT运算。XILINX的FFT核在实现IFFT运算时所采用的公式如式(2)所示:
与实际的IFFT运算公式相比,式中缺少了一项乘积因子1/L,因此IFFT的结果被放大了L倍,需要对其进行修正。IFFT的结果也为块浮点形式,令其块指数减去log2L,实际就是将IFFT的结果缩小L倍,实现修正功能。
滤波输出数据为块浮点形式,块指数为blk_yk,将其尾数部分送入FFT核进行IFFT变换,设FFT核输出的块指数为blk_tmp,尾数为yn_re和yn_im,则IFFT结果最终的块指数blk_yn如式(3)所示:
blk_yn=blk_yk+blk_tmp-log2L 式(3)
其中,blk_yk代表滤波截位后数据的块指数。
由于采用了重叠保留法,所以IFFT后的数据要将前M-1点舍去,剩余的N点数据即为时域滤波结果。
对于目标信号d(n),采用乒乓方式进行缓存,低速时钟clk_L写入,高速时钟clk_H读出,并利用读写控制标志write_en_flag和read_en_flag使其与输入参考信号x(n)对齐。
如图5所示,为本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的误差计算与输出缓存模块求差运算流程示意图,滤波结果信号为块浮点数据,可将目标信号看作块指数为零的块浮点数据,两者在进行求差运算之前必须进行对阶处理。对阶时按照小阶对大阶的原则,若滤波结果的块指数大于目标信号的块指数,则将目标信号进行右移,反之,则将滤波结果进行右移。对阶完成后,将两路数据的尾数按照定点数进行求差运算。
求差结果数据分为两路,一路送往权值调整计算模块与参考信号进行相关运算,一路经格式变换和输出缓存后得到最终的对消结果数据。
求差后的数据仍为块浮点形式,在进行输出缓存之前需要将其变为定点形式,即去掉块指数。块指数blk_en≥0,所以需要将数据左移blk_en位,求差之后的数据数值都很小,左移不会导致数据溢出。
同输入缓存相似,利用三个简单双端口RAM实现输出缓存,将高速数据转为低速数据,并实现连续地数据输出,其流程包括:
步骤一,缓存开始,依次将第一批次N个数据存储到RAM8;
步骤二,依次将第二批次N个数据存储到RAM9,同时读取RAM8中的N个数据作为对消结果输出;
步骤三,依次将第三批次N个数据存储到RAM10,同时读取RAM8中的N个数据作为对消结果输出;
步骤四,依次将第四批次N个数据存储到RAM8,同时读取RAM10中的N个数据作为对消结果输出;
步骤五,跳转步骤二并循环执行步骤二-步骤五直至数据输出完毕。
该模块的缓存输出,必须在保证下一段数据到来时,低速时钟已经把上一段的数据全部读出,这样才能保证不丢失数据。由于两段数据之间的时间间隔恰好为低速时钟CLK_L写完N点数据所需的时间,因此,用相同的时钟频率读出N点数据刚好读完,并且能够使数据连续读出。
频域块权值通过权值调整计算模块、权值更新存储模块进行更新,权值调整计算模块用频域相乘实现相关运算,得到频域块权值调整量,本模块的接口定义如表4所示:
表4
误差信号的输出e(k)为N点的时域信号,在其前端插入M-1个零值,再进行L点的FFT变换,得到频域误差信号E(k)。插入零块的方法为:在误差信号有效前的M-1个时钟开始向FFT核发送零值,当发送完M-1个零值后误差信号刚好有效,再将L-M+1点的误差信号送往FFT核。这样既不需要对误差信号进行缓存,又节省了处理时间。
将E(k)的数据有效标志ek_flag送入输入缓存变换模块,当其有效时,开始从RAM4中读取频域参考信号X(k),并作共轭处理,即实部不变,虚部取反,根据ek_flag和xk_valid_weight两个有效标志,将E(k)和XH(k)两路数据对齐,然后进行复乘运算。复乘后数据的位数发生扩展,需要进行动态截位,其具体过程同滤波模块相同。
截位后的数据首先进行IFFT运算,将其变回时域,将相关运算结果的最后L-M个点废弃,得到M点的时域乘积,在其末尾补L-M个零值,再进行L点的FFT变换,得到频域数据,此频域数据仍为块浮点形式,尾数数据的实部和虚部位宽均为16bit。由于步长因子μ在一次对消过程中为常数,且取值通常很小,因此用位宽为16bit的定点制纯小数表示。将两者进行乘积运算,得到频域块权值调整量ΔW(k),其尾数数据的位宽扩展为32bit,不需对其进行截位,直接送往后级处理模块。
权值更新存储模块将频域块权值调整量转为扩展位宽定点制后对频域块权值按块更新并进行存储,在转为块浮点制后送往滤波模块使用,本模块的接口定义如表5所示:
表5
频域块权值的存储要考虑提高数据的精度,减小量化误差,因为FBLMS算法的频域块权值是通过递推公式不断更新的,误差也会不断积累,若数据的精度不高,则经过多次迭代之后,误差将会很大,严重影响算法的性能,可能造成算法不收敛或稳态误差较大。若采用块浮点格式存储,则在权值更新时,频域块权值调整量ΔW(k)和更新前的旧频域块权值W(k)都是块浮点制,两者求和之前要进行对阶处理,在对阶过程中要进行数据移位,会将数据的有效位移出,产生误差。尤其当算法进入收敛状态后,频域块权值在最优值wopt附近波动,此时频域块权值调整量ΔW(k)的值会很小,而旧频域块权值W(k)的值较大,在对阶时按照小阶对大阶的原则,需要将ΔW(k)右移多位,将带来较大误差,使得更新后的频域块权值W(k+1)与最优值wopt之间存在较大偏差,从而可能使算法跳出收敛状态或使稳态误差增大。若采用定点格式存储,则可以通过扩展数据的位宽,使其既具有较大的动态范围,保证在系数更新过程中不会发生溢出;又具有较高的数据精度,使系数的量化误差较小,对算法性能的影响较小。为了保证算法的性能,应选择大位宽的定点制格式对权值系数进行存储。
频域块权值调整量ΔW(k)是块浮点制,要将其化为定点制,在化为定点制之前,需先进行位数扩展,扩展后的位数也即频域块权值存储时的位数。设扩展后位宽为B,则B的确定要考虑两种情况:一方面ΔW(k)去掉块指数时要根据块指数的大小对尾数数据进行移位,位宽B需保证移位后数据不会发生溢出;另一方面,在频域块权值更新递推过程中,W(k)由零初始值不断变大,直到进入收敛状态后在最优值附近上下波动,位宽B要保证在系数更新过程中不会发生溢出。B的值可通过在具体条件下进行多次仿真确定,本发明一个实施例中设定B为36。
由上述可知,ΔW(k)的尾数数据位宽为32bit,其小数点在第30位处,需先通过符号位扩展将其变为Bbit,再根据块指数blk_det_wk的大小进行移位,变为定点数。
采用简单双端口RAM对频域块权值进行存储,其位宽为B bit,深度为L。当频域块权值调整量的有效标志det_wk_valid为1时,即从RAM中逐个读出旧频域块权值,与对应的频域块权值调整量相加,得到新的频域块权值,并将其写回RAM中的原位置,将旧值覆盖。当RAM中的所有位置都更新完毕后,即得到下一段数据滤波所需的频域块权值W(k+1)。
在滤波模块将频域块权值读出使用时,还要通过动态截位将其再变为块浮点制,数据动态截位的方法同滤波模块相同。在将新频域块权值写回RAM的同时,通过比较找到频域块权值中的最大绝对值,根据最大绝对值确定截取位置m。当读出频域块权值时,即从m处开始截取16bit。截位前小数点在第30位处,截位后权值数据的块指数blk_wk为m-30。
为验证本发明的有效性,以FBLMS算法在外辐射源雷达系统中的杂波对消应用为例,采用FPGA+Matlab构建算法实现验证平台。首先设定仿真条件,然后在Matlab中生成数据源文件,包括直达波数据文件和目标回波数据文件;将数据文件分为两路,一路直接在Matlab中进行FBLMS对消处理,得到对消结果数据文件,另一路经格式转换后送入FPGA芯片,在FPGA中实现FBLMS对消处理,并将对消结果生成文件;将两路对消结果数据文件在Matlab中进行处理,分别得到其误差收敛曲线,通过对比对算法功能的实现结果进行验证。
选用XILINX公司Virtex-6系列的XC6VLX550T芯片作为算法实现的硬件平台,其资源利用率如表6所示:
表6
Slice |
FF |
BRAM |
LUT |
DSP48 |
2% |
46% |
5% |
4% |
8% |
如图6所示,为本发明基于块浮点的FBLMS算法的FPGA实现装置一种实施例的杂波对消应用误差收敛曲线对比图,由Matlab对消处理得到的误差收敛曲线和由FPGA对消处理得到的误差收敛曲线基本重合,两者仅相差约0.1dB,验证了FPGA处理结果的正确性,说明基于块浮点的FBLMS算法在FPGA中实现后,不仅可以完成杂波对消功能,并且还可以在保证算法性能的同时占用很少的硬件资源。
本发明第二实施例的基于块浮点的FBLMS算法的FPGA实现方法,基于上述的基于块浮点的FBLMS算法的FPGA实现装置,该方法包括:
步骤S10,将输入的时域参考信号x(n)根据重叠保留法进行分块缓存重组,由定点制转为块浮点制后进行FFT变换得到X(k);
步骤S20,X(k)与当前频域块权值W(k)相乘,并根据本块数据中最大绝对值判定有效位后进行动态截位,得到滤波后的频域参考信号Y(k);
步骤S30,Y(k)经IFFT变换并舍点后得到时域滤波输出y(k),同时把目标信号d(n)分块缓存转为块浮点制得到d(k),d(k)与y(k)进行相减得到误差信号e(k);
步骤S40,误差信号e(k)转为定点制后经缓存输出,得到最终的持续输出的对消结果信号e(n);
频域块权值W(k)随X(k)与误差信号e(k)同步进行调整计算与更新,其方法为:
步骤X10,e(k)插入零块并FFT变换得到频域误差E(k);
步骤X20,求X(k)的共轭并与E(k)相乘,然后与设定的步长因子μ相乘得到频域块权值调整量ΔW(k);
步骤X30,ΔW(k)转为扩展位宽定点制,与当前频域块权值W(k)相加得到更新后频域块权值W(k+1);
步骤X40,更新后频域块权值W(k+1)在存储时判定有效位,输出时动态截位并转为块浮点制,作为下一阶段的频域块权值。
所属技术领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程及有关说明,可以参考前述方法实施例中的对应过程,在此不再赘述。
需要说明的是,上述实施例提供的基于块浮点的FBLMS算法的FPGA实现装置及方法,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。
术语“第一”、“第二”等是用于区别类似的对象,而不是用于描述或表示特定的顺序或先后次序。
术语“包括”或者任何其它类似用语旨在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备/装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括这些过程、方法、物品或者设备/装置所固有的要素。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。