我是靠谱客的博主 高贵冬日,最近开发中收集的这篇文章主要介绍SIMULINK通信链路仿真定点问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

链路搭建完成并分析完理论性能后,往往都需要对链路进行定点(也称量化)才可以进行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通信链路仿真定点问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部