Tìm hiểu về mã sửa sai. Sử dụng bit chẵn lẻ trong mã Hamming để sửa sai.
Trang 1BÁ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 20, 21, 22, 23, 24, 25, 26 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í 2k 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:
Trang 2- Như đã nói ở trên, các bit ở vị trí thứ 20, 21, 22, 23 ( mã hóa 8 bit) được dùng làm bit chẵn lẻ (Pi)
- 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.(di)
- 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
Thông tin sau
khi mã hoá là
* 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:
(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ị P1, P2, P3, P4 như sau: (cộng modul 2)
Trang 3P1= d3 + d5 + d7 + d9 + d11
P2= d3 + d6 + d7 + d10 +d11
P3= d5 + d6 + d7 + d12
P4= d9 + d10 + d11 + d12
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ị Pi’ như đối với Pi rồi thực hiện so sánh Nếu Pi’ khác Pi 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
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;
}
}
}
Trang 4+ 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