1、Data(4)=a(1);%Data除以Gx得到余数RxQx,Rx=deconv(Data,Gx);b=Rx+Data;%将数组b的高位放在后面c=b(1);b(1)=b(7);b(7)=c;c=b(2);b(2)=b(6);b(6)=c;c=b(3);b(3)=b(5);b(5)=c;%将数组b校正fori=1:7ifrem(abs(b(i),2)=0b(i)=0;endifrem(abs(b(i),2)=1b(i)=1;disp(输入序列:);a编码输出序列:b程序运行结果为:a=1100b=1011100改变输入序列a=1011,运行结果:10111001011运行结果的编码如下:序号输
2、入序列输出序列10000000000091000110100020001101000110100101110013001011100101110100011010400110100011125010001101001360101110010114110100011010110100011015111001011108011100101111611111111111译码的实验原理g(x)=,在(n,k)循环码中,由于g(x)能除尽,因此可分解成g(x)和其他因式的乘积,记为即可写成即h(x)=则=,其中式h(x)的逆多项式。监督矩阵多项式可表示为,相对应的译码和纠错(一位)程序如下:r=1001
3、111;h=1,0,0;1,1,0;1,1,1;0,1,1;1,0,1;0,1,0;0,0,1;b=flipud(h);s=r*b;ifrem(abs(s(i),2)=0s(i)=0;ifrem(abs(s(i),2)=1s(i)=1;ifs=000e=0000000elseifs=100e=0000001elseifs=110e=0000010elseifs=111e=0000100elseifs=011e=0001000elseifs=101e=0010000elseifs=010e=0100000elses=001e=1000000u=r+e;ifrem(abs(u(i),2)=0u(i
4、)=0;ifrem(abs(u(i),2)=1u(i)=1;Data=zeros(1,4);Data(1)=u(4);Data(2)=u(5);Data(3)=u(6);Data(4)=u(7);ife=0000000第几位错误:)k=0,elsek=find(e);接受码字rData运行程序结果如下:e=0000100k=5接受码r=1001111Data=1011以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我又在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码,多位循环码的编码程序如下:a=11001011;X,N=size(a);%将信息码分为M帧,1帧4个
5、信息码M=ceil(N/4);d=zeros(1,4);b=zeros(1,7*M);fork=1:Mforj=1:d(j)=a(j+(k-1)*4);%生成多项式Data(1)=d(4);Data(2)=d(3);Data(3)=d(2);Data(4)=d(1);e=Rx+Data;b(7*k-6:7*k)=e(1:7);c=b(1+(k-1)*7);b(1+(k-1)*7)=b(7+(k-1)*7);b(7+(k-1)*7)=c;c=b(2+(k-1)*7);b(2+(k-1)*7)=b(6+(k-1)*7);b(6+(k-1)*7)=c;c=b(3+(k-1)*7);b(3+(k-1)
6、*7)=b(5+(k-1)*7);b(5+(k-1)*7)=c;M*7程序运行结果如下:11001011Columns1through131011100100101Column14相应的多位译码纠错程序如下:r=10011001001001;X,N=size(r);%将接收到的码分为M帧,1帧7个信息位M=ceil(N/7);d=zeros(1,7);U=zeros(1,4*M);Data=zeros(1,7*M);d(j)=r(j+(i-1)*7);s=d*b;ifrem(abs(s(k),2)=0s(k)=0;ifrem(abs(s(k),2)=1s(k)=1;u=d+e;ifrem(ab
7、s(u(k),2)=0u(k)=0;ifrem(abs(u(k),2)=1u(k)=1;Data(1+7*(i-1)=e(1);Data(2+7*(i-1)=e(2);Data(3+7*(i-1)=e(3);Data(4+7*(i-1)=e(4);Data(5+7*(i-1)=e(5);Data(6+7*(i-1)=e(6);Data(7+7*(i-1)=e(7);U(1+(i-1)*4)=u(4);U(2+(i-1)*4)=u(5);U(3+(i-1)*4)=u(6);U(4+(i-1)*4)=u(7);ifData=zeros(1,7*M);m=0,elsej,m=find(Data);m接收到的码字:U运行结果如下:e=0010000e=0000010m=313r=Columns1through131001100100100U=11001011分析:这两组实验基本上完成了循环码的编码和译码,但是该实验的缺点就是不能同时对7位信息码进行两位的纠错,即只能完成一位信息码的纠错。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1