基于卷积编码维特比译码+BPSK+MRC通信链路matlab误码率仿真

目录

1. 卷积编码和维特比译码

2. BPSK调制

3.MRC(最大比合并)

4.误码率仿真


         卷积编码、维特比译码、BPSK调制以及MRC(最大比合并)是通信系统中常见的关键技术。以下是对这些技术的详细介绍:

1. 卷积编码和维特比译码

      卷积编码是一种差错控制编码方法,用于数字通信中以增加传输的可靠性。其工作原理是将输入的比特流通过一种线性有限状态机进行转换,生成更长的输出比特流。卷积编码器通常表示为((n, k, m)),其中(n)是输出比特数,(k)是输入比特数,(m)是编码器的约束长度。卷积编码结构如下所示:

       维特比译码(Viterbi Decoding)是用于卷积码的一种高效译码算法。它基于动态规划的原理,通过寻找网格图上最可能的路径来估计原始信息序列。

在matlab中,提供了卷积编码和维特比译码的工具箱函数:

%使用速率1/2卷积码的信道编码:
trellis = poly2trellis(3,[5 7]); %格子结构 
c_data = convenc(data,trellis); 
%通道解码:
dec_dcf_r1 = vitdec(r_bits,trellis,3,'term','hard'); 

2. BPSK调制


       BPSK(Binary Phase Shift Keying)是一种基本的数字调制方式。在BPSK中,二进制0和1分别用两个相反的相位来表示。对于比特“0”,载波的相位不改变(例如,余弦波),而对于比特“1”,载波的相位移动180度(例如,负余弦波)。BPSK调制可以表示为:

%BPSK调制
tx = 2*c_data - 1; 

3.MRC(最大比合并)

        在移动通信系统中,受 多径效应 和 阴影衰落 等 快 衰落的影响,如果在信号接收端有多个幅度和相位不同的信号相叠加,使得复合信号相互抵消或增强,就会产生较严重的失真。为了克服快衰落带来的影响,通常采用的抗衰落和抗干扰技术有:分集技术、均衡技术、编码技术 等。

       在分集技术中,其基本原理是通过特性不同的多个信道(时间、频率或者空间特性等不同),接收到承载相同信息的多个发送信号的副本。由于多个信道的传输特性不同,信号每个副本受衰落的影响就会不同。使用接收到的多个信号副本,可以帮助接收端正确地恢复出原发送信号。分集技术充分利用原本造成干扰的信号多径特性,来提高接收信号的正确判决率。

       如果不采用分集技术,为了克服快衰落带来的影响,发射端必须要提高发射功率。而手持移动终端的电池容量有限,所以反向链路中所能获得的功率也非常有限,而采用分集方法可以降低发射功率,延长移动终端的使用时间。

       分集技术包括 2 个方面:一是 分散传输,使接收机能够获得多个统计独立的、携带同一信息的衰落信号;二是 集中处理,即把接收机收到的多个统计独立的衰落信号进行合并以降低衰落的影响。因此,要获得分集效果,最重要的条件是:各个信号之间需要是 “不相干” 的。

       MRC是一种分集合并技术,用于提高接收信号的信噪比。在MRC中,来自不同路径的信号根据其信噪比进行加权合并。每个信号路径的权重与其信噪比成正比。

       基本原理:对于来自发射端的同一个信号,由于在接收端使用多天线接收,这个信号将经过多条路径(多个天线)被接收端所接收。多个路径质量同时差的几率非常小,一般总有一条路径的信号比其他信号好。在接收端使用某种算法,对各接收路径上的信号进行加权汇总,信号好的路径分配最高的权重,实现接收端的信号改善。当多条路径上信号都不太好时,通过MRC技术能够获得较好的接收信号。

R_af = ftx_af_r2 .* conj(h_r2) .* conj(h_r1) + ftx_d .* conj(h_d); 
dec_com_af = sign(real(R_af)); 

4.误码率仿真

...................................................................................
%放大:

beta = sqrt(1./((SNR * abs(h_r1).^2) + 1)); 
%amplification: 
ftx_amp = ftx_r1 .* beta; 

%中继到目标%
%DCF 
ftx_dcf_r2 = sqrt(SNR) * tx2_dcf .* h_r2 + noise_r2 ; 
%DTF 
ftx_dtf_r2 = sqrt(SNR) * tx2_dtf .* h_r2 + noise_r2 ; 
%AF 
ftx_af_r2 = sqrt(SNR) * ftx_amp .* h_r2 + noise_r2 ; 


%%%%%%%%%%%%%%%%% At the Destination%%%%%%%%%%% 
ftx_d = sqrt(SNR)* tx .* h_d + noise_d; 

%%%%%%%%%%%%%%%%%%%%%%%%DCF%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%MRC%%%%%%%%%%%%%%% 
R_dcf = ftx_dcf_r2 .* conj(h_r2) + ftx_d .* conj(h_d); 
%hard
dec_com_dcf = sign(real(R_dcf)); 

%误码率计算
%at destination: 
err_com1(k) = sum(abs(dec_com_dcf - tx)/2); 
simber_com1(k) = err_com1(k) / (2 * N_bits); 
 
R_dtf = ftx_dtf_r2 .* conj(h_r2) + ftx_d .* conj(h_d); 
%hard decision 
dec_com_dtf = sign(real(R_dtf)); 
%误码率计算
%at destination: 
err_com2(k) = sum(abs(dec_com_dtf - tx)/2); 
simber_com2(k) = err_com2(k) / (2 * N_bits); 

 
R_af = ftx_af_r2 .* conj(h_r2) .* conj(h_r1) + ftx_d .* conj(h_d); 
dec_com_af = sign(real(R_af)); 
%误码率计算
err_com3(k) = sum(abs(dec_com_af - tx)/2); 
simber_com3(k) = err_com3(k) / (2 * N_bits); 

theberawgn(k) = 0.5 * erfc (sqrt(SNR));%AWGN的理论误码率
theberrayleigh(k) = 0.5 * (1 - sqrt(SNR./(1 + SNR))); %理论瑞利

mue = sqrt(SNR/(1+SNR)); 
mrcth(k) = 0.25 * (2 + mue) * (1-mue)^2;%理论2Rx MRC

end 

sum_dcf = sum_dcf + simber_com1; 
sum_dtf = sum_dtf + simber_com2; 
sum_af = sum_af + simber_com3; 
end 

%average BER: 
avgber_dcf = sum_dcf/N_iter; 
avgber_dtf = sum_dtf/N_iter; 
avgber_af = sum_af/N_iter; 

%误码率图
figure 
semilogy(SNRdB,avgber_dcf,SNRdB,avgber_dtf,SNRdB,avgber_af,SNRdB,theberawgn,SNRdB,theberrayleigh,SNRdB,mrcth); 
axis([SNRdB(1) max(SNRdB) 10^-5 0.5]); 
grid on 
legend('DCF','DTF','AF','AWGN','Rayleigh','MRC 2 senders'); 
xlabel('SNR dB'); 
ylabel('BER'); 
up3075

        DCF、DTF、AF、AWGN、Rayleigh和MRC在通信系统中各有其特点和作用。它们在信号处理、噪声抵抗、以及适应不同通信环境方面存在差异。在实际应用中,需要根据具体需求和场景选择合适的技术和方法。

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/135032025