星座图中格雷映射及其实现
在数字信号的调制中,AWGN信道下,星座图一般是采用gray code 进行编码。
本文讲述格雷码的概念及其分析在星座图中格雷编码映射的必要性,最后给出其Python 代码实现。
link: 星座图中格雷映射及其实现
格雷码
先了解一下gray code 的概念:格雷码是二进制数字系统的一种排序方式,使得两个连续值在比特级别上仅仅相差一位。
例如:十进制的1
在自然二进制中的表示通常为001
,而2
将被编码为010
。对应的格雷码为001
和011
。这样,将一个值从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 的概率判决为11
和00
,均误比特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)
gray code wiki ↩︎
格雷码 ↩︎
星座图中格雷映射及其实现相关推荐
- 不同阶QAM调制星座图中,符号能量的归一化计算原理
文章目录 前言 一.归一化能量计算原理 二.Matlab中如何得到归一化能量符号 总结 前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是 ...
- 通信原理中星座图详解
1 星座图是目前数字调制的一个基本概念.学过通信原理或者数字通信的应该知道,要将数字信号发送出去,一般不会直接发0或者1,而是先将0,1信号(bit)按照一个或者几个组成一组,比如每两个bit组成一组 ...
- 我的星座图 php,星座图映射
姓名:任文 学号:19021210983 学院:电子工程学院 一.基本概念 1.数字调制 数字信号的传输方式分为基带传输和带通传输.大多数的信道因为具有带通性而无法传播基带信号,这是由于基带信号具有丰 ...
- 4位格雷码的顺序编码_一种基于格雷码的方形QAM星座图编码方法和系统与流程...
本发明属于测试技术领域,尤其涉及一种基于格雷码的方形QAM星座图编码方法和系统. 背景技术: 矢量信号分析中通常采用星座图来表征调制信号质量,星座图中星座点的编码方法直接影响信号解调后的BER(即比特 ...
- c语言星座图原理,通信原理中星座图详解
星座图(constellation diagram)有助于定义信号元素的振幅和相位,尤其当我们使用两个载波(一个同相,而另一个正交)时.当处理多电平ASK,PSK或QAM(见下一个节)时,星座图很有用 ...
- MATLAB中BPSK的星座图及误比特率(BER)曲线仿真
课设要求: 假定通信双方在单输入单输出的无线加性高斯信道上,按BPSK的调制方式进行信息传输,试在给定[-15dB.15dB]的信噪比范围,分别完成以下工作: (1)MATLAB分别绘制信噪比为-10 ...
- 转载:通信里 星座图 到底是什么
本文根据知乎的一篇文章整理而来. 要说星座图,要先从IQ调制说起: ##IQ调制: ##IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); subplot(1, ...
- 通信基础:星座图与IQ调制
这篇文章,我是转载的,感觉说的很明白,很好理解,推荐. 要说星座图,要先从IQ调制说起: IQ调制: IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); sub ...
- 通信里 星座图 到底是什么
本文根据知乎的一篇文章整理而来. 要说星座图,要先从IQ调制说起: ##IQ调制: ##IQ解调原理: t=-1:0.001:1; f=1; y=cos(2*pi*2*f*t); subplot(1, ...
最新文章
- C语言网络编程:UDP通信实现
- 全模型组的测试初步结果
- C语言实现链式栈(LinkStack)
- 通过ArrayList对modCount的操作分析fail-fast 机制
- Flyme6系统适配教程(Patchrom)
- python多线程爬虫 爬取多个网页_Python 多线程抓取网页
- 第七节:在 TypeScript 中什么是类型推论?
- matplotlib scale 刻度
- 人工智能及其体系结构_一些复制体系结构错误及其解决方案
- 自动驾驶汽车传感器——摄像头
- 学习笔记(04):2020软考软件设计师--基础知识实战培训视频-数据结构基础--树和二叉树...
- 微信公众号点击图片跳转关注
- win7与internet时间同步出错_电脑时间同步出错怎么办 win7/xp电脑时间同步出错解决方法...
- linux 实时显示网速工具nload
- 进阶的阿牛哥之如何存储每日数据到csv或txt文件(如何实现换行)
- 计算机组成原理乘法器实验报告,Booth乘法器实验报告
- 李乐园:读懂微生物王国的故事
- Python对爬取51job详情进行数据清洗(2)
- linux运维笔记:DNS解析IP地址的过程(dns解析的原理 )
- 超声波风速风向仪换能器 能够在大风速下稳定工作