logo资料库

线性分组码以及卷积码性能分析.docx

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
二. 信道编码技术对比 (一)目的: 对线性分组码以及卷积码在不同信道(随机信道及突发信道)中纠错性能进行 比较分析。 (二)基本内容: 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 的不同编码方式的性能对比');
分享到:
收藏