MATLAB在编码技术分析中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛农业大学
本科生课程论文
论文题目MATLAB在编码技术分析中的应用学生专业班级信息与计算科学2009级2班
学生姓名(学号)(20094051)
指导教师吴慧
完成时间 2012年6月30日
2012 年 7 月 1 日
课程论文任务书
学生姓名指导教师吴慧
论文题目 MATLAB在编码技术分析中的应用
论文内容(需明确列出研究的问题):MATLAB是集数值计算、符号计
算和图形可视化三大基本能功能于一体的工程计算软件。

首先,本文
以香农编码为例介绍信源编码技术的MATLAB分析,对香农编码的编
码原理和步骤进行说明并给出了香农编码的MATLAB参考程序。

其次,
以汉明码为例介绍信道编码技术的MATLAB编程与仿真,阐释了汉明
编码的主要原理并给出了相应的参考程序,对MATLAB中的SIMULINK
仿真环境进行简要介绍,并作出汉明码的编解码仿真系统。

最后,给
出三个具体实例对香农编码进行结果分析,对简单的SIMULINK仿真
模型作出介绍,对具体(7,4)汉明码,设计出相应的编码程序和仿
真模型电路图并运行输出波形图。

资料、数据、技术水平等方面的要求:论文要符合一般学术论文
的写作规范,具备学术性、科学性和一定的创造性。

文字要流畅、语
言要准确、论点要清楚、论据要准确、论证要完整、严密,有独立的
观点和见解。

内容要理论联系实际,计算数据要求准确,涉及到他人
的观点、统计数据或计算公式等要标明出处,结论要写的概括简短。

参考文献的书写按论文中引用的先后顺序连续编码。

发出任务书日期 2012.6.15 完成论文日期 2012.6.30 教研室意见(签字)
院长意见(签字)
注:此表装订在课程论文之前。

MATLAB在编码技术分析中的应用
信息与计算科学专业
指导老师吴慧
摘要: MATLAB是集数值计算、符号计算和图形可视化三大基本能功能于一体的工程计算软件。

首先,本文以香农编码为例介绍信源编码技术的MATLAB分析,对香农编码的编码原理和步骤进行说明并给出了香农编码的MATLAB参考程序。

其次,以汉明码为例介绍信道编码技术的MATLAB编程与仿真,阐释了汉明编码的主要原理并给出了相应的参考程序,对MATLAB中的SIMULINK仿真环境进行简要介绍,并作出汉明码的编解码仿真系统。

最后,给出三个具体实例对香农编码进行结果分析,对简单的SIMULINK仿真模型作出介绍,对具体(7,4)汉明码,设计出相应的编码程序和仿真模型电路图并运行输出波形图。

关键词: MATLAB 香农编码 SIMULINK 汉明码仿真
MATLAB in encoding technology application of analysis Student majoring in Information and Computing Science Yigang Xu
Tutor Hui Wu
Abstract:MATLAB is an engineering calculation software which set numerical calculation, symbol computing and graphics visualization three basic function in the integration o f one bod y. First of all, the paper use Shannon coding for example to recommend the source coding technology of MATLAB a nalysis , explain the coding of Shannon encoding principle and process, g ive the Shannon coding of MATLAB reference program. Second, take the hamming plain code for example introduction channel coding technology of MATLAB programming and simulation, explaining the main principle of hamming coding and giving some reference program. This paper briefly introduces the MATLAB SIMULINK condition make hamming plain code codec simulation system. Last, the test give three specific examples to analysis the result of Shannon code, introduced the simple SIMULINK model. To the specific (7, 4) hamming plain code, design corresponding coding procedure and simulation model circuit diagram and output waveform figure.
Key words:MATLAB Shannon code SIMULINK hamming code simulat
引言 MATLAB是由美国Mathworks公司开发的集数值计算、符号计算和图形可视化三大基本能功能于一体的工程计算软件。

经过不断完善,MATLAB已经发展称为适合多学科、功能强大的大型软件。

MATLAB已经称为线性代数、数值分析、自动控制理论、数字信号处理、信号系统、动态系统仿真等多门课程的
教学工具,称为设计研究应该和必须掌握的基本技能。

几乎在工程与科学研究的各个学科,都能在MATLAB 里找到合适的功能。

针对MATLAB 在编码技术分析中的应用,本文以香农编码为例介绍信源编码技术的MATLAB 分析,以汉明码为例介绍信道编码技术的MATLAB 编程与仿真。

在对动态系统进行仿真和分析时利用MATLAB 通信工具箱来完成。

MATLAB 通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK 通信系统仿真模型库[1]。

在SIMULINK 仿真模型库中,整个通信系统的流程图被概括为:信号的产生与输出、编码与解码、调制与解调。

SIMULINK 仿真的三个步骤:模型创建与定义、模型的分析、模型的修正。

重复执行上述三个步骤可以实现系统的最优化。

1. 信源编码技术的MATLAB 分析
信源编码的目的是要减少冗余,提高编码效率,即针对信源输出符号序列的统计特性,寻找合适的方法把信源输出符号序列变换为最短的麻子序列。

香农编码技术作为变长信源编码的重要方法之一,具有重要的理论指导意义。

下面主要介绍香农编码的MATLAB 实现进而说明MATLAB 在信源编码技术分析中的应用。

1.1 香农编码原理及编码步骤
香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值.香农第一定理[2]指出,可以选择每个码字的长度 满足关系式
()1log i i l p s ⎡⎤=⎢⎥⎢
⎥ ()1,...,i q = ............................式(1) 按上式选择的码长构成的码称为香农码。

其编码步骤如下:
(1)将q 个信源符号按概率递减的方法进行排列:
12...q p p p ≥≥≥
(2)按式(1)计算出每个信源符号的码长i l 。

(3)为了编成唯一可译码,计算第i 个信源符号的累加概率:
1
1i i k k G p -==∑
(4)将累加概率G i 用二进制数表示。

(5)取G i 对应的二进制数的小数点后l i 位构成该信源符号的二进制码字。

1.2 二元香农编码的MATLAB 程序
利用MATLAB 编程可以快速给出任意信源的香农编码,给出二元香农编码的参考程序如下:
N=input('N='); %输入信源符号的个数
s=0;l=0;H=0;
for i=1:N
p(i)=input('p='); %输入信源符号概率分布矢量,p(i)<1 s=s+p(i)
H=H+(-p(i)*log2(p(i))); %计算信源信息熵
I(i)=-log2(p(i)); %计算自信息量
end
if abs(s-1)>0,
error('不符合概率分布')
end
for i=1:N-1
for j=i+1:N
if p(i)<p(j)
m=p(j);
p(j)=p(i);
p(i)=m;
end
end
end %按概率分布大小对信源排序
for i=1:N
a=-log2(p(i));
if mod(a,1)==0
w=a;
else
w=fix(a+1);
end %计算各信源符号的码长
l=l+p(i)*w; %计算平均码长
end
l=l;
n=H/l; %计算编码效率
P(1)=0
for i=2:N
P(i)=0;
for j=1:i-1
P(i)=P(i)+p(j);
end
end %计算累加概率
for i=1:N
for j=1:w
W(i,j)=fix(P(i)*2);
P(i)=P(i)*2-fix(P(i)*2);
end
end %将累加概率转化为L(i)位二进制码字disp(W) %显示码字
disp(l) %显示平均码长
disp(n) %显示编码效率
disp(I) %显示自信息量
2. 信道编码技术的MATLAB编程与仿真
在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易
造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码[4]。

为了确保系统的误比特率指标通常采用信道编码。

信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。

它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。

信道编码的实质就是在信息码中增加一定数量的多余码元(称为监督码元),使它们满足一定的约束关系,这样由信息码元和监督码元共同组成一个由信道传输的码字。

举例而言,欲传输k 位信息,经过编码得到长为n(n>k)的码字,则增加了 n - k = r 位多余码元,我们定义 R = k / n 为编码效率。

[3]下面主要以汉明码为例介绍信道编码技术的MATLAB 编程。

2.1 汉明码编码原理及步骤
对于任意正整数3m ≥,存在具有码长 21m n =-,信息位数 21m k m =--,监督位数 r n k m =--,最小距离 min 3d =等参数的二进制汉明码
给定m 后,即可构造出具体的(,)n k 汉明码,这可以从建立一致校验矩阵H 入手。

我们知道,H 矩阵的列数就是码长n ,行数等于r 。

例如,若取3m =,根据二进制汉明码的参数可算出7,4n k ==,因而是(7,4)线性码。

其H 矩阵正是217r -=个非零三维列向
量构成的。

如H 矩阵可为
此时,H 矩阵的列所对应的十进制数正好是1~7,对于纠正一位差错来说,其伴随式的值就等于对应的H 矩阵的列矢量即错误位置。

所以,这种形式的H 矩阵构成的码很便于纠错,但这是非系统的(7,4)汉明码的一致校验矩阵。

如果要得到系统码,可通过调整各列的次序来实现
0 1 1 1 0 1 0 00 1 1 1 0 1 01 1 0 1 0 0 1H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦
(7,4)0 0 0 1 1 1 10 1 1 0 0 1 11 0 1 0 1 0 1H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦
有了0H ,就可得到系统码的校验位,其相应的生成矩阵为
0 1 0 0 0 1 0 10 1 0 0 1 1 10 0 0 1 0 1 10 0 0 1 0 1 1G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦
设码字7654321()C c c c c c c c →=,根据0H (或0G )和关系式 0T T HC →→=,有
376526541764
c c c c c c c c c c c c =++⎧⎪=++⎨⎪=++⎩
2.2 (7,4)汉明码编码的MATLAB 程序
汉明码是最小码距为3,能纠正一位错的线性分组码。

汉明码有许多很好的性质,它可以用一种简洁有效的方法进行译码[5]。

由于它的编、译码较简单,且较容易实现而在计算机系统中被广泛采用。

给出(7,4)汉明码编码的MATLAB 参考程序及注释如下:
N=7; %N 为总长,包括数据位和汉明码位
msg=input(‘此处输入信息矩阵’); %外部输入信号
[m,n]=size(msg);%返回矩阵的行数m(即几组信号),列数n(即数据的位数) T=(0:m-1)';
t=(0:n-1)';
msn=msg(T+1,rem(t,n)+1)%从输入的信息矩阵中抽出msn 矩阵,作为输入函数 code=encode(msg,N,n,’hamming ’) %直接调用MATLAB 库函数进行汉明编码
code_noise=rem(code+rand(m,N)>0.95,2 ) %加噪声,rand 产生10行7列随机矩阵rcv=decode(code_noise,N,n,’hamming ’) %汉明译码
disp(['Error rate in the received code: '
num2str(symerr(code,code_noise)/length(code))])%计算收到的数据的误码率 disp(['Error rate after decode: ' num2str(symerr(msg,rcv)/length(msg))])
%计算译码后的误码率(即整个系统的误码率)
%symerr 比较两个数据集计算出两者的不同符号的个数和误符号率。

%[number,ratio]=symerr(x,y),其中number为符号不同的数目,ratio等
于%number/min(x,y)
%num2str函数将数字转化为字符串
x=0:20 %定义信噪比的范围为1~20
for i=1:length(x)
xSNR=x(i); %AWGN信道中的信噪比依次取x中的元素
sim('fangzhen');%运行’fangzhen ’仿真文件得到误码率存在工作区变量xErrorRate 中
y(i)=mean(xErrorRate); %失算xRrrorRate的均值作为本次仿真的误码率
end
semilogy(x,y,’-p’); %semilogy函数对y求对数画图,点显示为星形
xlabel('高斯信道中的信噪比/dB');%写x坐标
ylabel('误码率');%写y坐标
gride on;%画网格表
2.3 SIMULINK环境简介
SIMULINK 提供了图形化用户界面,只需单击鼠标就可以轻易地模型的创建、调试和仿真工作,用户不需专门掌握一种程序设计语言[6]。

SIMULINK可将系统分为从高级到低级的几个层次,每层又可以细分为几个部分,每层系统构建完成后,将各层次连接起来就可以构成一个完整的系统。

模型创建完成后,可以启动系统的仿真功能分析系统的动态特性,其内置的分析工具包括各种仿真算法、系统线性化、寻求平衡点等。

仿真结果可以用图形方式在示波器窗口显示,也可将输出结果以变量形式保存起来,并输入到MATLAB 中可以完成进一步的分析。

在SIMULINK系统仿真模型库中,整个通信系统的流程图被概括为:信号的产生与输出、编码与解码、调制与解调。

在SIMULINK中,通信系统仿真的一般模型如图(1)
一般的通信系统仿真模型
图1
2.4 汉明码编解码的SIMULINK 仿真 在设计中,仿真系统由信号产生模块、信号汉明编码模块、AWGN 信道、信号汉明译码模块、误码率计算模块以及示波器图形观察模块组成。

系统信号产生模块选用From workspace ,从工作区调用msn 矩阵(其实与输入信息矩阵msg 为同一矩阵,只不过为T 的函数),进入Hamming encoder 进行编码,再送入AWGN 信道(加入高斯白噪声)传输,接收信号送入Hamming decoder 进行差错纠正,其后加一误码率计算模块(Error Rate Calculation )计算误码率。

再用示波器scope 观察波形。

3. 实例分析
下面给出香农编码的MATLAB 实现和简单的SIMULINK 模型以及(7,4)汉明码编解码的MATLAB 编程和仿真的具体实例。

3.1 实例一:香农编码的实例分析
根据二元香农编码的参考程序对1234567()0.200.190.180.170.150.100.01i a a a a a a a a p a ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣
⎦进行香农编码结果如下:
P =
0 0.20 0.39 0.57 0.74 0.89 0.99
0 0 0 0 0 0 0
0 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0
3.1400
0.8308
2.3219 2.3959 2.4739 2.5564 2.7370
3.3219 6.6439 结果分析:概率和S 为1,符合概率分布。

累加概率分别为0,0.20,0.39,0.57,0.74,0.89,0.99。

自信息量分别为()1 2.3289I a =,()2 2.3959I a =,
()3 2.4739I a =,()4 2.5564I a =,()5 2.7370I a =,()6 3.3219I a =,()7 6.6439I a =。

所以1234567,,,,,.a a a a a a a 的码字长度分别为3,3,3,3,3,4,7;码字分别为000,001,011,100,101,1110,1111110。

3.2 实例二:简单的SIMULINK 仿真模型
创建一个简单的SIMULINK 仿真模型——正弦信号的仿真模型如下:
在MATLAB 的命令窗口运行SIMULINK 命令,打开模块库浏览器窗口。

新建一个名为untitled 的空白模型窗口。

在子模块窗口选择对应的输入和输出信号源模块,并作出电路图开始仿真结果如图:
正弦信号SIMULINK 模型电路图
图2
正弦信号波形图
图3
3.3 实例三(7,4)汉明码编解码的MATLAB编程和仿真
用MATLAB软件将(7,4)汉明码编码的MATLAB参考程序保存为hamming.m文件,在MATLAB环境中运行hamming.m文件,在command window 窗口将看到要求输入[0 0 0 0;0 0 0 1;0 0 1 0;0 0 1 1;0 1 0 0;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1]后,可得到矩阵msg,编码后矩阵code,加噪声编码矩阵code_noise,译码后矩阵rcv,通过信道后的误码率及译码后的误码率如图(4)和图(5):
图4
图5
Error rate in the received code:0.125 Error rate after code ;0
根据上述模型参数设计(7,4)汉明码SIMULINK 仿真模型电路图如图(6)
(7,4)汉明码SIMULINK 仿真模型电路图
图6
根据上述模型参数,连接仿真电路图,得到仿真电路图如下
输入信号
图7
输出信号
图8
解码结果序列
图9
参考文献:
[1] 何云瑞.基于MATLAB的(7,4)汉明码编译仿真 .中国知网
[2] 冯桂林其伟陈东华.信息论与编码技术 .北京:清华大学出版社.2011
[3] 田宝玉 .信息论基础北京.人民邮电出版社
[4] 葛哲学.精通MATLAB.北京:电子工业出版社,2008年.
[5] 樊昌信曹丽娜.通信原理.北京:国防工业出版社,2008年.
[6] 赵静.基于MATLAB的通信系统仿真.北京:北京航空航天大学出版社,2008年.
课程论文成绩评定表
注:此表装订在课程论文之后。

相关文档
最新文档