基于MATLAB的信道编码分析
题目:基于MATLAB 的通信系统仿真
———信道编码对通信系统性能的影响
专业: 通信工程 姓名:崔校通 学号: [1**********]6
日期: 2016.12.22
目录
一、引言........................................................................................................................ 2 二、信道编码理论........................................................................................................ 2
2.1、信道编码的目的 .......................................................................................... 2 2.2、信道编码的实质 .......................................................................................... 3 2.3、 信道编码公式 ............................................................................................ 3 三、线性分组码的编译码原理.................................................................................... 3
3.1、 线性分组码的基本概念 ............................................................................ 3 3.2、生成矩阵和校验矩阵 .................................................................................. 4 四、MATLAB 仿真 . ........................................................................................................ 5
4.1仿真 ................................................................................................................. 5
4.1.1原理说明 .............................................................................................. 5 4.1.2各子函数说明 ...................................................................................... 5 4.2仿真源程序 ..................................................................................................... 5
4.2.1信道编码 .............................................................................................. 5 4.2.2信道解码 .............................................................................................. 6 4.2.3交织 ...................................................................................................... 6 4.2.4解交织 .................................................................................................. 7 4.2.5信道衰落 .............................................................................................. 7
六 程序及仿真图.......................................................................................................... 8
1、 file1:信道编码对通信系统性能的影响,有无信道编码的影响 ............ 8 2、file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响 .... 10 3、 file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较.............................................................................................................................. 13
基于MATLAB 的通信系统仿真
———信道编码对通信系统性能的影响
摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB 仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN 信道和深衰落信道。 关键词:信道编码、分组码、MATLAB 仿真、性能
一、引言
提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年, 信息论的奠基人C.E.Shannon 在他的开创性论文“通信的数学理论”中, 提出了著名的有噪信道编码定理. 他指出:对任何信道, 只要信息传输速率R 不大于信道容量C, 就一定存在这样的编码方法:在采用最大似然译码时, 其误码率可以任意小. 该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限, 并指出了为达到理论极限应采用的译码方法. 在信道编码定理中, 香农提出了实现最佳编码的三个基本条件 :(1 )采用随机编译码方式 ; (2 )编码长度L→∞ , 即分组的码组长度无限 ; (3)译码采用最佳的最大似然译码算法。
二、信道编码理论
2.1、信道编码的目的
在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。
2.2、信道编码的实质
信道编码的实质就是在信息码中增加一定数量的多余码元(称为监督码元),使它们满足一定的约束关系,这样由信息码元和监督码元共同组成一个由信道传输的码字。举例而言,欲传输k 位信息,经过编码得到长为n(n>k)的码字,则增加了 n - k = r 位多余码元,我们定义 R = k / n 为编码效率。【2】
2.3、 信道编码公式
令信息速率为f b ,经过编码以后的速率为f t ,定义:R =f b /ft 为编码率。则对于任何一个信道,总存在一个截止速率R 0,只要R
-R 0E b /N 0
R =1-log (1+e ) 0 2对于等概二进码、AWGN 信道,有:
E b 11
=ln (1-R 0) N R 02-1 0
三、线性分组码的编译码原理
3.1、 线性分组码的基本概念
一个[n ,k ]线性分组码, 是把信息划成k 个码元为一段(称为信息组) , 通过编码器变成长为n 个 码元的一组, 作为[n , k ]线性分组码的一个码字。 若每位码元的取值有q 种(q 为素数幂) , 则共有q k 个码字。 n 长的数组共有q n 组, 在二进制情况下, 有2n 个数组。 显然, q n 个n 维数组(n 重) 组成一个GF(q ) 上的n 维线性空间。 如果q k (或2k ) 个码字集合构成了一个k 维线性子空间, 则称它是一个[n ,k ]线性分组码。即将k 维k 重信息空间的元素线性映射到n 维n 重矢量空间(接收矢量/收码) 的k 维n 重子空间(码空间)。如下图为[7,3]码
3.2、生成矩阵和校验矩阵
生成矩阵:
111⎤⎡1000⎢0100⎥ 110⎥G =[I k Q ]=⎢
⎢0010 101⎥⎢⎥0001 011⎣⎦
G 称为生成矩阵,因为可以用它产生整个码组A ,即有
A =[a 6a 5a 4a 3a 2a 1a 0]=[a 6a 5a 4a 3]G
生成矩阵的性质:具有[I k Q ]形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码组A 中,信息位的位置不变,监督位附加于其后。这种形式的码组称为系统码。 矩阵G 的各行也必须是线性无关的。如果已有k 个线性无关的码组,则可以将其用来作为生成矩阵G ,并由它生成其余码组。【3】 监督矩阵:
⎡1110 100⎤
⎥=[PI ]H =⎢1101 010r ⎢⎥
⎢⎣1011 001⎥⎦
监督矩阵可用来校验和纠错。
四、MATLAB 仿真
4.1仿真
4.1.1原理说明
采用模块化编程,力求把每个功能独立成各个模块,让程序更清晰。首先介绍各个子程序及其实现的基本功能。此次还采用了交织与解交织,其主要作用是,一个实际上的突发信道,经过发送端交织和接收端解交织的信息处理后,就完全等效成一个随机独立差错信道,信道交织编码实际上就是一类信道改造技术,它将一个突发信道改造成一个随机独立差错信道。它本身并不具备信道编码检、纠错功能,起到信号预处理的作用 4.1.2各子函数说明 运行环境为Matlab7.0版本
通信过程的每个模块写成子程序函数:
Channelcoding 为信道编码函数
Channeldecoding 为信道解码纠错子函数 Interwaving 为交织子函数 Deinterwaving 为解交织子函数 addfade 为向信道加入衰落参数的子函数
awgn 为库函数,向信源加高斯白噪声 pskmod 为库函数,用于信号调制,输出为复数 pskdemod 为库函数,用于信号解调
4.2仿真源程序
4.2.1信道编码
%信道编码子函数,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,[]); 4.2.2信道解码
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,[]); %转化为比特流
4.2.3交织
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
4.2.4解交织
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
4.2.5信道衰落
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; else
code=modcode; 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 噪声 S nr=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.程序运行时间
结论:由上图在较高信噪比的时候编码增益很明显大大提高了误码性能,但是在低信噪被的时候编码增益较小甚至可能是负值,则是因为编码后信息比特能量扩散到多个编码比特上,每个编码比特能量有所降低,如果信噪比低的话,编码冗余带来的性能增益可能弥补不了编码比特的能量的降低,因此信道中信噪比的波动会显著降低编码性能
2、file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响
tic
clc
%功能:有无信道编码性能比较
M=2; %进制
b=log2(M) ; %每符号比特数
n=128*10000 ; %符号数
interrow=8;intercol=10;%交积矩阵的行和列
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)码
interv=interweaving(bitcoded,interrow,intercol); %交积向量
modbit=pskmod(bitcoded,M);
modbit2=pskmod(interv,M);
%向传输序列modcode 叠加衰落性信道的衰落参数k(t)
modbitfade=addfade(modbit,1,1,1);
modbitfade2=addfade(modbit2,1,1,1);%1ms周期性衰落
modbitfade3=addfade(modbit2,2,1,1);%衰落时长2ms
%在传输序列modbit 加入AWGN 噪声
snr=0:0.2:25; %噪声为0到25d
L=length(snr)
ser=zeros(1,L);
ser2=zeros(1,L);
for k=1:L
y=awgn(modbitfade,10*log10(b)+snr(k),'measured');
y2=awgn(modbitfade2,10*log10(b)+snr(k),'measured');
y3=awgn(modbitfade3,10*log10(b)+snr(k),'measured');
zsym=pskdemod(y,M); %复数解调
zsym2=pskdemod(y2,M);
zsym3=pskdemod(y3,M);
zbit=de2bi(zsym,'left-msb');
zbit2=de2bi(zsym2,'left-msb');
zbit3=de2bi(zsym3,'left-msb');
recode=reshape(zbit',1,[]);
recode2=reshape(zbit2',1,[]);
recode3=reshape(zbit3',1,[]);
deinterv=deinterweaving(recode2,interrow,intercol);%解交积向量
deinterv3=deinterweaving(recode3,interrow,intercol);
Rstream=recode;
Rstream2=deinterv;
Rstream3=deinterv3;
%纠错
bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,7,4);
bitdecoded2=channeldecoding(Rstream2,Etab,Smatrix,H,7,4);
bitdecoded3=channeldecoding(Rstream3,Etab,Smatrix,H,7,4);
err=(bitdecoded~=bitcoded);
errbits=sum(err);
ser(k)=log10(errbits/(length(bitcoded)));
err2=(bitdecoded2~=bitcoded);
errbits2=sum(err2);
ser2(k)=log10(errbits2/(length(bitcoded)));
err3=(bitdecoded3~=bitcoded);
errbits3=sum(err3);
ser3(k)=log10(errbits3/(length(bitcoded)));
end
plot(snr,ser,'b-*')
hold on
plot(snr,ser2,'r-o')
hold on
plot(snr,ser3,'k-+')
grid on
legend('有信道编码没有交织1ms 衰落',' 有信道编码有交织1ms 衰落',' 有信道编码有交织2ms 衰落');
xlabel('Eb/No(dB)');
ylabel('SER');
title('2PSK衰落信道有无交织性能比较');
toc %Elapsed time is 1504.524053 seconds.%该程序运行时间
结论:衰落信道使系统的误码性能大大的降低,尤其是时延扩展远大于码元宽度的衰落,如瑞利衰落信道,此时信道属于慢深衰落,容易使得传输的信息出现连续的错误,当出现的错误大于信道编码的纠错能力时,就无法产生编码增益,甚至可能是性能恶化。此时必须使用交织把连续的错误打破分到不同的编解码分组中,尽量使没组只有少量甚至一个错误,此时编码增益将会大大提高,就如上图所示。
3、 file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较
图表在下一页,程序由file2中修改参数即可, 故在此不贴源程序。
结论:程序只需在file2的基础上修改加衰落函数addfade 的参数即可改变衰落时长:
File2中信道是1ms 的周期性衰落,信息传输速率是10kbps ,所以会出现周期性的连续10个比特出现深衰落,此时交织深度为10,可以解决深衰落带来的影响。但在file3中信道变为2ms 的周期性衰落,交织深度依旧为10,此时每个分组中可能有两个以上的错误,超出了汉明码的纠错能力,误码性能将会恶化。此时的
SNR-SER 曲线如下图中间那条所示,性能介于没有交织的1ms 深衰落和交织的1ms 深衰落之间。如果要改善系统的误码性能,就只能增加交织深度,知道满足信道编码的纠错能力,但是交织深度加深的话,会加大编译码的时延,不适合实时通信,所以应该根据实际通信系统的需求在两者之间取一个平衡。
参考文献:
【1】傅祖芸, 赵建中. 信息论与编码. 电子工业出版社,2006
【2】田宝玉,信息论基础,人民邮电出版社
【3】Andrea Goldsmith,无线通信,人民邮电出版社