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。

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值