2、符号映射基础:数字调制概念、符号(Symbol)定义、映射(Mapping)与解映射(Demapping)基本流程

数字调制,说白了就是把一串0和1变成能在信道上传输的模拟波形。你想想看,无线信道里跑的是电磁波,不是数字电平,所以我们必须给比特“穿上衣服”——这件衣服就是符号(Symbol)。

2.1 数字调制到底在做什么?

我刚开始接触FRL的时候,对调制一直有一个误解:以为调制就是简单地把“1”变成高电压,“0”变成低电压。后来在项目中调试眼图才发现,根本不是这么回事。真正的数字调制,是把多个比特打包成一个符号,然后把这个符号映射到某个模拟信号的幅度、相位或频率上。说白了,就是信息载体的切换——从比特域切换到模拟域。

为什么要打包?因为一个符号可以携带多个比特,这样在同样的带宽里能传更多数据。举个最简单的例子:QPSK(四相移键控)一个符号携带2个比特;16-QAM一个符号携带4个比特。我做过一个高速接口项目,刚开始用BPSK(1比特/符号)速率一直上不去,后来换成QPSK,吞吐直接翻倍。当然,代价是信噪比要求也高了——凡事都有代价。

核心概念:调制就是把比特序列映射成符号序列,每个符号对应模拟波形中的一个状态。解调则是反向操作。

2.2 符号(Symbol)的定义

一个符号,简单说就是一组比特的“组合代码”。比如说,我们要发送两个比特“01”,在QPSK里它被映射成一个特定的相位(比如+90°)。这个携带了“01”信息的相位状态,就是一个符号。

符号有几个关键参数:

  • 基带符号速率:每秒钟发送的符号个数,单位是Baud(波特)。注意,波特率和比特率不一样——比特率 = 波特率 × 每个符号携带的比特数。
  • 符号周期:发送一个符号所用的时间,是波特率的倒数。
  • 星座图(Constellation Diagram):所有可能的符号在I/Q平面上的分布图。每个符号对应一个点。

我记得有一次测试高速SerDes,示波器上看到星座图点都散开了,挤成一团。排查了半天,发现是时钟恢复环路的带宽没调好——符号率抓不准,解映射全错。嗯,这里要注意:符号率误差对解映射的影响是致命的。

个人经验:在设计映射器时,我习惯把符号索引和比特组合做成LUT(查找表)。这样逻辑清晰,也方便后期改调制方式——只要换一张表就行了,不用动时序逻辑。

2.3 映射(Mapping)与解映射(Demapping)的基本流程

映射就是把比特组转换成符号索引,然后根据调制方式选择对应的I/Q值(或相位/幅度)。解映射则是反过来:根据接收到的I/Q值,找到最近的符号,再恢复出原始比特。

下面是映射和解映射的标准流程:

  1. 串并转换:把连续的比特流按M个比特一组分组(M是每个符号的比特数)。
  2. 比特到符号映射:每组比特查表或计算,得到一个符号编号(通常是整数0~N-1,N是星座点数)。
  3. 符号到I/Q映射:根据符号编号,从星座图LUT中读出对应的I(同相)和Q(正交)幅度值(通常是归一化的复数)。
  4. 脉冲成形+上变频(可选但常见):把I/Q基带信号通过成形滤波器后调制到载波上。

解映射流程基本反向:

  1. 接收/解调:从接收信号中提取出I/Q基带信号。
  2. 符号判决:对每个符号周期内的I/Q采样点,在星座图上找到距离最近的符号点(硬判决)。
  3. 符号到比特映射:根据符号编号反查比特组。
  4. 并串转换:把连续的符号对应的比特组恢复成原始比特流。

警告:在实际系统中,映射和解映射的参考时钟必须严格同源,否则符号定时偏移会导致误符号率急剧上升。我曾经在一个项目中,因为给接收侧和发送侧分别用了不同的晶振,结果解映射出的比特全是乱的……后来加上时钟恢复才解决。

为了让你更直观地理解整个流程,我画了一张结构图(下面这个SVG)。它展示了从比特流到符号映射、星座点,再到解映射和恢复比特的完整链路。

符号映射与解映射流程 映射与解映射基本流程 比特流 0101 1011 ... 串并转换 M比特/组 符号映射 查表 → 符号索引 I/Q映射 星座点 (I,Q) 星座图示意(16-QAM) Q I 符号判决 找最近星座点 符号→比特 反查LUT 并串转换 恢复比特流 发送端(映射) 接收端(解映射)

这张图里,上半部分是发送端的映射流程,下半部分是接收端的解映射流程。中间的星座图是调制的“参考地图”。我画这个图的时候特意把解映射的判决节点放在下半部分——因为实际接收端还需要做均衡、时钟恢复等,但这里我们只聚焦在符号映射本身。

2.4 常见调制方式的符号映射表

不同的FRL速率等级会采用不同的调制方式。下面这张表总结了常见的几种调制及其符号参数。我个人建议你把它收藏下来,做系统仿真时直接参考。

调制方式 每符号比特数 M 星座点数 N=2M 典型应用(FRL速率) 误比特率性能
BPSK(2-PSK) 1 2 RBR 低速 最好(抗噪最强)
QPSK(4-PSK) 2 4 RBR 中速 / HBR 好
16-QAM 4 16 HBR3 / UHBR 中等(信号质量要求提高)
64-QAM 6 64 UHBR 高速(如FRL5) 最差(需要高SNR)

从表里可以看出,调制阶数越高,每个符号携带的比特越多,但星座点越来越密,对噪声也更敏感。我在调试FRL训练序列时,经常需要在速率和鲁棒性之间做权衡——别一味追求高调制阶数,先看看你的信道余量够不够。

警告:符号映射时,比特到符号的编码顺序(Gray coding)很重要!如果不采用格雷码,相邻星座点之间的比特差可能大于1,会导致一个符号错误产生多个比特错误。我曾经在16-QAM方案里没注意这个细节,结果BER(误比特率)翻了三倍……后来改成格雷码编码才恢复正常。

2.5 I/Q平面与星座图——为什么用复数表示?

你可能注意到了,刚才的映射流程里出现了“I/Q映射”。I代表同相分量,Q代表正交分量,它们构成了一个复数平面。说到底,现实世界的正弦波无法同时传输两个独立信息,但我们可以用正交载波把两个基带信号(I和Q)调制到同一个频率上,互不干扰。这样每个符号就同时携带了两个维度上的信息——幅度和相位都能用。

星座图就是把这些I/Q点画出来。比如QPSK的四个点就在四个象限角上,距离原点相同(幅度相同,只有相位不同)。而16-QAM有幅度调制,点的位置不同。你在示波器上看到的星座图,事实上就是符号在I/Q平面上的“指纹”。

个人习惯:我写映射器代码的时候,经常先写一个小的Python脚本生成星座点坐标,然后直接硬编码为系数表。这样做的好处是,仿真和RTL用的数据是一致的,后期验证时少了很多对账的麻烦。你不妨试试。

2.6 映射与解映射的避坑总结

  • 符号率同步:解映射时一定要保证符号定时与发送端对齐,否则判决会落在符号边界附近,出错概率极高。
  • 幅度归一化:映射时I/Q输出幅度要归一化(平均能量为1),否则功率差异会导致射频链路饱和或信噪比不均匀。
  • 硬判决 vs 软判决:实际接收机多用软判决(输出LLR似然比)给译码器,但基础映射/解映射的概念还是硬判决流程。想深入了解可以翻翻后面章节的Training Pattern部分。
  • 位宽截断:在数字实现里,I/Q的位宽有限,映射后的幅度要小心截断——我吃过一次亏,截断后星座点压缩了,导致误码率升高。