二. 信道编码技术对比
(一)目的: 对线性分组码以及卷积码在不同信道(随机信道及突发信道)中纠错性能进行
比较分析。
(二)基本内容:
1. 利用 Matlab 软件中的 Simulink 仿真器或者 m 函数搭建数字通信系统(含信源、差错控
制编/解码模块、调制/解调模块、随机信道等模块),以下仿真研究均在该系统下进行;
2. 采用不同的数字调制方式,研究无信道编码和有信道编码时系统的误比特率比较;
3. 在相同的信源、调制方式和信道条件下,研究卷积码与线性分组码的纠错性能比较(比
较系统的误比特率);
4. 研究卷积码参数不同时,纠错性能的差异。
(三)拓展内容:信道模型改成突发信道,此时为了实现接收端可靠接收,除了差错控制编
码外还需要加入交织模块。在这种情况下,完成与基本内容相同的仿真与研究。
%Channelcoding 为信道编码函数
% 信道编码子函数,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,[]);
%Channeldecoding 为信道解码纠错子函数
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,[]); %转化为比特流
%Interwaving 为交织子函数
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
%Deinterwaving 为解交织子函数
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
%addfade 为向信道加入衰落参数的子函数
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
%
%end
code=modcode;
%awgn 为库函数,向信源加高斯白噪声
%pskmod 为库函数,用于信号调制,输出为复数
%pskdemod 为库函数,用于信号解调
%每符号比特数
基本内容
file1:信道编码对通信系统性能的影响,有无信道编码的影响;
%信道编码对通信系统性能的影响,有无信道编码的影响
%功能:有无信道编码性能比较
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';
%监督矩阵
%校正子
%模拟信源编码,发送码组 A
sym=randint(n,1,M); %在 MATLAB 中用于产生基质的均匀分布的随机整数
sym=de2bi(sym,'left-msb');
bitcoded=channelcoding(sym,G,4); %信道编码,(7,4)码 ,接受码组 B
modbit=dpskmod(bitcoded,M); %DPSK 调制
snr=0:0.2:15;
L=length(snr);
ser=zeros(1,L);
ser2=zeros(1,L);
for k=1:L
%传输序列 modbit 加入 AWGN 噪声,噪声为 0 到 15dB
y=awgn(modbit,10*log10(b)+snr(k),'measured');
zsym=dpskdemod(y,M); %DPSK 解调
zbit=de2bi(zsym,'left-msb');
recode=reshape(zbit',1,[]);%1*n
Rstream=recode;
err=(Rstream~=bitcoded);
errnum=sum(err);
ser(k)=errnum/length(bitcoded);
bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,7,4); %纠错
err=(bitdecoded~=bitcoded);
errbits=sum(err);
ser2(k)=errbits/(length(bitcoded));
end
semilogy(snr,ser,'b-*')
hold on
semilogy(snr,ser2,'r-o')
grid on
legend('没有信道编码','信道编码');
xlabel('Eb/No(dB)'); ylabel('SER');
title('2DPSK 有无信道编码性能比较');
R
E
S
100
10-1
10-2
10-3
10-4
10-5
10-6
10-7
0
2DPSK有 无 信 道 编 码 性 能 比 较
没 有 信 道 编 码
信 道 编 码
2
4
6
Eb/No(dB)
8
10
12
%监督矩阵
%校正子
%每符号比特数
%信道编码对通信系统性能的影响,有无信道编码的影响
%功能:有无信道编码性能比较
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); %在 MATLAB 中用于产生基质的均匀分布的随机整数
sym=de2bi(sym,'left-msb');
bitcoded=channelcoding(sym,G,4); %信道编码,(7,4)码 ,接受码组 B
modbit1=pskmod(bitcoded,M); %对线性码采用 PSK 调制方式
modbit3=dpskmod(bitcoded,M); %改变调制方式为 DPSK 调制方式
snr=0:0.2:15;
L=length(snr);
ser1=zeros(1,L);
ser3=zeros(1,L);
ser21=zeros(1,L);
ser23=zeros(1,L);
%模拟信源编码,发送码组 A
for k=1:L
%传输序列 modbit 加入 AWGN 噪声,噪声为 0 到 15dB
y1=awgn(modbit1,10*log10(b)+snr(k),'measured');
zsym1=pskdemod(y1,M);
zbit1=de2bi(zsym1,'left-msb');
recode1=reshape(zbit1',1,[]);%1*n
Rstream1=recode1;
err1=(Rstream1~=bitcoded);
%PSK 解调
errnum1=sum(err1);
ser1(k)=errnum1/length(bitcoded);
bitdecoded1=channeldecoding(Rstream1,Etab,Smatrix,H,7,4); %纠错
err1=(bitdecoded1~=bitcoded);
errbits1=sum(err1);
ser21(k)=errbits1/(length(bitcoded));
end
for k=1:L
%传输序列 modbit 加入 AWGN 噪声,噪声为 0 到 15dB
y3=awgn(modbit3,10*log10(b)+snr(k),'measured');
zsym3=dpskdemod(y3,M); %DPSK 解调
zbit3=de2bi(zsym3,'left-msb');
recode3=reshape(zbit3',1,[]);%1*n
Rstream3=recode3;
err3=(Rstream3~=bitcoded);
errnum3=sum(err3);
ser3(k)=errnum3/length(bitcoded);
bitdecoded3=channeldecoding(Rstream3,Etab,Smatrix,H,7,4); %纠错
err3=(bitdecoded3~=bitcoded);
errbits3=sum(err3);
ser23(k)=errbits3/(length(bitcoded));
end
semilogy(snr,ser1,'b-*')
hold on
semilogy(snr,ser21,'r-*')
semilogy(snr,ser3,'b-o')
semilogy(snr,ser23,'r-o')
grid on
legend('2PSK 没有信道编码','2PSK 有信道编码','2DPSK 没有信道编码','2DPSK 有信道
编码');
xlabel('Eb/No(dB)'); ylabel('Pe');
title('不同调制方式下有无信道编码性能比较');
e
P
100
10-1
10-2
10-3
10-4
10-5
10-6
10-7
0
不 同 调 制 方 式 下 有 无 信 道 编 码 性 能 比 较
2PSK没 有 信 道 编 码
2PSK有 信 道 编 码
2DPSK没 有 信 道 编 码
2DPSK有 信 道 编 码
2
4
6
Eb/No(dB)
8
10
12
%每符号比特数
file2:不同信道编码性能比较,卷积码和线性分组码
%功能:不同信道编码性能比较
%编码方式是:卷积码
M=2;
%进制
b=log2(M);
n=128*10000; %符号数
sym=zeros(1,n+5);
sym=randint(n,1,M); %在 MATLAB 中用于产生基质的均匀分布的随机整数
sym=reshape(sym,1,[]);
trel=poly2trellis(3,[5,7]);%定义网格图
tblen=5;
code=convenc(sym,trel); %信道编码,(2,1,3)卷积码
modbit=pskmod(code,M); %对卷积码采用 PSK 调制方式
snr=0:0.2:15;
L=length(snr);
ser2=zeros(1,L);
for k=1:L
%传输序列 modbit 加入 AWGN 噪声,噪声为 0 到 15dB
y=awgn(modbit,10*log10(b)+snr(k),'measured');
zsym=pskdemod(y,M);
Restreame=reshape(zsym',1,[]);%1*n
%PSK 解调
decoded=vitdec( Restreame,trel,tblen,'cont','hard'); %维特比译码
err=(decoded(6:end)~=sym(1:128*10000-5));
errbits=sum(err);
ser2(k)=errbits/(length(sym));
end
%编码方式是:线性分组码
G=[1 0 0 1 0 1;0 1 0 1 1 0;0 0 1 0 1 1]; %生成矩阵
H=[1 1 0 1 0 0;0 1 1 0 1 0;1 0 1 0 0 1 ];
Etab= [0 0 0 0 0 0;0 0 0 0 0 1;
%错误图样
0 0 0 0 1 0;0 0 0 1 0 0;
0 0 1 0 0 0;0 1 0 0 0 0;
1 0 0 0 0 0;0 0 0 0 0 0];
Smatrix=Etab*H';
sym1=randint(n,1,M); %在 MATLAB 中用于产生基质的均匀分布的随机整数
sym1=de2bi(sym1,'left-msb');
bitcoded=channelcoding(sym1,G,3); %信道编码,(6,3)码 ,接受码组 B
modbit1=pskmod(bitcoded,M); %对线性码采用 PSK 调制方式
snr=0:0.2:15;
L=length(snr);
ser1=zeros(1,L);
for k=1:L
%传输序列 modbit 加入 AWGN 噪声,噪声为 0 到 15dB
%模拟信源编码,发送码组 A
%监督矩阵
%校正子
y=awgn(modbit1,10*log10(b)+snr(k),'measured');
zsym=pskdemod(y,M);
zbit=de2bi(zsym,'left-msb');
recode=reshape(zbit',1,[]);%1*n
Rstream=recode;
%PSK 解调
bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,6,3); %纠错
err=(bitdecoded~=bitcoded);
errbits1=sum(err);
ser1(k)=errbits1/(length(bitcoded));
end
semilogy(snr,ser1,'b-*')
hold on
semilogy(snr,ser2,'r-o')
legend('线性分组码','卷积码');
grid on
xlabel('Eb/No(dB)'); ylabel('Pe');
title('2PSK 的不同编码方式的性能对比');