兰州理工大学
课 程 设 计 报 告
课程名称: 通信系统课程设计 设计名称: 汉明码的编码和译码 姓 名: 学 号: 班 级: 指导教师: 起止日期: 2014.4.7-2014.4.9
课 程 设 计 任 务 书
学生班级: 学生姓名: 学号:
设计名称: 汉明码的编译和译码 起止日期: 2012.6.11-2012.6.25 指导教师:
课 程 设 计 学 生 日 志
课 程 设 计 评 语 表
汉明码的编码和译码
一、 设计目的和意义
1. 学习汉明码的编码和译码;
2. 学习Matlab的相关使用,学会用Malab解决实际问题; 3. 培养自己全面、独立思考的能力。
二、 设计原理
2.1汉明码编码原理
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
2r1n或21kr1 (1)
下面以(7,4)汉明码为例说明原理:
设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用a6a5a4a3a2a1a0来表示这7个码元,用监督关系式中的校正子,则
r
s1s2s3的值表示3个
s1s2s3的值与错误码元位置的对应关系可以规定如表1所列。
表1 校正子和错码位置的关系
则由表1可得监督关系式:
s1a6a5a4 a 2 2
s2a6a5a3 a3 s3a6a4a3a0 4
在发送端编码时,信息位a6a5a4a3的值决定于输入信号,因此它们是随机的。监督
位a2、a1、a0应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中s1、
s2、s3的值为0(表示编成的码组中应无错码)
a6a5a4a20a6a5a3a10a6
a4a3a00
(5)
式(5)经过移项运算,接触监督位
a2a6a5a4
a1a6a5a3a0
a6a4a
3 (6)
式(5)其等价形式为:
a6
1110100a5
a401101010011001a301a20a
1a0 (7)
式(6)还可以简记为
HAT0T或AHT
0 (8)
其中
1110100
H1101010011001
1 Aa6a5a4a3a2a1
a 111000P1101I1
r01
0
1011
00
1
所以有
HPIr
(9)
式(6)等价于
a2a1a0111aa110
6
a5a4
3
101a6a5011
其中Q为P的转置,即
00
0
a4
a3Q
(10 0
)
QPT (11)
式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。 我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G
10kGIQ0
0
101
1 (12)
G称为生成矩阵,因为由它可以产生整个码组,即有
[***********]01
a6a5a4a3a2a1a0a6a5a4a3G (13)
或者
Aa6
a5
a4
a3G
(14)
式(13)即汉明码的编码原理
2.2汉明码纠错原理
当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即 Bb6b5b4b3b2bb(15)10
则发送码组和接收码组之差为
BAE (16)
E就是传输中产生的错码行矩阵 Ee6e5e4e3e2e1e0
(17)
若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成
BAE (18)
若E=0,即接收码组无错,则BAEA,将它代人式(8),该是仍成立,即有
BHT0 (19)
当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即
BHTS 20
将 BAE代入式(20),可得
S(AE)HTAHTEHT 由式(8)可知,所以
SEHT 21
此处S与前面的
s1s2s3有着一一对应关系,则S能代表错码位置。
因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。
三、 详细设计步骤
3.1程序
3.1.1程序函数介绍
MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。 ①encode函数 功能:编码函数
语法:code=encode(msg,N,K)
说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。msg是一个K列矩阵。 ②decode函数 功能:译码函数
语法:rcvcode=decode(code,N,K)
说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。 ③hammgen函数
功能:汉明码生成矩阵和校验矩阵产生函数 语法:H=hammgen(M) [H,G]=hammgen(M) [H,G,N,K]=hammgen(M)
说明:该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。
3.1.2 主程序 K=4; N=7;
msg=randint(200,4,2) %信息产生 code=encode(msg,N,K) %汉明编码 code_noise=rem(code+rand(200,7)>0.95,2 ) %加噪声 rcv=decode(code_noise,N,K) %汉明译码
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))]) %计算误码率
3.2 SIMULINK仿真
本系统由信号产生模块、信号汉明编码模块、AWGN信道、信号汉明译码模块、误码率计算模块组成,在图形观察模块还包括频谱仪和示波器。
3.2.1 SIMULINK电路图
在设计中,本系统信号产生模块选用伯努利二进制序列产生器(Bernoulli Binary Generator)来输出速率为100Bd的随机数字信号,进入Hamming encoder进行编码,在送入AWGN信道(加入高斯白噪声)传输,接收信号送入Hamming decoder进行差错纠正, 其后加一误码率计算模块(Error Rate Calculation)计算误码率。再用示波器scope观察波形,用spectrum scope观测频谱。电路如图1所示。
图1 SIMULINK仿真电路图
由于要绘制Hamming decoder模块输入信噪比与输出误码率的关系曲线图,所以将SNR设置成一个变量,通过ratio文件编程绘制误码率曲线图。
3.2.2 ratio文件程序
x=0:20 %定义信噪比的范围 y=x;
for i=1:length(x)
xSNR=x(i); %输入信噪比
sim('fangzhen'); %运行’fangzhen ’SIMULINK仿真文件 y(i)=xErrorRate(1); %误码率 end
semilogy(x,y); grid on;
xlabel('高斯信道中的信噪比/dB'); ylabel('误码率');
四、 设计结果及分析
4.1调试结果
4.2仿真波形
图2 Bernoulli Binary Generator输出信号波形
图3 Bernoulli Binary Generator输出信号频谱
图4 Hamming Encoder输出信号
图5 Hamming Encoder输出信号频谱
图6 AWGN Channel输出信号
图7 AWGN Channel输出信号频谱
图8 Hamming decoder输出信号
图9 Hamming decoder输出信号频谱
图10 SNR=10dB的误码率
图11 输入信噪比与输出误码率的关系曲线图
4.3仿真结果分析
通过结果可知,汉明码可以降低误码率,提高系统抗干扰能力。在SIMULINK仿真中,利用ratio文件编程绘制误码率函数曲线近似于一条直线,但是若直接控制AWGN参数模块的SNR,误码率发生变化,比较奇怪,不明白。
五、 体会
这次通信原理课程设计的题目是汉明码的编码、译码。因为之前并没有接触过MATLAB中的SIMULINK,所以在画原理图和设置参数的时候遇到了不少困难。但好在网上可借鉴的资源很多,通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解了。这其中我深刻地体会到专业英语的重要性。可想而知,多积累点英语对今后的工作、学习将有极大的帮助。通过本次学习,我再一次体会到MATLAB的强大。丰富的库函数、强大的数据处理能力,出色的绘图功能,友好的工作平台,简单一用的操作语言等等,这些优点都促使MATLAB成为数学处理软件发展史上的巅峰之作。这激发了我之后学习MATLAB的决心。知识的构架是千枝交错的。学到大学,知识之间相互渗透的现象可谓比比皆是,这启发我们不仅要发散思维的领域,也要拓宽知识的领域。对与本专业相关的领域多加了解百利而无一害。最后,还是那句话,实践出真知。在渴望知识的道路上,用双脚探索出来的路才是你自己的路。我还将上下左右而求索。
六、 参考文献
[1] 葛哲学.精通MATLAB.北京:电子工业出版社,2008年.
[2] 樊昌信,曹丽娜.通信原理.北京:国防工业出版社,2008年.
[3]赵静.基于MATLAB的通信系统仿真.北京:北京航空航天大学出版社,2008年.
[4]韩利竹,王华.MATLAB电子仿真与应用.北京:国防工业出版社,2003年.
兰州理工大学
课 程 设 计 报 告
课程名称: 通信系统课程设计 设计名称: 汉明码的编码和译码 姓 名: 学 号: 班 级: 指导教师: 起止日期: 2014.4.7-2014.4.9
课 程 设 计 任 务 书
学生班级: 学生姓名: 学号:
设计名称: 汉明码的编译和译码 起止日期: 2012.6.11-2012.6.25 指导教师:
课 程 设 计 学 生 日 志
课 程 设 计 评 语 表
汉明码的编码和译码
一、 设计目的和意义
1. 学习汉明码的编码和译码;
2. 学习Matlab的相关使用,学会用Malab解决实际问题; 3. 培养自己全面、独立思考的能力。
二、 设计原理
2.1汉明码编码原理
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
2r1n或21kr1 (1)
下面以(7,4)汉明码为例说明原理:
设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用a6a5a4a3a2a1a0来表示这7个码元,用监督关系式中的校正子,则
r
s1s2s3的值表示3个
s1s2s3的值与错误码元位置的对应关系可以规定如表1所列。
表1 校正子和错码位置的关系
则由表1可得监督关系式:
s1a6a5a4 a 2 2
s2a6a5a3 a3 s3a6a4a3a0 4
在发送端编码时,信息位a6a5a4a3的值决定于输入信号,因此它们是随机的。监督
位a2、a1、a0应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中s1、
s2、s3的值为0(表示编成的码组中应无错码)
a6a5a4a20a6a5a3a10a6
a4a3a00
(5)
式(5)经过移项运算,接触监督位
a2a6a5a4
a1a6a5a3a0
a6a4a
3 (6)
式(5)其等价形式为:
a6
1110100a5
a401101010011001a301a20a
1a0 (7)
式(6)还可以简记为
HAT0T或AHT
0 (8)
其中
1110100
H1101010011001
1 Aa6a5a4a3a2a1
a 111000P1101I1
r01
0
1011
00
1
所以有
HPIr
(9)
式(6)等价于
a2a1a0111aa110
6
a5a4
3
101a6a5011
其中Q为P的转置,即
00
0
a4
a3Q
(10 0
)
QPT (11)
式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。 我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G
10kGIQ0
0
101
1 (12)
G称为生成矩阵,因为由它可以产生整个码组,即有
[***********]01
a6a5a4a3a2a1a0a6a5a4a3G (13)
或者
Aa6
a5
a4
a3G
(14)
式(13)即汉明码的编码原理
2.2汉明码纠错原理
当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即 Bb6b5b4b3b2bb(15)10
则发送码组和接收码组之差为
BAE (16)
E就是传输中产生的错码行矩阵 Ee6e5e4e3e2e1e0
(17)
若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成
BAE (18)
若E=0,即接收码组无错,则BAEA,将它代人式(8),该是仍成立,即有
BHT0 (19)
当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即
BHTS 20
将 BAE代入式(20),可得
S(AE)HTAHTEHT 由式(8)可知,所以
SEHT 21
此处S与前面的
s1s2s3有着一一对应关系,则S能代表错码位置。
因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。
三、 详细设计步骤
3.1程序
3.1.1程序函数介绍
MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。 ①encode函数 功能:编码函数
语法:code=encode(msg,N,K)
说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。msg是一个K列矩阵。 ②decode函数 功能:译码函数
语法:rcvcode=decode(code,N,K)
说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。 ③hammgen函数
功能:汉明码生成矩阵和校验矩阵产生函数 语法:H=hammgen(M) [H,G]=hammgen(M) [H,G,N,K]=hammgen(M)
说明:该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。
3.1.2 主程序 K=4; N=7;
msg=randint(200,4,2) %信息产生 code=encode(msg,N,K) %汉明编码 code_noise=rem(code+rand(200,7)>0.95,2 ) %加噪声 rcv=decode(code_noise,N,K) %汉明译码
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))]) %计算误码率
3.2 SIMULINK仿真
本系统由信号产生模块、信号汉明编码模块、AWGN信道、信号汉明译码模块、误码率计算模块组成,在图形观察模块还包括频谱仪和示波器。
3.2.1 SIMULINK电路图
在设计中,本系统信号产生模块选用伯努利二进制序列产生器(Bernoulli Binary Generator)来输出速率为100Bd的随机数字信号,进入Hamming encoder进行编码,在送入AWGN信道(加入高斯白噪声)传输,接收信号送入Hamming decoder进行差错纠正, 其后加一误码率计算模块(Error Rate Calculation)计算误码率。再用示波器scope观察波形,用spectrum scope观测频谱。电路如图1所示。
图1 SIMULINK仿真电路图
由于要绘制Hamming decoder模块输入信噪比与输出误码率的关系曲线图,所以将SNR设置成一个变量,通过ratio文件编程绘制误码率曲线图。
3.2.2 ratio文件程序
x=0:20 %定义信噪比的范围 y=x;
for i=1:length(x)
xSNR=x(i); %输入信噪比
sim('fangzhen'); %运行’fangzhen ’SIMULINK仿真文件 y(i)=xErrorRate(1); %误码率 end
semilogy(x,y); grid on;
xlabel('高斯信道中的信噪比/dB'); ylabel('误码率');
四、 设计结果及分析
4.1调试结果
4.2仿真波形
图2 Bernoulli Binary Generator输出信号波形
图3 Bernoulli Binary Generator输出信号频谱
图4 Hamming Encoder输出信号
图5 Hamming Encoder输出信号频谱
图6 AWGN Channel输出信号
图7 AWGN Channel输出信号频谱
图8 Hamming decoder输出信号
图9 Hamming decoder输出信号频谱
图10 SNR=10dB的误码率
图11 输入信噪比与输出误码率的关系曲线图
4.3仿真结果分析
通过结果可知,汉明码可以降低误码率,提高系统抗干扰能力。在SIMULINK仿真中,利用ratio文件编程绘制误码率函数曲线近似于一条直线,但是若直接控制AWGN参数模块的SNR,误码率发生变化,比较奇怪,不明白。
五、 体会
这次通信原理课程设计的题目是汉明码的编码、译码。因为之前并没有接触过MATLAB中的SIMULINK,所以在画原理图和设置参数的时候遇到了不少困难。但好在网上可借鉴的资源很多,通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解了。这其中我深刻地体会到专业英语的重要性。可想而知,多积累点英语对今后的工作、学习将有极大的帮助。通过本次学习,我再一次体会到MATLAB的强大。丰富的库函数、强大的数据处理能力,出色的绘图功能,友好的工作平台,简单一用的操作语言等等,这些优点都促使MATLAB成为数学处理软件发展史上的巅峰之作。这激发了我之后学习MATLAB的决心。知识的构架是千枝交错的。学到大学,知识之间相互渗透的现象可谓比比皆是,这启发我们不仅要发散思维的领域,也要拓宽知识的领域。对与本专业相关的领域多加了解百利而无一害。最后,还是那句话,实践出真知。在渴望知识的道路上,用双脚探索出来的路才是你自己的路。我还将上下左右而求索。
六、 参考文献
[1] 葛哲学.精通MATLAB.北京:电子工业出版社,2008年.
[2] 樊昌信,曹丽娜.通信原理.北京:国防工业出版社,2008年.
[3]赵静.基于MATLAB的通信系统仿真.北京:北京航空航天大学出版社,2008年.
[4]韩利竹,王华.MATLAB电子仿真与应用.北京:国防工业出版社,2003年.