m基于16QAM软解调和LDPC信道编译码的通信链路误码率仿真

目录

1.算法仿真效果

2.算法涉及理论知识概要

2.1 数据源编码

2.2 调制

2.3 信道传输

2.4 解调

2.5 解码

2.6 实现步骤

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

2.算法涉及理论知识概要

基于16QAM软解调和LDPC信道编译码的通信链路包括以下主要步骤:

2.1 数据源编码

       在数据源编码阶段,输入的二进制数据会被编码为纠错码,以提高数据传输的可靠性。常用的纠错码包括卷积码、LDPC码等。本文将采用LDPC码作为纠错码。

2.2 调制

      在调制阶段,编码后的数据将被调制为模拟信号,以便于在传输媒介中传输。常用的调制方式包括PSK、QAM、FSK等。本文将采用16QAM调制方式。

2.3 信道传输

       在信道传输阶段,调制后的信号将被传输到接收端。在传输过程中,信号会受到噪声、多径衰落等影响,从而导致信号失真。因此,需要在接收端进行信号处理,以恢复原始信号。本文将采用软解调方式。

2.4 解调

      在解调阶段,接收端将对接收到的信号进行解调,以恢复原始信号。常用的解调方式包括硬解调和软解调。本文将采用软解调方式。

2.5 解码

      在解码阶段,接收端将对解调后的信号进行解码,以恢复原始数据。解码过程中,需要采用与编码阶段相同的纠错码。本文将采用LDPC码作为纠错码。

2.6 实现步骤

       在数据源编码阶段,输入的二进制数据会被编码为LDPC码。LDPC码是一种低密度奇偶校验码,具有近香农极限的纠错性能和较低的复杂度。其编码过程可以表示为:

$$\boldsymbol{x}=\boldsymbol{u}\boldsymbol{G}$$

        其中,$\boldsymbol{u}$为输入数据,$\boldsymbol{G}$为稀疏矩阵,$\boldsymbol{x}$为编码后的数据。编码后的数据$\boldsymbol{x}$会被传输到接收端进行解码。

        在调制阶段,编码后的数据将被调制为16QAM信号。16QAM调制将每四个二进制位映射为一个复数,即:

$$s_k=\sqrt{\frac{2E_s}{T_s}}(2b_{4k-3}-1+2b_{4k-2}-1j)$$

其中,$E_s$为每个符号的能量,$T_s$为符号间隔,$b_{4k-3}$、$b_{4k-2}$、$b_{4k-1}$和$b_{4k}$为输入数据的二进制位。

       在信道传输阶段,调制后的信号将被传输到接收端。在传输过程中,信号会受到噪声、多径衰落等影响,从而导致信号失真。因此,需要在接收端进行信号处理,以恢复原始信号。

       在解调阶段,接收端将对接收到的信号进行软解调,以恢复原始信号。软解调是一种基于概率的解调方式,可以更好地处理受到噪声影响的信号。软解调过程可以表示为:

$$\hat{s}k=\arg\max{s\in S} P(s|r_k)$$

其中,$S$为16QAM调制符号集,$r_k$为接收到的信号,$\hat{s}_k$为解调后的信号。

      在解码阶段,接收端将对解调后的信号进行解码,以恢复原始数据。解码过程中,需要采用与编码阶段相同的LDPC码。LDPC码的解码过程可以表示为:

$$\boldsymbol{\hat{u}}=\arg\min_{\boldsymbol{u}\in{0,1}^n} \boldsymbol{r}^T\boldsymbol{H}\boldsymbol{u}$$

其中,$\boldsymbol{\hat{u}}$为解码后的数据,$\boldsymbol{r}$为接收到的信号,$\boldsymbol{H}$为LDPC校验矩阵,$n$为输入数据的长度。

3.MATLAB核心程序

.............................................................

rng('shuffle')
for ij = 1:length(SNRs)  
    
    errs = 0;             
    sigma      = sqrt(1./(2*10^(SNRs(ij)/10)*R));  
    for frame = 1:N_Frame
        if mod(frame,1000)==1
           [ij,frame]
        end
        %产生信号
        Tdats0              = randi([0,1],1,N_bits);
        Tdats               = mod(Tdats0*G,2);  

        %调制
        Tmods               = modulates(Tdats,K);           
        %经过信道
        Rmods               = awgn(Tmods,SNRs(ij),'measured'); 
        %解调
        Rdats               = soft_demodulates(Rmods,K);
        Rbits               = zeros(size(Rdats));
        idx                 = find(Rdats>=0);
        Rbits(idx)          = 1;
        z_hat               = func_Dec(2*Rbits-1,sigma,H,max_iter);
        x_hat               = round(z_hat(size(G,2)+1-size(G,1):size(G,2)));
        Err1                = sum(Tdats0~=x_hat');
        errs                = errs + Err1;
    end
    ber(ij) = errs/(N_bits*N_Frame);
end 
 
figure;
semilogy(SNRs, ber ,'b-o')
grid on; 
xlabel('SNR(dB)');
ylabel('BER');


if max_iter==15
   save R21.mat SNRs ber
end
if max_iter==30
   save R22.mat SNRs ber
end
0X_007m

4.完整算法代码文件

V

猜你喜欢

转载自blog.csdn.net/hlayumi1234567/article/details/131669826