導航:首頁 > 源碼編譯 > 漢明碼編解碼

漢明碼編解碼

發布時間:2022-01-20 19:01:29

1. 線性分組碼的編碼和解碼

匯編語言早就忘光了!

2. 試設計有效信息為10位的能糾錯一位的海明碼的編碼和解碼方案,並寫出有效信息0110111001的海明碼

如圖

3. 求助定漢明碼編譯碼函數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.""; //輸出你的原本...

4. 漢明碼編解碼原理實驗指導書怎麼寫

標題:萬用表的的使用
一、實驗目的
二、實驗原理
三、實驗步驟
四、實驗數據及分析
五、實驗心得體會

基本上一二照抄實驗指導書,三指導書沒有就按實驗操作過程寫,四按指導書填入實驗數據,自己分析一下誤差的原因,五自己吹吹。

5. 當7位漢明碼的插入錯誤超過一位時,解碼會出現什麼現象

當7位漢明碼的插入錯誤超過一位時,解碼會出現報警或者密碼暫時鎖定,無法在短時間內再次輸入密碼

6. 編程實現海明碼的編碼和解碼

我在網上面幫你找到以個,可以參考一下

#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");
}

7. 海明校驗碼的分組原則

在海明碼中, 位號數(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

8. VHDL語言里reset如何用,我在寫漢明碼編碼解碼程序,不用使能信號以及reset,還請大俠幫忙指教

reset一般是清零啊初始化的作用,使用時能信號要麼用if判斷要麼就是檢測上升沿或者下降沿,reset一般是檢測下降沿,因為按鈕按下清零,平時不按都是1

9. 求關於matlab編寫漢明碼編碼和解碼相關的程序,越詳細越好。若是文件比較,可以發至郵箱:[email protected]

[email protected] 注意查收:)

閱讀全文

與漢明碼編解碼相關的資料

熱點內容
單片機下載口叫什麼 瀏覽:186
程序員的道 瀏覽:924
雲伺服器不實名違法嗎 瀏覽:556
怎樣查看文件夾圖片是否重復 瀏覽:993
文件怎麼導成pdf文件 瀏覽:805
打開sql表的命令 瀏覽:101
安卓手機如何面部支付 瀏覽:37
天元數學app為什麼登錄不上去 瀏覽:822
明日之後為什麼有些伺服器是四個字 瀏覽:102
安卓系統l1是什麼意思 瀏覽:24
伺服器一直崩應該用什麼指令 瀏覽:922
cm202貼片機編程 瀏覽:729
php構造函數帶參數 瀏覽:178
解壓電波歌曲大全 瀏覽:345
為啥文件夾移到桌面成word了 瀏覽:859
命令符的安全模式是哪個鍵 瀏覽:760
編程中學 瀏覽:957
單片機求助 瀏覽:995
ug加工側面排銑毛坯怎麼編程 瀏覽:273
程序員有關的介紹 瀏覽:738