发明内容
发明目的:针对现有技术中存在的问题,本发明提供一种基于流水线方式的低除法量矩阵求逆定点实现方法及装置,能够实时稳定地对并行输入的数据进行求解,同时提供较快的运算速率和低复杂度的运算操作,能够应用于通信基带系统工程中。
技术方案:本发明中涉及表示方法的定义:
定义1:定义定点化表达形式fixpoint(L,F),其中L为总数值bit数,F表示小数bit数。
定义2:定点化二进制储存格式为:
其中符号位占1bit,如果数据大于零,符号位为0;如果数据小于零,符号位为1。
定义3:任意复数X定点化规则为:分别对real(X)和imag(X)按照定义1和定义2做定点化,其中real()和imag()分别表示取出复数x的实部和虚部;规定定点化后复数X表示为2*XL,其中XL表示实部或虚部,L表示定点化位数。
定义4:右移,right shift(data,n)表示将数据data右移n位;
定义5:左移,left shift(data,n)表示将数据data左移n位;
本发明提出一种低除法量的矩阵求逆定点实现方法,包括以下步骤:
步骤1:根据输入矩阵A的维数确定脉动阵列的维数以及总体架构,所述脉动阵列包括MSGR阵列模块和IAM阵列模块,其中MSGR阵列模块主要完成矩阵A的SGR分解获得上三角矩阵U,并基于存储的系数对与矩阵A同阶的单位矩阵E进行相同的变换获得矩阵B;IAM阵列模块求解上三角矩阵U的逆矩阵U-1,并将U-1与矩阵B相乘;输入数据即作为MSGR阵列模块的输入,MSGR阵列模块的输出作为IAM阵列模块的输入,IAM阵列模块的输出即为矩阵求逆的结果。
待求逆矩阵A的维数决定了MSGR阵列模块以及IAM阵列模块的结构,设矩阵A是N×N维的,则MSGR阵列模块是一个N行N列的上三角模块,包括N个第一类圆形处理单元和N(N-1)/2个第一类方形处理单元;IAM阵列模块是一个N行N列的下三角模块,IAM阵列模块包括1个第二类圆形处理单元、N-1个第三类圆形处理单元、N-1个第二类方形处理单元和(N-1)(N-2)/2个第三个方形处理单元。
步骤2:设计MSGR阵列模块,所述MSGR阵列模块包括第一类圆形处理单元和第一类方形处理单;
步骤2.1:设计MSGR阵列模块的输入;
设是需要求逆的矩阵,是与A同阶单位矩阵,则扩展矩阵B表示为:
(公式1)
将矩阵B以列向并行输入,并对数据流进行补零操作,从而满足实时传输需求。实现步骤均按照按照定义3的数据定点化格式进行,再加上1位对角元素校验位;若该元素是矩阵A的对角元素,则校验位为1;若不是则为0。
步骤2.2:设计第一类圆形处理单元;
所述第一类圆形处理单元将列向输入Yin映射到横向输出Xout,其具体实现方法是:
(1)将列向输入数据Yin分解为数据段Yindata和校验位Yinbit;
(2)参数寄存器赋值:校验位Yinbit和数据位Yindata判别,若Yinbit=1且Yindata=0,则将寄存器R中的值赋为1,若Yinbit=1且Yindata≠0,则将Yindata的共轭Yindata *存入寄存器R,其余情况寄存器R中的值保持不变;
(3)输出寄存器赋值:校验位Yinbit判别,若Yinbit=1,则将Yindata乘以自身的共轭Yindata *,乘法结果经过截位操作后保存在输出寄存器中,Yinbit的值赋给Xoutbit,否则将Yindata乘以寄存器R的值,乘法经过截位操作后结果保存在输出寄存器中,Yinbit的值赋给Xoutbit;
(4)将输出寄存器值Xoutdata和校验位Xoutbit组合成横向输出数据Xout。
步骤2.3:设计第一类方形处理单;
所述第一类方形处理单元将横向输入Xin和列向输入Yin映射到横向输出Xout和列向输出Yout,其具体实现方法是:
(1)将横向输入数据Xin分解为Xindata和横向校验位Xinbit,将列向输入数据Yin分解为Yindata和列向校验位Yinbit;
(2)参数寄存器赋值:横向校验位Xinbit判别,若Xinbit=1,则做横向数据Xindata和列向数据Yindata判别,若Xindata=0且Yindata=0,则寄存器α赋值1,寄存器γ赋值0,寄存器R赋值1,若Xindata=0且Yindata≠0,则寄存器α赋值1,寄存器γ赋值0,寄存器R赋值Yindata的共轭Yindata *,若Xindata≠0,则对Xindata和Yindata调用Block bitshift函数,将Block bitshift(Xindata,Yindata)结果保存在寄存器α中,将Block bitshift(Xindata,Xindata)结果保存在寄存器γ中,并且将Yindata *存入寄存器R中;若Xinbit≠1,则保持寄存器中的参数值不变;
(3)输出寄存器赋值:进行横向校验位Xinbit判别,若为Xinbit=1,则将Yindata乘以自身的共轭Yindata *截位后再加上Xindata,结果保存在横向输出寄存器中,并将列向输出寄存器中的值赋为零,Xinbit的值赋给Xoutbit,Yinbit的值赋给Youtbit;否则将Yindata乘以寄存器R的值截位后再加上Xindata,结果保存在横向输出寄存器中,Yindata乘以寄存器γ的值截位后的值减去Xindata乘以寄存器α的值截位后的值,结果保存在列向输出寄存器中,Xinbit的值赋给Xoutbit,Yinbit的值赋给Youtbit;
(4)将横向输出寄存器值的Xoutdata和Xoutbit组合成横向输出数据Xout,将列向输出寄存器值的Youtdata和Youtbit组合成列向输出数据Yout。
所述Dout=Block bitshift(Adata,Bdata)的具体实现方法是:
(1)查找Adata,、Bdata的最高非零位N、M;
(2)判别N与定义1小数位宽F的关系,若N>F且M>N-F则将Bdata右移N-F位,若N>F且M<N-F,则为右移位溢出,将最小数据min存入输出寄存器,若N<F且M<N+L-F则将Bdata左移F-N位,操作结果存入输出寄存器中,若N<F且M>N+L-F则将将最大数据max存入输出寄存器,若N=F,则无需对Bdata进行操作,其中min和max分别表示按照定义二所能表示的最大和最小非零值,分别为2L-1和2-F。
步骤3:设IAM阵列模块,所述IAM阵列模块包括第二类圆形处理单元、第二类方形处理单元、第三类圆形处理单元、第三类方形处理单元;
步骤3.1:设计第二类圆形处理单元;
所述第二类圆形处理单元将横向输入Xin映射到列向输出Yout,其具体实现方法是:
(1)将横向输入数据Xin分解为数据Xindata和校验位Xinbit;
(2)校验位Xinbit判别,若Xinbit=1,则将1/Xindata存入寄存器R中,输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截位后再乘以-1,乘法结果截位后保存在输出寄存器中;
(3)将输出寄存器值的Youtdata作为列向输出数据Yout。
步骤3.2:设计第二类方形处理单元;
所述第二类方形处理单元将横向输入Xin和列向输入Yin映射到横向输出Xout和列向输出Yout以及参数输出Tout,其具体实现方法是:
(1)将横向输入数据Xin分解为数据Xindata和校验位Xinbit;
(2)校验位Xinbit判别,若Xinbit=1,则将1/Xindata存入寄存器T中,将Yin存入寄存器R中,列向输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截位后再乘以寄存器T的值再经过截位操作,然后用Yin减去该值,结果存入列向输出寄存器中;
(3)横向输出Xout恒等于横向输入Xin;
(4)将列向输出寄存器值的Youtdata作为列向输出数据Yout,将寄存器T的值作为参数输出Tout。
步骤3.3:设计第三类圆形处理单元;
所述第三类圆形处理单元将横向输入Xin和参数输入Tin映射到列向输出Yout,其具体实现方法是:
(1)将横向输入数据Xin分解为数据Xindata和校验位Xinbit;
(2)校验位Xinbit判别,若Xinbit=1,则将Tin存入寄存器R中,输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截位后再乘以-1,乘法结果经过截位保存在输出寄存器中;
(3)将输出寄存器值的Youtdata作为列向输出数据Yout。
步骤3.4:设计第三类方形处理单元;
所述第三类方形处理单元将横向输入Xin和列向输入Yin以及参数输入Tin映射到横向输出Xout和列向输出Yout以及参数输出Tout,其具体实现方法是:
(1)将横向输入数据Xin分解为数据Xindata和校验位Xinbit;
(2)校验位Xinbit判别,若Xindata=1,则将Tin存入寄存器T中,将Yin存入寄存器R中,列向输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截位后再乘以寄存器T的值再经过截位操作,然后用Yin减去该值,结果存入列向输出寄存器中;
(3)横向输出Xout恒等于横向输入Xin;
(4)将列向输出寄存器值的Youtdata作为列向输出数据Yout,将寄存器T中的值作为参数输出Tout。
本发明还提出一种低除法量的矩阵求逆定点实现装置,包括MSGR阵列模块和IAM阵列模块,其中MSGR阵列模块用于对矩阵A进行QR分解得到上三角矩阵U,并基于存储的系数对与矩阵A同阶的单位矩阵E进行相同的变换得到矩阵B;IAM模块对上三角矩阵U进行求逆,并将逆矩阵U-1和矩阵B相乘;
所述MSGR阵列模块包括第一类圆形处理单元和第一类方形处理单元,其中第一类圆形处理单元包括Bit split模块、Bit merge模块、Bit check模块、Data check模块、Delay模块、Conj模块和Bitsat模块;第一类方形处理单元包括Bit check模块、Data check模块和Block bitshift模块;
所述IAM阵列模块包括第二类圆形处理单元、第二类方形处理单元、第三类圆形处理单元和第三类方形处理单元,其中第二类圆形处理单元、第二类方形处理单元、第三类圆形处理单元和第三类方形处理单元都包括Bit split模块、Bit merge模块、Bit check模块和Data check模块;
比特拆分模块(Bit split模块),用于将数据拆分为数据段和校验位,其中数据段用来数值计算,校验位用来判别输入数据是否为矩阵对角元素;
比特合成模块(Bit merge模块),用于将数据段和校验位组合为数据,其中校验位放在最低位;
校验位校验模块(Bit check模块),用于判断校验位是否为1;
数据段检验模块(Data check模块),用于判断数据段是否为0;
延迟模块(Delay模块),用于输入端数据段的对齐操作;
共轭模块(Conj模块),用于数据段的共轭操作;
截位模块(Bitsat模块),用于数据截位操作,来满足不同的数据位宽需求;
比特块移动模块(Block bitshift模块)包括最高非零位获取模块(get bit模块)、右移模块(Right shift模块)和左移模块(Left shift模块),其中get bit模块采用二分查找法来寻找数据的最高非零位;Right shift(data,n)用于将数据按照bit位右移n位;Left shift(data,n)用于将数据按照bit位左移n位。
有益效果:本发明提出的低除法量矩阵求逆定点实现方法及其装置主要有以下优点:第一,在第一类方形处理单元中用查找移位的方法代替除法操作,降低了基带实现的复杂度;第二,整体设计中不会出现多次累乘和累加的结构,避免数据溢出;第三,对IAM阵列中模块接口优化,减少了除法器的使用数量。该矩阵求逆方案能够实现实时的,低复杂度,稳定的矩阵求逆过程,可以运用于通信系统中的基带实现。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
以4×4的矩阵为例,发明提供一种矩阵求逆的并行化定点实现方法及其装置,应用于多输入多输出(Multiple Input Multiple Output,MIMO)通信系统接收端的信道估计和接收端的信号均衡处理。整个求逆装置包括MSGR阵列模块和IAM阵列模块,其中MSGR阵列模块主要完成矩阵A的SGR分解获得上三角矩阵U,随后输入与矩阵A同阶的单位矩阵E,用存储的系数对单位矩阵E进行相同的变换后获得矩阵B;IAM阵列模块利用迭代算法求上三角矩阵U的逆矩阵U-1,并且将U-1与矩阵B相乘,从而完成整个矩阵求逆过程。输入数据即作为MSGR阵列模块的输入,MSGR阵列模块的输出作为IAM阵列模块的输入,IAM阵列模块的输出即为矩阵求逆的结果。
本发明提供的矩阵求逆的并行化定点实现方法,包括如下步骤:
步骤1:根据输入矩阵A的维数确定脉动阵列的维数以及总体架构(如图1),所述MSGR阵列模块是一个4行4列的上三角模块,包括4个第一类圆形处理单元和6个第一类方形处理单元;IAM阵列模块是一个4行4列的下三角模块,IAM阵列模块包括1个第二类圆形处理单元、3个第三类圆形处理单元、3个第二类方形处理单元和3个第三个方形处理单元。
步骤2:设计MSGR阵列模块;
步骤2.1:设计MSGR阵列模块的输入,如图1中MSGR矩阵列向输入数据流时序所示,第1个时序输入a11,0,0,0;第2个时序输入a12,a21,0,0;……;第4个时序输入a14,a23,…,a41,此时矩阵A的第一列元素全部输入完毕;紧接着输入单位矩阵E,即第5个时序输入1,a24,a33,a42;第6个时序输入0,0,a34,a43;……;第8个时序输入0,0,0,a44,此时单位矩阵E的第一列元素全部输入完毕;第9个时序输入x,0,1,0;……;直到单位矩阵E输入完毕,即输入x,x,x,1;如果没有新的待求逆矩阵输入时,x处的元素输入空,如果需要接着进行新的矩阵求逆运算,则在x处输入新的待求逆矩阵元素。
实现步骤均按照fixpoint(32,16)格式进行,按照数据定点化定义3,再加上1bit对角元素校验位来表示输入输出数据,即2*S33;若该元素是待求逆矩阵的对角元素,则校验位为1,否则校验位为0。
步骤2.2:设计MSGR阵列模块中第一类圆形处理单元;如图2和图8所示,第一类圆形处理单元将列向输入YIN映射到横向输出XOUT,具体实现方法是:
(1)列向33bits输入数据Yin流入Bit split模块分解为32bits的数据Yindata和1bit的校验位Yinbit;
(2)参数寄存器赋值:校验位Yinbit和数据位Yindata判别,若Yinbit=1且Yindata=0,则将寄存器R中的值赋为1,若Yinbit=1且Yindata≠0,则将Yindata的共轭Yindata *存入寄存器R中,其余情况寄存器R中的值保持不变;
(3)输出寄存器赋值:校验位Yinbit判别,若Yinbit=1,则将Yindata乘以自身的共轭Yindata *,乘法结果经过截成32bits后保存在输出寄存器中,Yinbit的值赋给Xoutbit,否则将Yindata乘以寄存器R的值,乘法经过截成32bits后结果保存在输出寄存器中,Yinbit的值赋给Xoutbit;
(4)将输出寄存器中32bits的Xoutdata和1bit的校验位Xoutbit组合成33bits的横向输出数据Xout。
步骤2.2.1:第一类圆形处理单元Bit split模块和Bit merge模块功能及算法描述为:
Bit split模块用于数据拆分,将数据拆分为data和校验bit,其中data用来数值计算,校验bit用来判别输入数据是否为矩阵对角元素;
Bit merge模块用于数据组合,将data和校验bit组合为数据,data放在高32位,校验bit放在最低位。
Bit split Bit merge
步骤2.2.2:第一类圆形处理单元Bit check模块和Data check模块的功能及算法描述为:
Bit check模块用来校验bit位是否为1,用于逻辑真假判断;
Data check模块判断data数据是否为0,根据判别结果对给寄存器R进行操作。
Reg R
步骤2.2.3:第一类圆形处理单元Delay模块和Conj模块功能描述为:
Delay模块:用于下一级乘法器输入端data数据对齐;
Conj模块:用于使data数据虚部乘以-1;
步骤2.2.4:第一类圆形处理单元Bitsat模块功能描述为:
Bitsat模块:用于数据截位操作,来满足不同的数据位宽需求。
步骤2.3:设计MSGR阵列模块中第一类方形处理单元;如图3和图9所示,第一类方形处理单元将横向输入Xin和列向输入Yin映射到横向输出Xout和列向输出Yout,具体实现方法是:
(1)横向和列向各33bits输入数据Xin和Yin流入Bit split模块分解为32bits的Xindata、Yindata和1bit的校验位Xinbit、Yinbit;
(2)参数寄存器赋值:横向校验位Xinbit判别,若Xinbit=1,则做横向数据Xindata和列向数据Yindata判别,若Xindata=0且Yindata=0,则寄存器α赋值1,寄存器γ赋值0,寄存器R赋值1,若Xindata=0且Yindata≠0,则寄存器α赋值1,寄存器γ赋值0,寄存器R赋值Yindata的共轭Yindata *,若Xindata≠0,则对Xindata和Yindata调用Block bitshift函数,将Block bitshift(Xindata,Yindata)结果保存在寄存器α中,将Block bitshift(Xindata,Xindata)结果保存在寄存器γ中,并且将Yindata *存入寄存器R中;若Xinbit≠1,则保持寄存器中的参数值不变;
(3)输出寄存器赋值:进行横向校验位Xinbit判别,若为Xinbit=1,则将Yindata乘以自身的共轭Yindata *截成32bits后再加上Xindata,结果保存在横向输出寄存器中,并将列向输出寄存器中的值赋为零,Xinbit的值赋给Xoutbit,Yinbit的值赋给Youtbit;否则将Yindata乘以寄存器R的值截成32bits后再加上Xindata,结果保存在横向输出寄存器中,Yindata乘以寄存器γ的值截成32bits后减去Xindata乘以寄存器α的值截成32bits后的值,结果保存在列向输出寄存器中,Xinbit的值赋给Xoutbit,Yinbit的值赋给Youtbit;
(4)将输出32bits的Xoutdata和Youtdata和1bit的校验位Xoutbit和Youtbit组合成33bits的横向和列向输出数据Xout和Yout。
步骤2.3.1:第一类方形处理单元Bit check模块和Data check模块描述同步骤2.2.1;
步骤2.3.2:第一类方形处理单元Bit check模块和Data check模块描述同步骤2.2.2;
步骤2.3.3:如图10所示,第一类方形处理单元Block bitshift模块的描述为:
在模块的功能实现中,输入端Adata,、Bdata到输出端Dout的映射为Dout=Blockbitshift(Adata,Bdata),具体的实现步骤:
(1)Adata,、Bdata分别输入get bit模块,查找到最高非零位N、M;
(2)判别N与定义一中小数位宽F的关系,若N>F则对Bdata进行右移操作Rightshift(Bdata,N-F),若N<F则对Bdata进行左移操作Left shift(Bdata,F-N),若N=F则不对Bdata进行操作,操作结果存入输出寄存器中;
(3)溢出判断操作,在N>F情况下,若M<N-F则判断为右移位溢出,将最小数据min存入输出寄存器;在N<F情况下,若M>N+L-F则判断为左移位溢出,将最大数据max存入输出寄存器;其中min和max分别表示按照定义二所能表示的最大和最小非零值,分别为2L-1和2-F。
Block bitshift
步骤2.3.3.1:Block bitshift模块中get bit模块描述为:
如图11所示,get bit模块采用二分查找法来寻找数据的最高非零位,输入输出的映射规范表示为N=get bit(data),N初始化为0,具体的实现步骤:
(1)提取输入数据data的位宽L,若L<2则执行步骤(3),否则执行步骤(2);
(2)将data分为高L/2位data1和低L/2位data2,若data1=0,则N=N+0,然后把data2的值赋给data,重新执行步骤(1),若data1≠0,则N=N+L/2,然后把data1的值赋给data,重新执行步骤(1);
(3)判别data是否为0,若data=0则N=N+0,然后输出N,若data≠0则N=N+1,然后输出N;
步骤2.3.3.2:Block bitshift模块中Right shift模块和Left shift模块描述为:
Right shift(data,n)表示将数据data按照定义二的格式按照bit位右移n位;
Left shift(data,n)表示将数据data按照定义二的格式按照bit位左移n位。
步骤3:设计IAM阵列模块;IAM阵列模块的输入为MSGR阵列模块的输出,如图1中IAM矩阵横向输入数据流时序。
步骤3.1:IAM阵列模块中第二类圆形处理单元,如图4和图12所示,第二类圆形处理单元将横向输入Xin映射到列向输出Yout,具体实现方法是:
(1)横向33bits输入数据Xin流入Bit split模块分解为32bits的数据Xindata和1bit的校验位Xinbit;
(2)校验位Xinbit判别,若Xinbit=1,则将1/Xindata存入寄存器R中,输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截成32bits后再乘以-1,乘法结果截成32bits后保存在输出寄存器中;
(3)将输出32bits的Youtdata作为列向输出数据Yout。
步骤3.1.1:第二类圆形处理单元Bit check模块和Data check模块描述同步骤2.2.1;
步骤3.1.2:第二类圆形处理单元Bit check模块和Data check模块同步骤2.2.2。
步骤3.2:IAM阵列模块中第二类方形处理单元,如图5和图13所示,第二类方形处理单元将横向输入Xin和列向输入Yin映射到横向输出Xout和列向输出Yout以及参数输出Tout,具体实现方法是:
(1)横向33bits输入数据Xin流入Bit split模块分解为32bits的数据Xindata和1bit的校验位Xinbit,列向输入32bits输入数据Yin直接赋值给Yindata;
(2)校验位Xinbit判别,若Xinbit=1,则将1/Xindata存入寄存器T中,将Yin存入寄存器R中,列向输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截成32bits后再乘以寄存器T的值再经过32bits截位操作,然后用Yindata减去该值,结果存入列向输出寄存器中;
(3)横向输出Xout恒等于横向输入Xin;
(4)将列向输出32bits的Youtdata作为列向输出数据Yout,将寄存器T中的值作为参数输出Tout。
步骤3.2.1:第二类方形处理单元Bit check模块和Data check模块描述同步骤2.2.1;
步骤3.2.2:第二类方形处理单元Bit check模块和Data check模块同步骤2.2.2。
步骤3.3:IAM阵列模块中第三类圆形处理单元;如图6和图14所示,第三类圆形处理单元将横向输入Xin和参数输入Tin映射到列向输出Yout,具体实现方法是:
(1)横向33bits输入数据Xin流入Bit split模块分解为32bits的数据Xindata和1bit的校验位Xinbit;
(2)校验位Xinbit判别,若Xinbit=1,则将Tin存入寄存器R中,输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截成32bits后再乘以-1,乘法结果经过32bits截位操作保存在输出寄存器中;
(3)将输出32bits的Youtdata作为列向输出数据Yout。
步骤3.3.1:第二类方形处理单元Bit check模块和Data check模块描述同步骤2.2.1;
步骤3.3.2:第二类方形处理单元Bit check模块和Data check模块描述同步骤2.2.2。
步骤3.4:IAM阵列模块中第三类方形处理单元;如图7和图15所示,第三类方形处理单元将横向输入Xin和列向输入Yin以及参数输入Tin映射到横向输出Xout和列向输出Yout以及参数输出Tout,具体实现方法是:
(1)横向33bits输入数据Xin流入Bit split模块分解为32bits的数据Xindata和1bit的校验位Xinbit,列向输入32bits输入数据Yin直接赋值给Yindata;
(2)校验位Xinbit判别,若Xindata=1,则将Tin存入寄存器T中,将Yin存入寄存器R中,列向输出寄存器赋值为零;否则将Xindata乘以寄存器R的值截成32bits后再乘以寄存器T的值再经过32bits截位操作,然后用Yindata减去该值,结果存入列向输出寄存器中;
(3)横向输出Xout恒等于横向输入Xin;
(4)将输出32bits的Youtdata作为列向输出数据Yout,将寄存器T中的值作为参数输出Tout。
步骤3.4.1:第二类方形处理单元Bit check模块和Data check模块描述同步骤2.2.1;
步骤3.4.2:第二类方形处理单元Bit check模块和Data check模块描述同步骤2.2.2。
为了进一步说明本发明的效果,以4×4复数矩阵为例,列出了MSGR阵列模块和IAM阵列模块的资源占用量,如表1所示。
表1MSGR阵列和IAM资源占用量(4×4矩阵为例)
阵列 |
乘法器 |
加法器 |
除法器 |
MSGR阵列 |
32 |
18 |
0 |
IAM阵列 |
20 |
6 |
4 |
为了对比不同定点化方式的求逆效果,针对Matlab随机产生的矩阵,本发明进行了不同定点化方式的仿真,仿真方案如表2所示,仿真结果如表3所示。通过仿真可以得到结论全局fixpoint(32,16)的定点化方式能够准确的对4×4的矩阵进行求逆,误差达到10-8的数量级,而全局fixpoint(16,8)的定点化方式虽然位宽减少了一半,但是误差只有10-4的数量级,精度过低。
表2随机矩阵的定点化仿真方案
方案编号 |
输入数据动态范围 |
运算定点化 |
方案一 |
-214~214 |
fixpoint(16,8) |
方案二 |
-214~214 |
fixpoint(32,16) |
表3随机矩阵的定点化仿真结果
针对Matlab随机产生的随机矩阵流,以100组为例,本发明进行了不同定点化方式的仿真,仿真方案如表3所示,仿真结果如表4所示。通过仿真结果可以看出全局fixpoint(32,16)的定点化方式准确率几乎为100%,但是数据位宽需要32位,全局fixpoint(24,16)的定点化方式虽然数据位宽只需要24位,但是的准确率较低;而数据过程采用fixpoint(32,16)定点方式,乘法器输入端两个数据分别采用fixpoint(24,16)和fixpoint(17,12)是一种较为适中的定点化方式,这种定点化方式主要考虑到FPGA硬件实现上的乘法器资源占用量的问题,从结果上看这种定点化方式位宽适中,准确率也较高。
表4随机矩阵流(100组)的定点化仿真方案
表5随机矩阵流(100组)的定点化仿真结果
方案编号 |
均方误差(NMSE) |
准确率 |
方案一 |
≤10-5 |
92% |
方案二 |
≤10-5 |
99% |
方案三 |
≤10-5 |
97% |