通信算法之205 : MSK调制解调

转载:

 

MSK(Minimum Shift Keying):

 

 

MSK调制出现在上世纪六七十年代,因其频率间隔小、恒包络、相位连续、主瓣窄等特性,它在GSM等系统中得到了应用。

随着功放技术的发展及抗衰落方法的不断出现,输出的恒包络特性已不再是选择调制方式的主要依据。MSK调制1bit/s/Hz的频带利用率上限也无法适应带宽紧缺的通信场景,在3G及以后的移动通信中它被高阶的PSK和QAM等取代。

但在一些特定的场合如深空通信,卫星通信等,MSK仍有用武之地。

本文总结个人学习MSK的结果,主要包含以下内容:

  1. MSK调制过程

  2. MSK解调方法

  3. MSK调制解调实现中碰到的几个问题和概念理解

一、MSK调制过程

MSK由2FSK发展而来,与2FSK的相同之处是:0调制在一个频率f1,1调制在另一个频率f2。相比2FSK的改进在于:相位连续,频率间隔小,两个载频信号正交。

MSK调制中每个码元调制波形的初始相位为上一个码元波形结束时的相位,保证相位连续。这样做是为了克服2FSK调制在码元由0到1及由1到0时波形发生相位突跳的问题,相位突跳产生不必要的高频,影响传输效率。

MSK选择正交且间隔最小的f1和f2频率的余弦,达到减小传输带宽的目的。0和1调制的两个余弦波正交,即一个周期内二者乘积的积分为0。这些条件约束了两个调制频率f1、f2和码元周期Tb的特定关系。

一是约束频率差值(f1-f2):两个频率的差值等于码元频率的一半,即f1-f2=0.5/Tb,调制指数0.5,以此保证已调信号的传输带宽最小。f1和f2以(f1+f2)/2为中心,左右偏(f1-f2)/2,即1/(4*Tb)。由频率偏移量可知,在一个码元周期Tb内,附加相位(除去随时间增长的载波相位后的相位)变化为2π*Tb/(4*Tb)即π/2。据此可画出相应的相位网格图。

二是约束和值(f1+f2):二者的平均值(f1+f2)/2作为载波,在一个码元周期Tb内,应包含1/4载波周期整数倍的波形。

MSK的调制实现主要有两种方式。

第一种,根据输入切换不同频率的余弦波输出。数据为0时输出频率为f1的余弦,数据为1时输出频率为f2的余弦。每个码元对应输出波形的初始相位需设定,第k个码元的初始相位,由第k-1时刻的初始相位和第k个码元共同决定。

第二种,正交调制。正交调制把频率为f1,f2的两个信号由(f1+f2)/2和(f1-f2)/2来表示。经过三角函数和差化积,调制波形由这两个频率的正余弦组合而成。

正交调制实现方式有很多,常见的一种是这样:码元经过编码、差分、串并转换后分为I通道和Q通道,Q路相对I路延迟一个Tb。IQ通道分别经两次相互正交的载波相乘,第一次是频率偏移载波,频率是1/(2*Tb),第二次为频带载波,频率为(f1+f2)/2。最后,如果不需上变频则IQ两路相加后到天线发送,如果(f1+f2)/2仅为中频,则模拟上变频到射频后到天线发射。

二、MSK解调

MSK解调分为非相干和相干解调。每种包含若干实现方法。

非相干解调主要考虑一位和两位差分延迟解调。方法是构造一个接收信号的副本,副本信号为接收信号延迟一个Tb移相π/2或者延迟两个Tb后的信号。副本和接收信号相乘,通过积化和差,得到两个频率的信号,滤除其中的高频信号,去掉(f1+f2)/2的影响。剩下的信号中包含数据信息,通过构造门限和判决函数,获取输入码元。这种方法的性能依赖位同步的精度。

相干解调则依赖于载波同步和位同步的性能。如果接收端能够准确恢复出调制时的两个载波频率和位同步信息,可得最佳接收机。接收信号分别与I路和Q路的载波相乘,在两个Tb内积分,判决出I路和Q路的数据,并串转换后得出解调结果。

载波和位同步信号的获取方法很多。以平方环为例,接收信号经过平方变换产生两个离散的倍频频率分量2f1和2f2。锁相环提取后,两个信号相乘过低通得到定时信号,即频率为f1-f2的脉冲。两个信号分别二分频,经和差化积得到IQ两路通道所需两个载波即频率为(f1+f2)/2和(f1-f2)/2余弦的乘积。

三、MSK实现中的几个问题和概念理解

(1)Matlab自带MSK调制函数mskmod。默认'diff'参数时,输入的原始数据需要经过差分编码。如果采用上文第一种调制方法,基带输出和mskmod输出不一致,需要将输入改为补码。其中原因未明确,mskmod函数说明中参考了一本1995年的书,没找到,未了解过程推导。不同的文献,差分编码的方法不同,尽管基带调制星座图保持在圆上,但输出值不同,有正负号的区别。

(2)IQ两路的相对延时。正交调制时,Q路相对于I路有一个Tb的延时,这个相对延时的定义不太准确。根据编码规则,在[0 Tb]的码元,即第一个值给Q路;第二个值即[Tb 2Tb]的码元给I路。此处所指的Q路延时一个Tb,应该是指从[-Tb 0]有一个初始值给I路,这个值对解调没有意义,因为解调出来的第一个值即[0 Tb]的值是由Q路得出的。所以看上去更像I路相对Q路延迟一个Tb。

(3)从两级调制角度看正交调制的MSK。第一级与第一个载波相乘,形成基带调制,相当于脉冲成型,和升余弦滤波的作用类似;第二级实现频率搬移,对IQ路的载波进行幅度调制。

根据文献[3],GMSK在矩形脉冲成型和MSK调制之间加高斯滤波,为了改善带外泄露,这很难理解。普通MSK的输入是0、1的比特流,高斯滤波输出已经是采样值了,内部细节下一步有需要再看。

(4)MATLAB自带MSK解调函数mskdemod。其中接收信号和载波相乘,I路载波前移π/2,Q路载波后移π/2,解释是“不同相位偏移是因为I路有循环移位”。此处移动π/2相当于将载波波形前移或者后移一个Tb,为了和调制时的载波波形匹配,但不清楚调制时IQ两路码字经过了怎样的平移。

(5)MATLAB仿真中载波和位同步是完美的,我想这在硬件实现时是最大的困难,精度不好保证。

(6)对调制相关概念的理解。

调制:在数字域,狭义的定义指数据流到符号的变换,将0,1映射到星座图,所谓基带调制;广义的定义指将0,1搬到射频信号的幅度、频率或相位上的全过程,0,1映射成符号后,经过脉冲成型,DAC,按星座点的值对I路、Q路的载波进行幅度调制,实现频率搬移。在模拟域,调制指将信息调制在载波的幅度或角度上。

负频率:傅里叶变换将信号分解为若干复指数信号的和,其中有负频率,例如正弦信号的傅里叶变换包含一正一负两个冲击函数。如果按频率是周期的倒数这个定义,负频率无法解释。从复数域看,复指数函数的频谱只有一个冲击,根据欧拉公式,正弦信号等于两个正负频率的复指数函数之和,即正弦信号有正负两个频率。在极坐标系,正频率是逆时针旋转的角速度,负频率是顺时针旋转的角速度。对于正弦函数而言,两个复指数函数的频率互为相反数,对应于两个向量对称于实轴以相同的速度旋转,叠加后始终在实轴上。将信号在复数域上表示为解析表达式,除了数学上的严谨和美观,在IQ调制、单边带信号生成上也体现了实用价值。

单边带:实信号的频谱共轭对称,分为上边带和下边带,上下边带携带的信息相同,只有一个边带的信号称为单边带信号,单边带频谱足够恢复出原始信号,可以提高频带利用率。单边带信号可通过滤波产生,也可以通过希尔伯特变换产生。希尔伯特变换产生单边带信号的过程和IQ调制类似,Q路的输入是I路输入的希尔伯特变换,IQ两路乘以同频的正余弦信号后相加。时域把信号变换成两路后相加在频域表现为抵消了一个边带的信号。

IQ调制:从三角函数变换看,一路信号实现载波搬移用乘法器,两个余弦相乘得两个余弦之和,需要滤掉其中之一得到需要的调制信号,由单边带信号生成可以看出,采用IQ调制后不需要滤波,通过三角函数积化和差得到单频信号;从模拟调制看,IQ两路的载波同频正交,可以同时传输两路信号,接收端分别乘以两个载波后滤波可恢复出两路信号;从数字调制看,星座图上实轴和虚轴的坐标值,对应于IQ两路调制的幅度值,在发送端合成,在接收端可以分别提取。

 

调制的目的是将信息搬到特定的频段的正弦波上,以适应信道,需要考虑信息的有效表示和频谱搬移。基本原理只能算皮毛,难点在工程实现,IQ均衡、同步、信道估计等想起来就有点路漫漫。

 

参考文献

[1]唐良伟. MSK数字调制解调及其实现技术研究. 成都: 电子科技大学, 2007.

[2]杜勇. 数字调制解调技术的MATLAB与FPGA实现(第二版). 北京:电子工业出版社, 2020.

[3]杨学志. 通信之道  从微积分到5G. 北京:电子工业出版社, 2016.

[4]陈爱军. 深入浅出通信原理. 北京:清华大学出版社, 2018.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UG NX二次开发(C#)-PMI-获取PMI的尺寸数据(二)

文章目录 1、前言2、在UG NX中创建一个带有PMI的三维模型3、查找PMI的数据结构3.1 PMI数据结构3.2 Dimension的数据结构3.3 获取所有的尺寸3.4 完整的代码3.5 测试结果1、前言 在前面写的一个博客中UG NX二次开发(C#)-PMI-获取PMI尺寸数据中介绍了再NX2007中获取尺寸数据的例子…

深入理解JavaScript - JavaScript中call、apply、bind方法

一、call() / apply() JavaScript中的函数是对象,与其他JavaScript对象一样,JavaScript函数也有方法。其中有两个自带的方法 – call和apply,可以利用这两个方法来间接调用某个函数。 通过一个简单的例子体会一下call和apply的用法: funct…

嵌入式学习54-ARM3

S3c2440中断控制器 内部外设: DMA :(直接内存存取) Direct Memor…

课时94:脚本自动化_脚本信号_信号基础

2.1.1 信号基础 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 当我们在构建一些更高级的脚本的时候,就会涉及到如何在linux系统上来更好的运行和控制它们,到目前为止,我们运行脚本的方式都是以实时…

基于docker的开发者集成环境

docker-compose一键部署开发者环境。 常见的中间件:nginx, mysql, redis, mongo, rabbitmq, nacos, rocketmq, zookeeper等。 GIthub项目地址 1. 下载项目:git clone https://github.com/xhga/docker-develop-env.git 2. 进入文件夹:cd d…

服务器测试之intel E8102CQDA2

这个卡是个双口100G双芯片的卡,QSFP28 单口速率100G,双口200G 1.BIOS下pcie带宽设置 服务器BIOS下支持设置PCIE link width 设置x8x8,否则只能显示一个网口,如下图 E810-2CQDA2需要BIOS下设置该卡槽位pcie slot link width 设置x8…

Paddle实现人脸对比(二)

我之前发过一篇基于孪生网络的人脸对比的文章,这篇文章也到了百度的推荐位置: 但是,效果并不是很好。经过大量的搜索,我发现了一种新的方法,可以非常好的实现人脸对比。 原理分析 我们先训练一个普通的人脸分类模型&…

OpenCV4.10使用形态运算提取水平线和垂直线

目标 在本教程中,您将学习如何: 应用两个非常常见的形态运算符(即膨胀和侵蚀),并创建自定义内核,以便在水平轴和垂直轴上提取直线。为此,您将使用以下 OpenCV 函数: erode()dilate…

认识异常(2)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…

python创建word文档并向word中写数据

一、docx库的安装方法 python创建word文档需要用到docx库,安装命令如下: pip install python-docx 注意,安装的是python-docx。 二、使用方法 使用方法有很多,这里只介绍创建文档并向文档中写入数据。 import docxmydocdocx.Do…

基于生成对抗网络在服装领域的发展脉络和应用趋势

文章目录 1、概述2、深度学习图像生成模型2.1、深度信念网络(Deep belief network,DBN)2.2、变分自编码器(Variational auto-encoder,VAE)2.3、生成对抗网络(Generative adversarial networks,GAN) 3、 模型对比分析4、基于多模态转换的服装图…

nexus搭建maven与docker镜像的私有仓库

引言 通过nexus搭建maven与docker镜像的私有仓库,实现jar包与镜像动态更新、共享、存储。 一、nexus部署 通过docker-compose部署nexus name: java services:#############################环境#############################env-nexus:restart: always## 3.58.1image: so…

代码随想录算法训练营第三十七天| LeetCode 738.单调递增的数字、总结

一、LeetCode 738.单调递增的数字 题目链接/文章讲解/视频讲解:https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 状态:已解决 1.思路 如何求得小于等于N的最大单调递增的整数?98&am…

libcurl库与cpp-httplib库区别

1. 介绍 libcurl库 libcurl是一个功能强大的客户端URL传输库,支持多种协议如HTTP、FTP、SMTP等。它提供了丰富的API接口,使得开发者能够使用统一的接口来发送或接收数据。libcurl适用于需要处理多种协议和复杂的网络传输任务的场景,具有高度…

【C语言基础】:编译和链接(计算机中的翻译官)

文章目录 一、翻译环境和运行环境1. 翻译环境1.1 编译1.1.1 预处理1.1.2 编译1.1.3 汇编 1.2 链接 2. 运行环境 一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息,计算机是不能够直接执行他们的,计算机只能够执行二进制…

第6章 6.4.1 案例一:爬取亚洲各地区的实时时间(MATLAB入门课程)

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 本案例将引导大家爬取亚洲各地区的实时时间。我们将从下面这个网…

第 128 场 LeetCode 双周赛题解

A 字符串的分数 模拟 class Solution {public:int scoreOfString(string s) {int res 0;for (int i 1; i < s.size(); i) res abs(s[i] - s[i - 1]);return res;} };B 覆盖所有点的最少矩形数目 排序&#xff1a;先按照 x i x_i xi​ 排序&#xff0c;然后顺序遍…

【C++庖丁解牛】底层为红黑树结构的关联式容器--哈希容器(unordered_map和unordered_set)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. unordered系列关联式容…

rinex2kml(rinex生成kml文件)

rinex文件作为GNSS数据存储、解算用到最多的格式&#xff0c;其观测文件通常采用o文件作为测站卫星数据记录的格式。在收集完成rinex文件后&#xff0c;为了能快速了解这些观测数据的点位分布&#xff0c;通常需要专业的解算软件或者多种软件实现点位分布图的绘制。 为解决rine…

RS-232、RS-422及RS-485串行数据标准的选择及使用

目录 一.引言 二.RS-232电气指标和典型连接 三.失效保护 四.RS-232/RS-485协议转换器