1、循环码是线性分组码中最重要的一种子类, 是目前研究得比较成熟的一类码。 环码具有许多特殊的代数性质, 这些性质有助于按照要求的纠错能力系统地构造 这类码,并且简化译码算法,并且目前发现的大部分线性码与循环码有密切关系。 循环码还有易于实现的特点,很容易用带反馈的移位寄存器实现其硬件。关键词: MATLAB 循环码AbstractCycle code is linear space-time block codes in the most important of a seed, is the present research more mature kind of code. Cyclic c
2、ode has manyspecial algebraic properties, these properties to help in accordance with the requirements of the error correction ability to construct the system of this kind of code, and simplified decoding algorithm, and the most of the linear code and found that there is a close relationship between
3、 cyclic code. Cyclic code and is easy to realize the characteristic, is easy to use with the feedback the shift register realize its hardware.Keywords: MATLAB cycle code1.引言MATLAB是矩阵实验室(Matrix Laboratory )的简称,是美国 MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算 的高级技术计算语言和交互式环境。MATLAB通信系统功能函数库由七十多个函数组成,
4、每个函数有多种选择参 数,函数功能覆盖了现代通信系统的各个方面。 这些函数包括:信号源产生函数、 信源编码/解码函数、接错控制编码/解码函数、调制/解调函数(基带和通带)、 滤波器函数、传输信道模型函数(基带和通带)、TDMA FDMA CDMA!数、同步 函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉 明码、循环码、BCH码、里德一索洛蒙码(REED-SOLOMON卷积码等6种纠 错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形 式的函数表达。2.设计原理2.1循环码介绍循环码是线性分组码的一种,所以它具有线性分组码的一般特性, 此外还具 有循环
5、性。循环码的编码和解码设备都不太复杂, 且检(纠)错能力强。它不但可 以检测随机的错误,还可以检错突发的错误。 (n,k )循环码可以检测长为n-k或更短的任何突发错误,包括首尾相接突发错误。循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图 中的邻接条件,即相邻两个数码之间只有一位码元不同, 码元就是组成数码的单 元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是 没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一 些数码形式,称它们为瞬时错误。这在某些数字系统中是不允许的, 为此希望相 邻两个数码之间仅有一位码元不同,即满足邻接条件,这
6、样就不会产生瞬时错误。 循环码就是这样一种编码,它可以在卡诺图中依次循环得到。 循环码又称格雷码(Grey Code )。循环码最大的特点就是码字的循环特性,所谓循环特性是指:循环码中任一 许用码组经过循环移位后,所得到的码组仍然是许用码组。若(an 1 an 2 ai a。)为一循环码组,则(a. 2 a. 3 a。a. 1 )、(an 3 an 4 an 1 an 2) 还是许用码组。也就是说,不论是左移还是右移,也不论移多少位,仍然是许用的循环码组。2.1.1循环码的多项式表示其中ai为二进制数,通常把码组中各码元当做二进制的系数, 即把上式中长为n的各个分量看做多项式:的各项系数,则码
7、字与码多项式一一对应,这种多项式中, x仅表示码元位置的标记,因此我们并不关心x的取值,这种多项式称为码多项式2.1.2(n,k) 循环码的生成多项式按模(xn 1)运算,(n,k) 循环码的生成多项式写为g(x),它是(n,k)循环码码集中唯一的,幕次 为n-k的码多项式,则xkg(x)是一个幕次为n的码多项式此时:从上式中可以看出,生成多项式 g(x)应该是xn 1的一个因式,即循环码多项式应该是xn 1的一个n-k次因式。2.1.3循环码的生成矩阵和一致校验矩阵对所有的i=0,1,2,k-1,用生成多项式g(x)除xn k i,有:xn k i ai (x)g(x) bi (x) (27
8、)式中 bi(x) 是余式,表示为:bi (x) bi,n k 1xn k 1 bi,1x bi,0 (28)因此,xn k i b(x)是g(x)的倍式,即xn k 1 bi(x)是码多项式,由此得到系统 形式的生成阵它是一个 kn阶的矩阵。1bk 1,n k 1bk 1,1bk 1,0Gbk 2,n k 1bk 2,1bk x,000b0,n k 1b0,1b0,0同样,由 G HT =0可以得到系统形式的一致校验矩阵为:H(210)bk 2,0如已知(7, 4)循环码的生成多项式和校验多项式分别为: g(x) x3 x 1,h(x) x4 x2 x 1 。写得其生成矩阵和校验矩阵分别为:
9、(211)(212)012.2循环码编码原理有信息码构成信息多项式 m(x) mk 1xk 1 m0 ,其中最高幂次为 k-1 ; 用xn k乘以信息多项式m(x),得到的xn km(x),最高幕次为n-1,该过程相当于把信息码(mk i, mk 2, , mi, m)移位到了码字德前k个信息位,其后是r个全为零的监督位;用g(x)除xn km(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k), 将此r(x)加于信息位后做监督位,即将r(x)于xn km(x)相加,得到的多项式必 为一码多项式。根据上面的讨论,可得到在(7,4)循环码编码的程序框图如图1所示:图2.2.1 编
10、码程序框图2.3循环码的纠错原理纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比 编码较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错 目的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传 输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以 确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的 的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于 检错目的循环码,一般使用 ARC通信方式。检测过程也是将接受到的码组进行除法运算,如果除尽,则说明传输无误;如果未
11、除尽,则表明传输出 现差错,要求发送端重发。用于这种目的的循环码经常被成为循环冗余校 验码,即CRC校验码。CRC校验码由于编码电路、 检错电路简单且易于实现, 因此得到广泛的应用。在通过 MODE传输文件的协议如 ZMODEWXMODE协如果信道产生的错议中均用到了 CRC校验技术。在磁盘、光盘介质存储技术中也使用该方法当码字 c 通过噪声信道传送时, 会受到干扰而产生错误 误图样是e,译码器收到的n重接受矢量是y,则表示为:y c e ( 2 15)上式也可以写成多项式形式:y(x) c(x) e(x) (216)A译码器的任务就是从 y(x) 中得到 e(x) ,然后求的估值码字 c(x
12、) y(x) e(x) (217)并从中得到信息组 m(x)。循环码译码可按以下三个步骤进行:(1)有接收到的 y(x) 计算伴随式 s(x);(2)根据伴随式 s(x) 找出对应的估值错误图样 e(x) ;A A A(3)计算c(x) y(x)e(x),得到估计码字c(x)。若c(x) c(x),则 译码正确,否则,若c(x) c(x),则译码错误。由于 g(x) 的次数为 n - k 次, g(x) 除 E(x) 后得余式(即伴随式)的最 高次数为 n-k-1 次,故 S(x) 共有 2n-k 个可能的表达式,每一个表达式对应一个 错误格式。可以知道 (7,4 )循环码的 S(x) 共有
13、2(7-4) = 8个可能的表达式,可根据错误图样表来纠正(7,4 )循环码中的一位错误,其伴随式如表 1所示 BCH(7,4)循环码错误图样表:错误图样错误图样码字伴随式S(x)伴随式E6(X)=X 610000002 x100E5(X)=X 501000002x +x110E4(x)=x 40010000X2+X+1111E3(x)=x 30001000x+1011E2(x)=x 20000100X +1101E1(x)=x 10000010X010Eo(x)=x o0000001001E(x)=00000000000表1 BCH(7, 4)循环码错误图样表上式指出了系统循环码的译码方法:
14、 将收到的码字R(x)用g(x)去除,如果 除尽则无错;否则有错。如果有错,可由余式 S(x) 找出对应图样,然后将错误图样E(x)与R(x)模2和,即为所求码字qx),从而实现纠错目的。根据前面的讨论,可得(7, 4)循环码译码的程序框图如图2.3.1所示:6欢迎下载图2.3.1译码程序框图3 程序与仿真3.1 程序函数介绍MATLAB提供了循环码的编码和译码函数,本程序直接调用进行编程。 ( 1) encode 函数功能:编码函数语法: code=encode(msg,N,K,method,opt)说明:用method指定的方法完成纠错编码。其中 msg代表信息码元,是一 个K列矩阵,N是
15、编码后的码字长度;K是信息位的长度;opt是有些编码方式 需要的参数。(2)decode 函数译码函数 msg=decode(code, N, K, method, opt1,opt2,opt3,opt4 );这个函数对接收到的码字进行译码, 恢复出原始的信息, 译码参数和 方式必须和编码时采用的严格相同。它对接收到的码字,按 method指定的方式 进行译码;optl,opt4是可选项的参数。( 3) cycl p oly 函数生成循环码的生成多项式。 p=cyclpoly (N,K); p=cyclpoly (N,K,fd_flag );从p=cyclpoly (N,K)中可找到一个给定码
16、长 N和信息位长度K生成 多项式p,注意不是任意给定一个多项式都可以作为生成多项式。( 4) randint 函数引起一致地分布的任意整数矩阵 语法: out = randint(m)out = randint(m,n)out = randint(m,n,rg)out = randint(m,n,rg,state)(5) awgn函数在某一信号中加入高斯白噪声 y = awgn(x,SNR);信噪比SNF以dB为单位。x的强度假定为OdBW如果x是复数,就 加入复噪声。( 6) quantiz 函数产生一个量化序号和输出量化值。 index=quantiz(sig,partition);ind
17、ex ,quantiz=quantiz(sig,partition,codebook);index,quant,distor=quantiz(sig,partition,codebook);这个函数根据给定的区间参数量化信号, 间隔矢量必须按递增顺序排 列。3.2各部分程序说明1、循环码编码与解码 Matlab 源程序(实验以( 7, 4)循环码进行分析) m=3;n=2Am-1;k=n-m;fs=1OO;% 设置采样频率为 1OOHzsnr=1O;% 设置信噪比单位: dBp=cyclpoly(7,4);%(7,4) 循环码生成多项式 msg=round(rand(8*k,1);% 设置8个
18、信息组,每组k个 code=encode(msg,n,k,cyclic/binary,p);% 编码输入 code_addnoise=awgn(code,snr,measured);% 信道输出%将浮点数转化为 2进制for index=1:length(code)if(code_addnoise(index)0.5) noisecode(index)=0;elsenoisecode(index)=1;end%译码输出newmsg=decode(noisecode,n,k,%求频谱N=length(newmsg);fft_new=fftshift(fft(newmsg,N);f=-fs/2:f
19、s/N:(fs/2-fs/N);%画图输出波形figure(1);subplot(2,2,1);stem(msg);title( 编码器输入信号 subplot(2,2,2),stem(code),title( 编码器输出信号 subplot(2,2,3),stem(newmsg),title( 译码器输出信号 subplot(2,2,4),plot(f,abs(fft_new)/max(abs(fft_new);xlabel( 频率 :Hzylabel( 归一化幅度 译码器输出后频谱图 figure(2)plot(code_addnoise),title( 信道输出信号 2. 误码率m =
20、3;n = 2Am-1; % 定义码长k = n-m; % 信息位长Fs=40; %系统采样频率Fd=1; %码速率N=Fs/Fd;M=2; %进制数for SNR = 1:100;% 信噪比%制造100个信息组,每组k位msg = ran di nt(100,k,0,1);code = en code(msg, n, k,cyclic/b in ary%TO入噪声殆已调信号中加入高斯白噪声no isycode=awg n( code,SNR,dB%各浮点数转化为二进制,波形整形过程for i=1:for a=1: nif no isycode(i,a)0.5no isycode(i,a) =
21、 0;no isycode(i,a) = 1;%译码 n ewmsg = decode( no isycode ,n ,k,cyclic% 十算误码率nu mber,ratio=biterr( newmsg,msg);result(SNR)=ratio;disp(The bit error rate is, nu m2str(ratio);%不同信噪比下循环码经过加性高斯白噪声信道的误码率figure(1)stem(result); 循环码在不同信噪比下的误码率 )legend(误码率,*信噪比在加性高斯白噪声下的误码率 运行结果:F;.File Edit View Insert Tools
22、Desktop Window Help a hI ia| 国| 口循环玛在不同價噪比下的误码率I I I I I | I一0衆码率0Q 6Q-1O.114JI- -U02I S信噪比The bit error rate is0.215The bit error rate is0.1825The bit error rate is0.1325The bit error rate is0.1475The bit error rate is0.0975The bit error rate is0.0475The bit error rate is0.0175The bit error rate is
23、0.0125The bit error rate is0The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate
24、is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The bit error rate is0 The
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1