Tìm hiểu về mã sửa sai. Sử dụng bit chẵn lẻ trong mã Hamming để sửa sai.
BÁO CÁO BÀI TẬP CSLTTT Đề bài: Tìm hiểu về mã sủa sai. Bài làm: Sử dụng bit chẵn lẻ trong mã Hamming để sửa sai. Thuật toán cho việc sử dụng bit chẵn lẻ trong 'mã Hamming' thông thường được xác định như sau: 1. Tất cả các bit ở vị trí là các số mũ của 2 (powers of two) được dùng làm bit chẵn lẻ. (các vị trí như 1, 2, 4, 8, 16, 32, 64 v.v. hay nói cách khác 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 v.v.) 2. Tất cả các vị trí bit khác được dùng cho dữ liệu sẽ được mã hóa. (các vị trí 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, etc.) 3. Mỗi bit chẵn lẻ tính giá trị chẵn lẻ cho một số bit trong từ mã (code word). Vị trí của bit chẵn lẻ quyết định chuỗi các bit mà nó luân phiên kiểm tra và bỏ qua (skips). o Vị trí 1 (n=1): bỏ qua 0 bit(n-1), kiểm 1 bit(n), bỏ qua 1 bit(n), kiểm 1 bit(n), bỏ qua 1 bit(n), v.v. o Vị trí 2(n=2): bỏ qua 1 bit(n-1), kiểm 2 bit(n), bỏ qua 2 bit(n), kiểm 2 bit(n), bỏ qua 2 bit(n), v.v. o Vị trí 4(n=4): bỏ qua 3 bit(n-1), kiểm 4 bit(n), bỏ qua 4 bit(n), kiểm 4 bit(n), bỏ qua 4 bit(n), v.v. o Vị trí 8(n=8): bỏ qua 7 bit(n-1), kiểm 8 bit(n), bỏ qua 8 bit(n), kiểm 8 bit(n), bỏ qua 8 bit(n), v.v. o Vị trí 16(n=16): bỏ qua 15 bit(n-1), kiểm 16 bit(n), bỏ qua 16 bit(n), kiểm 16 bit(n), bỏ qua 16 bit(n), v.v. o Vị trí 32(n=32): bỏ qua 31 bit(n-1), kiểm 32 bit(n), bỏ qua 32 bit(n), kiểm 32 bit(n), bỏ qua 32 bit(n), v.v. o và tiếp tục như trên. Nói cách khác, bit chẵn lẻ tại vị trí 2 k kiểm các bit ở các vị trí bit k có giá trị bằng 1 (2) (the bit is set). Nội dung chương trình: đưa thông tin lên kênh truyền, làm cho tín hiệu bị nhiễu và sửa sai ( Thực hiện với 8 bit thông tin ). Mã hóa thông tin: 1 - Như đã nói ở trên, các bit ở vị trí thứ 2 0 , 2 1 , 2 2 , 2 3 ( mã hóa 8 bit) được dùng làm bit chẵn lẻ. (P i ) - Tất cả các vị trí bit khác sẽ được dùng cho mã hóa dữ liệu, các vị trí 3, 5, 6, 7, 9, 10, 11, 12.(d i ) - Quy luật kiểm tra và bỏ qua như trên. Từ đó ta có bảng sau: ví dụ với 8 bit nhập vào là 11010011 1 2 3 4 5 6 7 8 9 10 11 12 P 1 P 2 d 1 P 3 d 2 d 3 d 4 P 4 d 5 d 6 d 7 d 8 số nhập vào 1 1 0 1 0 0 1 1 Dòng 1 0 1 1 1 0 1 Dòng 2 1 1 0 1 0 1 Dòng 3 1 1 0 1 1 Dòng 4 0 0 0 1 1 Thông tin sau khi mã hoá là 0 1 1 1 1 0 1 0 0 0 1 1 * Mã hóa đối với trường hợp cụ thể trên: - Dùng mảng 2 chiều. Ban đầu gán giá trị 8 bit vừa nhập vào các vị trí 3, 5, 6, 7, 9, 10, 11, 12 như sau: MH[0][3]=NP[7]; MH[0][5]=NP[6]; MH[0][6]=NP[5]; MH[0] [7]=NP[4]; H[0][9]=NP[3]; MH[0][10]=NP[2]; MH[0] [11]=NP[1]; H[0][12]=NP[0]; (với NP[i] là số nhị phân vừa nhập vào). - Sau đó thực hiện tính các giá trị P 1 , P 2 , P 3 , P 4 như sau: (cộng modul 2) 2 P 1 = d 3 + d 5 + d 7 + d 9 + d 11 P 2 = d 3 + d 6 + d 7 + d 10 +d 11 P 3 = d 5 + d 6 + d 7 + d 12 P 4 = d 9 + d 10 + d 11 + d 12 Như vậy ta đã được chuỗi mã hoá là: 011110100011 Sử dụng hàm Random(12) để chọn một giá trị ngẫu nhiên trong khoảng từ 1 đến 12 và làm sai ở giá trị đó: * Giải mã từ tín hiệu sai vừa nhận được để tìm ra vị trí sai: Thực hiện tính lại các giá trị P i ’ như đối với P i rồi thực hiện so sánh. Nếu P i ’ khác P i thì thông tin bị sai ở dòng đó. Sẽ xảy ra trường hợp các dòng sai như sau. + Nếu dòng 1 sai, các dòng khác đúng sai ở bit thứ 1. + Nếu dòng 2 sai, các dòng khác đúng sai ở bit thứ 2. + Nếu dòng 3 sai, các dòng khác đúng sai ở bit thứ 4. + Nếu dòng 1 sai, các dòng khác đúng sai ở bit thứ 8. + Nếu dòng 1, dòng 2 sai, các dòng khác đúng sai ở bit thứ 3. 3 t=random(12)+1; for(j=1;j<13;j++) { if(j==t) { if(MH[0][j]==1) { MH[0][j]=0; } else { MH[0][j]=1; } } } + Nếu dòng 1, dòng 3 sai, các dòng khác đúng sai ở bit thứ 5. + Nếu dòng 1, dòng 4 sai, các dòng khác đúng sai ở bit thứ 9. + Nếu dòng 2, dòng 3 sai, các dòng khác đúng sai ở bit thứ 6. + Nếu dòng 2, dòng 4 sai, các dòng khác đúng sai ở bit thứ 10. + Nếu dòng 3, dòng 4 sai, các dòng khác đúng sai ở bit thứ 12. + Nếu dòng 1, dòng 2, dòng 3 sai, các dòng khác đúng sai ở bit thứ 7. + Nếu dòng 1, dòng 2, dòng 4 sai, các dòng khác đúng sai ở bit thứ 11. Khi đã xác định được bít sai ta chỉ cần đảo ngược bit là được. 4 . chương trình: đưa thông tin lên kênh truyền, làm cho tín hiệu bị nhiễu và sửa sai ( Thực hiện với 8 bit thông tin ). Mã hóa thông tin: 1 - Như đã nói ở. BÁO CÁO BÀI TẬP CSLTTT Đề bài: Tìm hiểu về mã sủa sai. Bài làm: Sử dụng bit chẵn