▲基于64QAM调制软解调+LDPC编译码通信链路matlab误码率仿真

目录

1.64QAM调制原理

2.64QAM软解调算法

3.LDPC编译码

4.MATLAB程序

5.仿真结果

6.完整程序下载


1.64QAM调制原理

       64QAM调制属于正交振幅调制(Quadrature Amplitude Modulation,QAM)的一种高阶形式。QAM技术的核心在于,它同时利用载波的幅度和相位这两个维度来携带信息,从而突破了传统的仅依赖幅度(如 ASK,幅移键控)或仅依赖相位(如 PSK,相移键控)调制的局限。

2.64QAM软解调算法

       解调方式主要分为硬解调和软解调。硬解调是一种较为直接的方式,它基于简单的判决准则,将接收到的信号直接映射到最接近的星座点上,从而确定发送的符号。例如,在 64QAM 星座图中,当接收到一个信号点时,硬解调会直接判断该点最接近哪个星座点,然后将其判定为对应的符号,进而得到相应的二进制比特。这种方式虽然实现简单,计算复杂度低,就像简单的直线思维,直接而快速,但在复杂的信道环境下,其性能往往大打折扣。因为实际信道中存在各种噪声和干扰,这些干扰会使接收信号发生畸变,导致接收信号点可能偏离其原本对应的星座点,而硬解调简单的判决方式很容易将其误判为其他星座点,从而产生较高的误码率。     

      软解调则截然不同,它是一种更为智能和精细的解调方式。软解调充分考虑到信号在传输过程中的不确定性,不再局限于简单的硬判决。它通过对接收信号的幅度、相位以及噪声等多方面信息进行深入分析,利用复杂的算法,如最大后验概率(MAP)算法、软输出维特比算法(SOVA)等,计算出每个比特为 “0” 或 “1” 的概率,进而输出更为精确的软信息。这些软信息就像是给后续的纠错编码译码提供了更多的线索和依据,使得译码器能够更准确地判断原始的比特信息,从而有效降低误码率,提升通信系统的可靠性。就好比在寻找丢失物品时,硬解调只是简单地根据大致印象去猜测,而软解调则会全面收集各种相关信息,进行综合分析,从而更有可能找到正确的答案。在 64QAM 通信系统中,软解调能够在噪声干扰较大的情况下,依然保持较好的性能,为高速、可靠的数据传输提供了有力保障。

为降低计算复杂度,采用Max-Log近似:

3.LDPC编译码

      LDPC码作为一种前向纠错码,具有卓越的性能,其纠错能力能够接近香农极限 。这意味着在理论上,LDPC码能够在极低的信噪比条件下实现可靠的数据传输,大大提高了通信系统的效率和可靠性。在深空通信中,由于信号传输距离极远,信号强度会随着距离的增加而急剧衰减,导致信噪比极低。LDPC码的应用能够在这种恶劣的信道条件下,有效地纠正传输过程中产生的错误,确保数据的准确传输。

       LDPC码的校验矩阵具有稀疏性,这是其区别于其他编码的重要特性之一。稀疏校验矩阵意味着矩阵中大部分元素为零,只有少数元素为非零值。这种稀疏性使得 LDPC 码在编码和解码过程中具有较低的复杂度,因为在矩阵运算中,与零元素的运算可以省略,从而减少了计算量和存储需求。与一些传统的编码方式相比,如卷积码,其校验矩阵相对密集,在处理长码长时,计算复杂度会显著增加,而LDPC码的稀疏校验矩阵则能够有效地避免这一问题,使得在处理长码长数据时仍能保持较低的计算复杂度。

完整链路流程为:

1.信息比特 u → LDPC编码 → 码字c

2.BPSK调制 → 信道传输 → 接收信号y

3.LDPC译码 → u^       

       在发送端,原始信息比特先经过LDPC编码,增加冗余信息以提高纠错能力;然后进行64QAM调,将数字信号转换为适合信道传输的模拟信号;经过信道传输后,在接收端先进行64QAM解调,得到解调后的信号;再进行LDPC译码,恢复出原始信息比特。

4.MATLAB程序

64................................................
            %第五位的软信息
            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 ...
                                        abs(Xin(1,ij)-sf0(33))^2, abs(Xin(1,ij)-sf0(34))^2, abs(Xin(1,ij)-sf0(37))^2, abs(Xin(1,ij)-sf0(38))^2 ...
                                        abs(Xin(1,ij)-sf0(41))^2, abs(Xin(1,ij)-sf0(42))^2, abs(Xin(1,ij)-sf0(45))^2, abs(Xin(1,ij)-sf0(46))^2 ...
                                        abs(Xin(1,ij)-sf0(49))^2, abs(Xin(1,ij)-sf0(50))^2, abs(Xin(1,ij)-sf0(53))^2, abs(Xin(1,ij)-sf0(54))^2 ...
                                        abs(Xin(1,ij)-sf0(57))^2, abs(Xin(1,ij)-sf0(58))^2, abs(Xin(1,ij)-sf0(61))^2, abs(Xin(1,ij)-sf0(62))^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 ...
                                        abs(Xin(1,ij)-sf0(35))^2, abs(Xin(1,ij)-sf0(36))^2, abs(Xin(1,ij)-sf0(39))^2, abs(Xin(1,ij)-sf0(40))^2 ...
                                        abs(Xin(1,ij)-sf0(43))^2, abs(Xin(1,ij)-sf0(44))^2, abs(Xin(1,ij)-sf0(47))^2, abs(Xin(1,ij)-sf0(48))^2 ...
                                        abs(Xin(1,ij)-sf0(51))^2, abs(Xin(1,ij)-sf0(52))^2, abs(Xin(1,ij)-sf0(55))^2, abs(Xin(1,ij)-sf0(56))^2 ...
                                        abs(Xin(1,ij)-sf0(59))^2, abs(Xin(1,ij)-sf0(60))^2, abs(Xin(1,ij)-sf0(63))^2, abs(Xin(1,ij)-sf0(64))^2  ]);
            Y(ij*6-1)       = sf1(ij) - sf2(ij);
            %第六位的软信息
            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 ...
                                        abs(Xin(1,ij)-sf0(33))^2, abs(Xin(1,ij)-sf0(35))^2, abs(Xin(1,ij)-sf0(37))^2, abs(Xin(1,ij)-sf0(39))^2 ...
                                        abs(Xin(1,ij)-sf0(41))^2, abs(Xin(1,ij)-sf0(43))^2, abs(Xin(1,ij)-sf0(45))^2, abs(Xin(1,ij)-sf0(47))^2 ...
                                        abs(Xin(1,ij)-sf0(49))^2, abs(Xin(1,ij)-sf0(51))^2, abs(Xin(1,ij)-sf0(53))^2, abs(Xin(1,ij)-sf0(55))^2 ...
                                        abs(Xin(1,ij)-sf0(57))^2, abs(Xin(1,ij)-sf0(59))^2, abs(Xin(1,ij)-sf0(61))^2, abs(Xin(1,ij)-sf0(63))^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 ...
                                        abs(Xin(1,ij)-sf0(34))^2, abs(Xin(1,ij)-sf0(36))^2, abs(Xin(1,ij)-sf0(38))^2, abs(Xin(1,ij)-sf0(40))^2 ...
                                        abs(Xin(1,ij)-sf0(42))^2, abs(Xin(1,ij)-sf0(44))^2, abs(Xin(1,ij)-sf0(46))^2, abs(Xin(1,ij)-sf0(48))^2 ...
                                        abs(Xin(1,ij)-sf0(50))^2, abs(Xin(1,ij)-sf0(52))^2, abs(Xin(1,ij)-sf0(54))^2, abs(Xin(1,ij)-sf0(56))^2 ...
                                        abs(Xin(1,ij)-sf0(58))^2, abs(Xin(1,ij)-sf0(60))^2, abs(Xin(1,ij)-sf0(62))^2, abs(Xin(1,ij)-sf0(64))^2  ]);
            Y(ij*6)       = 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('64QAM+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.仿真结果

       64QAM作为一种高阶调制方式,具有较高的频谱效率,但对信道质量要求也较高。软解调技术通过利用接收信号的软信息,可以有效提高系统的误码性能。通过Matlab仿真,验证了64QAM软解调通信链路在不同信噪比下的误码率性能。在实际通信系统中,需要根据具体的应用场景和信道条件,合理选择调制解调方式,以实现高效、可靠的数据传输。

6.完整程序下载

完整可运行代码,博主已上传至优快云,使用版本为matlab2022a:

(本程序包含程序操作步骤视频)

基于64QAM调制软解调+LDPC编译码通信链路matlab误码率仿真【包括程序,中文注释,程序操作视频】资源-优快云文库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值