今天上課,老師讓我們用matlab進行漢明碼編碼解碼的實現,之前上通訊原理課程的時候老師順帶提過一句,現在已然是記不太清了,所以上網搜尋了一下關於漢明碼的原理。
漢明碼(hamming code),是在電信領域的一種線性除錯碼,以發明者理查德·衛斯里·漢明的名字命名。。。。。。
簡單來說,漢明碼就是乙個可以校驗和糾錯的編碼。
首先記住乙個公式:
我們現在以k=4,n=7的例項來說明漢明碼的編碼原理:
a=[1,0,1,0,1,1,1]
因為n+k=11,我們要編碼出來的是乙個長度為11的陣列,其中四位是校驗碼
根據k值的不同,我們可以吧原始陣列分為k組,將原始陣列的下標分別轉換為二進位制
第一組的分別是末位為1的下標:***1
第二組的分別是次末位為1的下標:xx1x
第三組的分別是次位為1的下標:x1xx
第四組的分別是首位為1的下標:1***
所以第一組p1的下標分別為:3,5,7,9,11
第二組:3,6,7,10,11
第三組:5,6,7
第四組:9,10,11
每乙個校驗位的數值是組內每乙個元素數值的奇偶數
對於解碼:
假設接收到長度為11的陣列進行解碼,先取出校驗碼,然後用每個組的元素進行奇偶的校驗,如果錯誤,則該組的乙個校驗狀態轉為錯誤,記為1,通過對四個組進行奇偶校驗,用每個組的奇偶校驗值可以得出乙個陣列,用該陣列即可算出資料錯誤位置
假設傳遞時最後一位發生錯誤,則1,3,4組受到影響,校驗陣列為[1,0,1,1],通過計算2^3+2^1+2^0=11為錯誤位置
以下為**:
clc
a=[1,0,1,0,1,1,1];
ah1=hamingcode(a,4);
h1h2=hamingdecode(h1,4);
h2
function h = hamingcode(a,k)
n=length(a(:));
z=1;
j=1;
h=zeros(1,n+k);
for i=1:n+k %將輸入陣列寫入全零矩陣待用,且跳過驗證
if i==2^(z-1)
z=z+1;
continue
else
h(i)=a(j);
j=j+1;
endendif k==4
h(1)=rem(h(3)+h(5)+h(7)+h(9)+h(11),2);
h(2)=rem(h(3)+h(6)+h(7)+h(10)+h(11),2);
h(4)=rem(h(5)+h(6)+h(7),2);
h(8)=rem(h(9)+h(10)+h(11),2);
else if k==3
h(1)=rem(h(3)+h(5)+h(7),2);
h(2)=rem(h(3)+h(6)+h(7),2);
h(4)=rem(h(5)+h(6)+h(7),2);
else if k==2
h(1)=rem(h(3),2);
h(2)=rem(h(3),2);
endend
end
function h = hamingdecode(a,k)
%a=[1,0,1,1,0,1,0,1,1,1,0];
n=length(a(:)); %求輸入陣列長度
h=zeros(1,n-k); %解碼和解碼的n含義不同
check=zeros(1,k); %四個組的驗證陣列
che=0;
if k==4
if a(1)~=rem(a(3)+a(5)+a(7)+a(9)+a(11),2); %四個組,如果有任意乙個組驗證不通過,則相應陣列的變數變為1,標誌位che變成1,方便後面修改
check(1)=1
che=1
else if a(2)~=rem(a(3)+a(6)+a(7)+a(10)+a(11),2);
check(2)=1
che=1;
else if a(4)~=rem(a(5)+a(6)+a(7),2);
check(4)=1
che=1;
else if a(8)~=rem(a(9)+a(10)+a(11),2);
check(8)=1
che=1;
endend
endend
j=1;
z=1;
if che==1 %假如驗證生效
s= 2^(3*check(1))+2^(2*check(2))+2^(1*check(3))+2^(check(4)*0)
a(s)=1-a(s)
endfor i=1:n %跳過驗證碼,將陣列寫入輸出陣列
if i==2^(z-1)
z=z+1;
continue
else
h(j)=a(i);
j=j+1;
endend
end
本人對於漢明碼理解借鑑了其他博主文章,傳送門: 漢明碼詳細講解
漢明碼,是r.hamming與1940年於貝爾實驗室提出的。1.奇偶校驗碼 奇偶校驗碼。假設傳輸資訊位為k n 1位,表示為a1,an 1,加上一位奇偶校驗位 冗餘位 a0,構成乙個n位的碼字a0 an 1,在接收端校驗時,可按照關係式 s a0 a1 a2 an 1來計算。若s 0,則無錯,若s ...
計網筆記 海明碼(漢明碼)
海明碼是可以發現雙位元錯誤,並可以糾正單位元錯誤的編碼方案。一般來講,檢錯編碼不一定具有糾錯能力,但是糾錯編碼具有檢錯能力 其工作流程可以分為以下四個步驟 1 確定校驗碼位數r 2 確定校驗碼和資料的位置 3 求出校驗碼的值 4 檢錯並糾錯。在以下的工作流程中,我們要傳送的資料d 101101.我們...
海明碼(漢明碼)的工作機制
一 海明碼的形成方式 1 首先海明碼是由資訊位和校驗位組成的 2 資訊位校驗位的關係 校驗位的位數r 資訊位的位數i 2 r 1 i r 3 校驗位的位置是2的整數次方 如 1 2 4 8 4 海明碼位數分組 因為海明碼其實是分組的奇偶校驗碼,所以有個分組的概念 1 1 3 5 7 2 2 3 6 ...