当前位置:首页 » 编程软件 » 汉明码编译码

汉明码编译码

发布时间: 2022-01-09 06:45:50

① VHDL语言里reset如何用,我在写汉明码编码解码程序,不用使能信号以及reset,还请大侠帮忙指教

reset一般是清零啊初始化的作用,使用时能信号要么用if判断要么就是检测上升沿或者下降沿,reset一般是检测下降沿,因为按钮按下清零,平时不按都是1

② 求关于matlab编写汉明码编码和译码相关的程序,越详细越好。若是文件比较,可以发至邮箱:[email protected]

[email protected] 注意查收:)

③ 试设计有效信息为10位的能纠错一位的海明码的编码和译码方案,并写出有效信息0110111001的海明码

如图

④ 海明校验码的分组原则

在海明码中, 位号数(1、2、3、……、n)为2的权值的那些位,即:
1(2^0)、2(2^1)、4(2^2)、8(2^3)、…2^(r-1)位,作为奇偶校验位,并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。例如: N=11(海明码位数)K=7(数据位数)r=4(校验位) ,相应海明码可表示位号为: 1, 2, 3, 4 ,5 ,6, 7, 8, 9 ,10 ,11,校验位P占第1,2,4,8位,其他位为有效信息位,海明码中的校验位分别标示为P1,P2,P3,P4… Pr ,并被信息位中的一至若干位所校验,其规律是:第i位,由校验位位号之和等于i的那些校验位所校验,如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验,海明码的位号为5,它被P1P3(位号分别为1,4)所校验。归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
设计海明码编码的关键技术,是合理地把每个数据位分配到r个校验组中,以确保能发现码字中任何一位出错;若要实现纠错,还要求能指出是哪一位出错,对出错位求反则得到该位的正确值。例如,当数据位为3位(用D3 D2 D1表示)时,检验位应为4位(用P4 P3 P2 P1表示)。可通过表2.3表示的关系,完成把每个数据位划分在形成不同校验位的偶校验值的逻辑表达式中。
表2.3 校验位与数据位的对应关系
在P1、P2、P3、P4竖列相应行分别填1,
在该4列的低3横行其它位置分别填0,
在最顶横行的每个尚空位置都分别填1。
若只看低3横行,右4竖列的3个bit的组合值分别为十进制的1、2、4、0,则分配 D1 D2 D3列的组合值为3 5 6,保证低3横行各竖列的编码值各不相同。
表中D3 D2 D1为三位数据位,P4 P3 P2 P1为四位校验位。其中低三位中的每一个校验位P3 P2 P1的值,都是用三个数据位中不同的几位通过偶校验运算规则计算出来的。其对应关系是:对Pi(i的取值为1~3),总是用处在Pi取值为1的行中的、用1标记出来的数据位计算该Pi的值。最高一个校验位P4,被称为总校验位,它的值,是通过对全部三个数据位和其它全部校验位(不含P4本身)执行偶校验计算求得的。
形成各校验位的值的过程叫做编码,按刚说明的规则,4个校验位所用的编码方程为:
P4 = D3 D2 D1 P3 P2 P1
P3 = D3 D2
P2 = D3 D1
P1 = D2 D1
由多个数据位和多个校验位组成的一个码字,将作为一个数据单位处理,例如被写入内存或被传送走。之后,在执行内存读操作或在数据接收端,则可以对得到的码字,通过偶校验来检查其合法性,通常称该操作过程为译码,所用的译码方程为:
S4 = P4 D3 D2 D1 P3 P2 P1
S3 = P3 D3 D2
S2 = P2 D3 D1
S1 = P1 D2 D1

⑤ 当7位汉明码的插入错误超过一位时,译码会出现什么现象

当7位汉明码的插入错误超过一位时,译码会出现报警或者密码暂时锁定,无法在短时间内再次输入密码

⑥ 汉明码编译码原理实验指导书怎么写

标题:万用表的的使用
一、实验目的
二、实验原理
三、实验步骤
四、实验数据及分析
五、实验心得体会

基本上一二照抄实验指导书,三指导书没有就按实验操作过程写,四按指导书填入实验数据,自己分析一下误差的原因,五自己吹吹。

编程实现海明码的编码和解码

我在网上面帮你找到以个,可以参考一下

#include <iostream>
#include <fstream>
#include <stdio.h>
#define N 1270
#define K 1200
#define G 70
//#define HAIMING
using namespace std;
int len[N];
int i_2_r(int a) //求一个2^n次方的数的幂
{
int count=0;
if(a==1)
return 0;
while(a>1)
{
a=a/2;
count++;
}
return count;
}
void in_to_Group(int a[],int b,int n) //添加到各组中
{
int i;
for(i=1;i<=n;i++)
if(a[i]==-1)
a[i]=b;
}
int _2_r_gt_k_r(int k,int r) //判断 2^r >= k+r+1
{
int i,s = 1;
for(i = 1;i <= r;i++)
s = 2*s;
if(s >= k+r+1)
return 1;
else
return 0;
}
int is_i_2_r(int i) //判断 i 是否为 2^n 位
{
if(i == 1)
return 1;
if(i%2 != 0)
return 0;
while(i%2 == 0 && i != 1)
i=i/2;
if(i==1)
return 1;
return 0;
}
int int_to_invdec(int a[],int n) //求一个整数的逆序的二进制码
{
int i=1; //以计算校验位号
while(n)
{
a[i++]=n%2;
n/=2;
}
return i-1; //返回位数
}
int count1(int a[],int n) //计算 1 的个数
{
int i,count = 0;
for(i = 1;i <= n;i++)
if(a[i] == 1)
count++;
if(count%2 == 0)
return 1;
return 0;
}
void main()
{
#ifdef HAIMING
freopen("海明码.txt","r",stdin);
#endif
int infor[N],i,k,r,findr = 1;
int group[G][K],g,j; // group 用于分组检测 1 的个数
int a[N],a_l;
printf("\n输入有效信息位位数 k(0=<k<=1200):");
scanf("%d",&k);
i=2;
while(findr) //找所需检测位数 r 的值
{
r=i;
if(_2_r_gt_k_r(k,r))
findr = 0;
i++;
}
printf("\n需添加 %d 位检测位.\n",r);
printf("\n输入信息码:\n");
for(i = 1;i <= k+r;i++)
{
infor[i] = -1;
if(!is_i_2_r(i))
scanf("%d",&infor[i]);
}
printf("\n");
for(i=1;i<=r;i++)
for(j=1;j<=k;j++)
group[i][j]=-1; //***初始化各组为 -1 表示空信息
for(i=1;i<=k;i++)
len[i]=0; //***初始化各组元素个数为 0
printf("海明码(偶校验)为:\n");
for(i=1;i<=k+r;i++) //!!!*从添加检测位后的第 1 位开始进行分组 ( 关键 )
{
a_l=int_to_invdec(a,i); //**将位号转化为逆序的二进制数存入数组 a[] 中,返回数组长度
for(g=1;g<=r;g++) //共分为 r 组
for(j=1;j<=a_l;j++)
if(a[j]==1) //**查转化后 a[] 中为 1 的下标位(如为1则分给第1组,为2则分给第二组等等)
if(g==j) //若分组号与下标位相同,
{
in_to_Group(group[g],infor[i],len[g]);//**将该信息码添加到第 g 小组中
len[g]++; //*第 g 小组长度增 1
break;
}
}
for(i=1;i<=k+r;i++) //******检测各小组中 1 的个数
{if(is_i_2_r(i)&&count1(group[i_2_r(i)+1],len[i_2_r(i)+1]))//如果位号为2^n位即检测位
infor[i]=0; //***且该小组中 1 的个数为偶数,则该检测位上添为 0 用以校验
if(is_i_2_r(i)&&!count1(group[i_2_r(i)+1],len[i_2_r(i)+1]))//如果位号为2^n位即检测位
infor[i]=1; //***且该小组中 1 的个数为奇数,则该检测位上添为 1 用以校验
}
for(i = 1;i <= k+r;i++)
cout<<infor[i]<<" "; //输出编写好的海明码
printf("\n");
}

⑧ 线性分组码的编码和解码

汇编语言早就忘光了!

⑨ 求助定汉明码编译码函数encode和decode函数

$arr=array( '610'=>array( 'id'=>3171, 'num'=>8, 'money'=>1 ), '629'=>array( 'id'=>2486, 'num'=>5, 'money'=>1 ), 'Count'=>13 ); $arr=json_encode($arr); //将数组编码成json格式 $item=addslashes($arr); echo $item.""; //输出你的原本...

热点内容
如何搭建outlook服务器 发布:2024-04-30 10:46:50 浏览:635
美图忘记密码手机如何刷机 发布:2024-04-30 10:45:43 浏览:190
sql字符设置 发布:2024-04-30 10:39:03 浏览:305
androidram 发布:2024-04-30 10:36:06 浏览:280
购买的新车有哪些基本配置 发布:2024-04-30 10:27:32 浏览:324
远程访问摄像头 发布:2024-04-30 10:10:57 浏览:72
贴吧网站源码 发布:2024-04-30 10:10:42 浏览:251
饥荒为什么服务器模组不能用 发布:2024-04-30 10:10:41 浏览:551
c连接数据库的方法 发布:2024-04-30 10:08:05 浏览:589
手机存储与内部存储空间 发布:2024-04-30 10:05:14 浏览:41