目录
1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
基于QPSK软解调和LDPC信道编译码的通信链路包括以下主要步骤:
2.1 数据源编码
在数据源编码阶段,输入的二进制数据会被编码为纠错码,以提高数据传输的可靠性。常用的纠错码包括卷积码、LDPC码等。本文将采用LDPC码作为纠错码。
2.2 调制
在调制阶段,编码后的数据将被调制为模拟信号,以便于在传输媒介中传输。常用的调制方式包括PSK、QAM、FSK等。本文将采用QPSK调制方式。
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}$会被传输到接收端进行解码。
在调制阶段,编码后的数据将被调制为QPSK信号。QPSK调制将每两个二进制位映射为一个复数,即:
$$s_k=\sqrt{\frac{2E_s}{T_s}}(1-2b_{2k-1}+j(1-2b_{2k}))$$
其中,$E_s$为每个符号的能量,$T_s$为符号间隔,$b_{2k-1}$和$b_{2k}$为输入数据的二进制位。
在信道传输阶段,调制后的信号将被传输到接收端。在传输过程中,信号会受到噪声、多径衰落等影响,从而导致信号失真。因此,需要在接收端进行信号处理,以恢复原始信号。
在解调阶段,接收端将对接收到的信号进行软解调,以恢复原始信号。软解调将接收到的信号与QPSK调制信号进行匹配,找出最接近的符号作为接收到的符号。软解调可以表示为:
$$\hat{s_k}=\arg\min_{s\in S}|r_k-s|^2$$
其中,$r_k$为接收到的信号,$S$为QPSK调制的符号集合,$\hat{s_k}$为解调后的符号。
在解码阶段,接收端将对解调后的信号进行解码,以恢复原始数据。解码过程中,需要采用与编码阶段相同的LDPC码。解码过程可以表示为:
$$\boldsymbol{\hat{u}}=\text{arg}\min_{\boldsymbol{u}}D(\boldsymbol{r}|\boldsymbol{u}\boldsymbol{H})$$
其中,$\boldsymbol{\hat{u}}$为解码后的数据,$\boldsymbol{r}$为接收到的信号,$\boldsymbol{H}$为LDPC码的稀疏矩阵,$D(\boldsymbol{r}|\boldsymbol{u}\boldsymbol{H})$为接收信号和解码数据的距离,通常使用BP算法进行计算。
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,100)==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==1
save R21.mat SNRs ber
end
if max_iter==5
save R22.mat SNRs ber
end
if max_iter==10
save R23.mat SNRs ber
end
if max_iter==20
save R24.mat SNRs ber
end
0X_006m
4.完整算法代码文件
V