基于matlab的(7-4)汉明码编译仿真
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。msg是一个K列矩阵。
decode函数
功能:译码函数
语法:rcvcode=decode(code,N,K,’hamming’)
说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。
hammgen函数
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))])%计算收到的数据的误码率(包括汉%明码)
若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成
若E=0,即接收码组无错,则 ,将它代人式(8),该是仍成立,即有
当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即
将 代入式(20),可得
错码位置
001
101
010
110
100
111
011
000
无错码
则由表1可得监督关系式:
在发送端编码时,信息位 的值决定于输入信号,因此它们是随机的。监督位 、 、 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中 、 、 的值为0(表示编成的码组中应无错码)
式(5)经过移项运算,接触监督位
2.2汉明码纠错原理
当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即
则发送码组和接收码组之差为
E就是传输中产生的错码行矩阵
由式(8)可知,所以
此处S与前面的 有着一一对应关系,则S能代表错码位置。
因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。
3.程序与
3.1
3.1.1
MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。
encode函数
功能:编码函数
语法:code=encode(msg,N,K,’hamming’)
一、设计实验条件
电子信息创新实验室
二、设计任务及要求
1.了解、掌握汉明码编码、译码原理;
2.用仿真软件对(7.4)汉明码进行编码、译码仿真;
3.画出编码后、译码后的信号波形图。
三、设计报告的内容
1.设计题目与设计任务(设计任务书)
2.前言(绪论)(设计的目的、意义等)
3.设计主体(各部分设计内容、分析、结论等)
disp(['Error rate after decode: 'num2str(symerr(msg,rcv)/length(msg))])
%计算译码后的误码率(即整个系统的误码率)
%symerr比较两个数据集计算出两者的不同符号的个数和误符号率。
%[number,ratio]=symerr(x,y),其中number为符号不同的数目,ratio等于%number/min(x,y)。
3.2
本系统由信号产生模块、信号汉明编码模块、AWGN信道、信号汉明译码模块、误码率计算模块组成,还有示波器图形观察模块。
3.2.1
在设计中,本系统信号产生模块选用From workspace,从工作区调用msn矩阵(其实与输入信息矩阵msg为同一矩阵,只不过为T的函数),进入Hamming encoder进行编码,再送入AWGN信道(加入高斯白噪声)传输,接收信号送入Hamming decoder进行差错纠正,其后加一误码率计算模块(Error Rate Calculation)计算误码率。再用示波器scope观察波形。电路如图2所示。
图4SIMULINK仿真电路图
由于要绘制Hamming decoder模块输入信噪比与输出误码率的关系曲线图,所以将SNR设置成一个变量,通过hamming.m文件编程绘制误码率曲线图。
3.2.3
图5From Workspace
图6AWGNA Channel
图7Error Rate Calculation
式(5)其等价形式为:
式(6)还可以简记为
或
其中
, ,
,
所以有
式(6)等价于
其中Q为P的转置,即
式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。
我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G
G称为生成矩阵,因为由它可以产生整个码组,即有
或者
式(13)即汉明码的编码原理
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矩阵,作为simulink中from %workspace的输入函数
图8To Workplace
3.2.3
图9From Workspace输出信号波形
图10Hamming Encoder输出信号
图11AWGN Channel输出信号
图12Hamming decoder输出信号
图13SNR=10dB的误码率
图14输入信噪比与输出误码率的关系曲线图
3.2.4
通过结果可知,利用matlab可以很简洁地完成汉明码的编码、译码仿真。另外,还可知汉明码可以降低误码率,提高系统抗干扰能力。在SIMULINK仿真中,利用hamming.m文件编程绘制误码率函数曲线,即图14,可以看出采用汉明码编码后,误码率随着信噪比的增加而快速下降
功能:汉明码生成矩阵和校验矩阵产生函数
语法:H=hammgen(M)
[H,G]=hammgen(M)
[H,G,N,K]=hammgen(M)
说明:该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。
3.1.2
clc %清屏
N=7;%N为总长,包括数据位和汉明码位
本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数对外界输入的信息进行汉明码的编、译码,绘制时域波形及误码率与信噪比关系曲线图。在此基础上,对汉明码的性能进行分析,得出汉明码能降低噪声干扰的结论。
关键词:MATLAB汉明码SIMULINK仿真
1
MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。
东北大学秦皇岛分校电子信息系
综合课程设计
基于matlab的(7,4)汉明码编译仿真
专业名称
通信工程
班级学号
4090719
学生姓名ຫໍສະໝຸດ Baidu
何云瑞
指导教师
李雅珍
设计时间
2011.12.19~2012.1.4
课程设计任务书
专业:通信工程学号:409719学生姓名(签名):
设计题目:(7,4)汉明码的编码、译码仿真
end
semilogy(x,y,’-p’);%semilogy函数对y求对数画图,点显示为星形
xlabel('高斯信道中的信噪比/dB');%写x坐标
ylabel('误码率');%写y坐标
gride on;%画网格表
将上述程序保存为hamming.m文件
3.1.3
在MATLAB环境中运行hamming.m文件,在command window窗口将看到要求输入矩阵,如图2所示
图2提示输入信息矩阵
注意:相同行的元素用空白或逗号隔开,不同行用分号隔开。输入[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,通过信道后的误码率及译码后的误码率如下图3。
在SIMULINK通信系统仿真模型库中,整个通信系统的流程图被概括为:信号的产生与输出、编码与解码、调制与解调。在SIMULINK中,通信系统仿真的一般模型如图1所示。
图1通信系统仿真模型
2.设计原理
2.1
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
4.结束语(设计的收获、体会等)
5.参考资料
四、设计时间与安排
1、设计时间:2周
2、设计时间安排:
熟悉实验设备、收集资料:天
设计图纸、实验、计算、程序编写调试:天
编写课程设计报告:天
答辩:天
摘要
汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。
下面以(7,4)汉明码为例说明原理:
设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用 来表示这7个码元,用 的值表示3个监督关系式中的校正子,则 的值与错误码元位置的对应关系可以规定如表1所列。
表1 校正子和错码位置的关系
错码位置
MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。
%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的均值作为本次仿真的误码率
decode函数
功能:译码函数
语法:rcvcode=decode(code,N,K,’hamming’)
说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。
hammgen函数
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))])%计算收到的数据的误码率(包括汉%明码)
若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成
若E=0,即接收码组无错,则 ,将它代人式(8),该是仍成立,即有
当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即
将 代入式(20),可得
错码位置
001
101
010
110
100
111
011
000
无错码
则由表1可得监督关系式:
在发送端编码时,信息位 的值决定于输入信号,因此它们是随机的。监督位 、 、 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中 、 、 的值为0(表示编成的码组中应无错码)
式(5)经过移项运算,接触监督位
2.2汉明码纠错原理
当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即
则发送码组和接收码组之差为
E就是传输中产生的错码行矩阵
由式(8)可知,所以
此处S与前面的 有着一一对应关系,则S能代表错码位置。
因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。
3.程序与
3.1
3.1.1
MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。
encode函数
功能:编码函数
语法:code=encode(msg,N,K,’hamming’)
一、设计实验条件
电子信息创新实验室
二、设计任务及要求
1.了解、掌握汉明码编码、译码原理;
2.用仿真软件对(7.4)汉明码进行编码、译码仿真;
3.画出编码后、译码后的信号波形图。
三、设计报告的内容
1.设计题目与设计任务(设计任务书)
2.前言(绪论)(设计的目的、意义等)
3.设计主体(各部分设计内容、分析、结论等)
disp(['Error rate after decode: 'num2str(symerr(msg,rcv)/length(msg))])
%计算译码后的误码率(即整个系统的误码率)
%symerr比较两个数据集计算出两者的不同符号的个数和误符号率。
%[number,ratio]=symerr(x,y),其中number为符号不同的数目,ratio等于%number/min(x,y)。
3.2
本系统由信号产生模块、信号汉明编码模块、AWGN信道、信号汉明译码模块、误码率计算模块组成,还有示波器图形观察模块。
3.2.1
在设计中,本系统信号产生模块选用From workspace,从工作区调用msn矩阵(其实与输入信息矩阵msg为同一矩阵,只不过为T的函数),进入Hamming encoder进行编码,再送入AWGN信道(加入高斯白噪声)传输,接收信号送入Hamming decoder进行差错纠正,其后加一误码率计算模块(Error Rate Calculation)计算误码率。再用示波器scope观察波形。电路如图2所示。
图4SIMULINK仿真电路图
由于要绘制Hamming decoder模块输入信噪比与输出误码率的关系曲线图,所以将SNR设置成一个变量,通过hamming.m文件编程绘制误码率曲线图。
3.2.3
图5From Workspace
图6AWGNA Channel
图7Error Rate Calculation
式(5)其等价形式为:
式(6)还可以简记为
或
其中
, ,
,
所以有
式(6)等价于
其中Q为P的转置,即
式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。
我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G
G称为生成矩阵,因为由它可以产生整个码组,即有
或者
式(13)即汉明码的编码原理
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矩阵,作为simulink中from %workspace的输入函数
图8To Workplace
3.2.3
图9From Workspace输出信号波形
图10Hamming Encoder输出信号
图11AWGN Channel输出信号
图12Hamming decoder输出信号
图13SNR=10dB的误码率
图14输入信噪比与输出误码率的关系曲线图
3.2.4
通过结果可知,利用matlab可以很简洁地完成汉明码的编码、译码仿真。另外,还可知汉明码可以降低误码率,提高系统抗干扰能力。在SIMULINK仿真中,利用hamming.m文件编程绘制误码率函数曲线,即图14,可以看出采用汉明码编码后,误码率随着信噪比的增加而快速下降
功能:汉明码生成矩阵和校验矩阵产生函数
语法:H=hammgen(M)
[H,G]=hammgen(M)
[H,G,N,K]=hammgen(M)
说明:该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。
3.1.2
clc %清屏
N=7;%N为总长,包括数据位和汉明码位
本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数对外界输入的信息进行汉明码的编、译码,绘制时域波形及误码率与信噪比关系曲线图。在此基础上,对汉明码的性能进行分析,得出汉明码能降低噪声干扰的结论。
关键词:MATLAB汉明码SIMULINK仿真
1
MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。
东北大学秦皇岛分校电子信息系
综合课程设计
基于matlab的(7,4)汉明码编译仿真
专业名称
通信工程
班级学号
4090719
学生姓名ຫໍສະໝຸດ Baidu
何云瑞
指导教师
李雅珍
设计时间
2011.12.19~2012.1.4
课程设计任务书
专业:通信工程学号:409719学生姓名(签名):
设计题目:(7,4)汉明码的编码、译码仿真
end
semilogy(x,y,’-p’);%semilogy函数对y求对数画图,点显示为星形
xlabel('高斯信道中的信噪比/dB');%写x坐标
ylabel('误码率');%写y坐标
gride on;%画网格表
将上述程序保存为hamming.m文件
3.1.3
在MATLAB环境中运行hamming.m文件,在command window窗口将看到要求输入矩阵,如图2所示
图2提示输入信息矩阵
注意:相同行的元素用空白或逗号隔开,不同行用分号隔开。输入[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,通过信道后的误码率及译码后的误码率如下图3。
在SIMULINK通信系统仿真模型库中,整个通信系统的流程图被概括为:信号的产生与输出、编码与解码、调制与解调。在SIMULINK中,通信系统仿真的一般模型如图1所示。
图1通信系统仿真模型
2.设计原理
2.1
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
4.结束语(设计的收获、体会等)
5.参考资料
四、设计时间与安排
1、设计时间:2周
2、设计时间安排:
熟悉实验设备、收集资料:天
设计图纸、实验、计算、程序编写调试:天
编写课程设计报告:天
答辩:天
摘要
汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。
下面以(7,4)汉明码为例说明原理:
设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用 来表示这7个码元,用 的值表示3个监督关系式中的校正子,则 的值与错误码元位置的对应关系可以规定如表1所列。
表1 校正子和错码位置的关系
错码位置
MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。
%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的均值作为本次仿真的误码率