Tải bản đầy đủ (.doc) (4 trang)

Báo cáo cơ sở lý thuyết truyền tin

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (105.62 KB, 4 trang )

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

×