目录
1.π/4-QPSK原理简介
π/4-QPSK调制是将输入的二进制比特流转换为具有特定相位的载波信号。它把输入数据按每 2比特一组进行分组,每组数据对应一个特定的相位状态,共有 4 种不同的相位状态,分别相差 π/2。但与传统QPSK不同的是,π/4-QPSK的相位变化是相对于前一符号的相位,且相位跳变值为 ±π/4 或±3π/4。
常规QPSK有4种相位状态,相位跳变可能为±π/2 和±π。而π/4-QPSK把信号的相位平面平分成间隔为π/4的八种相位,并相间地分成两个相位组。信号相位每隔Ts = 2Tb秒必须从一个组跳变到另一个组,相邻码元之间信号相位的跳变量为±π/4和±3π/4,不会出现±π的相位跳变1。
π/4-QPSK的星座图可看作是将QPSK的星座图旋转π/4得到有8个符号点的星座图。相比 QPSK,其星座点之间的转移路径更为规则和受限,使得信号的包络起伏更小,在经过限带滤波和功率放大等处理时,能更好地保持信号的特性,减少频谱扩散和失真2。
由于相位跳变的限制,π/4-QPSK信号在传输过程中对噪声和干扰的敏感度相对较低,具有更好的抗干扰性能。在限带条件下,π/4-QPSK能有效减小信号包络的起伏,使得频谱特性得到改善,带外辐射更小,更适合在频谱资源有限的通信系统中应用4。


π/4旋转的QPSK调制,例如蓝牙、TETRA、PHS等系统中使用的π/4-QPSK调制。将整个QPSK的星座图旋转π/4,得到8个符号点的星座图,如下图所示,则相位的变化为±45°或±135°

2. π/4-QPSK解调原理
π/4-QPSK 的解调主要是通过对接收信号的相位进行检测和判断,恢复出原始的二进制数据。常用的解调方法有相干解调法和差分相干解调法。相干解调需要恢复出与发送端同频同相的载波,而差分相干解调则利用前后符号的相位差来进行解调,不需要精确的载波恢复。


π/4-QPSK 的相位跳变被限制在 ±π/4 或 ±3π/4,相对传统 QPSK,其相位变化较为平滑,信号的包络波动较小。在存在噪声和干扰的信道中,较小的相位跳变使得信号更不容易受到干扰的影响,能更好地保持信号的完整性,提高了系统的抗干扰能力和误码性能。
π/4-QPSK 信号的相位特性使得在接收端可以采用相干解调的方式进行信号解调。相干解调能够利用信号的相位信息,提高解调的准确性,并且与一些复杂的调制技术相比,其相干解调的实现复杂度相对较低,不需要过于复杂的信号处理算法和硬件电路,降低了系统的实现成本和复杂度。
除了相干解调外,π/4 - QPSK 还可以采用差分检测的方法进行解调。差分检测不需要精确的载波同步,对载波相位误差具有一定的容忍度,在一些难以实现精确载波同步的场景下,如移动环境中的快速衰落信道,差分检测的 π/4 - QPSK 具有更好的适应性,能够保证系统的正常工作。
3.Turbo编译码
Turbo码是一种极为复杂的信道编码技术,译码算法往往由于硬件实现的复杂度太高或者译码时延太长而难以实现。现目前Turbo码领域面临的主要问题是:在复杂度和时延都可以接受的前提下如何获得最佳的系统性能。Turbo码由分量码经由交织器级联而成。因此,分量码和交织器设计的好坏是决定Turbo码性能的关键因素。实际的通信系统中,为提高系统带宽效率,一种方法是通过删减部分校验比特来提高编码速率,称为删余。
Turbo码的编码过程实际上是一个利用强约束短码构造伪随机长码的过程。Turbo码的译码算法主要有两大类。是基于最大后验概率(MAP)的软输出算法,主要包括标准MAP算法、对数域上的Log.MAP算法和Max. Log-MAP算法、修正的MAP算法(M-MAP)、滑动窗MAP(SW-MAP)算法和只有前向递推的MAP算法(OSA)。其中,MAP算法是MAP算法的对数形式,它通过将大量的乘法运算转化为加法运算来简化算法的复杂性。
Turbo码由2个循环系统卷积码并行级联而成:译码采用迭代的串行译码交织器是Turbo 码所特有的,它可以使得信息序列随机化,增加各码字间的重量,从而提高码的保护能力 。
Turbo编码器的基本结构如图1所示:

从图1的仿真结果可知,Turbo码编码器主要由分量删余矩阵、两个分量编码器、复接器以及交织器组成。分量编码器是Turbo码编码器中的一个重要组成部分。Turbo码的分量编码器使用RSC编码,因为循环编码器可以改善码的比特误码率性能。删余矩阵是通过删除冗余的校验位来调节码率,Turbo码采用两个成员编器。交织器的作用是通过改变信息传输过程中的发送次序,将连续的突发错误分散化,尽可能的降低连续错误的持续时间。Turbo码,通过交织器,可以改变其行列重量分布,并将输入的码元符号的次序进行随机化输出,尽可能的降低码元之间的相关性,从而进一步提升算法的性能。
Turbo译码器主要包括如下几个结构:两个分量译码器模块,交织器模块,解交织器模块以及硬判决模块。

Turbo码的译码使用了迭代译码。利用EXIT图实现对迭代译码过程的跟踪,从而估计迭代译码的收敛性。利用EXIT图还可以预测实现一定性能要求时所必须的迭代译码次数。它为分析迭代译码过程和迭代译码方案的设计提供了有力的工具。
4.MATLAB程序
整个系统结构如下图所示:

部分matlab程序如下图所示:
72.....................................................
%判决
yod1 = [];
yod2 = [];
for i=1:Num/2
tmps1 = yfilter1(400*(i-1)+1:400*i);
tmps2 = yfilter2(400*(i-1)+1:400*i);
if tmps1(200)>-0.2 & tmps1(200)<=0.2
yod1 = [yod1,0];
end
if tmps1(200)>0.2 & tmps1(200)<0.8
yod1 = [yod1,0.7071];
end
if tmps1(200)>=0.8
yod1 = [yod1,1];
end
if tmps1(200)>=-0.8 & tmps1(200)<-0.2
yod1 = [yod1,-0.7071];
end
if tmps1(200)<-0.8
yod1 = [yod1,-1];
end
if tmps2(200)>-0.2 & tmps2(200)<=0.2
yod2 = [yod2,0];
end
if tmps2(200)>0.2 & tmps2(200)<0.8
yod2 = [yod2,0.7071];
end
if tmps2(200)>=0.8
yod2 = [yod2,1];
end
if tmps2(200)>=-0.8 & tmps2(200)<-0.2
yod2 = [yod2,-0.7071];
end
if tmps2(200)<-0.8
yod2 = [yod2,-1];
end
end
thetak2=[]
for i=1:Num/2
if yod1(i) == 1 & yod2(i) == 0
thetak2(i)=0;
end
if yod1(i) == 0.7071 & yod2(i) == 0.7071
thetak2(i)=45;
end
if yod1(i) == 0 & yod2(i) == 1
thetak2(i)=90;
end
if yod1(i) == -0.7071 & yod2(i) == 0.7071
thetak2(i)=135;
end
if yod1(i) == -1 & yod2(i) == 0
thetak2(i)=180;
end
if yod1(i) == -0.7071 & yod2(i) == -0.7071
thetak2(i)=225;
end
if yod1(i) == 0 & yod2(i) == -1
thetak2(i)=270;
end
if yod1(i) == 0.7071 & yod2(i) == -0.7071
thetak2(i)=315;
end
end
%解差分
thetak3=[];
for i=1:Num/2
if i==1
thetak3(i)=thetak2(i);
else
thetak3(i)=thetak2(i)-thetak2(i-1);
end
if thetak3(i)<0
thetak3(i)=thetak3(i)+360;
end
end
%恢复出2路数据
for i=1:Num/2
if thetak3(i)==225
yod1b(i)=-1;
yod2b(i)=-1;
end
if thetak3(i)==135
yod1b(i)=-1;
yod2b(i)= 1;
end
if thetak3(i)==315
yod1b(i)= 1;
yod2b(i)=-1;
end
if thetak3(i)==45
yod1b(i)= 1;
yod2b(i)= 1;
end
end
%并/串转换
yod=zeros(1,Num);
yod(1:2:end)=yod1b;
yod(2:2:end)=yod2b;
x_hat = round(turbo_decode(2*yod(1:end-1)-1,max_iter));
figure % 创建图形窗口
subplot(421) % 创建3行1列的子图,并定位到第一个
plot(Ydemod1,'b','linewidth',1) % 绘制ASK调制信号
title('pi/4-QPSK I解调'); % 设置标题
grid on % 打开网格
subplot(422) % 创建3行1列的子图,并定位到第一个
plot(Ydemod2,'b','linewidth',1) % 绘制ASK调制信号
title('pi/4-QPSK Q解调'); % 设置标题
grid on % 打开网格
subplot(423) % 创建3行1列的子图,并定位到第一个
plot(yfilter1,'b','linewidth',1) % 绘制ASK调制信号
title('滤波I,相位恢复'); % 设置标题
grid on % 打开网格
subplot(424) % 创建3行1列的子图,并定位到第一个
plot(yfilter2,'b','linewidth',1) % 绘制ASK调制信号
title('滤波Q,相位恢复'); % 设置标题
grid on % 打开网格
subplot(425) % 定位到第二个子图
stairs(yod1,'b','linewidth',1) % 绘制载波信号
title('判决I输出'); % 设置标题
grid on % 打开网格
subplot(426) % 定位到第二个子图
stairs(yod2,'b','linewidth',1) % 绘制载波信号
title('判决Q输出'); % 设置标题
grid on % 打开网格
subplot(4,2,[7,8]) % 定位到第二个子图
stairs(yod,'b','linewidth',1) % 绘制载波信号
title('并串输出'); % 设置标题
grid on % 打开网格
5.仿真结果




6.完整程序下载
完整可运行代码,博主已上传至CSDN,使用版本为matlab2022a:
(本程序包含程序操作步骤视频)
2万+

被折叠的 条评论
为什么被折叠?



