通信中的很多调制都有一个把串行数据转换为并行数据的过程,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:
图1 拟发送的数据,10个比特;来源:班长低廉甜头
再对数据大略处理将原始信息,改成NRZ(Nonreturn - To - Zero)非归零双极性编码,便是我们最常见的编码。
根据旗子暗记是否归零,还可以划分为归零码和非归零码,归零码码元中间的旗子暗记回归到0电平,例如"1"为正电平,"0"为负电平,每个数据表示完毕后,都会回归到零电平状态,而非归零码没有回归到零电平的过程,例如"1"为高电平,"0"为低电平。
而双极性,便是用正负电平的脉冲分别表示二进制代码1和0。
图2 多种常见的编码形式;来源:网络
data_NZR=2data-1; % 将数据改成NRZ编码格式
data数据改成NRZ形成编码,在Matlab中也是大略的一句命令即可,详细波形如图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所示。
图4 数据的串并转换;来源:班长低廉甜头
便是把一串数据,按照m行n列重新排列。
我们为什么要把一串数据,如图4中“串”形数列转换为并行呢?
还得先从MPSK的事理提及这里的M代表多进制,M=2,4,8...,常日取2的正整数幂。
也便是常说的2PSK,4PSK/QPSK,8PSK......
一个三角函数sk(t),我们常日用三个参数就可以唯一确定,分别为振幅A,频率f/ω,初始相位θk。
我们这里谈论的是相位调制,以是振幅A和频率f/ω不会变革。
图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)是一个三角函数,根据三角展开式,我们可以进行如下展开:
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 或者 +1bk = -1 或者 +1当ak=-1,bk=+1,输入为(0,1)时,
sk(t)=-1cosωt+(+1)sinωt=√2 cos(ωt + 5π/4 ),θ3 = 5π/4;
当ak=+1,bk=+1,输入为(1,1)时,
sk(t)=+1cosωt+(+1)sinωt=√2 cos(ωt + 3π/4 ),θ4 = 7π/4;
当ak=-1,bk=-1,输入为(0,0)时,
sk(t)=-1cosωt+(-1)sinωt=√2 cos(ωt + 7π/4 ),θ2 = 3π/4;
当ak=+1,bk=-1,输入为(1,0)时,
sk(t)=+1cosωt+(-1)sinωt=√2 cos(ωt + π/4 ),θ1 = π/4;
嘿嘿,这也是四个相位,那么这也是QPSK。
图6 QPSK的四种相位旗子暗记;来源:班长低廉甜头
自此,我们创造之以是要串行转换为并行,便是为了方便调制cos和sin载波,然后叠加,形成QPSK旗子暗记。
那么,我们可以生产QPSK旗子暗记如下图7所示。同相信号Inphase和正交Quadrature旗子暗记叠加,形成终极QPSK旗子暗记。
图7 QPSK旗子暗记仿真图;来源:班长低廉甜头
for(i=1:length(data)/2) y1=s_p_data(1,i)cos(2pifpt); % 同相分量 y2=s_p_data(2,i)sin(2pifpt) ;% 正交分量 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)为什么要这么排列,可以打乱顺序么?格雷码是什么?
看到这里,帮文章点个赞吧!
欢迎您在评论区留言谈论!