交织码的Matlab代码

更新时间:2023-11-28 16:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

交织码的Matlab代码

从广义上说,交织编码属于分组编码,但由于采用存储器实现交织,它同时又具有卷积编码的记忆特征。在发端,它将分组长度L的信息序列通过交织器重排,在收端通过解交织器恢复原序列,以求使信道中突发错误变为无记忆随机独立差错。交织编码是一种信道改造技术,它通过信号设计将一个原来属于突发差错的有记忆信道改造为基本上是独立差错的随机无记忆信道。交织编码作为克服衰落信道中突发性干扰的有效方法,通常和其它用于纠正无记忆独立差错的信道编码相结合构成级联码(见下文),广泛应用于当代移动通信。

交织码通常表示为(M,N),分组长度L=MN,交织方式用M行N列的交织矩阵表示。一般,交织方式分为分组交织和卷积交织。分组交织的交织矩阵按列写入,按行读出;去交织矩阵按行写入按列读出。卷积交织的交织矩阵和去交织矩阵的写入与读出均按行进行。

本次仿真采用(7,4)卷积交织编码。 性能参数如下:

?123171152721??82241812628???交织矩阵:??

15932519137????2216104262014??分组卷积交织前序号:

[ 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ]; 卷积交织后序号重排:

[ 1 23 17 11 5 17 21 8 2 24 18 12 6 28 15 9 3 25 19 13 7 22 16 10 4 26 20 14 ]; 性能分析:

1. 任何长度小于等于M = 7的突发差错,经交织、去交织后成为独立差

错。

2. 任何长度大于M = 7的突发差错,经交织、去交织后有可能变成短突

发差错。

3. 特殊的,间隔为M = 7的独立差错,经交织、去交织后会变成长度为

N = 4的突发差错。

MATLAB源程序

function [aa]=jiaozhi(bb,n) %jiaozhi.m 卷积交织函数 %n=28 分组长度

? 卷积交织前原分组序列 a 卷积交织后分组序列

%序号重排方式:

cc=[ 1 23 17 11 5 17 21 8 2 24 18 12 6 28 15 9 3 25 19 13 7 22 16 10 4 26 20 14 ];

for i=1:n

aa(i)=bb(cc(i)); end

%jiaozhi.m 卷积交织函数

function [bb]=jiejiaozhi(aa,n) %jiejiaozhi.m 解卷积交织函数 %n=28

a 解卷积交织前原分组序列 ? 解卷积交织后分组序列

%序号重排方式:

cc=[ 1 23 17 11 5 17 21 8 2 24 18 12 6 28 15 9 3 25 19 13 7 22 16 10 4 26 20 14 ]; for i=1:n

bb(cc(i))=aa(i); end

%jiejiaozhi.m 解卷积交织函数

特别的,本次仿真还采用了一种循环等差交织编码。所谓循环等差,是指将序号从大到小顺时针排成一圈,从1开始等间隔逆时针取28个数,间隔为4,这样依次取的28个数即序号重排方式。

性能参数如下:

?12419149427??221712722520???交织矩阵:??

?1510528231813???83262116116??分组交织前序号:

[ 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ]; 循环等差交织后序号重排:

[ 1 24 19 14 9 4 27 22 17 12 7 2 25 20 15 10 5 28 23 18 13 8 3 26 21 16 11 6]; 性能分析:

1. 任何长度小于等于M + 3 = 7 + 3 =10的突发差错,经交织、去交织后

成为独立差错。

2. 任何长度大于M + 3 = 7 + 3 =10的突发差错,经交织、去交织后有可

能变成短突发差错。

3. 特殊的,间隔为M + 3 = 7 + 3 =10的独立差错,经交织、去交织后会

变成长度为N - 1= 4 – 1 =3的突发差错。

4. 特殊的,间隔为…4、5、4、5…的独立差错,经交织、去交织后会变

成长度为5或6的突发差错。

从前3条性能分析的比较看,循环等差交织比卷积交织更好。但是从第4条看,循环等差交织比卷积交织又差了。因此,只能通过实际仿真来比较两种交织方式的性能(见下文级联码部分)。

MATLAB源程序

function [aa]=jiaozhi_nocnv(bb,n) %jiaozhi_nocnv.m 循环等差交织函数 %n=28 分组长度

? 循环等差交织前原分组序列 a 循环等差交织后还原分组序列

%序号重排方式:

%j[n]=[ 1 24 19 14 9 4 27 22 17 12 7 2 25 20 15 10 5 28 23 18 13 8 3 26 21 16 11 6 ] j=1; for i=1:n

j=rem(j+5-1,n)+1; %序号重排方式迭代算法 aa(n+1-i)=bb(j); end

%jiaozhi_nocnv.m 循环等差交织函数

function [bb]=jiejiaozhi_nocnv(aa,n) %jiaozhi_nocnv.m 解循环等差交织函数 %n=28 分组长度

a 解循环等差交织前原分组序列 ? 解循环等差交织后还原分组序列

%序号重排方式:

%j[n]=[ 1 24 19 14 9 4 27 22 17 12 7 2 25 20 15 10 5 28 23 18 13 8 3 26 21 16 11 6 ] j=1; for i=1:n

j=rem(j+5-1,n)+1; %序号重排方式迭代算法 bb(j)=aa(n+1-i); end

%jiaozhi_nocnv.m 解循环等差交织函数

级联码

在许多实际信道中,出现的误码既不是单纯随机独立差错,也不是明显的单个突发差错,而是混合型差错。级联码就是最常用于纠正这类混合型差错的一种性能优良,高效的编码方式。

按照 NASA 1984年给出的标准级联码系统,级联码的编码被分成外编码、交织编码和内编码三部分,其中外编码采用分组线性码,内编码采用卷积码。标准级联码系统框图如下:

标准级联码系统框图

编码器

输入 输出 外编码器 (分组线性码) 交织器 内编码器 (卷积码) 信 道 外译码器 (分组线性码) 内译码器 (卷积码) 去交织器 译码器

事实上,我们可以把系统框图中外编码器、交织器和内编码器三部分级联后的总体,看作一个级联码的编码器,同理,外译码器、去交织器和内译码器三部分级联后的总体构成了级联码的译码器。

本次仿真外编码采用(7,4)HAMMING码,内编码采用(2,1,3)卷积码。交织编码采用(7,4)卷积交织编码或循环等差交织编码。除特别说明外,交织编码采用前者即(7,4)卷积交织编码。

各编码性能参数如前所述。 仿真时,首先进行了级联码和仅内码时的性能比较,接着还比较了上文交织码部分两种交织方式的性能,同时还在最后对(7,4)HAMMING码、(2,1,3)卷积码、级联码各仿真结果进行了综合比较。

1. 级联码和仅内码时的性能比较:

MATLAB源程序

function [p]=smldPe55_cnv_jz_74(snr_in_dB)

%smldPe55_cnv_jz_74.m 二进制双极性级联码(卷积交织)通信系统蒙特卡罗仿真函数 %外编码采用(7,4)HAMMING码 %交织编码采用(7,4)卷积交织编码 %内编码采用(2,1,3)卷积码 %snr_in_dB 信噪比 %p 误码率% E=1;

SNR=exp(snr_in_dB*log(10)/10);?/N0 sgma=E/sqrt(2*SNR); N=16;

loop=10^5/N; %仿真序列长度10^5,运行时间约8分钟; Ns=N*loop;

G=[1 0 1 1; 1 1 1 1]; %(2,1,3)卷积码编码矩阵 k=1;

numoferr_cnv_jz_74=0; temp=0;

dsource=zeros(1,N);

output_h74=hamming74(dsource);

output_h74_jz28=jiaozhi(output_h74,28);

output_cnv_encd=cnv_encd(G,k,output_h74_jz28); channel_output=zeros(1,length(output_cnv_encd));

[decoder_output,survivor_state,cumulated_metric]=viterbi(G,k,channel_output);

[decoder_output_jjz28]=jiejiaozhi(decoder_output,28); [h4output,h7output]=h47(decoder_output_jjz28); for j=1:loop for i=1:N temp=rand; if (temp<0.5) dsource(i)=0; else

dsource(i)=1; end end

%length(dsource)

output_h74=hamming74(dsource);

output_h74_jz28=jiaozhi(output_h74,28); %卷积交织 output_cnv_encd=cnv_encd(G,k,output_h74_jz28); %length(output_cnv_encd),pause for i=1:length(output_cnv_encd) if(output_cnv_encd(i)==0) r=-E+gngauss(sgma); else

r=E+gngauss(sgma); end if (r<0)

channel_output(i)=0; else

channel_output(i)=1; end end

[decoder_output,survivor_state,cumulated_metric]=viterbi(G,k,channel_output);

[decoder_output_jjz28]=jiejiaozhi(decoder_output,28); %解卷积交织 %length(decoder_output),pause

[h4output,h7output]=h47(decoder_output_jjz28); for i=1:N%length(h4output) if(h4output(i)~=dsource(i))

numoferr_cnv_jz_74=numoferr_cnv_jz_74+1; end end end

numoferr_cnv_jz_74,

p=numoferr_cnv_jz_74/Ns;%length(decoder_output),pause

%smldPe55_cnv_jz_74.m 二进制双极性级联码(卷积交织)通信系统蒙特卡罗仿真函数

?55_cnv_ja_74.m二进制双极性级联码(卷积交织)通信系统的蒙特卡罗仿真绘图 %外编码采用(7,4)HAMMING码 %交织编码采用(7,4)卷积交织编码 %内编码采用(2,1,3)卷积码

%仿真序列长度10^5,运行时间约3.5小时 echo on

SNRindB1=0:1:16;

smld_err_prb=zeros(length(SNRindB1)); smld_err_prb_cnv=zeros(length(SNRindB1)); smld_err_prb_cnv_jz_74=zeros(length(SNRindB1)); SNRindB2=0:0.1:16;

theo_err_prb55=zeros(length(SNRindB2)); for i=1:length(SNRindB1)

smld_err_prb(i)=smldPe55(SNRindB1(i));

smld_err_prb_cnv(i)=smldPe55_cnv(SNRindB1(i));

smld_err_prb_cnv_jz_74(i)=smldPe55_cnv_jz_74(SNRindB1(i)); end

for i=1:length(SNRindB2)

SNR=exp(SNRindB2(i)*log(10)/10); theo_err_prb55(i)=Qfunct(sqrt(2*SNR)); Qfunct y=(1/2)*erfc(x/sqrt(2)); End %绘图函数 figure;

semilogy(SNRindB2,theo_err_prb55,'b:'); axis([0,16,1e-5,1]); xlabel('Eb/N0 in dB'); ylabel('Pe');

title('单用户未扩频级联交织码误比特率曲线,与仅内码和未编码时误比特率曲线比较'); hold on

semilogy(SNRindB1,smld_err_prb,'b*-');

semilogy(SNRindB1,smld_err_prb_cnv,'gs-'); semilogy(SNRindB1,smld_err_prb_cnv_jz_74,'rx-');

?55_cnv_jz_74.m二进制双极性级联码(卷积交织)通信系统的蒙特卡罗仿真绘图

运行结果

下图(ce55_cnv_jz_74的运行结果)给出了不同信噪比条件下,发送100000比特的二进制双极性级联码 ( 外编码采用(7,4)HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码 ) 通信系统的蒙特卡罗仿真结果,二进制双极性(2,1,3)卷积编码通信系统的蒙特卡罗仿真结果,以及未编码系统的仿真结果和未编码系统的理论值曲线。

从下图的仿真结果可见,级联码与仅内码时相比,在信噪比高于2dB时,可以更好地降低二进制双极性通信系统的误码率,从而能更进一步提高通信的有效性。但是,在信噪比过低时(低于2dB),级联码在降低二进制双极性通信系统的误码率性能方面,反而比与仅内码时稍差一些。换言之,仿真结果表明,在信噪比低于2dB时,级联码的外编码和交织器不仅没有起到进一步纠错的作用,反而会降低内编码器的纠错性能,但是和未编码时相比,仍然能够降低二进制双极性通信系统的误码率,提高通信的有效性。

本文来源:https://www.bwwdw.com/article/k81t.html

Top