zoukankan      html  css  js  c++  java
  • 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

    2,一种简化的16QAM软解映射算法

  • 相关阅读:
    高性能MySQL之锁详解
    采样方法-数据不均衡
    bert中的分词
    中文多分类 BERT
    Transformer+BERT+GPT+GPT2
    GPU下train 模型出现nan
    list 转换成dictionary,并统计词频
    python多个分割符split字符串
    tensorflow中的kernel/Adam 变量的来源
    tensorflow 使用预训练好的模型的一部分参数
  • 原文地址:https://www.cnblogs.com/achangchang/p/14236912.html
Copyright © 2011-2022 走看看