Hamming碼實驗_第1頁
Hamming碼實驗_第2頁
Hamming碼實驗_第3頁
Hamming碼實驗_第4頁
Hamming碼實驗_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、云南大學數學與統(tǒng)計學實驗教學中心實驗報告課程名稱:計算機網絡實驗學期:2012-2013學年第二學期成績:指導教師: 陸正福學生姓名:盧富毓 學生學號:20101910072實驗名稱:Hamming碼實驗實驗要求: 必做實驗學時:4學時實驗編號: No.9實驗日期:2013/5/28完成日期:2013/6/3學院:數學與統(tǒng)計學院專業(yè) : 信息與計算科學年級: 2010級 一、實驗目的:通過實驗掌握Hamming碼編碼實驗的構造算法,以及其重要思想。二、實驗內容: Hamming碼編碼實驗1.熟悉Hamming碼的設計原理;2.編程實現(15,11,3)Hamming的編碼和譯碼算法;3.驗證H

2、amming碼的檢錯能力和糾錯能力三、實驗環(huán)境Win7、Eclipse四、實驗過程(請學生認真填寫):實驗過程、結果以及相應的解釋:1. 預備知識A、 與其他的錯誤校驗碼類似,漢明碼也利用了奇偶校驗位的概念,通過在數據位后面增加一些比特,可以驗證數據的有效性。利用一個以上的校驗位,漢明碼不僅可以驗證數據是否有效,還能在數據出錯的情況下指明錯誤位置。B、 Hamming碼中主要的是生成矩陣以及校驗矩陣。通過得到這二者,我們就可以對需要的字符串進行編碼、檢錯、糾錯、譯碼的工作了。C、 具體如下:2. 實驗過程A、 原理分析:這里主要對如何糾錯進行簡要分析:編碼所對應的碼字為C = 0110011。

3、若接收到R = 0110001 。有H*x=0可以判斷其存在錯誤。Erro=1 1 0。用Erro中的元素與校驗矩陣中的每一列表,與其中一列全部相同。則帶便這一列有錯。找到第六位有錯。異或運算后得到R = 0110011。當然這里需要注意的是Hamming 碼只能糾正一位錯誤。當出現兩位錯誤時,將無法糾錯后得到正確結果。好了,廢話不多說了。先把代碼貼上來。B、 具體代碼如下: /* HammingCode的實驗 * *1.熟悉Hamming碼的設計原理; *2.編程實現(15,11,3)Hamming的編碼和譯碼算法; *3.驗證Hamming碼的檢錯能力和糾錯能力。 */package Ha

4、mmingCode;import java.util.Scanner;/* * author 盧富毓 * see 實現HammingCode的生成、檢錯、糾錯 * */public class HammingCode int H;int G;/* * param start * () Hamming碼的具體實現 * param HMC * 類的實例 */public void start(HammingCode HMC) int send = new int11;int receive = new int15;/ step1 15,11Hamming 碼的校驗矩陣生成H = HMC.Creat

5、eCheckArray();/ step1 15,11Hamming 碼的生成矩陣生成G = HMC.GenerateArray();/ 輸入四個字符進行編碼System.out.print("請輸入需編碼的字符(0、1)11個:");Scanner sc = new Scanner(System.in);for (int i = 0; i < 11; i+) sendi = sc.nextInt();sc.reset();HMC.encode(G, send); / 編碼System.out.println("n-");/ 輸入四個字符檢測編碼S

6、ystem.out.print("請輸入需譯碼字符(0、1)15個:");for (int i = 0; i < 15; i+) receivei = sc.nextInt();HMC.checkAndDecode(H, receive);/ 檢錯以及譯碼/ sc.close();/* * param ToBinary * 校驗矩陣 十進制數轉為二進制矩陣 * return 返回校驗矩陣 */public int CreateCheckArray() / 二進制 校驗矩陣int m = 1;int l = 1;int b = new int416;for (int i

7、 = 0; i < b.length; i+) for (int j = 1; j < bi.length; j+) bij = 0;for (int i = 1; i < 16; i+) / 二進制m = i;if (i != 1 && i != 2 && i != 4 && i != 8) for (int j = 3; j >= 0; j-) bjl = m % 2;m = m / 2;if (m < 0) break;l+;for (int j = 0; j < 4; j+) / 二進制for (int

8、 i = 12; i < 16; i+) if (i - 12 = j) bji = 1;System.out.println("(15,11)HammingCode校驗矩陣生成:");System.out.println("-");for (int i = 0; i < 4; i+) for (int j = 1; j < 16; j+) System.out.print(bij + " ");System.out.println();System.out.println("-");return

9、 b;/* * param Generate * 生成矩陣 十進制數轉為二進制矩陣 * return */public int GenerateArray() / 生成矩陣 增加還沒有做int g = new int412;int l = 1;int m = 1;for (int i = 1; i < 16; i+) / 二進制m = i;if (i != 1 && i != 2 && i != 4 && i != 8) for (int j = 3; j >= 0; j-) gjl = m % 2;m = m / 2;if (m &

10、lt; 0) break;l+;/ G 生成int G = new int1115;for (int i = 0; i < G.length; i+) for (int j = 0; j < Gi.length; j+) if (j = i) Gij = 1; else Gij = 0;for (int j = 11; j < 15; j+) for (int i = 0; i < G.length; i+) Gij = gj - 11i + 1;System.out.println("(15,11)HammingCode生成矩陣:");System

11、.out.println("-");for (int i = 0; i < 11; i+) for (int j = 0; j < 15; j+) System.out.print(Gij + " ");System.out.println();System.out.println("-");return G;/* * param encode * 用生成矩陣編碼 * param G * 代表生成矩陣 * param send * 輸入的字符諸位 1、0 等 * return */public int encode(int

12、 G, int send) / 利用生成矩陣 編碼int newArray = new intG1.length; / 得到X*G的一個矩陣for (int i = 0; i < newArray.length; i+) newArrayi = 0;for (int j = 0; j < G.length; j+)newArrayi += sendj * Gji;if (newArrayi & 1) = 1) newArrayi = 1; else newArrayi = 0;System.out.print("(15,11)HammingCode的編碼:&quo

13、t;);for (int i = 0; i < newArray.length; i+) System.out.print(newArrayi + " ");return newArray;/* * * param H * 校驗矩陣錯誤 * param receive * 收到的信息 * return 返回海明碼的譯碼 */public int checkAndDecode(int H, int receive) / 檢測錯誤以及糾正錯誤int e = new intH.length; / H*x得到int flag = 0;for (int i = 0; i <

14、; e.length; i+) / 得到Hx的一個矩陣ei = 0;for (int j = 0; j < receive.length; j+) ei = ei (receivej & Hij + 1);/ 檢測編碼是否有錯 H*x=0System.out.print("H*x為:");for (int i = 0; i < e.length; i+) System.out.print(ei + " ");System.out.println();for (int i = 0; i < e.length; i+) if (ei

15、 != 0) flag = -1;break;if (flag = -1) / 代表有錯 flag 得到位錯的下標flag = 0;int k = 0;for (int i = e.length - 1; i >= 0; i-) flag += Math.pow(2, i) * ek;k+;System.out.print("接收的數據第" + flag + "位有錯:");for (int i = 0; i < receive.length; i+) System.out.print(receivei);System.out.println

16、();/ 進行糾錯flag = flag - 1;receiveflag = receiveflag 1;System.out.print("接收的數據糾錯后:");for (int i = 0; i < receive.length; i+) System.out.print(receivei); else / System.out.println();System.out.print("接收正確,數據為:");for (int i = 0; i < receive.length; i+) System.out.print(receivei

17、);System.out.println();System.out.print("(15,11)HammingCode譯碼為:");for (int i = 0; i < 11; i+) System.out.print(receivei + " ");System.out.println();return e;public static void main(String args) HammingCode HMC = new HammingCode();HMC.start(HMC);結果如下:校驗矩陣和生成矩陣結果如圖:當輸入正確與接收相同時結果如圖:當收到結果有錯的時候(其中錯誤為非校驗位)結果如圖:當收到結果有錯的時候(其中錯誤為校驗位)結果如圖:/進過三種不同的形式的檢驗,得到編寫的15,11,3海明碼的算法正確。五、實驗總結1遇到的問題及分析:遇到問題:首先還是在矩

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論