基于MATLAB的循环码实验报告

更新时间:2024-02-15 18:31:24 阅读: 评论:0

2024年2月15日发(作者:能源专业)

基于MATLAB的循环码实验报告

课程名称: 信息论与编码

课程设计题目:

循环码的编码和译码程序设计

指导教师:

系 别: 专 业:

学 号: 姓 名:

合 作 者

完成时间:

成绩: 评阅人:

一、实验目的:

1、通过实验了解循环码的工作原理。

2、深刻理解RS 码构造、RS 编译码等相关概念和算法。

二、实验原理

1、RS循环码编译码原理与特点

设C使某移位C(1)线性分组码的码字集合,如果对任C(cn1,cn2,,c0)C,它的循环码为循环码。

(cn2,cn3,c0,cn1)也属于C,则称该该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找到各种简单使用的译码办法。

如果一个线性码具有以下的属性,则称为循环码:如果n元组c{c0,c1,,cn1}是子空间S的一个码字,则经过循环移位得到的c(1){cn1,c0,,cn2}也同样是S中的一个码字;或者,一般来说,经过j次循环移位后得到的c(j){cnj,cnj1,,cn1,c0,c1,,cnj1}也是S中的一个码字。

RS码的编码系统是建立在比特组基础上的,即字节,而不是单个的0和1,因此它是非二进制BCH码,这使得它处理突发错误的能力特别强。

码长:n21

信息段:kn2t (t为纠错符号数)

监督段:2tnk

最小码段:d2t1

最小距离为d的本原RS码的生成多项式为:g(x)=(x-α)(x-α2)(x-α3)…(x-αd-2)

信息元多项式为::m(x)=m0+m1x+m2x2+…+mk-1xk-1

循环码特点有:

1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。

2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间只有一位码元不同,因此它具有一个很好的优点是它满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。

3)码字的循环特性,循环码中任一许用码经过牡环移位后,所得到的码组仍然是许用码组。

m

对所有的i=0,1,2,……k-1,用生成多项式g(x)除xnki,有:

nkiai(x)g(x)bi(x) (2—7)

x式中bi(x)是余式,表示为:

bi(x)bi,nk1xnk1bi,1xbi,0 (2—8)

因此,xnkib(x)是g(x)的倍式,即xnk1bi(x)是码多项式,由此得到系统形式的生100bk1,nk1bk1,1bk1,0成矩阵为:

010bk2,nk1bk2,1bkx,0G

0000bbb0,nk10,10,0

(2—9)

它是一个kn阶的矩阵。

同样,由GHT=0可以得到系统形式的一致校验矩阵为:

bk1,nk1bk2,nk1

Hbk1,1bk2,1

bk2,0bk1,0b0,nk1b0,1b0,0100010001 (2—10)

已知(7,4)循环码的生成多项式和校验多项式分别为:g(x)x3x1,h(x)x4x2x1。写得其生成矩阵和校验矩阵分别为:

10110000101100

G0010110

0001011

1110100H011101000111012、编码原理:

k1m(x)mxm0,其中最高幂次为k-1;

k1有信息码构成信息多项式nk用x乘以信息多项式m(x),得到的xnkm(x),最高幂次为n-1,该过程相当于把信息码(mk1,mk2,……,m1,m0)移位到了码字德前k个信息位,其后是r个全为零的监

督位;

nkxm(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k)用g(x)除,将此r(x)加于nkxm(x)相加,得到的多项式必为一码多项式。 信息位后做监督位,即将r(x)于

1)有信息码构成信息多项式m(x)=mk-1xk-1+``````m0

其中高幂次为k-1。

2)用xn-k乘上信息多项式m(x),得最高幂次为n-1,做移位。

3)用g(x)除xn-km(x)和到余式r(x)。

编码过程流程图:

3、译码原理:

1) 有接收到的y(x)计算伴了随式s(x)。

2) 根据伴随式s(x)找出对应的估值错误图样。

3) 计算c^(x)=y(x)+e^(x),得估计码字。若c^(x)= c(x),则译码正确,否则错误。

由于g(x) 的次数为n - k 次,g(x) 除E(x) 后得余式(即伴随式)的最高次数为n-k-1次,故S(x) 共有2n-k 个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x) 共有2(7-4) =

8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误。

解码过程流程图:

存储c(x)

纠错c(x)E(X)R(X)

S(x)=0,无误码误否

由S(x)确定错误图样E(x)

由R(x)确定S(x):错误!未找到引用源。

初始化

4、纠错能力:

由于循环码是一种线性分组码,所以其纠检错能力与线性分组码相当。而线性分组码的最小距离可用来衡量码的抗干扰能力,那么一个码的最小距离就与它的纠检错能力有关。

定理: 对于任一个(n,k)线性分组码,若要在码字内

(1) 检测个错误,要求码的最小距离de1;

(2) 纠正个错误,要求码的最小距离d(3) 纠正个错误同时检测2t1;

个错误,则要求dte1;

循环码的译码分检错译码与纠错译码两类。在无记忆信道上,对码字c,差错图案e和接收向量r的多项式描述为

r(x)c(x)e(x)

定义r(x)的伴随多项式为s(x)

s(x)r(x)(modg(x))

由于c(x)s0s1xs2xsr1xa(x)g(x)0(modg(x)),所以

2r1

s(x)由此可见,s(x)e(x)(modg(x))

0则一定有差错产生,或说满足e(x)(modg(x))0的差错图样e(x)产生,它满足e(x)(modg(x))0。

循环码的检错译码即是计算s(x)并判断是否为0

三、实验分析

1、实验测试结果,包括译码结果、误码率与信噪比之间的关系、生成多项式

理想状态下,对信号随机的提取,编码器输入为1000,

通过encode函数后,因为加入了监督码,信号变得复杂密集,

编码输出为1110

通过译码输出为1000,与编码输入一致。说明循环码的检错和纠错能力性能好。

输出多项式为:g(x)=(x+a) (x+a2) (x+a3)=a6+a5x+a4x+a3x2+ a3x +a2x+x3

以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。

由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。信号经过译码后,波形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。

信噪比与误码率的关系比较,从图中可看出,当信噪比在20以内时,误码率相对比较大,最高达到0.45以上,而当SNR大于20后,信噪比保持很稳定。下面是误码率的数字显示:

2、实验过程遇到的问题及解决方法

刚开始并没有注意到运用循环码时可用上简便的Matlab自带函数,一直苦恼怎么进行纠错编码及解码,然后查找资料,收集了与循环码相关的函数(部分如下:)

1)encode函数

功能:编码函数

语法:code=encode(msg,N,K,method,opt)

说明:用method指定的方法完成纠错编码。其中msg代表信息码元,是一个K列矩阵,N是编码后的码字长度;K是信息位的长度;opt是有些编码方式需要的参数。

2)decode函数

功能:译码函数

语法:msg=decode(code,N,K,method,opt1,opt2,opt3,opt4);

说明:这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同。它对接收到的码字,按method指定的方式进行译码;opt1,…,opt4是可选项的参数。

3)cyclpoly函数

功能:生成循环码的生成多项式。

语法:p=cyclpoly(N,K);

p=cyclpoly(N,K,fd_flag);

说明:从p=cyclpoly(N,K)中可找到一个给定码长N和信息位长度K生成多项式p,注意不是任意给定一个多项式都可以作为生成多项式。

4)randint函数

功能:引起一致地分布的任意整数矩阵

语法:out = randint(m)

out = randint(m,n)

out = randint(m,n,rg)

out = randint(m,n,rg,state)

在进行误码率与信噪比之间的关系编程后,Matlab一直显示

其后才发现原来没有对加噪后的信号进行整形输出,于是加入for循环以四舍五入对信号进行整形设定。

for i=1:100

for a=1:k+1

if noisycode(i,a)<0.5

noisycode(i,a) = 0;

el

noisycode(i,a) = 1;

end

end

end

四、RS码在现代通信系统中的应用

RS编码起源于1960年MIT Lincoln实验室,经历了数十年的发展,RS码成为了研究最详尽,分析最透彻,应用最广泛,研究成果最多的码类之一。

1、在井下通信中的应用:由于井下空间小,供电系统布置受到很大局限,电磁干扰现象也很严重,通过选择合适的信道编码方式是抗干扰措施之一,可有效消除干扰,而由于RSce纠正t个m位的二进制错误会符号,而不管这t个错误会符号是连续出现的还是离散出现,因此RS很适用于存在突发错误信道中,如井下工作,对系统码率的降低和可靠性的提高起重要作用。

井下采煤机与通信系统的硬件框图

2、RS码在PDS水声通信技术的应用

水声通信技术信道是随机时变空变的,其多途扩展产生的码间干扰直接影响到了水声通信的质量。而RS是一种扩展的非二进制BCH码,具有与PDS通信相结合的优势。

3、RS 码在无线高保真音频传输系统中的应用

在无线音频传输中, 如果传输的数据出现误码, 则会在播放时出现噪声或者啸叫声, 所以想要确保得到高保真的音频, 控制无线传输的误码率是必须的, 通常采用重传和纠错编码两种方法。重传机制对无线信道的带宽要求更高, 这里采用RS 纠错编码的方法来控制误码率。

五、实验程序

1、循环码编码与解码Matlab源程序(实验以(7,4)循环码进行分析)

m = 3;

n = 2^m-1; %定义码长

k = n-m; %信息位长

msg = randint(k*4,1,2); %随机提取信号,引起一致地分布的任意整数矩阵

subplot(2,2,1)

stem(msg)

title('编码器输入信号')

p=cyclpoly(n,k) %循环码生成多项式,n=7,k=4

code = encode(msg,n,k,'cyclic',p); %编码函数,对信号进行差错编码

subplot(2,2,2)

stem(code)

title('编码器输出信号')

recode=decode(code,n,k,'cyclic',p) %对信号进行译码,对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同

subplot(2,2,3)

stem(recode)

title('译码器输出信号')

t=-1:0.01:1;

x=recode; %将recode赋值给x,并进行长度与fft设定

N=length(x);

fx=fft(x);

df=100/N;

n=0:N/2;

f=n*df;

subplot(2,2,4);

plot(f,abs(fx(n+1))*2/N); grid;

title('频谱图')

2、误码率与信噪比之间的关系程序(以(3,2)循环码进行测试)

m = 2;

n = 2^m-1; %定义码长

k = n-m; %信息位长

Fs=40; %系统采样频率

Fd=1; %码速率

N=Fs/Fd;

M=2; %进制数

for SNRpBit=1:100;%信噪比

SNR=SNRpBit/log2(M);

%制造100个信息组,每组k位

msg = randint(100,k,[0,1]);

code = encode(msg,n,k,'cyclic/binary');

%加入噪声

%在已调信号中加入高斯白噪声

noisycode=awgn(code,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');

%将浮点数转化为二进制,波形整形过程

for i=1:100

for a=1:k+1

if noisycode(i,a)<0.5

noisycode(i,a) = 0;

el

noisycode(i,a) = 1;

end

end

end

%译码

newmsg = decode(noisycode,n,k,'cyclic');

%计算误码率

[number,ratio]=biterr(newmsg,msg);

result(SNRpBit)=ratio;

disp(['The bit error rate is',num2str(ratio)]);

end

%不同信噪比下循环码经过加性高斯白噪声信道的误码率

figure(1)

stem(result);

title('循环码在不同信噪比下的误码率')

legend('误码率','*')

xlabel('信噪比');

ylabel('在加性高斯白噪声下的误码率');

六、实验感想

好像在做这个实验时,一直拖一直拖,到最后都快没时间了才查资料看例子,在这次基于MATLAB的通信原理课程设计中,通过查找了大量的循环码理论知识和MATLAB仿真应用的书籍之后,开始调试程序,并进一步了解MATLAB编程的关键字的运用,查阅资料之后进行不断的修正和更改,得出最终的结果。

这次MATLAB课程设计不仅仅加深了对课程理论知识的了解,并更加熟悉了计算机语言,软件的应用。并让我了解,学习知识不仅仅只在课本上,还有更多更广的渠道获得更宽广的知识。

七、参考文献

[1]徐明远,邵玉斌 MATLAB仿真在通信与电子工程中的应用.西安:西安电子科技大学学出版社,2005.6

[2]唐向宏,岳恒立,郑雪峰 MATLAB及在电子信息类课程中的应用(第二版).北京:电子工业出版社,2009.6

基于MATLAB的循环码实验报告

本文发布于:2024-02-15 18:31:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1707993084266948.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:基于MATLAB的循环码实验报告.doc

本文 PDF 下载地址:基于MATLAB的循环码实验报告.pdf

上一篇:RS纠错算法
下一篇:返回列表
标签:编码   译码   错误   信号   进行
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|