参考文献:刘学勇. 详解MATLAB Simulink通信系统建模与仿真[M]. 电子工业出版社,
2011.
吐槽一句:这本书我觉得还是蛮好的,就是配套光盘,我以为是把内容好好讲一遍呢,结果发现就是把书拍照放到PPT上读了一遍,我不知道这种教学视频有什么意义。
卷积码常用符号(n,k,m)表示。每个(n,k)码段(也称子码,通常较短)内的n个码元不仅与该码段内的信息元有关,而且与前面的信息元有关。通常称m为编码存储。
生成多项式的概念。
每1位数据,影响m+1个输出子码,称m+1为编码约束度。
最大似然译码算法的基本思路是,把接收码字与所有可能的码字比较,选择一种码距最小的码字作为解码输出。
幸存路径的概念。
matlab提供了卷积码的函数编码convenc和相应的Veterbi译码函数vitdec,可以快速地得到编译码结果。
仿真说明:仿真BPSK调制在AWGN信道下分别使用卷积码和不使用卷积码的性能,其中,卷积码的约束长度为7,生成多项式为[171,133],码率为1/2,译码分别采用硬判决和软判决译码。
% 代码整理:贾继鹏
tic;close all;clear
all;clc
EbNo=0:2:10;
% SNR的范围
N=100000;
%
消息比特个数
M=2;
% BPSK调制
L=7;
% 约束长度
trel=poly2trellis(L,[171 133]); % 卷积码生成多项式
tblen=6*L;
%
Viterbi译码器回溯深度。
msg=randi([0,1],1,N);
% 消息比特序列
msg1=convenc(msg,trel);
% 卷积编码
x1=pskmod(msg1,M);
% BPSK调制
for ii=1:length(EbNo)
ii
y=awgn(x1,EbNo(ii)-3);
%加入高斯白噪声,因为码率为1/2,所以每个符号的能量要比比特能量少3dB
y1=pskdemod(y,M);
%硬判决
y1=vitdec(y1,trel,tblen,'cont','hard');
%Viterbi译码
[err,ber1(ii)]=biterr(y1(tblen+1:end),msg(1:end-tblen));
%误比特率
y2=vitdec(real(y),trel,tblen,'cont','unquant');
%软判决
[err,ber2(ii)]=biterr(y2(tblen+1:end),msg(1:end-tblen));
%误比特率
end
ber=berawgn(EbNo,'psk',2,'nodiff');
%BPSK调制理论误比特率
semilogy(EbNo,ber,'-ro',EbNo,ber1,'-m*',EbNo,ber2,'-b.','linewidth',2);
legend('BPSK理论误比特率','硬判决误比特率','软判决误比特率')
title('卷积码性能'); xlabel('Eb/No'); ylabel('误比特率');grid on;
toc