QAM调制及其软解调
本文以16QAM与64QAM为例,介绍QAM调制方式及其软解调。
QAM调制一般采用格雷码,其调制过程如下:
以16QAM为例,可将其分为两部分,高两位沿虚轴自下而上对二进制0到3依次进行格雷码转换。即将00,01,10,11转换为00,01,11,10。低两位则沿实轴自左而右按照同样的方式进行编码,最后得到16QAM调制星座图:
注:采用格雷码进行星座映射有多种方式,本文仅展现了其中一种,其是由Matlab QAM调制函数参数设置为格雷码方式且初始相位为pi/2后得到的,若初始相位为默认值0,则星座图如下所示:
注:初始相位设置为多少对性能并无影响,主要是其对应的软解调方法会稍作调整(同样的解映射方式,但软信息所对应的比特位有所不同——因为经过了相位旋转),而软解调算法的论文研究常将高两位沿虚轴变化,低两位沿实轴变化,其所对应的Matlab QAM函数的初始相位便为pi/2(若初始相位为0,观察上图可知高两位沿实轴变化,低两位沿虚轴变化)。
附录:
1,16QAM二进制转格雷码Matlab代码:
%% 16QAM星座格雷码映射--binary to gray % bitshift函数输入必须是十进制数 % bitxor函数输入必须是十进制数 % a = ['00';'01';'10';'11']; % a = bin2dec(a); a = 0:3; b = bitshift(a,-1); c = bitxor(a,b); d = dec2bin(c);
2,QAM格雷码映射的规则(Gray Code Mapping in QAM)
64QAM调制同理。
初始相位为pi/2的64QAM星座图为:
初始相位为0的64QAM星座图为:
64QAM二进制转格雷码Matlab代码:
%% 64QAM星座格雷码映射--binary to gray % bitshift函数输入必须是十进制数 % bitxor函数输入必须是十进制数 % a = ['000';'001';'010';'011';'100';'101';'110';'111']; % a = bin2dec(a); a = 0:7; b = bitshift(a,-1); c = bitxor(a,b); d = dec2bin(c);
关于QAM的软解调可参考两篇论文,以下给出论文中的关键截图以及论文链接:
16QAM软解调:
64QAM软解调:
QAM软解调一般化:
QAM软解调对边界距离的修正(将常数改为变量):
参考链接:
1,Simplified soft-output demapper for binary interleaved COFDM with application to HIPERLAN/2