多项式拟合在log-add算法单元中的应用及其FPGA实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多项式拟合在log-add算法单元中的应用及其FPGA实
现
在多路实时语音处理系统中,基于高斯混合概率模型[1,2]的系统后端运
算量非常大,采用log-add 算法单元可以简化运算,提高运算效率。
其函数形
式为[3]:查表法可以认为是多项式次数为0 的情况,随着精度要求的增加,查
找表会变得很大[5]。
函数逼近可以采用多项式拟合,首先根据所需要的精度确
定多项式次数和分段的大小,然后计算每一段的多项式系数。
设分段的大小为d(d=2-k,k=0,1,2),计算各段系数时,各段函数平移到区间[0,d),如图2 所示。
用Matlab 进行多项式拟合依次得到各段系数。
由此可以得出各段的拟合多项式为:这样实现时可以把二进制的定点数x 分为MSBs
和LSBs 两段。
MSBs 对应段标号i,由段标号取出系数ci0,ci1,ci2;LSBs 对应浮点数xl,代表段内偏移值。
由图3 可以计算出f(x)。
MSBs 和LSBs 应该这样选取,例如定标为Q32.f,选择d=1/2,则MSBs 为高32-(f-1)位,LSBs 为低f-1 位;选择d=1/4, 则MSBs 为高32-(f-2)位,LSBs 为低f-2 位;如果MSBs 为32 或31,则变成了查表法。
2 多项式拟合的实现方案2.1 多项式次数与分段大小、精度的关系用Matlab 进行仿真,表1 列出了各种精度要求下各次多项式所需的分段大小(d),其中?啄为精度要求,?茁为多项式的次数。
由表1 可以
看出,相同次数的情况下,精度要求越高,分段大小d 越小;而相同精度的情
况下,次数越高,分段大小d 越大。
另外,次数越低,精度越高,分段大小d
下降的数量级越快。
表2 列出各次多项式在不同精度要求下,所需要系数个数(n)的分布情况。
由表2 可以看出,其结果与表1 趋于一致。
相同次数下,精度
要求越高,所需要的系数个数n 越多;而相同精度下,次数越高,所需要系数
个数n 越少。
n 随着次数的降低和精度的提高迅速增大。
与n 相反,多项式的
计算量随着多项式次数的增加而增加。
根据horner 算法[3]多项式的表达式如下:式(6)表明,多项式次数增加1 次,计算多项式的函数值增加1 次乘法和1 次加法。
多项式系数存储量与多项式的计算量是其FPGA 实现时互相制约的两个因素。
3 仿真结果为了取得面积与速度的平衡,根据测试结果及实际系统的要求,选择δ=10-4、β=1 来实现。
本文采用Xilinx ISE Design Suite 10.1 进行仿真测试。
定标取Q32.23,其硬件实现计算流程如图4,输入为定点数x,
由MSBs 和LBSs 取得系数和xl,经过reg 系数寄存器及1 次乘法和1 次加法,输出y。
时序仿真结果结果如图5。
输入x 是32 bit 的无符号定点数,输出为y;clk 是时钟;reset 为复位信号;MSBs 是x 的高位,用于得到多项式系数;LSBs 是x 的低位即自变量;temp 是用于缓存中间结果,coef[...]是多项式系数。
输出延迟3 个时钟周期,流水线填满后,每个时钟周期输出一个结果。
例如输
入32h00333333(浮点数0.4),从图中可以看出其输出y 为24h41aba5,与实际函数值24h41aa7c 存在误差。
其实现结果与浮点结果比较误差如图6。
可以看
出定点数误差在800 以内,也就是浮点数约10-4 以内,误差范围与表1 相一致。
使用ISE 软件的XST 工具综合,选择设备为Xilinx 公司Virtex5 系列的
XC5VFX100T(speed-2)。
其资源占用情况如表3,其中Xilinx 公司的乘加硬件
设备DSP48E 用于算法中的乘法运算及加法运算[6]。
可以对比δ=10-
4,β=0,1,2,3 四种实现方式的硬件开销,如表4。
由表4 可以看出,
虽然多项式次数为0 时使用寄存器(Registers)和查找表(LUTs)最少,且乘法和加法次数(DSP48Es)为0,但由于其使用了24 乘以40 960 ROM,占用存储面积较大;而一次多项式拟合虽然所占用查找表(LUTs)一项相对较多,但
综合考虑,其他资源占用都比较均衡。
其整体的资源开销要好于其他方案。
log-add 算法单元作为高斯混合概率模型FPGA 实现的基本算法单元,能够简化运算、提高运算效率。
在系统精度要求10-4 的情况下,采用一次多项式拟合能
够有效地节省硬件开销,实现简单快速log-add 算法单元,为大规模实时处理
多路语音数据提供了重要保证。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。