1、 Data=zeros(1,7);Data(1)=a(4); Data(2)=a(3); Data(3)=a(2); Data(4)=a(1); %Data除以Gx得到余数Rx Qx,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校正 for i=1:7 if rem(abs(b(i),2)=0 b(i)=0;end endfor i=1: if rem(abs(b(i),2)=1
2、b(i)=1;disp(输入序列:);a编码输出序列:b程序运行结果为:a = 1 1 0 0b = 1 0 1 1 1 0 0改变输入序列a=1 0 1 1,运行结果: 1 0 1 1 1 0 0 1 0 1 1运行结果的编码如下:序号输入序列输出序列10000 000 000091000110 100020001101 0001101001011 100130010111 0010111010001 101040011010 0011121011100 101150100011 0100131100101 110060101110 0101141101000 11010110100 011
3、0151110010 111080111001 0111161111111 1111译码的实验原理 g(x)= ,在(n,k)循环码中,由于g(x)能除尽,因此可分解成g(x)和其他因式的乘积,记为即可写成即h (x) =则 = ,其中式h(x)的逆多项式。监督矩阵多项式可表示为 , 相对应的译码和纠错(一位)程序如下:r=1 0 0 1 1 1 1;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; if rem(abs(s(i),2)=0 s(i)=0; if rem(abs(s(i),2)=1 s(i)=1; if
4、 s=0 0 0 e=0 0 0 0 0 0 0 elseif s=1 0 0 e=0 0 0 0 0 0 1 elseif s=1 1 0 e=0 0 0 0 0 1 0 elseif s=1 1 1 e=0 0 0 0 1 0 0 elseif s=0 1 1 e=0 0 0 1 0 0 0 elseif s=1 0 1 e=0 0 1 0 0 0 0 elseif s=0 1 0 e=0 1 0 0 0 0 0 else s=0 0 1 e=1 0 0 0 0 0 0u=r+e; if rem(abs(u(i),2)=0 u(i)=0; if rem(abs(u(i),2)=1 u(i)
5、=1;Data=zeros(1,4); Data(1)=u(4); Data(2)=u(5); Data(3)=u(6); Data(4)=u(7);if e=0 0 0 0 0 0 0第几位错误:)k=0,else k=find(e) ;接受码字rData运行程序结果如下:e = 0 0 0 0 1 0 0k = 5接受码r = 1 0 0 1 1 1 1Data =1 0 1 1以上编码有个缺点,就是它只能对一个消息矢量(4位)进行编码,我又在这个基础上编写了一个可以同时对位数是4的倍数的消息矢量进行编码,多位循环码的编码程序如下:a=1 1 0 0 1 0 1 1;X,N=size(a)
6、;%将信息码分为M帧,1帧4个信息码M=ceil(N/4);d=zeros(1,4);b=zeros(1,7*M);for k=1:M for j=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
7、;c=b(3+(k-1)*7);b(3+(k-1)*7)=b(5+(k-1)*7);b(5+(k-1)*7)=c;M*7 disp(程序运行结果如下: 1 1 0 0 1 0 1 1 Columns 1 through 13 1 0 1 1 1 0 0 1 0 0 1 0 1 Column 14 1相应的多位译码纠错程序如下:r=1 0 0 1 1 0 0 1 0 0 1 0 0 1 ;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)*
8、7);s=d*b; if rem(abs(s(k),2)=0 s(k)=0; if rem(abs(s(k),2)=1 s(k)=1;u=d+e; if rem(abs(u(k),2)=0 u(k)=0; if rem(abs(u(k),2)=1 u(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(
9、2+(i-1)*4)=u(5); U(3+(i-1)*4)=u(6); U(4+(i-1)*4)=u(7);if Data=zeros(1,7*M);m=0,else j,m=find(Data);m接收到的码字:U 运行结果如下:e = 0 0 1 0 0 0 0e =0 0 0 0 0 1 0m =3 13r =Columns 1 through 13 1 0 0 1 1 0 0 1 0 0 1 0 0Column 14U = 1 1 0 0 1 0 1 1 分析:这两组实验基本上完成了循环码的编码和译码,但是该实验的缺点就是不能同时对7位信息码进行两位的纠错,即只能完成一位信息码的纠错。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1