概述
链路搭建完成并分析完理论性能后,往往都需要对链路进行定点(也称量化)才可以进行FPGA实现。也就是将链路中浮点型数据(double)向定点型数据(Fixed point)的转换。
在经过以下模块后,需要进行定点操作,在FPGA实现的时候需要进行截位操作。
一、调制之后
调制经过了星座图的映射,让码元(code)转换成符号(symbol),从星座图来看,IQ两路的数据均在整数1以内表达,那么理论上用定点型数据:符号位1位 + 整数位1位 + 小数位即可表达该浮点型数据。
但是在复杂的信道环境,1位的整数位表达调制后的信号太过危险,非常容易存在溢出的情况(数据大于整数位可以表达的范围),我在调制模块后,用Data Type Conversion模块将浮点型数据转换为16Q11定点型数据,此定点数据包含:1位符号位 + 4位整数位 + 11位小数位。
二、乘法器之后
乘法器在FPGA中用的是一个IP核,出来的数据需要进行定点操作。
定点型数据相乘,整数位数相加,小数位数相加(小数位可根据所需精度截尾)。
举例:16Q12(1位符号位 + 3位整数位 + 12位小数位)乘以16Q12的结果,需要用1位符号位 + 6位整数位来表达,小数位仅表示精度,所以结果理论用31Q24表达,习惯多一个整数位即32Q24。
16Q12 * 16Q12 = 32Q24
32Q24 * 16Q11 = 48Q35
以下为定点示例:
三、除法器之后
除器在FPGA中也用的是一个IP核,,出来的数据需要进行定点操作。本质与乘法器一样。
链路中为了SIMULINK不报错便于查看,过乘法器/除法器之前,又将数据转换成double型再过。但仿真终是仿真,而在FPGA中,一直是以定点型数据进行操作的,这也是我们做定点的意义。
除法器定点示例:
四、FFT / IFFT之后
FFT / IFFT在FPGA中用的是一个IP核,出来的数据需要进行定点操作。
FFT / IFFT定点示例:
五、定点后误码率0.5,错误排查
定点后误码率归为0.5,通过挨个注释定点模块conver排查错误,大部分错误都是整数位没有给够,导致数据溢出产生误码。
找到这个模块后,注释它会将链路误码率重归为0
开始我定点的是32Q16,最高只能表达到2^15 = 32,768,从display或time scope明显能看出数据大于 32,768,存在明显溢出。1.5*10^5级别的数至少需要2^18 数量级来表达。
我直接修改为32Q12(1位符号位 + 19位整数位 +12位小数位)后,数据不存在溢出现象了,误码率重归于0。
最后
以上就是高贵冬日为你收集整理的SIMULINK通信链路仿真定点问题的全部内容,希望文章能够帮你解决SIMULINK通信链路仿真定点问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复