qpsk调制原理(为什么要对数据串并转换)

班长聊通信原理 | 系列文章请至主页“文章”查阅

通信中的很多调制都有一个把串行数据转换为并行数据的过程,QPSK就是一个典型的例子。

其实不光QPSK,其他的调制方法都是这个模式。

很多小伙伴最近都在问关于QPSK的问题,很多人在串并转换地方就犯糊涂了。我之前也写过QPSK的文章:

数字调制技术:如何优雅的学习QPSK,IQ调制与星座图?

本文将从实际Matlab仿真角度,直观的阐述这个问题。


先从发送信息开始

无论如何,我们先假定我们需要发送一组信息。

为了方便,我们跳过传感器采集-采样-编码等环节,直接定义一组数据:

10位二进制数,10个比特。

0-1-0-1-1-1-0-0-1-1

data=[0 1 0 1 1 1 0 0 1 1];%准备发送的信息

通过Matlab的stem绘图函数,可以画出原始信息。定义图形标题为“准备发送的信息”,设置坐标轴范围,横坐标0~11,纵坐标0~1.5。

figure(1) stem(data, 'linewidth',3), grid on;% 画出杆状图,线宽度设置为3号 title(' 准备发送的信息 ');% 定义图形标题 axis([ 0 11 0 1.5]);% 设置坐标轴范围

得出原始数据杆状图1:

qpsk调制原理(为什么要对数据串并转换)(1)

图1 拟发送的数据,10个比特;来源:班长自制

再对数据简单处理

将原始信息,改成NRZ(Nonreturn - To - Zero)非归零双极性编码,就是我们最常见的编码。

根据信号是否归零,还可以划分为归零码和非归零码,归零码码元中间的信号回归到0电平,例如"1"为正电平,"0"为负电平,每个数据表示完毕后,都会回归到零电平状态,而非归零码没有回归到零电平的过程,例如"1"为高电平,"0"为低电平。

而双极性,就是用正负电平的脉冲分别表示二进制代码1和0。

qpsk调制原理(为什么要对数据串并转换)(2)

图2 多种常见的编码形式;来源:网络

data_NZR=2*data-1; % 将数据改成NRZ编码格式

data数据改成NRZ形成编码,在Matlab中也是简单的一句命令即可,具体波形如图3中“串”波形。

qpsk调制原理(为什么要对数据串并转换)(3)

图3 QPSK的调制原理;来源:班长自制

数据流串→并转换?

很多程序中,会用reshape函数一句话,实行了数据比特的串并转换。

s_p_data=reshape(data_NZR,2,length(data)/2); % 数据串并转换

关于"A = reshape(A,m,n)"函数的作用,就是将A的行列排列成m行n列。它对我们输入data_NZR的作用就如图4所示。

qpsk调制原理(为什么要对数据串并转换)(4)

图4 数据的串并转换;来源:班长自制

就是把一串数据,按照m行n列重新排列。

我们为什么要把一串数据,如图4中“串”形数列转换为并行呢?

还得先从MPSK的原理说起

这里的M代表多进制,M=2,4,8...,通常取2的正整数幂。

也就是常说的2PSK,4PSK/QPSK,8PSK......

一个三角函数sk(t),我们通常用三个参数就可以唯一确定,分别为振幅A,频率f/ω,初始相位θk。

我们这里讨论的是相位调制,所以振幅A和频率f/ω不会变化。

qpsk调制原理(为什么要对数据串并转换)(5)

图5 QPSK信号分析;来源:班长自制

θk的变化,如图5所示。

如果定义θk等于π或者0两种情况,那么sk(t)就有两种唯一的波形,分别为

  • A cos( ωt 0 )
  • A cos( ωt π )

这两种波形,正好对应二进制的0和1,这就是2PSK/BPSK调制。

那么4PSK/QPSK调制呢?

以此类推,按照θk的公式,我们可以取0,π/2,π,3π/2四种初相位,对应4种sk(t)波形

  • A cos( ωt 0 )
  • A cos( ωt π/2 )
  • A cos( ωt π )
  • A cos( ωt 3π/2 )

这四种波形,可以表示四种二进制组合01,00,10,11,这就是4PSK/QPSK调制。

同样是sk(t)波形,在QPSK中可以同时传输两个bit,所以理论上4/QPSK调制的数据传输速率是2PSK的两倍。

如何产生QPSK信号?

生成QPSK信号,就是上文的sk(t)信号。

sk(t)是一个三角函数,根据三角展开式,我们可以进行如下展开:

qpsk调制原理(为什么要对数据串并转换)(6)

qpsk调制原理(为什么要对数据串并转换)(7)

sk(t)波形被展开成两个正弦波的叠加,且初始相位均为0,二者相位差π/2(cos与sin相位差π/2)。

载波信号coswt很容易获得,sinwt信号在cosωt的基础上做一个π/2移相,也可以获得。

那么根据图3所示,当数据流串并转换之后,分成2路,一路为ak,一路为bk;

分别与cos和sin相乘之后,再进行叠加,输出QPSK信号。

我们用图3中的串行数据-1 1 -1 1 1 1 -1 -1 1 1作为输入。

  • ak = -1 或者 1
  • bk = -1 或者 1

当ak=-1,bk= 1,输入为(0,1)时,

sk(t)=-1*cosωt ( 1)sinωt=√2 * cos(ωt 5π/4 ),θ3 = 5π/4;

当ak= 1,bk= 1,输入为(1,1)时,

sk(t)= 1*cosωt ( 1)sinωt=√2 * cos(ωt 3π/4 ),θ4 = 7π/4;

当ak=-1,bk=-1,输入为(0,0)时,

sk(t)=-1*cosωt (-1)sinωt=√2 * cos(ωt 7π/4 ),θ2 = 3π/4;

当ak= 1,bk=-1,输入为(1,0)时,

sk(t)= 1*cosωt (-1)sinωt=√2 * cos(ωt π/4 ),θ1 = π/4;

嘿嘿,这也是四个相位,那么这也是QPSK。

qpsk调制原理(为什么要对数据串并转换)(8)

图6 QPSK的四种相位信号;来源:班长自制

自此,我们发现之所以要串行转换为并行,就是为了方便调制cos和sin载波,然后叠加,形成QPSK信号。

那么,我们可以生产QPSK信号如下图7所示。同相信号Inphase和正交Quadrature信号叠加,形成最终QPSK信号。

qpsk调制原理(为什么要对数据串并转换)(9)

图7 QPSK信号仿真图;来源:班长自制

for(i=1:length(data)/2) y1=s_p_data(1,i)*cos(2*pi*f*pt); % 同相分量 y2=s_p_data(2,i)*sin(2*pi*f*pt) ;% 正交分量 y_in=[y_in y1]; % 同相信号向量 y_qd=[y_qd y2]; % 正交信号向量 y=[y y1 y2]; % 调制信号 end

总结

文中的仿真其实还是有改进之处的,班长在此抛出3个思考,大家可以思考下,会加深对QPSK的理解。

QPSK可是4G、5G中的重要调制技术,尤其在信号覆盖较差的时候,一点也不过时啊。

思考1:为什么一般的程序中要用NRZ编码这种形式,用其他的编码形式可以吗?

思考2:图7中最后红色的QPSK信号,在"0.4"位置处,出现了不连续,或者说是突变?这对信号传输有影响吗?能否改进?

思考3:图6中的对应方式,即

  • θ1→(1,0)
  • θ2→(0,0)
  • θ3→(0,1)
  • θ4→(1,1)

为什么要这么排列,可以打乱顺序么?格雷码是什么?

看到这里,帮文章点个赞吧!

欢迎您在评论区留言讨论!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页