课程设计报告
题目:基于 MATLAB 的通信系统仿真
———信道编码对通信系统性能的影响
专业:中大 通信工程
姓名: XXX
学号: 0730xxxx
基于 MATLAB 的通信系统仿真
———信道编码对通信系统性能的影响
摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用 MATLAB
仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能
的影响,如 AWGN 信道和深衰落信道。
关键词:信道编码、分组码、MATLAB 仿真、性能
一、引言
提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的
提升信息传输的可靠性。1948 年,信息论的奠基人 C.E.Shannon 在他的开创性论文“通信的
数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率 R
不大于信道容量 C, 就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任
意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为
达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本
条件 :(1 )采用随机编译码方式 ; (2 )编码长度L→∞ , 即分组的码组长度无限 ; (3)
译码采用最佳的最大似然译码算法。【1】
二、信道编码理论
1、信道编码的目的
在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串
扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标
通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编
码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。
2、信道编码的实质
信道编码的实质就是在信息码中增加一定数量的多余码元(称为监督码元),使它们满足
一定的约束关系,这样由信息码元和监督码元共同组成一个由信道传输的码字。举例而言,
欲传输 k 位信息,经过编码得到长为 n(n>k)的码字,则增加了 n - k = r 位多余码元,我
们定义 R = k / n 为编码效率。【2】
3、 信道编码公式
令信息速率为 fb,经过编码以后的速率为 ft,定义:R=fb/ft 为编码率。则对于任何一
个信道,总存在一个截止速率 R0,只要 RR0,总可以达到:BERCR2-nR0,其中 CR 为某个常数,
n 为编码的约束长度。
对于等概二进码、AWGN 信道,有:
R
0
1
log
1(
e
2
NER b
0
/
0
)
E
b
N
0
ln1
R
0
1
)
R
0
1(
2
1
三、线性分组码的编译码原理
1、 线性分组码的基本概念
一个[n ,k]线性分组码, 是把信息划成 k个码元为一段(称为信息组), 通过编码
器变成长为 n 个 码元的一组, 作为[n, k]线性分组码的一个码字。 若每位码元的取值
有 q种(q为素数幂), 则共有 qk个码字。 n长的数组共有 qn组, 在二进制情况下, 有 2n
个数组。 显然, qn个 n维数组(n重)组成一个 GF(q)上的 n维线性空间。 如果 qk(或 2k)
个码字集合构成了一个 k维线性子空间, 则称它是一个[n ,k]线性分组码。即将 k 维 k
重信息空间的元素线性映射到 n 维 n 重矢量空间(接收矢量/收码) 的 k 维 n 重子空间(码
空间)。如下图为[7,3]码
2、生成矩阵和校验矩阵
生成矩阵:
G
kI
Q
1000
0100
0010
0001
111
110
101
011
G 称为生成矩阵,因为可以用它产生整个码组 A,即有
A
aaaaaaa
1
2
3
4
6
5
0
aaaa
4
5
6
G3
生成矩阵的性质:具有[IkQ]形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码
组 A 中,信息位的位置不变,监督位附加于其后。这种形式的码组称为系统码。 矩阵 G 的
各行也必须是线性无关的。如果已有 k个线性无关的码组,则可以将其用来作为生成矩阵 G,
并由它生成其余码组。【3】
监督矩阵:
H
1110
1101
1011
100
010
001
rPI
监督矩阵可用来校验和纠错。
四、MATLAB 仿真源程序及说明
采用模块化编程,力求把每个功能独立成各个模块,让程序更清晰。首先介绍各个子程
序及其实现的基本功能。
运行环境为 Matlab7.0 版本
通信过程的每个模块写成子程序函数:
Channelcoding 为信道编码函数
Channeldecoding 为信道解码纠错子函数
Interwaving 为交积子函数
Deinterwaving 为解交积子函数
addfade 为向信道加入衰落参数的子函数
awgn 为库函数,向信源加高斯白噪声
pskmod 为库函数,用于信号调制,输出为复数
pskdemod 为库函数,用于信号解调
脚本文件:file1:信道编码对通信系统性能的影响,有无信道编码的影响
file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响
file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较
信道编码子程序:
%信道编码子函数,sym 为编码码流,G 为生成矩阵,k 为编码方式的长度,如(7,4)码的 4
function bitcoded=channelcoding(sym,G,k)
A=vec2mat(sym,k);
U=A*G;
U=mod(U,2);
bitcoded=reshape(U',1,[]);
信道解码子程序:
function bitdecoded=channeldecoding(recode,Etab,Smatrix,H,n,k)
% 前向纠错函数,实现纠错功能
% bidecoded 为纠错后返回的比特流
% recode 为输入的比特流
% E 为错误图样表,S 为对应的伴随式表
% H 为监督矩阵,n,k 为码的类型,如(7,4)码,n=7,k=4
row=length(recode)/n;
%行数
E=zeros(row,n);
%错误图样
RM=zeros(row,n); %纠错之后的矩阵
R=vec2mat(recode,n);
S=R*H'; %伴随矩阵
S=mod(S,2);
for i=1:row
for j=1:2^(n-k)
%查表纠错
if(S(i,:)==Smatrix(j,:))
E(i,:)=Etab(j,:);
RM(i,:)=R(i,:)+E(i,:);
RM(i,:)=mod(RM(i,:),2);
break;
end
end
end
bitdecoded=reshape(RM',1,[]); %转化为比特流
交织子程序:
function retbit=interweaving(bitstream,row,col)
%功能:实现对输入比特的交积
% retbit 为交积后返回的比特流向量
% bitstream 为需要交积的比特流向量
% row 和 col 为交积器的行和列,
% 通过改变 col 就可以改变交积深度
retbit=zeros(1,length(bitstream));
bitarr=vec2mat(bitstream,row);
bitarr=bitarr';
for i=1:length(bitstream)/(row*col)
temp=bitarr(:,((i-1)*col+1):i*col);
retbit(1,((i-1)*(row*col)+1):(i*(row*col)))=reshape(temp',1,[]);
end
解交织子程序:
function retbits=deinterweaving(bitstream,row,col)
%功能:实现对输入比特的解交积
%rebits 为解交积后返回的比特流
% bitstream 输入的比特流
%row 和 col 为交积器的行和列,通过改变 col 就可以改变交积器的长度
retbits=zeros(1,length(bitstream));
bitarr=vec2mat(bitstream,col);
for i=1:length(bitstream)/(row*col)
temp=bitarr((i-1)*row+1:i*row,:);
retbits(1,(i-1)*row*col+1:i*row*col)=reshape(temp,1,[]);
end
信道衰落子程序:
function code=addfade(modcode,Tf,isperiod,isfade)
%功能:向传输序列 modcode 叠加衰落性信道的衰落参数 k(t)
%code 为加入衰减参数之后返回的序列。
% modcode 为调制之后的序列
% Tf 为衰落时间,以 ms 为单位,小于 10ms,
% Tf=1,表示衰落 1ms
% isperiod 周期衰落和一次性衰落的标志,
% isperiod=1 表示周期性衰落,0 表示一次性衰落
% isfade 表示是否存在衰落,1 存在,0 不存在衰落直接返回 modcode
if(isfade==1)
if(isperiod==1)
%周期性衰落
for k=1:length(modcode)/(100*Tf)
a=(k-1)*100*Tf+31;
b=(k-1)*100*Tf+30+10*Tf;
modcode(1,a:b)=0.1*modcode(1,a:b);
end
else
%一次衰落
a=31;
b=30+10*Tf;
modcode(1,a:b)=0.1*modcode(1,a:b);
end
code=modcode;
code=modcode;
else
end
1、 file1:信道编码对通信系统性能的影响,有无信道编码的影响
执行时间:Elapsed time is 355.023518 seconds.
tic
clc
%功能:有无信道编码性能比较
M=2;
%进制
b=log2(M) ;
%每符号比特数
n=128*10000 ; %符号数
G=[1 1 1 1 0 0 0;1 0 1 0 1 0 0;0 1 1 0 0 1 0;1 1 0 0 0 0 1] ; %生成矩阵
H=[1 0 0 1 1 0 1;0 1 0 1 0 1 1;0 0 1 1 1 1 0] ;
%监督矩阵
Etab=
[0 0 0 0 0 0 0;0 0 0 0 0 0 1;
%错误图样
0 0 0 0 0 1 0;0 0 0 0 1 0 0;
0 0 0 1 0 0 0;0 0 1 0 0 0 0;
0 1 0 0 0 0 0;1 0 0 0 0 0 0];
Smatrix=Etab*H';
sym=randint(n,1,M);
%对应的伴随式
sym=de2bi(sym,'left-msb');
%模拟信源编码
bitcoded=channelcoding(sym,G,4); %信道编码,(7,4)码
modbit=pskmod(bitcoded,M);
%在传输序列 modbit 加入 AWGN 噪声
snr=0:0.2:15; %噪声为 0 到 15d
L=length(snr)
ser=zeros(1,L);
ser2=zeros(1,L);
for k=1:L
y=awgn(modbit,10*log10(b)+snr(k),'measured');
zsym=pskdemod(y,M);
%复数解调
zbit=de2bi(zsym,'left-msb');
recode=reshape(zbit',1,[]);
Rstream=recode;
err=(Rstream~=bitcoded);
errnum=sum(err);
ser(k)=log10(errnum/length(bitcoded));
%纠错
bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,7,4);
err=(bitdecoded~=bitcoded);
errbits=sum(err);
ser2(k)=log10(errbits/(length(bitcoded)));
end
plot(snr,ser,'b-*')
hold on
plot(snr,ser2,'r-o')
grid on
legend('没有信道编码','信道编码');
xlabel('Eb/No(dB)');
ylabel('SER');
title('2PSK 有无信道编码性能比较');
toc
%
Elapsed time is 278.288819 seconds.程序运行时间
结论:由上图在较高信噪比的时候编码增益很明显大大提高了误码性能,但是在低信
噪被的时候编码增益较小甚至可能是负值,则是因为编码后信息比特能量扩散到多个编码
比特上,每个编码比特能量有所降低,如果信噪比低的话,编码冗余带来的性能增益可能
弥补不了编码比特的能量的降低,因此信道中信噪比的波动会显著降低编码性能