在数字信号的调制中,AWGN信道下,星座图一般是采用gray code 进行编码。

本文讲述格雷码的概念及其分析在星座图中格雷编码映射的必要性,最后给出其Python 代码实现。

link: 星座图中格雷映射及其实现

格雷码

先了解一下gray code 的概念:格雷码是二进制数字系统的一种排序方式,使得两个连续值在比特级别上仅仅相差一位。

例如:十进制的1 在自然二进制中的表示通常为001,而2将被编码为010。对应的格雷码为001011。这样,将一个值从1递增至2
对应的编码仅仅需要更改一位比特,而不是两位。

格雷码广泛用于数字通信系统中的纠错1

  • k k k 位二进制数的格雷码序列可以当作 k k k 维空间中的一个超立方体(二维里的正方形,一维里的单位向量)顶点的哈密尔顿回路,其中格雷码的每一位代表一个维度的坐标。

格雷星座映射

在QAM等数字调制方案中,数据通常以4 位或更多位的符号传输,信号的星座图被安排为使得相邻星座点传送的位模式仅相差一位。通过将其与能够纠正单个比特错误的信道编码结合,接收器可以纠正任何导致星座点偏离到相邻点区域的传输错误。这使得传输系统不易受噪声影响。

例如4QAM信号,其自然映射和格雷星座映射为:

:–: :–: :–: :–:
数据比特 十进制 自然映射 格雷映射
00 0 -1-1j -1-1j
01 1 -1+1j -1+1j
10 2 1+1j 1-1j
11 3 1-1j 1+1j

假设AWGN信道下,某码元发送10 数据比特,接收端采用最大似然判决 y = x + n y=x+n y=x+n, x ^ = arg ⁡ min ⁡ x ∣ ∣ y − x ∣ ∣ \hat{x}=\arg\min_x ||y-x|| x^=argminx​∣∣y−x∣∣ ,采用不同映射,有以下情形:

  • 自然:对应发送1+1j ,有 P 1 P_1 P1​ 的概率被判决为1-1j(即判为11,误比特数1个), P 1 P_1 P1​的 概率被判决为01(误比特2个), P 2 ( P 2 < P 1 ) P_2(P_2<P_1) P2​(P2​<P1​) 的概率被判决为00(误比特1个) ,那么平均误比特 3 P 1 + P 2 3P_1+P_2 3P1​+P2​ 个
  • 格雷:对应发送1-1j, P 1 P_1 P1​ 的概率判决为1100,均误比特1个, P 2 P_2 P2​的概率判为01,误比特 2 P 1 + 2 P 2 2P_1+2P_2 2P1​+2P2​
  • 3 P 1 + P 2 > 2 P 1 + 2 P 2 3P_1+P_2>2P_1+2P_2 3P1​+P2​>2P1​+2P2​

发送其余数据比特时,情形类似。可以发现AWGN信道下格雷映射方案的BER性能是优于自然映射的。相比于正常二进制映射,使用格雷码可以降低总体错误率。这也是星座映射采用格雷映射的原因。

格雷码的构造2

我们观察以下 n n n 维的二进制和其格雷码 G ( n ) G(n) G(n)。如果 G ( n ) G(n) G(n) 的二进制第 i i i 位为1,仅当 n n n 的二进制第 i i i 位为 1,第 i + 1 i+1 i+1 位为 0 0 0 或者 第 i i i 位为 0 ,第 i + 1 i+1 i+1 位为 1。于是可以当成一个异或运算:

G ( n ) = n ⊕ ⌊ n 2 ⌋ G(n)=n\oplus \lfloor\frac{n}{2}\rfloor G(n)=n⊕⌊2n​⌋

int g(int n) { return n ^ (n >> 1); }

代码实现

  • 二维QAM格雷映射基于这样一种思想: 如果每一维是格雷映射的,那么他们的笛卡尔积也是格雷的。即两个gray mapping 的PAM映射组合起来就是QAM gray mapping.
  • 二维的PSK gray mapping 和一维PAM gray mapping 类似。

Python 实现

import numpy as np
def qam_constellation(M,normalize=False):""" M must be 2^k ,where k is an even integergray mappingparam:- M: the size of qam set- normalize: normalize the average energy qam symbols unitreturn:1-D numpy array"""assert np.log2(M).is_integer()m = int(np.sqrt(M))x = np.zeros(m,np.int32) # gray mapping binding to natural numbery = np.zeros(m,np.int32) # mappping natural number to gray code in octalnatural2gray = lambda x: x ^ (x >> 1)x[natural2gray(np.arange(0, m))] =  np.arange(0, 2*m,2) -m+1y[natural2gray(np.arange(0, m))] =  np.arange(0, 2*m,2) -m+1constellation = np.zeros((m, m), dtype=np.cfloat)for i in range(m):for j in range(m):constellation[i][j] = (x[i]+1j* y[j])if normalize:return constellation.flatten()/(np.linalg.norm(constellation)/m)else:return constellation.flatten()def psk_constellation(M):""" gray mappingparam:- M: the size of psk set- normalize: normalize the average energy qam symbols unitreturn:1-D numpy array"""phase = np.arange(0, M) * 2 * np.pi / Mconstellation = np.zeros(M, dtype=np.cfloat)natural2gray = lambda x: x ^ (x >> 1)constellation[natural2gray(np.arange(0, M))] = np.exp(1j * phase)return constellationdef mapping(data, constellation):"""param:- data: binary data in 1-D numpy array- constellation: 1-D numpy arrayreturn:1-D numpy array"""M = len(constellation)assert np.log2(M).is_integer()assert len(data) % np.log2(M) == 0data = data.reshape(-1, int(np.log2(M)))mask = np.array([2**i for i in range(int(np.log2(M))-1, -1, -1)]) # [8,4,2,1]index = np.sum(data * mask, axis=1) # left firstreturn constellation[index]if __name__ == "__main__":qam_16 = qam_constellation(16)psk_4 = psk_constellation(4)print(qam_16)print(psk_4)binary_data = np.random.randint(0, 2, 128)psk_symbols = mapping(binary_data, psk_4)qam_symbols = mapping(binary_data, qam_16)print(psk_symbols)print(qam_symbols)

  1. gray code wiki ↩︎

  2. 格雷码 ↩︎

星座图中格雷映射及其实现相关推荐

  1. 不同阶QAM调制星座图中,符号能量的归一化计算原理

    文章目录 前言 一.归一化能量计算原理 二.Matlab中如何得到归一化能量符号 总结 前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是 ...

  2. 通信原理中星座图详解

    1 星座图是目前数字调制的一个基本概念.学过通信原理或者数字通信的应该知道,要将数字信号发送出去,一般不会直接发0或者1,而是先将0,1信号(bit)按照一个或者几个组成一组,比如每两个bit组成一组 ...

  3. 我的星座图 php,星座图映射

    姓名:任文 学号:19021210983 学院:电子工程学院 一.基本概念 1.数字调制 数字信号的传输方式分为基带传输和带通传输.大多数的信道因为具有带通性而无法传播基带信号,这是由于基带信号具有丰 ...

  4. 4位格雷码的顺序编码_一种基于格雷码的方形QAM星座图编码方法和系统与流程...

    本发明属于测试技术领域,尤其涉及一种基于格雷码的方形QAM星座图编码方法和系统. 背景技术: 矢量信号分析中通常采用星座图来表征调制信号质量,星座图中星座点的编码方法直接影响信号解调后的BER(即比特 ...

  5. c语言星座图原理,通信原理中星座图详解

    星座图(constellation diagram)有助于定义信号元素的振幅和相位,尤其当我们使用两个载波(一个同相,而另一个正交)时.当处理多电平ASK,PSK或QAM(见下一个节)时,星座图很有用 ...

  6. MATLAB中BPSK的星座图及误比特率(BER)曲线仿真

    课设要求: 假定通信双方在单输入单输出的无线加性高斯信道上,按BPSK的调制方式进行信息传输,试在给定[-15dB.15dB]的信噪比范围,分别完成以下工作: (1)MATLAB分别绘制信噪比为-10 ...

  7. 转载:通信里 星座图 到底是什么

    本文根据知乎的一篇文章整理而来. 要说星座图,要先从IQ调制说起: ##IQ调制: ##IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); subplot(1, ...

  8. 通信基础:星座图与IQ调制

    这篇文章,我是转载的,感觉说的很明白,很好理解,推荐. 要说星座图,要先从IQ调制说起: IQ调制: IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); sub ...

  9. 通信里 星座图 到底是什么

    本文根据知乎的一篇文章整理而来. 要说星座图,要先从IQ调制说起: ##IQ调制: ##IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); subplot(1, ...

最新文章

  1. C语言网络编程:UDP通信实现
  2. 全模型组的测试初步结果
  3. C语言实现链式栈(LinkStack)
  4. 通过ArrayList对modCount的操作分析fail-fast 机制
  5. Flyme6系统适配教程(Patchrom)
  6. python多线程爬虫 爬取多个网页_Python 多线程抓取网页
  7. 第七节:在 TypeScript 中什么是类型推论?
  8. matplotlib scale 刻度
  9. 人工智能及其体系结构_一些复制体系结构错误及其解决方案
  10. 自动驾驶汽车传感器——摄像头
  11. 学习笔记(04):2020软考软件设计师--基础知识实战培训视频-数据结构基础--树和二叉树...
  12. 微信公众号点击图片跳转关注
  13. win7与internet时间同步出错_电脑时间同步出错怎么办 win7/xp电脑时间同步出错解决方法...
  14. linux 实时显示网速工具nload
  15. 进阶的阿牛哥之如何存储每日数据到csv或txt文件(如何实现换行)
  16. 计算机组成原理乘法器实验报告,Booth乘法器实验报告
  17. 李乐园:读懂微生物王国的故事
  18. Python对爬取51job详情进行数据清洗(2)
  19. linux运维笔记:DNS解析IP地址的过程(dns解析的原理 )
  20. 超声波风速风向仪换能器 能够在大风速下稳定工作

热门文章

  1. 一个简单的个人视频点播网站制作(一)
  2. 【附源码】Python计算机毕业设计社团管理系统
  3. VUE 嵌入 WPS插件
  4. SSL证书的根证书和中间根证书的区别
  5. 请求与通配符 mime 映射相匹配。请求映射到静态文件处理程序。如果有不同的前提条件,请求将映射到另一个处理程序。
  6. python爬虫实战-bs4爬取2345电影
  7. 软件测试怎么做?靠谱第三方软件测评公司有哪些?
  8. 在互联网上传输文件 —— FTP协议
  9. 计算机视觉的一些SCI期刊
  10. win10如何更改计算机用户名,怎么更改账户用户名,教你win10系统更改账户用户名称教程...