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

目录

1.16QAM调制原理

2.软解调原理

3.LDPC编译码

4.MATLAB程序

5.仿真结果

5.完整程序下载


     在现代数字通信系统中,高效的调制解调技术是实现可靠数据传输的关键。16QAM(16 Quadrature Amplitude Modulation,16 进制正交幅度调制)作为一种常用的调制方式,能够在有限的带宽内实现较高的数据传输速率,广泛应用于各类通信场景,如无线局域网、数字视频广播等。而软解调技术相较于传统的硬解调,能够利用更多的接收信号信息,从而显著提高系统在噪声环境下的误码性能。

1.16QAM调制原理

       16QAM是一种正交幅度调制技术,它通过同时改变载波的幅度和相位来传输数字信息。在 16QAM中,将输入的二进制比特流按照每 4 个比特一组进行分组,每组比特对应一个特定的幅度和相位组合,即一个16QAM符号。由于每个符号携带4比特信息,所以16QAM的频谱效率为4 bit/s/Hz,相比一些简单的调制方式(如 BPSK、QPSK),具有更高的数据传输能力。

       常见的格雷码映射规则如下:

2.软解调原理

       在传统的硬解调中,接收端根据接收信号的幅度和相位与星座图上的点进行比较,直接判决出最接近的发送符号,输出的是确定的二进制比特。而软解调则不同,它不仅考虑接收信号与星座点的距离,还计算每个比特为0 或1 的概率,输出的是比特的可靠性信息。这种可靠性信息在后续的信道解码等处理中能够提供更多的有用信息,有助于提高系统的整体性能。

       通过计算每个比特的 LLR,接收端可以得到每个比特的可靠性信息,这些信息在后续的信道解码中能够更好地纠正传输错误,提高系统的误码性能。

3.LDPC编译码

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

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

完整链路流程为:

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

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

3.LDPC译码 → u^       

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

4.MATLAB程序

59.............................................

Xin    = yfilter1_2 + sqrt(-1)*yfilter2_2;

%-------------初始化输出----------------
output = zeros(1,length(Xin)*modtype);
%--------------------------------------
[~,wide] = size(Xin);
sf1 = zeros(1,length(Xin)*modtype);
sf2 = zeros(1,length(Xin)*modtype);
Y           = zeros(1,length(Xin)*modtype);


real1 = [-3 -3 -3 -3 -1 -1 -1 -1 +3 +3 +3 +3 +1 +1 +1 +1];
imag1 = [-3 -1 +3 +1 -3 -1 +3 +1 -3 -1 +3 +1 -3 -1 +3 +1];  
            
sf0 = real1(1:16) + imag1(1:16)*sqrt(-1);
for ij = 1:wide
    %第一位的信息
    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(5))^2, abs(Xin(1,ij)-sf0(6))^2, abs(Xin(1,ij)-sf0(7))^2, abs(Xin(1,ij)-sf0(8))^2 ]);
    sf2(ij) = min([ 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(13))^2, abs(Xin(1,ij)-sf0(14))^2, abs(Xin(1,ij)-sf0(15))^2, abs(Xin(1,ij)-sf0(16))^2 ]);
    Y(ij*4-3)       = sf1(ij) - sf2(ij);
    %第二位的信息
    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 ]);
    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 ]);
    Y(ij*4-2)       = sf1(ij) - sf2(ij);
    %第三位的信息
    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 ]);
    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 ]);
    Y(ij*4-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 ]);
    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 ]);
    Y(ij*4)       = 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('16QAM+ldpc调制解调误码率曲线');


if max_iter==2
save R21.mat SNR err
end
if max_iter==5
save R22.mat SNR err
end
if max_iter==30
save R2.mat SNR err
end

5.仿真结果

      通过上述Matlab仿真,得到不同信噪比下的误码率曲线。从曲线可以看出,随着信噪比的增加,误码率逐渐降低。在低信噪比时,误码率下降较为明显,这是因为噪声对信号的干扰较大,软解调能够利用更多的信号信息来对抗噪声,从而有效降低误码率。当信噪比达到一定值后,误码率下降趋势逐渐变缓,此时系统性能主要受到其他因素的限制,如信道衰落、码间干扰等。

5.完整程序下载

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

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

基于16QAM调制软解调+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、付费专栏及课程。

余额充值