通信原理二循环码.docx

上传人:b****2 文档编号:23030446 上传时间:2023-04-30 格式:DOCX 页数:23 大小:126.27KB
下载 相关 举报
通信原理二循环码.docx_第1页
第1页 / 共23页
通信原理二循环码.docx_第2页
第2页 / 共23页
通信原理二循环码.docx_第3页
第3页 / 共23页
通信原理二循环码.docx_第4页
第4页 / 共23页
通信原理二循环码.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

通信原理二循环码.docx

《通信原理二循环码.docx》由会员分享,可在线阅读,更多相关《通信原理二循环码.docx(23页珍藏版)》请在冰豆网上搜索。

通信原理二循环码.docx

通信原理二循环码

实验报告

学科:

通信原理

(二)

题目:

数字信号基带传输系统仿真

实验设备:

安有matlab仿真软件的计算机

学院:

光电信息与通信工程学院

系别:

通信工程

学号:

姓名:

指导教师:

 

一、实验目的与要求

1.学习并理解信道编码的根本目的、技术要求与基本目标等基本概念;

2.掌握循环码、miller码的物理涵义、数学基础及检纠错原理;

3.掌握循环码、miller码的码型特点、检纠错能力、编译码方法及基本技术;

4.学会使用MATLAB实现循环码及miller码的编译码及检纠错模拟与分析。

二、实验仪器与设备

1.安装了matlab程序的计算机1台

三、实验原理

(一)循环码

循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码,它有许多特殊的代数性质,例如,循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码。

循环码A=an−1+an−2+…+a1+a0可以表示为如下的码多项式:

1.生成多项式g(x)

定义:

若一个循环码的所有码字多项式都是一个次数最低的、非零的、首一多项式g(x)的倍式,则称g(x)为生成该码,并称g(x)为该码的生成元或生成多项式。

可以证明生成多项式g(x)具有以下特性:

(1)g(x)是一个常数项为1的r=n−k次多项式;

(2)g(x)是xn+1的一个因式;

(3)该循环码中其它码多项式都是g(x)的倍式。

为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵。

因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定。

则有:

2.监督多项式h(x)

定义:

若g(x)是(n,k)循环码的生成多项式,则有xn+1=g(x)h(x)。

其中,h(x)是k次多项式,称为监督多项式。

也称校验多项式。

监督矩阵可表示为:

其中:

3.伴随式

发送码C(x)通过含噪信道时,会因各种扰而产生误码。

例如发送码为:

00000000001111111111

接收码为:

01101001001111001001

产生错误序列:

01101001000000110110

可见,发生了两个长度分别为7和5的突发差错,其错误图样分别为1101001和11011。

若设信道产生的错误图样为e,则译码器收到的接收码可表示为:

C'=C+e

写成多项式形式即为:

C'(x)=C(x)=+e(x)

定义:

对于(n,k)循环码,接收码的多项式C(x)除以生成多项式g(x)的余数称为伴随式多项式,记为s(x)。

即:

s(x)=C'(x)modg(x)

由于C'(x)=C(x)=+e(x),且C(x)modg(x)=0,则有:

s(x)=e(x)modg(x)

【例】假设g(x)=x4+x3+x2+1,对于(7,3)循环码来说,若传输时出现一位错误,

错误图样为e1=(0001000),即e(x)=x3=。

则其伴随式s(x)可计算如下:

所以,伴随码为:

s=1000。

同样,若e1=(0010000),则相应的伴随式s

(1)(x)=x3+x2+1,而s1=1101。

si是s在下图所示的g(x)=x4+x3+x2+1除法电路中无输入时右移一位的结果,即自发运算的结果。

图2.2(7,3)循环码的伴随式计算电路

4.循环码编码方法

基本步骤如下:

(1)根据给定参数(n,k)确定生成多项式g(x);

(2)用xn−k乘以信息多项式M(x)。

这一步实际上是把信息码右端附加上n−k个“0”。

(3)求余数r(x)。

由于循环码多项式A(x)都可以被g(x)整除,即:

上式也等效于:

这样就得到了r(x)。

(4)输出的循环码多项式为:

C(x)=xn−k⋅M(x)+r(x)

5.循环码译码方法

循环码的译码过程可以分三步进行:

(1)由接收到的码多项式C'(x)计算伴随式多项式s(x);

当传输中未发生错误时,则s(x)=0;若传输中发生了错误,则s(x)≠0。

但也可能s(x)恰巧也为0,此时发生了不可检错误。

余数与出错位的对应关系只与码制及生成多项式有关,而与具体码字无关。

下图给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。

图2.3(7,4)CRC码的出错模式(g(x)=1011)

(2)由校正子s(x)镜查表确定错误图样E(x);

(3)将错误图样E(x)与C'(x)叠加,纠正错误,得到原发送码组C(x)。

(4)再由C(x)得到原信息码组M(x)。

6.循环码检错能力分析

1)能检出全部的单个错误

对应一位错码的错码多项式E(x)=xi,而多于一项的生成多项式g(x)=......+1,显然xi除以g(x)的余数不会等于0,也即能检测出全部单个错码;

2)能检出全部离散的二位错

对应的错码多项式E(x)=xi+xj=xj(1+xj−i),只要选取的g(x)不能除尽xj−i+1且n−k>j−i。

3)能检出全部的奇数个错码

含有奇数项错码的多项式必不含x+1因子,只要选取的g(x)含有x+1因子。

4)能检测所有长度不超过n−k的突发错误

突发长度不大于b的突发错误对应的错码多项式为:

由于g(x)除不尽xi,只要Ei(x)的次数b-1不超过n−k−1次,g(x)便除不尽Ei(x)。

也就是说,能检测长度不超过n−k的突发错误。

(2)miller码

Miller码也称延迟调制码,是一种变形双向码。

其编码规则:

对原始符号“1”码元起始不跃变,中心点出现跃变来表示,即用10或01表示。

对原始符号“0”则分成单个“0”还是连续“0”予以不同处理;单个“0”时,保持0前的电平不变,即在码元边界处电平不跃变,在码元中间点电平也不跃变;对于连续“0”,则使连续两个“0”的边界处发生电平跃变。

  密勒码的电平跃变如图所示  密勒码可由双相码的下降沿去触发双稳电路产生。

密勒码最初用于气象卫星和磁记录,现在也用于低速基带数传机。

4、实验内容与步骤

(1)使用pcm编码方式对输入的模拟信号抽样值进行信源编码

(2)使用循环码编码方式对之前得到的二进制数字序列进行信道编码

(3)对循环码的序列进行米勒码编码

(4)加扰

(5)米勒码解码

(6)循环码解码

(7)按pcm编码方式回复信号的抽样值

(8)计算误码率

主要代码:

cyclicmiller.m

clc;

clearall;

%------PCM--------%

t=1;

ts=0.05;

fs=1/ts;

df=0.5;

t1=[0:

ts:

t];

s=2*sin(2*pi*t1);%信号

[n,mn,dy]=fftseq(s,ts,df);

n=n/fs;

f=[0:

dy:

dy*length(mn)-dy]-fs/2;

figure

(1);subplot(3,1,1);plot(t1,s);

xlabel('时间');title('原信号波形');

%axis([-0,1,-2,2]);

figure

(1);subplot(3,1,2);stem(t1,s);

xlabel('时间');title('抽样信号波形');

axis([01-22]);

figure

(1);subplot(3,1,3);plot(f,abs(fftshift(n)));

%axis([-4,4,0,60]);

xlabel('频率');ylabel('幅频');title('原信号频谱');

s1=s./max(s);

s2=s1./(1/2048);

fori=1:

21

y=s2(i);

d=[00000000]

if(y>0)

d

(1)=1;

else

d

(1)=0;

end

y=abs(y);

if(y>=0&y<16)

d

(2)=0;d(3)=0;d(4)=0;step(i)=1;st(i)=0;

elseif(y>=16&y<32)

d

(2)=0;d(3)=0;d(4)=1;step(i)=1;st(i)=16;

elseif(y>=32&y<64)

d

(2)=0;d(3)=1;d(4)=0;step(i)=2;st(i)=32;

elseif(y>=64&y<128)

d

(2)=0;d(3)=1;d(4)=1;step(i)=4;st(i)=64;

elseif(y>=128&y<256)

d

(2)=1;d(3)=0;d(4)=0;step(i)=8;st(i)=128;

elseif(y>=256&y<512)

d

(2)=1;d(3)=0;d(4)=1;step(i)=16;st(i)=256;

elseif(y>=512&y<1024)

d

(2)=1;d(3)=1;d(4)=0;step(i)=32;st(i)=512;

elseif(y>=1024&y<=2048)

d

(2)=1;d(3)=1;d(4)=1;step(i)=64;st(i)=1024;

end

if(y<2048)

t=floor((y-st(i))/step(i));

p=dec2bin(t,4)-48;

d(5:

8)=p(1:

4);

else

d(5:

8)=[1111]

end

c(i,1:

8)=d(1:

8);

end

%-------PCM分块----------%

msg=zeros(42,7)%初始化一个42*7的矩阵

fora=1:

2:

42

msg(a,1:

4)=c(a/2+0.5,1:

4)

msg(a+1,1:

4)=c(a/2+0.5,5:

8)

end

%--------(7,4)循环码编码----------%

cx=zeros(42,7)

ccc=zeros(42,7)

fori=1:

42

[A,B]=deconv(msg(i,1:

7),[1101])

cx(i,1:

7)=msg(i,1:

7)+B

cx(i,1:

7)=abs(cx(i,1:

7))

ccc(i,1:

7)=rem(cx(i,1:

7),2);

end

%----------循环码分块---------%

xn=zeros(1,294)

xn(1:

7)=c(1,1:

7)

foraa=2:

42

forbb=1:

7

xn((aa-1)*7+bb)=ccc(aa,bb)

end

end

figure

(2);subplot(4,1,1);stairs([0:

length(xn)-1],xn);axis([0length(xn)-22]);

title('(7,4)循环码编码后信号');

yh=Miller(xn);%密勒码1的话用半占空比的1001交替表示0特别特别如果单0保持前一状态如果连0第一0保持前一状态第二0起始点电平转换

%-------加扰-------%

yhh=awgn(yh,35);

yh1=awgn(yh,-5);

yh2=awgn(yh,5);

yh3=awgn(yh,15);

yh4=awgn(yh,25);

yh5=awgn(yh,35);

%密勒码解码

decode=DeMiller(yh);

figure

(2);subplot(4,1,2);stairs([0:

length(yh)-1],yh);axis([0length(xn)-22]);title('加扰前Miller码');

figure

(2);subplot(4,1,3);stairs([0:

length(yhh)-1],yhh);axis([0length(xn)-22]);title('加扰后Miller码');

%--------判决--------%

%forii=1:

294

%ifdecode(ii)>0.5

%decode(ii)=1

%elsedecode(ii)=0

%end

%end

figure

(2);subplot(4,1,4);stairs([0:

length(xn)-1],decode);axis([0length(xn)-22]);title('Miller码解调后');

bbbbbbbbbbbbb=decode-xn

%--------码形变换-------%

mm=1;

nn=1;

forbb=1:

294

yy(mm,nn)=decode(bb)

nn=nn+1;

ifnn==8

mm=mm+1

nn=1

end

end

%-------(7,4)循环码解码--------%

er=zeros(42,7)

s=zeros(42,7)

qq=[1101]

forii=1:

42

[q,yy2]=deconv(yy(ii,1:

7),qq)

s(ii,1:

7)=abs(yy2)

s(ii,1:

7)=rem(s(ii,1:

7),2)

ifs(ii,1:

7)==[0000110]

er(ii,1:

7)=[1000000]

elseifs(ii,1:

7)==[0000011]

er(ii,1:

7)=[0100000]

elseifs(ii,1:

7)==[0000111]

er(ii,1:

7)=[0010000]

elseifs(ii,1:

7)==[0000101]

er(ii,1:

7)=[0001000]

elseifs(ii,1:

7)==[0000100]

er(ii,1:

7)=[0000100]

elseifs(ii,1:

7)==[0000010]

er(ii,1:

7)=[0000010]

elseifs(ii,1:

7)==[0000001]

er(ii,1:

7)=[0000001]

end

end

end

end

end

end

end

yyy(ii,1:

7)=yy(ii,1:

7)+er(ii,1:

7)

yyy(ii,1:

7)=rem(yyy(ii,1:

7),2)

cc(ii,1:

4)=yyy(ii,1:

4)

end

%------PCM解码码形变换-------%

ppcm=zeros(21,8)

m=1

n=1

fori=1:

42

fork=1:

4

ppcm(m,n)=cc(i,k)

n=n+1

ifn==9

m=m+1

n=1

end

end

end

%--------PCM解码---------%

zuihou=zeros(1,21)

fori=1:

21

zuihou(i)=(st(i)+step(i)*(ppcm(i,5)*8+ppcm(i,6)*4+ppcm(i,7)*2+ppcm(i,8)*1)+step(i)/2)*2/2048

ifppcm(i,1)==0

zuihou(i)=0-zuihou(i);

end

err=zuihou(i)-s(i)

end

figure(3)

%subplot(4,1,4);

plot(zuihou);

xlabel('抽样点');title('解调信号波形');

axis([0,21,-2,2]);

pe=zeros(1,5)

sn1=zeros(1,336)

sn2=zeros(1,336)

sn3=zeros(1,336)

sn4=zeros(1,336)

sn5=zeros(1,336)

sn1=fat(yh1)

sn2=fat(yh2)

sn3=fat(yh3)

sn4=fat(yh4)

sn5=fat(yh5)

snr1=sn1-c

snr2=sn2-c

snr3=sn3-c

snr4=sn4-c

snr5=sn5-c

pe

(1)=snr(snr1)/168

pe

(2)=snr(snr2)/168

pe(3)=snr(snr3)/168

pe(4)=snr(snr4)/168

pe(5)=snr(snr5)/168

figure(4)

%plot([-55152535],pe);

semilogy([-55152535],pe,'r*--');grid;title('误码率');

fftseq.m

function[M,m,df]=fftseq(m,ts,df)

fs=1/ts;

ifnargin==2

n1=0;

else

n1=fs/df;

end

n2=length(m);

n=2^(max(nextpow2(n1),nextpow2(n2)));

M=fft(m,n);

m=[m,zeros(1,n-n2)];

df=fs/n;

end

Miller.m

functionMiller=Miller(x)

m=length(x);

Miller=zeros(1,2*m);

f=0;

d=1;

fori=1:

m

%若原码为1,则交替为10或者01

ifx(i)==1

Miller(2*i-1)=f;

Miller(2*i)=not(f);

f=not(f);

d=1;

%若原码为0

else

%前一个码为1

ifd==1

Miller(2*i-1)=f;

Miller(2*i)=f;

d=0;

%前一个码为0

else

f=not(f);

Miller(2*i-1)=f;

Miller(2*i)=f;

d=0;

end

end

end

return;

Demiller.m

%DeMiller.m

functionx=DeMiller(Miller)

m=length(Miller);

x=zeros(1,m/2);

fori=1:

m/2

%若原码为1,则交替为10或者01

ifMiller(2*i-1)==Miller(2*i)

x(i)=0;

elsex(i)=1;

end

end

return;

Fat.m

functionppcm=fat(yh)

%--------解码----------%

Miller=yh;

m=length(Miller);

decode=zeros(1,m/2);

fori=1:

m/2

%若原码为1,则交替为10或者01

ifMiller(2*i-1)==Miller(2*i)

decode(i)=0;

elsedecode(i)=1;

end

end

%--------码形变换-------%

mm=1;

nn=1;

forbb=1:

294

yy(mm,nn)=decode(bb)

nn=nn+1;

ifnn==8

mm=mm+1

nn=1

end

end

%-------(7,4)循环码解码--------%

er=zeros(42,7)

s=zeros(42,7)

qq=[1101]

forii=1:

42

[q,yy2]=deconv(yy(ii,1:

7),qq)

s(ii,1:

7)=abs(yy2)

s(ii,1:

7)=rem(s(ii,1:

7),2)

ifs(ii,1:

7)==[0000110]

er(ii,1:

7)=[1000000]

elseifs(ii,1:

7)==[0000011]

er(ii,1:

7)=[0100000]

elseifs(ii,1:

7)==[0000111]

er(ii,1:

7)=[0010000]

elseifs(ii,1:

7)==[0000101]

er(ii,1:

7)=[0001000]

elseifs(ii,1:

7)==[0000100]

er(ii,1:

7)=[0000100]

elseifs(ii,1:

7)==[0000010]

er(ii,1:

7)=[0000010]

elseifs(ii,1:

7)==[0000001]

er(ii,1:

7)=[0000001]

end

end

end

end

end

end

end

yyy(ii,1:

7)=yy(ii,1:

7)+er(ii,1:

7)

yyy(ii,1:

7)=rem(yyy(ii,1:

7),2)

cc(ii,1:

4)=yyy(ii,1:

4)

end

%------PCM解码码形变换-------%

ppcm=zeros(21,8)

m=1

n=1

fori=1:

42

fork=1:

4

ppcm(m,n)=cc(i,k)

n=n+1

ifn==9

m=m+1

n=1

end

end

end

snr.m

functionpe=snr(sn)

pe=0

fori=1:

21

forj=1:

8

ifsn(i,j)~=0

pe=pe+1

end

end

End

5、实验结果

六、实验感想

本次试验是通信原理的第二个课设,识是我们上学期的通信原理

(一)的课上没有涉及到的,我这学期报了通信原理

(二)的专业选修,对循环码有了更深入的了解,但实际应用对我来说还是存在一些问题的,通过虚心求解求助同学老师帮助最后得到了实验结果,感谢老师的指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1