【OFDM】AWGN 信道下 BPSK 调制 (卷积码) 性能对比仿真实验 (Matlab 实现)

一、实验目的

实现 BPSK 调制在 AWGN 信道下分别使用卷积码和不使用卷积码的性能仿真,并绘制信噪比-误比特率曲线进行对比分析。其中,卷积码的约束长度为 7,生成多项式为 [133,171],码率为 1/2;译码分别使用硬判决/软判决维特比译码


二、仿真实验

clear all; clc;   
  
EbNo=0:10;      % SNR的范围  
N=1000000;      % 消息比特数  
M=2;            % 调制阶数(BPSK调制)  
L=7;            % 约束长度  
  
trel=poly2trellis(L,[133,171]);     % 卷积码生成多项式  
tblen=6*L;                          % Viterbi译码器回溯深度  
msg=randint([0,1],1,N);             % 产生随机消息比特序列  
msg1=convenc(msg,trel);             % 1/2卷积编码  
x1=pskmod(msg1,M);                  % BPSK调制  
  
for snr = 1:length(EbNo)   
    % 加入AWGN,因为码率为1/2,故每个符号能量比比特能量少3dB  
    y=awgn(x1,EbNo(snr)-3);  
    y1=pskdemod(y,M);                                         % 硬判决  
    y1=vitdec(y1,trel,tblen,'cont','hard');                   % Veterbi译码  
    [err,ber1(snr)]=biterr(y1(tblen+1:end),msg(1:end-tblen)); % 计算误比特率  
     
    y2=vitdec(real(y),trel,tblen,'cont','unquant');           % 软判决  
    [err,ber2(snr)]=biterr(y2(tblen+1:end),msg(1:end-tblen)); % 计算误比特率  
end  
  
ber=berawgn(EbNo,'psk',2,'nodiff');     		% 计算未编码BPSK调制误比特率  
semilogy(EbNo,ber,'-go',EbNo,ber1,'-r*',EbNo,ber2,'-b+');  
legend('未编码BPSK调制误比特率','编码(硬判决译码)误比特率','编码(软判决译码)误比特率')
grid on;  
title('卷积码性能对比')  
xlabel('Eb/No');ylabel('误比特率')

 三、结果分析

随着信噪比的增大,不论有无使用卷积码编码,误比特率都在降低。但以(硬判决)维特比译码为例,对比之下,在大信噪比时(约大于3dB),有经过编码的误比特率较低;而在小信噪比时(约小于3dB),编码后的误比特率反而大于未编码时的误比特率。原因在于:在小信噪比情况下,编码的纠错能力超过了纠错门限以至于纠错码不再纠错,反而造成了更多的错误。

相同情况下,随着信噪比的增大,软判决译码和硬判决译码误比特率都在降低,但前者的误比特率总比后者更低且差别越来越大,即:软判决的纠错能力优于硬判决译码。或者说,在相同误比特率下,软判决译码算法的信噪比相较硬判决译码算法提升2dB左右。原因在于:维特比译码的软判决算法与硬判决算法相比,软判决译码算法的路径度量采用“软距离(常用欧几里德距离)”而非汉明距离。在采用软距离的情况下,路径度量的值为模拟量,需经过一些处理以便于相加和比较。因此,计算复杂度有所提高。除了路径度量以外,软判决算法与硬判决算法在结构和过程上完全相同。然而,由于硬判决译码的判决过程损失了信道信息,其性能是不如软判决译码的。

 

发布了14 篇原创文章 · 获赞 12 · 访问量 719

猜你喜欢

转载自blog.csdn.net/qq_39478403/article/details/105362202