基于MATLAB——汉明码设计与实现

合集下载

matlab(74)汉明码和(74)循环码的编程设计

matlab(74)汉明码和(74)循环码的编程设计

二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。

2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。

汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

这样就构成了(7,4)码。

用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表2.1 校正子和错码位置的关系则由表1可得监督关系式:16542s a a a a =⊕⊕⊕()226531s a a a a =⊕⊕⊕()3 36430s a a a a =⊕⊕⊕()4 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则123,,S S S 等于0,即65426531643000(5)0a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩方程组(5)可等效成如下矩阵形式6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(6)式(6)可简化为0T T HA =,H 为监督矩阵,则由式(6)可得到监督矩阵11101001101010=[P I ] (7)1011001r H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦因为生成矩阵'=[I Q]=[I ]k k G P ,所以由(7)得生成矩阵G 如下:[]k 10001110100110[']00101010001011k G I Q I P ⎡⎤⎢⎥⎢⎥===⎢⎥⎢⎥⎣⎦然后利用信息位和生成矩阵G 相乘产生整个码组,即有[][]65432106543=(8)A a a a a a a a a a a a G=其中A 为整个码组矩阵,6543a a a a 是信息位。

matlab编程实现汉明码 -回复

matlab编程实现汉明码 -回复

matlab编程实现汉明码-回复Matlab编程实现汉明码汉明码(Hamming Code)是一种错误检测和纠正算法,广泛应用于数字通信和计算机存储中。

它可以检测和纠正发生在数据传输过程中的单一比特错误。

在本篇文章中,我们将一步一步地介绍如何使用Matlab编程实现汉明码。

第一步:了解汉明码的原理在了解如何编程实现汉明码之前,我们需要先了解汉明码的原理。

汉明码利用了冗余位的概念,在原始数据中插入一些附加位来进行错误检测和纠正。

这些冗余位的位置通常是2的幂次方。

假设我们有一个长度为k的数据码字,我们需要在其中插入r个冗余位。

这样,我们可以得到一个总位数为n的码字,其中n = k + r。

这些冗余位根据特定的规则计算得到,而这些规则取决于汉明码的类型。

第二步:选择汉明码的类型汉明码有许多不同的类型,其中最常见的是(7, 4)汉明码。

这意味着我们将4位数据码字扩展为7位码字。

在本文中,我们将以(7, 4)汉明码为例进行讲解。

第三步:生成汉明码的规则(7, 4)汉明码的生成规则如下:1. 在原始数据的每个第2的幂次方位置上插入一个冗余位。

2. 每个冗余位的值等于它所对应的原始数据位和与它进行异或操作的位的和。

即,第1个冗余位的值等于第3、5、7位的异或和,第2个冗余位的值等于第3、6、7位的异或和,第4个冗余位的值等于第5、6、7位的异或和。

第四步:编写Matlab代码实现(7, 4)汉明码下面是一个Matlab函数生成(7, 4)汉明码的例子:matlabfunction hamming_code = hamming_encode(data)Check the input data lengthif (length(data) ~= 4)error('Input data length should be 4.');endGenerate the parity bitshamming_code(1) = xor(xor(data(3), data(5)), data(7));hamming_code(2) = xor(xor(data(3), data(6)), data(7));hamming_code(3:7) = data;end在上面的代码中,我们首先检查输入的数据长度是否为4位。

基于matlab的(7.4)汉明码编译码仿真.

基于matlab的(7.4)汉明码编译码仿真.
东北大学秦皇岛分校电子信息系
综合课程设计
基于matlab的(7,4汉明码编译仿真
专业名称通信工程
班级学号4090719
学生姓名何云瑞
指导教师李雅珍
设计时间2011.12.19~2012.1.4
课程设计任务书
专业:通信工程学号:409719学生姓名(签名:
设计题目:(7,4汉明码的编码、译码仿真
一、设计实验条件
⎢⎥⎢⎥
⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦
⎢⎥⎢⎥⎢⎥⎣⎦ (7
式(6还可以简记为
0T T H A ∙=或0T
A H ∙= (8
其中
111010011010101011001H ⎡⎤
⎢⎥=⎢⎥
⎢⎥⎣⎦ []654321
0A a a a a a a a =
[]00
0=
111011011011P ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦
3.2.3仿真波形(10
3.2.4仿真结果分析(14
4.总结(15
参考文献(16
摘要
汉明码(Hamming Code是一种能够自动检测并纠正一位错码的线性纠错码,即SEC (Single Error Correcting码,用于信道编码与译码中,提高通信系统抗干扰的能力。
本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制时域波形,频谱及误码率与信噪比关系曲线图。在此基础上,对汉明码的性能进行分析,得出结论。
③hammgen函数
功能:汉明码生成矩阵和校验矩阵产生函数
语法:H=hammgen(M
[H,G]=hammgen(M
[H,G,N,K]=hammgen(M

基于MATLAB——汉明码设计与实现

基于MATLAB——汉明码设计与实现

7
value
如上图所示,则四位有错误,原发送码子为[1 1 0 1 0 1 0] 如果输入的序列为[1 0 0 0 0 1 0],则仿真图为
页脚内容8
break;
end
end
页脚内容6
计算机控制技术实验
a=mod(B-E,2);
%计算原发送码序列
disp('原发送码字为:');
disp(a)
x=.01:.01:7;
[m,n]=size([a]'*ones(1,100));
y=reshape(([a]'*ones(1,100))',1,m*n);
计算机控制技术实验
(10)
其中 Q 为 P 的转置,即
Q PT (11) 式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵 Q 就产生出监督位。 我们将 Q 的左边加上一个 k×k 阶单位方阵,就构成一个矩阵 G
(12)
G 称为生成矩阵,因为由它可以产生整个码组,即有
(13)
或者
(14)
式(13)即汉明码的编码原理 1.2 汉明码纠错原理
计算机控制技术实验
实验报告书------汉明码设计与实现
汉明码编译码器系统
班级:
姓名:
学号:
一.实验原理描述
1.1 汉明码编码原理 一般来说,若汉明码长为 n,信息位数为 k,则监督位数 r=n-k。若希望用 r 个监督位构造出 r 个监督关系式来指示一位错码的 n 种可能位置,则要求
2r 1 n 或 2r 1 k r 1 (1)
ylabel('value')
end
输入信息元序列:1101
编码后序列为:

matlab通信系统仿真——汉明编码,FDMA调制

matlab通信系统仿真——汉明编码,FDMA调制

matlab通信系统仿真——汉明编码,FDMA调制此代码实现了汉明编码,FDMA调制,高斯白噪声信道传输的通信系统matlab仿真。

%===========================所需数据================================= len = 100; %产生信号长度fs=44100; %抽样频率t=0:len*200*1.75-1; %t值范围mm1=1:len;mm2=1:len;mm3=1:len;nn1=1:200;nn2=1:200;nn3=1:200;uu=1:300;snr=10; %高斯信道信噪比fazhi=0.5; %判决阀值f1=5200; %载波频率f2=10200;f3=16200;%===========================随机2进制信号产生================================= msg1 = randint(1,len,2); % Random binary message of 2-bit symbols 信源msg2 = randint(1,len,2);msg3 = randint(1,len,2);%===========================汉明编码================================= %信号1编码DS_chips11=encode(msg1,7,4,'hamming/fmt');DS_chips12=DS_chips11';%信号2编码DS_chips21=encode(msg2,7,4,'hamming/fmt');DS_chips22=DS_chips21';%信号3编码DS_chips31=encode(msg3,7,4,'hamming/fmt');DS_chips32=DS_chips31';%===========================信号扩码================================= %信号msg1扩码for mm1=1:175for nn1=1:200u1((mm1-1)*200+nn1)=DS_chips12(mm1);endend%信号msg2扩码for mm2=1:len*1.75for nn2=1:200u2((mm2-1)*200+nn2)=DS_chips22(mm2);endend%信号msg3扩码for mm3=1:len*1.75for nn3=1:200u3((mm3-1)*200+nn3)=DS_chips32(mm3);endend%===========================调制前信号频谱=================================figure(1);subplot(3,1,1);stem(t,abs(fft(u1)),'.');xlabel('单位:Hz');ylabel('幅度');title('调制前3路信号各自的频谱图');subplot(3,1,2);stem(t,abs(fft(u2)),'.');xlabel('单位:Hz');ylabel('幅度');subplot(3,1,3);stem(t,abs(fft(u3)),'.');xlabel('单位:Hz');ylabel('幅度');%================================FDMA调制================================= x1=4*u1.*cos(2*pi*f1*t/fs); %频谱搬移x2=4*u2.*cos(2*pi*f2*t/fs);x3=4*u3.*cos(2*pi*f3*t/fs);s=x1+x2+x3; %复用信号频谱为各信号频谱的叠加%===========================信号调制后3路信号频谱================================= figure(2);subplot(3,1,1);stem(t,abs(fft(x1)),'.');xlabel('单位:Hz');ylabel('幅度');title('调制后3路信号各自的频谱图');subplot(3,1,2);stem(t,abs(fft(x2)),'.');xlabel('单位:Hz');ylabel('幅度');subplot(3,1,3);stem(t,abs(fft(x3)),'.');xlabel('单位:Hz');ylabel('幅度');%============================高斯白噪声信号=================================snoisy = awgn(s,snr,'measured');% Transmit signal through an AWGN channel.%=============================带通滤波器设计================================= %通过带通滤波器Rp1=0.5;Rs1=40; %用切比雪夫设计带通滤波器1;Wp1=[4000 8000]/22050; %fs/2=22050Ws1=[3800 8500]/22050;[n1,Wn1]=cheb2ord(Wp1,Ws1,Rp1,Rs1);[b1,a1]=cheby2(n1,Rs1,Wn1);[h1,w1]=freqz(b1,a1);mag1=abs(h1); %求实部与虚部的算术平方根db1=20*log10((mag1+eps)/max(mag1));%用切比雪夫设计带通滤波器2;Wp2=[9000 13000]/22050; %用切比雪夫设计带通滤波器2;Ws2=[8000 14000]/22050;[n2,Wn2]=cheb2ord(Wp2,Ws2,Rp1,Rs1);[b2,a2]=cheby2(n2,Rs1,Wn2);[h2,w2]=freqz(b2,a2);mag2=abs(h2);db2=20*log10((mag2+eps)/max(mag2));%用切比雪夫设计带通滤波器3;Wp3=[14500 18500]/22050; %用切比雪夫设计带通滤波器3;Ws3=[14000 19000]/22050;[n3,Wn3]=cheb2ord(Wp3,Ws3,Rp1,Rs1);[b3,a3]=cheby2(n3,Rs1,Wn3);[h3,w3]=freqz(b3,a3);mag3=abs(h3);db3=20*log10((mag3+eps)/max(mag3));%==============================带通滤波器=================================figure(4);subplot(3,1,1);plot(w1/pi,db1);axis([0 1 -50 20]);xlabel('w/pi');ylabel('20lg|H(ejw)|');title('用切比雪夫2型设计三个带通滤波器');subplot(3,1,2);plot(w2/pi,db2);axis([0 1 -50 20]);xlabel('w/pi');ylabel('20lg|H(ejw)|');subplot(3,1,3);plot(w3/pi,db3);axis([0 1 -50 20]);xlabel('w/pi');ylabel('20lg|H(ejw)|');%===============================带通滤波=================================y1=filter(b1,a1,snoisy); %滤出三路未解调信号y2=filter(b2,a2,snoisy);y3=filter(b3,a3,snoisy);%==============================信号解调================================%fs=44100y01=y1.*cos(2*pi*f1*t/fs); %各个已调信号分别乘以各自y02=y2.*cos(2*pi*f2*t/fs); %的高频载波信号y03=y3.*cos(2*pi*f3*t/fs);%==========================解调后3路信号的频谱================================= figure(5); %图五为解调后3路信号各自的频谱图subplot(3,1,1);stem(t,abs(fft(y01)),'.');xlabel('单位:Hz');ylabel('幅度');title('解调后3路信号各自的频谱图');subplot(3,1,2);stem(t,abs(fft(y02)),'.');xlabel('单位:Hz');ylabel('幅度');subplot(3,1,3);stem(t,abs(fft(y03)),'.');xlabel('单位:Hz');ylabel('幅度');%============================低通滤波器设计=================================Rp2=0.5; %低通滤波器参数选择Rs2=40;Wp4=3400/(22050);Ws4=4000/(22050);[n4,Wn4]=cheb2ord(Wp4,Ws4,Rp2,Rs2); %采用切比雪夫2型(cheby2)带通滤波器[d1,c1]=cheby2(n4,Rs2,Wn4);[h4,w4]=freqz(d1,c1);mag4=abs(h4); %求实部与虚部的算术平方根db4=20*log10((mag4+eps)/max(mag4));figure(6); %图六为低通滤波器的频率响应plot(w4/pi,db4);axis([0 1 -50 20]);xlabel('w/pi');ylabel('20lg|H(ejw)|');title('低通滤波器的频率响应');%============================低通滤波=================================yy1=filter(d1,c1,y01);%通过低通滤波器yy2=filter(d1,c1,y02);%通过低通滤波器yy3=filter(d1,c1,y03);%通过低通滤波器%===========================信号抽样、判决=================================%每200个抽一次,抽第100个,即中间那个for uu=1:len*1.75if yy1((uu-1)*200+100)>=fazhirt1(uu)=1;else rt1(uu)=0;endif yy2((uu-1)*200+100)>=fazhirt2(uu)=1;else rt2(uu)=0;endif yy3((uu-1)*200+100)>=fazhirt3(uu)=1;else rt3(uu)=0;endend%================================汉明解码=================================%信号1解码ddd1=reshape(rt1,7,len*1.75/7);abc1=ddd1';ccc1= decode(abc1,7,4,'hamming/fmt');cl1=ccc1';zh1=reshape(cl1,1,len);%信号1解码ddd2=reshape(rt2,7,len*1.75/7);abc2=ddd2';ccc2= decode(abc2,7,4,'hamming/fmt');cl2=ccc2';zh2=reshape(cl2,1,len);%信号1解码ddd3=reshape(rt3,7,len*1.75/7);abc3=ddd3';ccc3= decode(abc3,7,4,'hamming/fmt');cl3=ccc3';zh3=reshape(cl3,1,len);%==============================计算误码率=================================[num1,rt1]= symerr(zh1,msg1)% Check symbol error rate.[num2,rt2]= symerr(zh2,msg2)% Check symbol error rate.[num3,rt3]= symerr(zh3,msg3)% Check symbol error rate.。

matlab编程实现汉明码 -回复

matlab编程实现汉明码 -回复

matlab编程实现汉明码-回复Matlab编程实现汉明码汉明码(Hamming code)是一种用于纠正错误的编码方法,可用于检测和纠正单个比特的错误。

在信息传输过程中,数据可能会因为电磁干扰或噪声而产生错误。

通过使用汉明码,我们可以在接收到带有错误的数据时进行错误检测和纠正,从而提高数据传输的可靠性。

本文将介绍如何使用Matlab编程实现汉明码。

我们将以步骤的形式逐渐实现编码和解码过程。

第一步:理解汉明码的原理汉明码是一种线性块码,通过在发送数据之前添加冗余信息(校验位),可以使得接收方检测和纠正单个比特的错误。

汉明码的冗余信息包含了数据的位置信息,从而能够检测并纠正错误。

第二步:生成汉明码的矩阵表示生成汉明码的第一步是确定矩阵H,该矩阵表示汉明码的校验位分布。

矩阵H是一个n×k的矩阵,其中n是码字的总长度,k是数据位的长度。

根据汉明码的性质,矩阵H应满足两个条件:1. 任意两行之间的汉明距离至少为3,以确保可以检测到至少一个错误比特。

2. 列向量之间的汉明距离应大于等于2,以确保可以纠正单个比特的错误。

矩阵H的构建可以采用循环移位操作来实现。

第三步:编码在编码过程中,我们将使用生成矩阵G来将输入数据转换为汉明码。

生成矩阵G是矩阵H的转置,并且是一个k×n的矩阵。

编码的过程中,我们将输入的k位数据向量乘以生成矩阵G得到n位汉明码。

第四步:引入错误为了模拟实际情况下可能发生的错误,我们可以在汉明码中引入一定数量的错误比特。

这可以通过随机地翻转一些比特来实现。

第五步:解码解码汉明码的过程就是检测并纠正错误比特的过程。

为了检测错误,我们将接收到的n位汉明码与矩阵H进行乘法运算得到校验位向量。

如果校验位向量非零,则表示有错误发生。

为了纠正错误,我们可以通过汉明码的特性来确定错误比特的位置,并将其翻转。

这是一个基本的汉明码编码和解码的过程的简要描述。

现在我们将使用Matlab进行实现。

基于MATLAB——汉明码设计与实现

基于MATLAB——汉明码设计与实现

实验报告书------汉明码设计与实现汉明码编译码器系统班级: 姓名: 学号:一.实验原理描述1.1汉明码编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++(1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

我们用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表1 校正子和错码位置的关系则由表1可得监督关系式:S 1=S 6⊕S 5⊕S 4⊕S 2 (2)S 2=S 6⊕S 5⊕S 3⊕S 1(3)S 3=S 6⊕S 4⊕S 3⊕S 0(4) 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s、2s、3s的值为0(表示编成的码组中应无错码){S6⊕S5⊕S4⊕S2=0S6⊕S5⊕S3⊕S1=0S6⊕S4⊕S3⊕S0=0(5)式(5)经过移项运算,接触监督位{S2=S6⊕S5⊕S4S1=S6⊕S5⊕S3S0=S6⊕S4⊕S3(6)式(5)其等价形式为:[111010011010101011001][S6S5S4S3S2S1S0]=[](7)式(6)还可以简记为H∙S S=0S或A∙S S=0 (8)其中H=[111010011010101011001]A=[S6S5S4S3S2S1S0] P=[111011011011]S S=[100010001]0=[000]所以有H=[P S S] (9)式(6)等价于[S 2S 1S S ]=[S 6 S 5 S 4 S 3][1 1 11 1 01 0 10 1 1]=[S 6 S 5 S 4S 3]S (10)其中Q 为P 的转置,即T Q P (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。

实验报告书汉明码设计与实现

实验报告书汉明码设计与实现

实验报告书------汉明码设计与实现汉明码编译码器系统班级: 姓名: 学号:一.实验原理描述1.1汉明码编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++(1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

我们用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表1 校正子和错码位置的关系则由表1可得监督关系式: S 1=a 6⊕a 5⊕a 4⊕a 2 (2)S 2=a 6⊕a 5⊕a 3⊕a 1(3)S 3=a 6⊕a 4⊕a 3⊕a 0(4) 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s 、2s 、3s的值为0(表示编成的码组中应无错码){a 6⊕a 5⊕a 4⊕a 2=0a 6⊕a 5⊕a 3⊕a 1=0a 6⊕a 4⊕a 3⊕a 0=0(5)式(5)经过移项运算,接触监督位{a 2=a 6⊕a 5⊕a 4a 1=a 6⊕a 5⊕a 3a 0=a 6⊕a 4⊕a 3(6)式(5)其等价形式为: [1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1][ a 6a 5a 4a 3a 2a 1a 0]=[000](7)式(6)还可以简记为H ∙A T =0T 或A ∙H T =0 (8)其中H =[1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1]A =[a 6a 5a 4a 3a 2a 1a 0]P =[1 1 1 01 1 0 11 0 1 1]I r =[1 0 00 1 00 0 1]0=[0 0 0]所以有H =[PI r ](9)式(6)等价于[a 2a 1a a ]=[a 6 a 5 a 4 a 3][1 1 11 1 01 0 10 1 1]=[a 6 a 5 a 4a 3]Q (10)其中Q 为P 的转置,即T Q P (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。

通信系统仿真基于matlab的设计--2psk调制,香农编码,汉明编码

通信系统仿真基于matlab的设计--2psk调制,香农编码,汉明编码

1 课程设计目的1.1 对数字通信系统主要原理和技术进行研究,包括二进制相移键控(2psk)及解调技术、高斯噪声信道原理、以及信源编码中香农编码、信道编码中hamming码的基本原理等。

1.2 建立完整的基于2psk和(7,4)循环码的数字通信系统仿真模型,包括2psk调制解调及香农、hamming码的编译码;1.3 在信道中加入高斯噪声,观察系统的纠错能力,统计误码率,并进行分析。

1.4 锻炼我们查阅资料、方案比较、团结合作的能力。

学会简单电路的实验调试和整机指标测试方法,增强我们的动手能力。

2 课程设计正文这次课程设计的主要任务是运用MATLAB编程实现2PSK调制解调过程,并且输出其调制及解调过程中的波形,讨论其调制和解调效果。

了解高斯噪声信道原理、以及香农编译码、hamming编译码的原理。

2.1 性能指标2.1.1 用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。

本实验详细介绍了PSK波形的产生和仿真过程。

我们可以系统的了解基本原理,以及得到数字调制波形的方法。

利用MATLAB仿真可更好的认识2PSK信号波形的调制过程。

图1 相应的信号波形的示例1 0 12.1.2 将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。

通过本次设计,了解香农—费诺编码的具体过程,通过编程实现编码,利用matlab 实现费诺编码。

2.1.3 当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。

2.2 matlab代码2.2.1 香农编码%*******************************%香农编码***********************************A=[0.4,0.3,0.1,0.09,0.04,0.07];A=fliplr(sort(A));%降序排列[m,n]=size(A);for i=1:nB(i,1)=A(i);%生成B的第1列end%生成B第2列的元素a=sum(B(:,1))/2;for k=1:n-1if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a) break;endendfor i=1:n%生成B第2列的元素if i<=kB(i,2)=0;elseB(i,2)=1;endend%生成第一次编码的结果END=B(:,2)';END=sym(END);%生成第3列及以后几列的各元素j=3;while (j~=0)p=1;while(p<=n)x=B(p,j-1);for q=p:nif x==-1break;elseif B(q,j-1)==xy=1;continue;elsey=0;break;endendendif y==1q=q+1;endif q==p|q-p==1B(p,j)=-1;elseif q-p==2B(p,j)=0;END(p)=[char(END(p)),'0'];B(q-1,j)=1;END(q-1)=[char(END(q-1)),'1'];elsea=sum(B(p:q-1,1))/2;for k=p:q-2if abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a);break;endendfor i=p:q-1if i<=kB(i,j)=0;END(i)=[char(END(i)),'0'];elseB(i,j)=1;END(i)=[char(END(i)),'1'];endendendendp=q;endC=B(:,j);D=find(C==-1);[e,f]=size(D);if e==nj=0;elsej=j+1;endendBAEND2.2.2 香农译码%********************************%香农解码******************************** jg=[];for x=1:100if ccc(x,1)==0&ccc(x,2)==0&ccc(x,3)==0&ccc(x,4)==0 jg(x)=1;elseif ccc(x,1)==0&ccc(x,2)==0&ccc(x,3)==1&ccc(x,4)==0 jg(x)=2;elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==0&ccc(x,4)==0 jg(x)=3;elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==0&ccc(x,4)==1 jg(x)=4;elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==1&ccc(x,4)==0 jg(x)=6;elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==1&ccc(x,4)==1 jg(x)=5;end;end;jg2.2.3 Hamming编码%******************************汉明编码*********************************** hh=encode(e,7,4,'hamming/fmt');hh2.2.4 Hamming译码%********************************汉明解码********************************* ddd=reshape(bc,7,100);abc=ddd';ccc= decode(abc,7,4,'hamming/fmt')2.2.5 信源%*****************************信源***************************************** aa = randsrc(1,100,[symbols;p]);aae=zeros(100,4)for i = 1 : 1:100switch aa(i)case 1e(i,:)=[0,0,0,0]case 2e(i,:)=[0,0,1,0]case 3e(i,:)=[1,1,0,0]case 4e(i,:)=[1,1,0,1]case 6e(i,:)=[1,1,1,0]case 5e(i,:)=[1,1,1,1]end;end;2.2.6 2psk调制解调%*******************************2PSK调制解调******************************* code=[]for z=0:99for t=1:7code(7*z+t)=hh(z+1,t)endendcp=[];mod1=[];f=2*2*pi;t=0:2*pi/199:2*pi;for n=1:length(code);if code(n)==0;A=zeros(1,200);%每个值200个点elseif code(n)==1;A=ones(1,200);endcp=[cp A]; %s(t),码元宽度200c=cos(f*t);%载波信号mod1=[mod1 c];%与s(t)等长的载波信号,变为矩阵形式endfigure(1);subplot(4,2,1);plot(cp);grid on;axis([0 200*length(code) -2 2]);title('二进制信号序列');cm=[];mod=[];for n=1:length(code);if code(n)==0;B=ones(1,200);%每个值200个点c=cos(f*t); %载波信号elseif code(n)==1;B=ones(1,200);c=cos(f*t+pi); %载波信号endcm=[cm B]; %s(t),码元宽度200mod=[mod c]; %与s(t)等长的载波信号endtiaoz=cm.*mod;%e(t)调制figure(1);subplot(4,2,2);plot(tiaoz);grid on;axis([0 200*length(code) -2 2]);title('2PSK调制信号');figure(2);subplot(4,2,1);plot(abs(fft(cp)));axis([0 200*length(code) 0 400]);title('原始信号频谱');figure(2);subplot(4,2,2);plot(abs(fft(tiaoz)));axis([0 200*length(code) 0 400]);title('2PSK信号频谱');2.2.7 带有高斯白噪声的信道tz=awgn(tiaoz,10);%信号tiaoz中加入白噪声,信噪比为10figure(1);subplot(4,2,3);plot(tz);grid on;axis([0 200*length(code) -2 2]);title('通过高斯白噪声信道后的信号'); figure(2);subplot(4,2,3);plot(abs(fft(tz)));axis([0 200*length(code) 0 400]);title('加入白噪声的2PSK信号频谱');jiet=2*mod1.*tz;%同步解调figure(1);subplot(4,2,4);plot(jiet);grid on;axis([0 200*length(code) -2 2]);title('相乘后信号波形');figure(2);subplot(4,2,4);plot(abs(fft(jiet)));axis([0 200*length(code) 0 400]);title('相乘后信号频谱');2.2.8 低通滤波器fp=300;fs=700;rp=3;rs=20;fn=11025;ws=fs/(fn/2); wp=fp/(fn/2);%计算归一化角频率[n,wn]=buttord(wp,ws,rp,rs);%计算阶数和截止频率[b,a]=butter(n,wn);%计算H(z)figure(4);freqz(b,a,1000,11025);subplot(2,1,1);axis([0 4000 -100 3 ])title('LPF幅频相频图');jt=filter(b,a,jiet);figure(1);subplot(4,2,5);plot(jt);grid onaxis([0 200*length(code) -2 2]);title('经低通滤波器后信号波形')figure(2);subplot(4,2,5);plot(abs(fft(jt)));axis([0 200*length(code) 0 400]);title('经低通滤波器后信号频谱');2.2.9 抽样判决bc=[];for m=1:200*length(code);if jt(m)<0;jt(m)=1;elseif jt(m)>=0;jt(m)=0;endendfor bx=0:699bc(bx+1)=jt(bx*200+100)endbcfigure(1);subplot(4,2,6);plot(bc);grid onaxis([0 200*length(code) -2 2]);title('经抽样判决后信号s^(t)波形')figure(2);subplot(4,2,6);plot(abs(fft(bc)));axis([0 length(code) 0 50]);title('经抽样判决后信号频谱');2.2.10 误码率%**********************误码率************************************** [zcl,mc]=symerr(jg,aa)2.3 程序执行图3 总结一周的基于MATLAB的数字调制信号仿真分析课程设计让我获益颇深。

(完整word版)matlab(7,4)汉明码和(7,4)循环码的编程设计

(完整word版)matlab(7,4)汉明码和(7,4)循环码的编程设计

二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。

2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。

汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

这样就构成了(7,4)码。

用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表2.1 校正子和错码位置的关系则由表1可得监督关系式:16542s a a a a =⊕⊕⊕()226531s a a a a =⊕⊕⊕()3 36430s a a a a =⊕⊕⊕()4 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则123,,S S S 等于0,即65426531643000(5)0a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩方程组(5)可等效成如下矩阵形式6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(6)式(6)可简化为0T T HA =,H 为监督矩阵,则由式(6)可得到监督矩阵11101001101010=[P I ] (7)1011001r H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦因为生成矩阵'=[I Q]=[I ]k k G P ,所以由(7)得生成矩阵G 如下:[]k 10001110100110[']00101010001011k G I Q I P ⎡⎤⎢⎥⎢⎥===⎢⎥⎢⎥⎣⎦然后利用信息位和生成矩阵G 相乘产生整个码组,即有[][]65432106543=(8)A a a a a a a a a a a a G=其中A 为整个码组矩阵,6543a a a a 是信息位。

matlab(74)汉明码和(74)循环码的编程设计

matlab(74)汉明码和(74)循环码的编程设计

二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。

2、实验原理线性分组码的构造方式比较简单、理论较为成熟,应用比较普遍。

汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码别离进行介绍:(1)编码原理一样来讲,假设汉明码长为n ,信息位数为k ,那么监督位数r=n-k 。

假设希望用r 个监督位构造出r 个监督关系式来指示一名错码的n 种可能位置,那么要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一名错码,由式(1)可知,要求监督位数r ≥3。

假设取r=3,那么n=k+r=7。

如此就组成了(7,4)码。

用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,那么123s s s 的值与错误码元位置的对应关系能够规定如表1所列。

表2.1 校正子和错码位置的关系那么由表1可得监督关系式:16542s a a a a =⊕⊕⊕ ()226531s a a a a =⊕⊕⊕()336430s a a a a =⊕⊕⊕ ()4在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、a 应依照信息位的取值按监督关系来确信,为使所编的码中无错码,那么123,,S S S 等于0,即65426531643000(5)0a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩方程组(5)可等效成如下矩阵形式6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(6)式(6)可简化为0T T HA =,H 为监督矩阵,那么由式(6)可取得监督矩阵11101001101010=[P I ] (7)1011001r H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦因为生成矩阵'=[I Q]=[I ]k k G P ,因此由(7)得生成矩阵G 如下:[]k 10001110100110[']00101010001011k G I Q I P ⎡⎤⎢⎥⎢⎥===⎢⎥⎢⎥⎣⎦然后利用信息位和生成矩阵G 相乘产生整个码组,即有[][]65432106543=(8)A a a a a a a a a a a a G=其中A 为整个码组矩阵,6543a a a a 是信息位。

基于某matlab地(7,4)汉明码编译仿真

基于某matlab地(7,4)汉明码编译仿真

东北大学分校电子信息系综合课程设计基于matlab的(7,4)汉明码编译仿真专业名称通信工程班级学号4090719学生何云瑞指导教师雅珍设计时间2011.12.19~2012.1.4课程设计任务书专业:通信工程学号:409719 学生(签名):设计题目:(7,4)汉明码的编码、译码仿真一、设计实验条件电子信息创新实验室二、设计任务及要求1.了解、掌握汉明码编码、译码原理;2.用仿真软件对(7.4)汉明码进行编码、译码仿真;3.画出编码后、译码后的信号波形图。

三、设计报告的容1.设计题目与设计任务(设计任务书)2.前言(绪论)(设计的目的、意义等)3.设计主体(各部分设计容、分析、结论等)4.结束语(设计的收获、体会等)5.参考资料四、设计时间与安排1、设计时间:2周2、设计时间安排:熟悉实验设备、收集资料:天设计图纸、实验、计算、程序编写调试:天编写课程设计报告:天答辩:天目录摘要 (I)1.引言 (1)2.设计原理 (2)2.1汉明码编码原理 (2)2.2汉明码纠错原理 (4)3.程序与SIMULINK仿真 (6)3.1程序 (6)3.1.1程序函数介绍 (6)3.1.2 主程序 (6)3.1.3调试结果 (7)3.2 SIMULINK仿真 (8)3.2.1 SIMULINK电路图 (8)3.2.2 模块参数设置 (9)3.2.3仿真波形 (11)3.2.4仿真结果分析 (15)4.总结 (16)参考文献 (17)摘要汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC (Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。

本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数对外界输入的信息进行汉明码的编、译码,绘制时域波形及误码率与信噪比关系曲线图。

在此基础上,对汉明码的性能进行分析,得出汉明码能降低噪声干扰的结论。

matlab编程实现汉明码 -回复

matlab编程实现汉明码 -回复

matlab编程实现汉明码-回复Matlab编程实现汉明码汉明码是一种用于检错的线性二元码。

它由理论家Richard Hamming在20世纪50年代提出,主要用于在数字通信中检测和纠正错误。

汉明码的基本思想是在传输的二进制数据中添加冗余位,通过对冗余位和实际数据位的校验来检测和纠正错误。

在本篇文章中,我们将一步一步地介绍如何在Matlab中实现汉明码编码和解码。

为了更好地理解,我们将首先介绍汉明码的原理,然后进一步探讨如何编写Matlab代码来实现该编码和解码过程。

一、汉明码原理汉明码是一种线性二元码,它通过在数据位中添加冗余位来实现检错和纠错功能。

通常情况下,汉明码的编码过程可以分为两个步骤:计算冗余位和添加冗余位。

1.1 计算冗余位在汉明码中,冗余位的数量取决于数据位的数量,并且需要满足以下等式:2^r >= m + r + 1其中,m为数据位的数量,r为冗余位的数量。

根据该等式,可以确定汉明码的最小距离d,即出错位的最小数目。

一般情况下,d = 3,因此,至少需要添加两个冗余位。

冗余位的位置可以通过一个生成矩阵G来确定。

生成矩阵G的构造方法如下:- 将r列单位矩阵相连接得到G的左部分,即G的前r列。

- 用传输函数形式表示连续r个时间单位的单位冲激响应。

- 去掉时间表示部分,将剩下部分的所有元素除以r行冲激响应的第一个元素。

1.2 添加冗余位添加冗余位的过程是通过将冗余位插入到已有的数据位中实现的。

冗余位被插入的位置是由生成矩阵G决定的。

二、Matlab编程实现汉明码接下来,我们将介绍如何使用Matlab来实现汉明码的编码和解码过程。

首先,我们需要在Matlab中创建两个函数:encode和decode。

encode 函数用于实现汉明码的编码过程,而decode函数用于实现汉明码的解码过程。

2.1 encode函数encode函数的主要功能是根据给定的输入数据对其进行汉明码编码。

该函数的输入参数包括:- data:输入的数据位- r:冗余位的数量首先,我们需要在encode函数中计算冗余位的数量,并根据冗余位的数量构建生成矩阵G。

基于matlab的(7.4)汉明码编译码仿真.

基于matlab的(7.4)汉明码编译码仿真.
关键词:MATLAB汉明码SIMULINK性能
I
1.引言
MATLAB(Matrix Laboratory,矩阵实验室是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。
规定如表1所列。
表1校正子和错码位置的关系
则由表1可得监督关系式: 16542s a a a a =⊕⊕⊕ (2
2653s a a a a =⊕⊕⊕ (3 36430s a a a a =⊕⊕⊕ (4
在发送端编码时,信息位6543a a a a的值决定于输入信号,因此它们是随机的。
监督位2a、1a、0a应根据信息位的取值按监督关系来确定,即监督位应使式(2~式(4中1s、2s、3s的值为0(表示编成的码组中应无错码
1
0001
000
1r I ⎡⎤⎢⎥=⎢
⎥⎢⎥⎣⎦
所以有
[]
r H PI = (9
式(6等价于
[][][]2106
54
3654
3111110101011a a a a a a a a a a a Q
⎡⎤⎢⎥

⎥==⎢⎥⎢⎥⎣⎦
(10
其中Q为P的转置,即
T Q P = (11
式(10表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。我们将Q的左边加上一个k ×k阶单位方阵,就构成一个矩阵G
21r n -≥或211r
k r -≥++ (1
下面以(7,4汉明码为例说明原理:
设汉明码(n,k中k=4,为了纠正一位错码,由式(1可知,要求监督位数r ≥3。若取r=3,则n=k+r=7。我们用6543210a a a a a a a来表示这7个码元,用123s s s的

matlab(7-4)汉明码和(7-4)循环码的编程设计

matlab(7-4)汉明码和(7-4)循环码的编程设计

二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。

2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。

汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

这样就构成了(7,4)码。

用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表2.1 校正子和错码位置的关系则由表1可得监督关系式:在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则123,,S S S 等于0,即 方程组(5)可等效成如下矩阵形式式(6)可简化为0T T HA =,H 为监督矩阵,则由式(6)可得到监督矩阵 因为生成矩阵'=[I Q]=[I ]k k G P ,所以由(7)得生成矩阵G 如下: 然后利用信息位和生成矩阵G 相乘产生整个码组,即有 其中A 为整个码组矩阵,6543a a a a 是信息位。

根据上述原理可以得到(7,4)汉明码的整个码组。

(2)译码与检错、纠错原理当数字信号编码成汉明码后,由于信道噪声的存在,使得经过信道后的汉明码会发生差错,使得接收端接收到错码,因此需要多错码进行纠正,以提高通信系统的抗干扰能力及可靠性。

基于MATLAB的(7-4)汉明码编译码设计与仿真结果分析

基于MATLAB的(7-4)汉明码编译码设计与仿真结果分析

通信原理课程设计报告书课题名称 基于MATLAB 的(7,4)汉明码编译码设计与仿真结果分析姓 名 学 号学 院 通信与电子工程学院专 业 通信工程指导教师※※※※※※※※※ ※※ ※※ ※※2009级通信工程专业通信原理课程设计2011年 12月 23日基于MATLAB 的(7,4)汉明码编译码设计与仿真结果分析1 设计目的(1)熟悉掌握汉明码的重要公式和基本概念。

(2)利用MATLAB 编程,实现汉明码编译码设计。

(3)理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。

(4)对其仿真结果进行分析。

2 设计要求(1)通过MATLAB 编程,设计出(7,4)汉明码的编码程序。

(2)编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图。

(3)然后对其结果进行分析。

3 设计步骤3.1线性分组码的一般原理线性分组码的构造 3.1.1 H 矩阵根据(7, 4)汉明码可知一般有现在将上面它改写为上式中已经将“⊕”简写成“+”。

上式可以表示成如下矩阵形式:⎪⎩⎪⎨⎧=⊕⊕⊕=⊕⊕⊕=⊕⊕⊕000034613562456a a a a a a a a a a a a ⎪⎭⎪⎬⎫=⋅+⋅+⋅+⋅+⋅+⋅+⋅=⋅+⋅+⋅+⋅+⋅+⋅+⋅=⋅+⋅+⋅+⋅+⋅+⋅+⋅010011010010101100010111012345601234560123456a a a a a a a a a a a a a a a a a a a aa上式还可以简记为H ⋅ A T= 0T或 A ⋅ H T= 0式中A = [a 6 a 5 a 4 a 3 a 2 a 1 a 0]0 = [000]右上标“T”表示将矩阵转置。

例如,H T 是H 的转置,即H TH的第一列,H T 的第二行为H 的第二列等等。

将H 称为监督矩阵。

只要监督矩阵H 给定,编码时监督位和信息位的关系就完全确定了。

基于MATLAB——汉明码设计与实现

基于MATLAB——汉明码设计与实现

实验报告书—-—-—-汉明码设计与实现汉明码编译码器系统班级: 姓名: 学号:一.实验原理描述1。

1汉明码编码原理一般来说,若汉明码长为n ,信息位数为k,则监督位数r =n -k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n种可能位置,则要求21r n -≥或211rk r -≥++(1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3.若取r=3,则n=k +r=7。

我们用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表1 校正子和错码位置的关系则由表1可得监督关系式: S 1=a 6⊕a 5⊕a 4⊕a 2 (2)S 2=a 6⊕a 5⊕a 3⊕a 1(3)S 3=a 6⊕a 4⊕a 3⊕a 0(4) 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s 、2s 、3s的值为0(表示编成的码组中应无错码){a 6⊕a 5⊕a 4⊕a 2=0a 6⊕a 5⊕a 3⊕a 1=0a 6⊕a 4⊕a 3⊕a 0=0(5)式(5)经过移项运算,接触监督位{a 2=a 6⊕a 5⊕a 4a 1=a 6⊕a 5⊕a 3a 0=a 6⊕a 4⊕a 3(6)式(5)其等价形式为: [1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1][ a 6a 5a 4a 3a 2a 1a 0]=[000](7)式(6)还可以简记为H ∙A T =0T 或A ∙H T =0 (8)其中H =[1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1]A =[a 6a 5a 4a 3a 2a 1a 0]P =[1 1 1 01 1 0 11 0 1 1]I r =[1 0 00 1 00 0 1]0=[0 0 0]所以有H =[PI r ](9)式(6)等价于[a 2a 1a a ]=[a 6 a 5 a 4 a 3][1 1 11 1 01 0 10 1 1]=[a 6 a 5 a 4a 3]Q (10)其中Q 为P 的转置,即T Q P (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。

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

实验报告书------汉明码设计与实现汉明码编译码器系统班级: 姓名: 学号:一.实验原理描述1.1汉明码编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。

若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++(1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。

若取r=3,则n=k+r=7。

我们用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。

表1 校正子和错码位置的关系则由表1可得监督关系式: S 1=a 6⊕a 5⊕a 4⊕a 2 (2)S 2=a 6⊕a 5⊕a 3⊕a 1(3)S 3=a 6⊕a 4⊕a 3⊕a 0(4) 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。

监督位2a 、1a 、0a 应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s 、2s 、3s的值为0(表示编成的码组中应无错码){a 6⊕a 5⊕a 4⊕a 2=0a 6⊕a 5⊕a 3⊕a 1=0a 6⊕a 4⊕a 3⊕a 0=0(5)式(5)经过移项运算,接触监督位{a 2=a 6⊕a 5⊕a 4a 1=a 6⊕a 5⊕a 3a 0=a 6⊕a 4⊕a 3(6)式(5)其等价形式为: [1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1][ a 6a 5a 4a 3a 2a 1a 0]=[000](7)式(6)还可以简记为H ∙A T =0T 或A ∙H T =0 (8)其中H =[1 1 1 0 1 0 01 1 0 1 0 1 01 0 1 1 0 0 1]A =[a 6a 5a 4a 3a 2a 1a 0]P =[1 1 1 01 1 0 11 0 1 1]I r =[1 0 00 1 00 0 1]0=[0 0 0]所以有H =[PI r ](9)式(6)等价于[a 2a 1a a ]=[a 6 a 5 a 4 a 3][1 1 11 1 01 0 10 1 1]=[a 6 a 5 a 4a 3]Q (10)其中Q 为P 的转置,即T Q P (11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q 就产生出监督位。

我们将Q 的左边加上一个k ×k 阶单位方阵,就构成一个矩阵GG =[I k Q ]=[1 0 0 0 1 1 10 1 0 0 1 1 00 0 1 0 1 0 10 0 0 1 0 1 1](12)G 称为生成矩阵,因为由它可以产生整个码组,即有 [a 6a 5a 4a 3a 2a 1a 0]=[a 6a 5a 4a 3]∙G (13)或者A =[a 6a 5 a 4 a 3]∙G (14) 式(13)即汉明码的编码原理 1.2汉明码纠错原理当数字信号编码成汉明码形式(本文中即A )后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。

一般来说接收码组与A 不一定相同。

若设接收码组为一n 列的行矩阵B ,即B =[a 6a 5a 4a 3a 2a 1a 0](15)则发送码组和接收码组之差为 B −A =E (16)E 就是传输中产生的错码行矩阵E =[e 6e 5e 4e 3e 2e 1e 0](17)若e i =0,表示接收码元无错误,若e i =1,则表示该接收码元有错。

式(16)可改写成B =A +E (18)若E=0,即接收码组无错,则B A E A =+=,将它代人式(8),该是仍成立,即有B ∙H T =0(19)当接收码组有错时,E ≠0,将B 带入式(8)后,该式不一定成立。

在未超过检错能力时,式(19)不成立。

假设此时式(19)的右端为S,即B ∙H T =S (20)将B =A +E 代入式(20),可得S =(A +E )H T +E ∙H T由式(8)可知,所以S =E ∙H T (21)此处S 与前面的123s s s 有着一一对应关系,则S 能代表错码位置。

因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。

二.实验仪器1.通信原理综合实验系统一台2.电脑-MATlab 一台三.实验目的1.熟悉掌握汉明码的原理与实现2.观察了解汉明距离的作用3.通过已经知道的汉明码监督方程为传输的编码进行纠错也验证四.实验内容1.汉明码编码规则汉明码是1950年由美国贝尔实验室提出来的,是第一个设计用来纠正一位误码的线性分组码,汉明码及其变型已广泛应用于数字通信和数据存储系统中作为差错控制码。

汉明码的原始设计思想来自于前面讨论的奇偶监督码。

通过一个例子来说明如何具体构造这些监督关系式。

设分组码 (n,k)中k = 4。

为了纠正一位错码,按汉明不等式可得r≥3,若取r =3,则n = k+r =7。

我们用a6 a5 a4 a3 a2 a1 a0a2=a6 ⊕a5 ⊕a4a1=a6 ⊕a5 ⊕a3a0=a6 ⊕a4 ⊕a32.编码的检验与纠错用S1,S2,S3表示三个监督关系式式中的校正子,监督方程为:S1 =a6 ⊕a5 ⊕a4 ⊕a2S2 =a6 ⊕a5 ⊕a3 ⊕a1S3 =a6 ⊕a4 ⊕a3 ⊕a0则S1,S2,S3的值与错码位置的对应关系可以规定如下表:五.实验要求1.编写7位汉明码的程序,输出汉明码function f=hammingencod(a)G=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1]; a=input('输入信息元序列:');c=mod(a*G,2);disp('编码后序列为:');disp(c);x=.01:.01:4;[m,n]=size([a]'*ones(1,100));y=reshape(([a]'*ones(1,100))',1,m*n);plot(x,y)axis([0 4 0 1.5]);set(gca,'XTick',0:1:4);set(gca,'YTick',0:0.5:1.5);title('hanmingencode')ylabel('value')end输入信息元序列:1101编码后序列为:1 0 0 0 1 1 10 1 0 0 1 1 00 0 1 0 1 0 10 0 0 1 0 1 12.任意输入一个7位编码使用程序判断编码是否正确,如果错误,指出错位并纠正。

function g=hammingdecod(B)H=[1 1 1 0 1 0 0 ;1 1 0 1 0 1 0;1 0 1 1 0 0 1];B=input('输入接收序列B=');S=mod(B*H',2); %计算B的伴随式if S==0disp('接收到的码字无错误。

');E=dec2bin(0,7);endfor i=1:1:7if S==H(:,i)'E=dec2bin(2^(7-i),7); %计算R的错误图样fprintf('错误出现在第%1.0f位\n',i);break;endenda=mod(B-E,2); %计算原发送码序列disp('原发送码字为:');disp(a)x=.01:.01:7;[m,n]=size([a]'*ones(1,100));y=reshape(([a]'*ones(1,100))',1,m*n);[m,n]=size([B]'*ones(1,100));z=reshape(([B]'*ones(1,100))',1,m*n);plot(x,y)hold on;plot(x,z,'--r')axis([0 7 0 1.5]);set(gca,'XTick',0:1:7);set(gca,'YTick',0:0.5:2.5);set(gca,'ZTick',0:0.5:2.5);title('hanmingdecode')xlabel('value')ylabel('value')end输入接受序列为[1 1 0 1 0 1 0] 译码后的仿真图如下:如图上所示测接收到的码子无错误。

如果输入接受序列为[1 1 0 0 01 0]则仿真图:如上图所示,则四位有错误,原发送码子为[1 1 0 1 0 1 0] 如果输入的序列为[1 0 0 0 0 1 0],则仿真图为00.511.5hanmingdecodevaluev a l u e00.511.5hanmingdecodevaluev a l u e00.511.5hanmingdecodevaluev a l u e。

相关文档
最新文档