反馈环路并行解调代码调试心得

最近在调试一个基于反馈环路的并行解调代码(VHDL in FPGA),主要工作是添加对16QAM的支持(之前只有QPSK)。调试过程颇有些波折,也浪费了不少时间,总结原因于本文结尾。

并行解调代码指的是采用并行多路信号处理架构,以实现信号吞吐率提升,应用于高速无线通信

下面步入正题,列举基本的调试步骤

确保星座图收敛完好

星座图收敛后汇聚于比较小的点,并且无相位偏差和抖动。例如下图所示为16QAM均衡器输出星座图(好吧我承认有点差~)

反馈环路并行解调代码调试心得_第1张图片
星座图Equ.jpg

如果星座图比较发散,需要寻找原因并解决。比较常用的方法是将实际采样信号送给仿真程序(例如matlab),观察仿真程序输出星座图。

好的星座图(不加噪声时)是好的误码性能的基础

确定并行处理的线序

星座图收敛完好并不能保证最终输出的数据时正确的,并行解调算法需要重点关注并行线序的一致性。任何一个模块的线序反向都会造成错误。

代码编写阶段注意约定好线序。如果没有约定,需要明确注释说明接口线序(Big Endian 还是 Little Endian,有符号还是无符号等)。否则后患无穷。

如果出现线序错误需要定位问题,可以发送特定短序列,检查解调输出是否匹配。特定短序列的选取需要能够保证时钟环路的收敛。如果只是随意选取,在16QAM模式下很难保证时钟环收敛。一种简单可行的方式是只发送16QAM外侧的4个点,例如按照4个象限顺时针发送,这样既可保证时钟环路收敛,又可简单有效分析。当然有时候需要更加复杂一点的发送图案。

消除相位模糊度

消除相位模糊度的传统方法是采用差分编码。还有一种方式是周期性插入特定字段,接收端需要查找该特定字段并确认其周期性,如果查找失败就将相位旋转90度,直到查找成功,相位模糊度消除。

本代码采用第二种方式,因为发送端采用了LDPC编码,每个编码块之前都插入了帧头,该帧头可用作消除相位模糊度的特定字段。

加噪声测试性能

以上步骤完成后,可以加噪声测试误码性能。先测试无编码情况下误码特性,与理论值进行对比。可以观察加噪后的解调星座图,是否存在相位旋转、溢出等问题。

先测试无编码情况下误码特性,与理论值进行对比

如果性能较差,可能性比较大的原因有:

  • 滤波器不合适(模拟滤波器、数字滤波器)
  • 信号运算过程有溢出
  • 星座点解映射阈值设置(QPSK无此烦恼)

检测环路收敛的健壮性

避免环路进入错误的锁定状态,是需要重点考虑的问题。即要求环路具有自我检测和重启机制。

对于时钟环和载波环,一种有效的策略是检测环路滤波器的输出是否超出阈值。对于自适应均衡环路,可以采用上面提到的周期性插入特定字段的方式来检测收敛正确性。

调试问题总结

  • 并行代码的线序不一致问题(这个下回注意可避免)
  • 缺少冷静分析(需要跳出来思考)
  • 代码调试迭代周期较长
  • 写代码时考虑不够周全,导致错误和隐藏错误
  • 低估了代码难度

好的程序员应该写代码,而不是改代码

你可能感兴趣的:(反馈环路并行解调代码调试心得)