调制,就是将原始信号转换为适合在信道中传输的形式的一种过程,在无线通信中,调制一般均指载波调制,而解调则是调制的逆过程,即将原始信号从已调信号中恢复出来。

  进行载波调制,主要为实现以下目标:

  1)在无线传输中,信号是以电磁波的形式通过天线辐射到空间的。为了获得较高的辐射效率,天线的尺寸必须与发射信号波长相匹配。因此,需要通过调制将基带信号的频谱搬迁至较高的频带,使得已调信号的频域与信道的带通特性相匹配,这样就可以以较小的发送功率和较短的天线来辐射电磁波。
  2)将多个基带信号的频谱搬移至不同的频点,从而实现频分复用,提高频谱利用效率。
  3)扩展信号带宽,提高系统抗干扰、抗衰落能力

  在5G NR中,主要使用正交振幅调制(Quadrature Amplitude Modulation, QAM),包括BSPK,QPSK,16QAM, 64QAM, 256QAM等;它是一种振幅和相位联合键控的调制方式,由于其矢量图看似星座,故又称为星座(Constellation)调制。在3GPP 38.211协议中,对物理层各信道的调制以及解调方式进行说明。

  在π/2-BPSK中,二进制比特b(i)映射至复值调制符号d(i)

  在BPSK中,二进制比特b(i)映射至复值调制符号d(i)

  在QPSK中,二进制比特b(2i)和b(2i+1)映射至复值调制符号d(i)

  在16QAM中,二进制比特b(4i), b(4i+1), b(4i+2), b(4i+3)映射至复值调制符号d(i)

  在64QAM中,二进制比特b(6i), b(6i+1),b(6i+2),b(6i+3),b(6i+4),b(6i+5)映射至复值调制符号d(i)

  在256QAM中,二进制比特b(8i), b(8i+1),b(8i+2),b(8i+3),b(8i+4),b(8i+5),b(8i+6),b(8i+7)映射至复值调制符号d(i)

  下面是通过python实现的调制和硬解调的代码:

 # -*- coding: utf-8 -*-
# @Time : 2019/11/24 10:24
# @Author : Administrator
# @File : modulator.py
# @Software : PyCharm import numpy as np class ModulateTable(): def __init__(self, **kwargs):
self._bpsk_cor = np.sqrt(1/2)
self._qpsk_cor = np.sqrt(1/2)
self._16qam_cor = np.sqrt(1/10)
self._64qam_cor = np.sqrt(1/42)
self._256qam_cor = np.sqrt(1/170) self.const_bit = {'BPSK': 1, 'QPSK': 2, '16QAM': 4}
self.bit_table = {'BPSK': np.array( [0, 1] ),
'QPSK': np.array([[0, 0], [0, 1], [1, 0], [1, 1]]),
'16QAM': np.array([[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1],
[0, 1, 0, 0], [0, 1, 0, 1], [0, 1, 1, 0], [0, 1, 1, 1],
[1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1],
[1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1]])} def _bpsk_table(self):
return np.array([1+1j, 1-1j]) def _qpsk_table(self):
return np.array([1+1j, 1-1j, -1+1j, -1-1j]) def _16qam_table(self):
return np.array([ 3+3j, 1+3j, -1+3j, -3+3j,
-3+1j, -1+1j, 1+1j, 3+1j,
3-1j, 1-1j, -1-1j, -3-1j,
-3-3j, -1-3j, 1-3j, 3-3j]) class Modulator(ModulateTable): def __init__(self, **kwargs):
super().__init__(**kwargs)
self.mod_type = kwargs.get('mod_type', '') def modulate(self, input): self._get_symbol_table()
const_bit_num = self.const_bit[self.mod_type]
bit_table = self._get_bit_table(const_bit_num) input = input.reshape((-1, const_bit_num))
order = np.dot(input, bit_table)
ouput = self.symbol_table[order] return ouput def demodu_hard(self, input): self._get_symbol_table()
bit_table = self.bit_table[self.mod_type]
min_loc = list(map(self.cal_distance, input))
output = bit_table[min_loc].flatten() return output def demodu_soft(self, input):
pass def cal_distance(self, rec_symbol):
return np.argmin(abs(rec_symbol - self.symbol_table)) def _get_symbol_table(self): if self.mod_type == 'BPSK':
self.symbol_table = self._bpsk_table() * self._bpsk_cor
elif self.mod_type == 'QPSK':
self.symbol_table = self._qpsk_table() * self._qpsk_cor
elif self.mod_type == '16QAM':
self.symbol_table = self._16qam_table() * self._16qam_cor
else:
raise ValueError("Only support BPSK, QPSK, 16QAM in modulate!") def _get_bit_table(self, bit_num):
return np.logspace((bit_num - 1), 0, bit_num, endpoint=True, base=2).astype(np.int) if __name__ == '__main__': input = np.random.randint(0, 2, 1024) modu = Modulator(mod_type='16QAM')
demodu_in = modu.modulate(input)
demodu_ou = modu.demodu_hard(demodu_in)
print(demodu_in)
print(demodu_ou) if (input == demodu_ou).all():
print("right")
else:
print("error")

5G 调制与解调的更多相关文章

  1. DVB-C系统中QAM调制与解调仿真

    本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...

  2. 【Matlab】BFSK的调制与解调仿真

    写在前面 本篇是[Matlab]BASK的调制与解调仿真的下篇,考虑到阅读体验,故另开一篇分享将BFSK的调制与解调仿真. 索引 写在前面 一.BFSK的调制 1.1 异频载波生成 1.2 信号合并 ...

  3. <转载>调制与解调电路详解

    原文链接:http://www.elecfans.com/analog/20120509270848_4.html 调幅和检波电路 广播和无线电通信是利用调制技术把低频声音信号加到高频信号上发射出去的 ...

  4. matalb 产生信号源 AM调制解调 FM调制解调

    %%%%%%%%%%%%%%%%%%%%%%%%%%% %AM调制解调系统 %%%%%%%%%%%%%%%%%%%%%%%%%%% clear; clf; close all Fs=800000;%采 ...

  5. 解读:20大5G关键技术

    解读:20大5G关键技术 5G网络技术主要分为三类:核心网.回传和前传网络.无线接入网. 核心网 核心网关键技术主要包括:网络功能虚拟化(NFV).软件定义网络(SDN).网络切片和多接入边缘计算(M ...

  6. 小小知识点(二十七)20大5G关键技术

    5G网络技术主要分为三类:核心网.回传和前传网络.无线接入网. 核心网 核心网关键技术主要包括:网络功能虚拟化(NFV).软件定义网络(SDN).网络切片和多接入边缘计算(MEC). 1 网络功能虚拟 ...

  7. 计算机网络模型与5G协议

    计算机网络模型与5G协议 目录 计算机网络模型与5G协议 一.分层思想 1.什么是分层思想 2.分层思想的优势 二.osi七层参考模型 1.国际标准化组织(ios) 2.七层模型及对应功能和硬件 3. ...

  8. 通信原理实践(二)——幅度调制

    一.幅度调制,并画出时域和频域波形 1.代码如下: function [ p_n ] = AM_func( N,fs,fm,Am,fc,Ac,Ma ) %UNTITLED 此处显示有关此函数的摘要 % ...

  9. GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO

    到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...

随机推荐

  1. 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  2. 【故障公告】数据库服务器 CPU 近 100% 引发的故障(源于 .NET Core 3.0 的一个 bug)

    非常抱歉,这次故障给您带来麻烦了,请您谅解. 今天早上 10:54 左右,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)CPU 突然飙升至 90% 以上,应用日 ...

  3. 如何使用Sping Data JPA更新局部字段

    问题描述 在更新数据时,有时候我们只需要更新一部分字段,其他字段保持不变.Spring Data JPA并未提供现成的接口,直接使用save()更新会导致其他字段被Null覆盖掉. 解决办法 通常有两 ...

  4. gin索引优化实例1

    GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一 ...

  5. 0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。

    arm调试过程,如果抛一个SIGSEGV,地址在 0xe7f001f0 附近,原因居然是因为我在调试.当我使用n指令跳到下一行代码时,往往变成了continue指令一样地执行.还不确定地抛出SIGSE ...

  6. Python练习100题

    Python练习100题 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #Filename:001.py cnt = 0#count the sum of res ...

  7. github上传文件让别人下载--xdd

    一.可以下载的条件 仓库要为公开(public) 该文件不可预览或者是图片,如.rar  .gif .png .doc .pdf 等格式 二.打开文件的预览界面,如下 三.将最上面的地址复制给别人即可 ...

  8. React Native从零开始构建项目(2019)

    环境搭建,参考官网 https://reactnative.cn/ 安装 Xcode Android Studio 目的,实现本地热重载开发,使用vsCode 运行失败,重新执行react-nativ ...

  9. 二叉查找树的平衡(DSW算法)

    树适合于表示某些领域的层次结构(比如Linux的文件目录结构),使用树进行查找比使用链表快的多,理想情况下树的查找复杂度O(log(N)),而链表为O(N),但理想情况指的是什么情况呢?一般指树是完全 ...

  10. Django简介以及MVC模式

    一.简介 Django,是当前Python世界里最负盛名且成熟的网络框架.最初用来制作在线新闻的Web站点. Django是一个基于python的web重量级框架 重指的是为发开者考虑的多 采用了MV ...