目录
1.32QAM调制原理
正交幅度调制(QAM)是一种将幅度调制和相位调制相结合的调制方式。它通过同时改变载波的幅度和相位来表示不同的数字信息。对于MQAM,M表示调制阶数,它决定了星座图上信号点的数量。32QAM中,M = 32,意味着有32种不同的幅度和相位组合来表示信息。
32QAM的星座图是在复平面上分布着 32 个信号点。常见的 32QAM 星座图采用矩形星座图结构,其信号点可以分为不同的层次,每个信号点对应一个特定的二进制比特组合。通常,32QAM 的每个符号携带5个比特的信息。
将输入的二进制比特流按照每5个比特一组进行分组,然后根据星座映射表将每组比特映射到对应的星座点。例如,一种常见的32QAM星座映射规则如下(部分示例):
2. 32QAM软解调原理
硬解调是指在接收端直接根据接收信号与星座点的距离,判决出最接近的星座点,然后根据星座映射规则恢复出对应的二进制比特。而软解调则不仅给出每个比特的判决结果,还给出每个比特为 0 或 1 的概率信息,即软信息。软信息可以在后续的信道解码过程中提供更多的有用信息,从而提高系统的误码性能。
对数似然比(LLR)是软解调中常用的一种度量,用于表示每个比特为 1 的概率与为 0 的概率之比的对数。对于第i个比特,其 LLR 定义为:
3.LDPC编译码
LDPC码作为一种前向纠错码,具有卓越的性能,其纠错能力能够接近香农极限 。这意味着在理论上,LDPC码能够在极低的信噪比条件下实现可靠的数据传输,大大提高了通信系统的效率和可靠性。在深空通信中,由于信号传输距离极远,信号强度会随着距离的增加而急剧衰减,导致信噪比极低。LDPC码的应用能够在这种恶劣的信道条件下,有效地纠正传输过程中产生的错误,确保数据的准确传输。
LDPC码的校验矩阵具有稀疏性,这是其区别于其他编码的重要特性之一。稀疏校验矩阵意味着矩阵中大部分元素为零,只有少数元素为非零值。这种稀疏性使得 LDPC 码在编码和解码过程中具有较低的复杂度,因为在矩阵运算中,与零元素的运算可以省略,从而减少了计算量和存储需求。与一些传统的编码方式相比,如卷积码,其校验矩阵相对密集,在处理长码长时,计算复杂度会显著增加,而LDPC码的稀疏校验矩阵则能够有效地避免这一问题,使得在处理长码长数据时仍能保持较低的计算复杂度。
完整链路流程为:
1.信息比特 u → LDPC编码 → 码字c
2.BPSK调制 → 信道传输 → 接收信号y
3.LDPC译码 → u^
在发送端,原始信息比特先经过LDPC编码,增加冗余信息以提高纠错能力;然后进行GMSK调,将数字信号转换为适合信道传输的模拟信号;经过信道传输后,在接收端先进行GMSK解调,得到解调后的信号;再进行LDPC译码,恢复出原始信息比特。
4.MATLAB程序
63..............................................
% ----------------------------------
%第3位的软信息
sf1(ij) = min([ abs(Xin(1,ij)-sf0(1))^2, abs(Xin(1,ij)-sf0(2))^2, abs(Xin(1,ij)-sf0(3))^2, abs(Xin(1,ij)-sf0(4))^2 ...
abs(Xin(1,ij)-sf0(9))^2, abs(Xin(1,ij)-sf0(10))^2, abs(Xin(1,ij)-sf0(11))^2, abs(Xin(1,ij)-sf0(12))^2 ...
abs(Xin(1,ij)-sf0(17))^2, abs(Xin(1,ij)-sf0(18))^2, abs(Xin(1,ij)-sf0(19))^2, abs(Xin(1,ij)-sf0(20))^2 ...
abs(Xin(1,ij)-sf0(25))^2, abs(Xin(1,ij)-sf0(26))^2, abs(Xin(1,ij)-sf0(27))^2, abs(Xin(1,ij)-sf0(28))^2 ]);
sf2(ij) = min([ abs(Xin(1,ij)-sf0(5))^2, abs(Xin(1,ij)-sf0(6))^2, abs(Xin(1,ij)-sf0(7))^2, abs(Xin(1,ij)-sf0(8))^2 ...
abs(Xin(1,ij)-sf0(13))^2, abs(Xin(1,ij)-sf0(14))^2, abs(Xin(1,ij)-sf0(15))^2, abs(Xin(1,ij)-sf0(16))^2 ...
abs(Xin(1,ij)-sf0(21))^2, abs(Xin(1,ij)-sf0(22))^2, abs(Xin(1,ij)-sf0(23))^2, abs(Xin(1,ij)-sf0(24))^2 ...
abs(Xin(1,ij)-sf0(29))^2, abs(Xin(1,ij)-sf0(30))^2, abs(Xin(1,ij)-sf0(31))^2, abs(Xin(1,ij)-sf0(32))^2 ]);
Y(ij*5-2) = sf1(ij) - sf2(ij);
%第4位的软信息
sf1(ij) = min([ abs(Xin(1,ij)-sf0(1))^2, abs(Xin(1,ij)-sf0(2))^2, abs(Xin(1,ij)-sf0(5))^2, abs(Xin(1,ij)-sf0(6))^2 ...
abs(Xin(1,ij)-sf0(9))^2, abs(Xin(1,ij)-sf0(10))^2, abs(Xin(1,ij)-sf0(13))^2, abs(Xin(1,ij)-sf0(14))^2 ...
abs(Xin(1,ij)-sf0(17))^2, abs(Xin(1,ij)-sf0(18))^2, abs(Xin(1,ij)-sf0(21))^2, abs(Xin(1,ij)-sf0(22))^2 ...
abs(Xin(1,ij)-sf0(25))^2, abs(Xin(1,ij)-sf0(26))^2, abs(Xin(1,ij)-sf0(29))^2, abs(Xin(1,ij)-sf0(30))^2 ]);
sf2(ij) = min([ abs(Xin(1,ij)-sf0(3))^2, abs(Xin(1,ij)-sf0(4))^2, abs(Xin(1,ij)-sf0(7))^2, abs(Xin(1,ij)-sf0(8))^2 ...
abs(Xin(1,ij)-sf0(11))^2, abs(Xin(1,ij)-sf0(12))^2, abs(Xin(1,ij)-sf0(15))^2, abs(Xin(1,ij)-sf0(16))^2 ...
abs(Xin(1,ij)-sf0(19))^2, abs(Xin(1,ij)-sf0(20))^2, abs(Xin(1,ij)-sf0(23))^2, abs(Xin(1,ij)-sf0(24))^2 ...
abs(Xin(1,ij)-sf0(27))^2, abs(Xin(1,ij)-sf0(28))^2, abs(Xin(1,ij)-sf0(31))^2, abs(Xin(1,ij)-sf0(32))^2]);
Y(ij*5-1) = sf1(ij) - sf2(ij);
%第5位的软信息
sf1(ij) = min([ abs(Xin(1,ij)-sf0(1))^2, abs(Xin(1,ij)-sf0(3))^2, abs(Xin(1,ij)-sf0(5))^2, abs(Xin(1,ij)-sf0(7))^2 ...
abs(Xin(1,ij)-sf0(9))^2, abs(Xin(1,ij)-sf0(11))^2, abs(Xin(1,ij)-sf0(13))^2, abs(Xin(1,ij)-sf0(15))^2 ...
abs(Xin(1,ij)-sf0(17))^2, abs(Xin(1,ij)-sf0(19))^2, abs(Xin(1,ij)-sf0(21))^2, abs(Xin(1,ij)-sf0(23))^2 ...
abs(Xin(1,ij)-sf0(25))^2, abs(Xin(1,ij)-sf0(27))^2, abs(Xin(1,ij)-sf0(29))^2, abs(Xin(1,ij)-sf0(31))^2]);
sf2(ij) = min([ abs(Xin(1,ij)-sf0(2))^2, abs(Xin(1,ij)-sf0(4))^2, abs(Xin(1,ij)-sf0(6))^2, abs(Xin(1,ij)-sf0(8))^2 ...
abs(Xin(1,ij)-sf0(10))^2, abs(Xin(1,ij)-sf0(12))^2, abs(Xin(1,ij)-sf0(14))^2, abs(Xin(1,ij)-sf0(16))^2 ...
abs(Xin(1,ij)-sf0(18))^2, abs(Xin(1,ij)-sf0(20))^2, abs(Xin(1,ij)-sf0(22))^2, abs(Xin(1,ij)-sf0(24))^2 ...
abs(Xin(1,ij)-sf0(26))^2, abs(Xin(1,ij)-sf0(28))^2, abs(Xin(1,ij)-sf0(30))^2, abs(Xin(1,ij)-sf0(32))^2 ]);
Y(ij*5) = sf1(ij) - sf2(ij);
end
output = Y;
msgr = ones(size(output));
idx2 = find(output<0);
msgr(idx2) = 0;
sigma = sqrt(1./(10^(SNR(ij2)/20)*R));
z_hat = func_Dec(2*msgr'-1,sigma,H,max_iter);
x_hat = [z_hat(size(G,2)+1-size(G,1):size(G,2))]';
err(ij2,kk) = 1-length(find(bits0(1:end)==x_hat(1:end)))/length(x_hat);
end
end
figure;
semilogy(SNR,mean(err,2),'-b^',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.2,0.9,0.5]);
grid on
xlabel('SNR');
ylabel('error');
title('32QAM+ldpc调制解调误码率曲线');
if max_iter==1
save R21.mat SNR err
end
if max_iter==3
save R22.mat SNR err
end
if max_iter==30
save R2.mat SNR err
end
5.仿真结果
32QAM作为一种高阶调制方式,具有较高的频谱效率,但对信道质量要求也较高。软解调技术通过利用接收信号的软信息,可以有效提高系统的误码性能。通过Matlab仿真,验证了32QAM软解调通信链路在不同信噪比下的误码率性能。在实际通信系统中,需要根据具体的应用场景和信道条件,合理选择调制解调方式,以实现高效、可靠的数据传输。
6.完整程序下载
完整可运行代码,博主已上传至优快云,使用版本为matlab2022a:
(本程序包含程序操作步骤视频)
基于32QAM调制软解调+LDPC编译码通信链路matlab误码率仿真【包括程序,中文注释,程序操作视频】资源-优快云文库