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

Bài tập lớn môn KĨ THUẬT TRUYỀN SỐ LIỆU CÁC LOẠI MÃ CHẴN LẺ

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 (273.13 KB, 12 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN TỬ
KĨ THUẬT TRUYỀN SỐ LIỆU
ĐỀ TÀI: CÁC LOẠI MÃ CHẴN LẺ
GVHD: Phạm Thị Quỳnh Trang.
SVTH: Vũ Đức Nghiêm
Lê Văn Quân
Phạm Tiến Bách
Lớp: Điện tử 3-K3
Lời nói đầu
Kỹ thuật truyền số liệu là mảng kiến thức cơ sở trong ngành điện tử viễn
thông và công nghệ thông tin, cung cấp cho sinh viên những kiến thức căn
bản và thiết thực nhất về những phương pháp truyền thông tin cũng như xử
lý số tín hiệu khi truyền. Sau khi được học môn Kỹ thuật truyền số liệu
chúng em xin nghiên cứu về đề tài : Các loại mã chẵn lẻ.
Nội dung báo cáo:
 Giới thiệu về lý thuyết mã hóa.
 Tìm hiểu mã chẵn lẻ.
 Mô phỏng.
I. Mã hóa.
- Mã hóa là một ngành của toán học và khoa học điện toán nhằm giải quyết tình
trạng lỗi dễ xảy ra trong quá trình truyền thông số liệu trên các kênh truyền có
độ nhiễu cao, dùng các phương pháp phát hiện và sửa lỗi tinh xảo khiến phần
lớn các lỗi xảy ra có thể được chỉnh sửa. Nó còn xử lý những đặc tính của mã
và do vậy phù hợp với những ứng dụng cụ thể.
Có hai loại mã hóa:
1. Mã hóa nguồn ( mã hóa entropi).
2. Mã hóa kênh truyền ( sửa lỗi ở phía trước).
Cái đầu tiên chúng ta nói đến là mã hóa dùng nguồn. Ý định của phương pháp
này là nén dữ liệu từ chính nguồn của nó, trước khi truyền đi, giúp cho việc


truyền thông có hiệu quả hơn. Chúng ta chứng kiến thói quen này hằng ngày
trên Internet, nhất là trong cách dùng "zip" nén dữ liệu để giảm lượng dữ liệu
phải truyền, giảm nhẹ gánh nặng cho mạng lưới truyền thông, đồng thời thu nhỏ
cỡ tập tin. Cái thứ hai là mã hóa trên kênh truyền. Bằng việc cộng thêm những
bit mới vào trong dữ liệu được truyền, còn gọi là bit chẵn lẻ (parity bits), kỹ
thuật này giúp cho việc truyền thông tín hiệu chính xác hơn trong môi trường
nhiễu loạn của kênh truyền thông. Có nhiều chương trình ứng dụng, mà người
dùng trung bình không để ý đến, sử dụng mã hóa trên kênh truyền. Kỹ
thuật Reed-Solomon được dùng để nhằm sửa lỗi do những vết xước và bụi trên
bề mặt đĩa âm nhạc CD thông thường. Trong ứng dụng này, kênh truyền thông
lại chính là bản thân cái đĩa CD. Điện thoại di động "Cell phones" cũng dùng kỹ
thuật mã hóa có hiệu ứng cao (powerful coding technique) để sửa các lỗi trong
việc truyền sóng radiô ở tần số cao bị yếu mờ và bị nhiễu. Modem xử lý số liệu,
việc truyền thông qua đường điện thoại, và đương nhiên ngay cả chính NASA,
tất cả đều sử dụng kỹ thuật mã hóa trên kênh truyền hiệu ứng để truyền những
bit số liệu qua đường dây.
1. Mã hóa dung nguồn:
Mục đích của mã hóa dùng nguồn là lấy dữ liệu nguồn và thu nhỏ chúng lại.
Nguyên lý:
Entrôpi của nguồn là một đo đạc về tin tức. Căn bản mà nói, mã của nguồn
được dùng để loại bỏ những phần thừa, không cần thiết còn tồn tại trong nguồn,
để lại phần nguồn với số lượng bit ít hơn, nhưng với nhiều tin tức hơn.
Mỗi loại mã hóa nguồn sử dụng một kỹ thuật khác nhau hòng đạt được giới hạn
entrôpi của nguồn. , trong đó H(x) là entrôpi của nguồn (tần số
bit), và C(x) là tần số bit sau khi số liệu đã được nén. Cụ thể là, không có
phương pháp mã hóa nguồn nào có thể tốt hơn giới hạn entrôpi của ký hiệu (the
entropy limit of the symbol).
2. Mã hóa kênh truyền:
Mục đích của lý thuyết Mã hóa trên kênh truyền (channel encoding theory) là
tìm những mã có thể truyền thông nhanh chóng, chứa đựng nhiều mã ký (code

word) hợp lệ và có thể sửa lỗi (error correction) hoặc ít nhất phát hiện các lỗi
xảy ra (error detection). Các mục đích trên không phụ thuộc vào nhau, và mỗi
loại mã có công dụng tối ưu cho một ứng dụng riêng biệt. Những đặc tính mà
mỗi loại mã này cần còn tuỳ thuộc nhiều vào xác suất lỗi xảy ra trong quá trình
truyền thông. Đối với một đĩa CD thông thường, lỗi trong âm thanh xảy ra chủ
yếu là do bụi và những vết xước trên mặt đĩa. Vì thế, các mã được lồng vào với
nhau. Dữ liệu được phân bổ trên toàn bộ mặt đĩa. Tuy không được tốt cho lắm,
song một mã tái diễn đơn giản có thể được dùng làm một ví dụ dễ hiểu. Chẳng
hạn, chúng ta lấy một khối số liệu bit (đại diện cho âm thanh) và truyền gửi
chúng ba lần liền. Bên máy thu, chúng ta kiểm tra cả ba phần lặp lại ở trên, từng
bit từng bit một, rồi lấy cái nào có số bầu cao nhất. Điểm trái khoáy ở đây là,
chúng ta không chỉ truyền gửi các bit theo thứ tự. Chúng ta lồng nó vào với
nhau. Khối dữ liệu này, trước tiên, được chia ra làm 4 khối nhỏ. Sau đó chúng
ta gửi một bit ở khối đầu tiên, tiếp theo một bit ở khối thứ hai v.v tuần tự qua
các khối. Việc này được lặp đi lặp lại ba lần để phân bổ số liệu ra trên bề mặt
đĩa. Trong ngữ cảnh của mã tái diễn đơn giản ở trên, việc làm này hình như
không được hiệu quả cho lắm. Song hiện nay có những mã có hiệu ứng cao, rất
phù hợp với việc sửa lỗi xảy ra đột ngột do một vết xước hay một vết bụi, khi
dùng kỹ thuật lồng số liệu nói trên.
Mỗi mã thường chỉ thích hợp cho một ứng dụng nhất định. Viễn thông trong vũ
trụ (deep space) bị giới hạn bởi nhiễu nhiệt (thermal noise) trong thiết bị thu.
Hiện trạng này không xảy ra một cách đột phát bất thường, song xảy ra theo
một chu trình tiếp diễn. Tương tự như vậy, modem với dải tần hẹp bị hạn chế vì
nhiễu âm tồn tại trong mạng lưới điện thoại. Những nhiễu âm này có thể được
biểu hiện rõ hơn bằng một mô hình âm tạp tiếp diễn. Điện thoại di động "Cell
phones" hay có vấn đề do sự suy sóng nhanh chóng xảy ra. Tần số cao được
dùng có thể gây ra sự suy sóng tín hiệu một cách nhanh chóng (rapid fading),
ngay cả khi máy nhận chỉ dời chỗ vài phân Anh (inches). Một lần nữa, người ta
hiện đã có một loại thuộc hạng Mã hóa trên kênh truyền được thiết kế để đối
đầu với tình trạng suy sóng.

Từ "Lý thuyết mã hóa đại số" ám chỉ để một chi nhánh của lý thuyết mã hóa
trên kênh truyền, trong đó đặc tính của mã được biểu hiện bằng các đại số và
dựa vào đó mà nghiên cứu sâu hơn.
Lý thuyết mã hóa đại số được chia ra làm 2 loại mã chính:
a) Mã khối tuyến tính (Linear block codes)
Mã khối tuyến tính mang tính năng tuyến tính (linearity), chẳng hạn tổng của
hai mã ký nào đấy lại chính là một mã ký; và chúng được ứng dụng vào các bit
của nguồn trên từng khối một; cái tên mã khối tuyến tính là vì vậy (linear block
codes). Có những khối mã bất tuyến tính, song khó mà chứng minh được rằng
một mã nào đó là một mã tốt nếu mã ấy không có đặc tính này.
Có nhiều loại mã khối tuyến tính, như:
 Mã tuần hoàn (Cyclic codes) (Mã Hamming là một bộ phận nhỏ
(subset) của mã tuần hoàn)
 Mã tái diễn (Repetition codes)
 Mã chẵn lẻ (Parity codes)
 Mã Reed-solomon (Reed Solomon codes)
 Mã BCH (BCH code)
 Mã Reed-muller
 Mã hoàn hảo (Perfect codes)
b) Mã kết hợp (Convolutional codes)
Mã kết hợp (Convolutional codes) được sử dụng trong các modem dải tần âm
(voiceband modems) (V.32, V.17, V.34) và trong các điện thoại di động GSM,
cũng như trong các thiết bị truyền thông của quân đội vũ trang và trong các
thiết bị truyền thông với vệ tinh.
II. Mã chẵn lẻ.
- Có nhiều phương pháp mã hóa dữ liệu để phát hiện lỗi và sửa lỗi khi truyền
dữ liệu tử nơi này sang nơi khác. Phương pháp đơn giản nhất là thêm một
bit vào dữ liệu được truyền đi sao cho số chữ số 1 trong dữ liệu luôn là chẵn
hoặc lẻ. Bit thêm vào đó được gọi là bit chẵn/lẻ. Để thực hiện được việc
truyền dữ liệu theo kiểu đưa thêm bit chẵn, lẻ vào dữ liệu chúng ta phải:

-Xây dựng sơ đồ tạo được bit chẵn, lẻ để thêm vào n bit dữ liệu.
-Xây dựng sơ đồ kiểm tra hệ xem đó là hệ chẵn hay lẻ với (n+1) bit ở
đầu vào (n bit dữ liệu, 1 bit chẵn, lẻ).
- Dữ liệu dạng số khi được lưu trữ, xử lý hay truyền từ máy này qua máy
khác có thể bị lỗi. Như khi truyền dữ liệu đi xa qua môi trường điện thoại,
dây cáp, không gian có thể bị ảnh hưởng của nhiệt độ, nhiễu đường dây,
điện từ… hay do lâu ngày các bộ xử lý, bộ chuyển đổi có một sai sót nhỏ sẽ
làm thay đổi dữ liệu.
• Ví dụ : trong một khối dữ liệu có chữ A mã ASCII là 1000001 sẽ bị
sai thành 1000000, bit sai có thể là bất cứ 1 bit nào khác. Mặc dù
xác suất làm sai chỉ 1 bit trong cả khối dữ liệu là rất nhỏ (trung bình
khoảng 100000 bit mới có một bit sai) nhưng trong nhiều trường
hợp đòi hỏi phải thật chính xác hay giảm hết mức những sai sót nhỏ
này. Có nhiều mạch có thể phát hiện sai và sửa lỗi, ở đây xin nói tới
mạch tạo kiểm parity.
- Có 2 dạng mạch chính là parity chẵn và lẻ. Cả hai đều được sử dụng.
Với parity chẵn : dữ liệu trước khi truyền đi được đếm tổng số bit
Nếu tổng chẵn, bit parity 0 được thêm vào trước mỗi khối dữ liệu truyền.
Nếu tổng lẻ thì bit parity 1 được thêm vào (để nó chẵn).
Ở đầu nhận dữ liệu, mạch sẽ kiểm tra từng khối dữ liệu nhận được xem có
tổng số bit là chẵn hay không. Nếu không thì tức là đã có 1 bit nào đó trong
khối dữ liệu bị sai, ngược lại là mạch truyền đúng.
Với parity lẻ thì ngược lại khối dữ liệu phải được làm lẻ trước khi truyền.
• Ví dụ : truyền 1 khối dữ liệu 4 bit 0101 có sử dụng mạch tạo kiểm
parity để dò sai được minh họa như hình dưới đây:
Mạch tạo kiểm parity.
Giả sử mạch parity chẵn được dùng. Nhận thấy rằng tổng số bit truyền là 3
(lẻ) nên bit parity 1 được thêm vào cho chẵn. Như vậy, dữ liệu truyền đi sẽ
có 5 bit là 11101
Mạch tạo parity trên sử dụng 3 cổng XOR để kiểm tra số bit chẵn hay lẻ,

còn bên nhận mạch kiểm parity dùng 4 cổng XOR để dò sai, nếu dữ liệu
truyền đúng thì ra Q = 0, nếu truyền sai thì ra Q = 1. Khi này, mạch nhận có
thể truyền về tín hiệu báo truyền sai cho máy gửi để nó truyền lại khối dữ
liệu bị lỗi này.
Nhận thấy rằng nếu khối dữ liệu truyền bị sai đến 2 bit (xác suất này là rất
rất nhỏ) hay bit parity truyền sai thì mạch parity mất tác dụng.
- Các mạch xử lý điều khiển hay truyền dữ liệu thường có sẵn khối tạo kiểm
và thậm chí có thể sửa lỗi luôn. Còn khi dùng mạch rời thì IC 74180 và họ
của nó luôn là thông dụng nhất.
- Ứng dụng:
• Do đặc tính đơn giản của nó, bit chẵn lẻ được dùng trong rất nhiều
ứng dụng phần cứng, những nơi mà việc tái diễn các thao tác khi có
trục trặc xảy ra là một việc có thể thực hiện được, hoặc những nơi
mà việc phát hiện lỗi đơn thuần là một việc có lợi. Lấy ví dụ, mạch
nối SCSI (SCSI bus) dùng bit chẵn lẻ để phát hiện lỗi trong truyền
thông, và rất nhiều các phần lưu trữ trong bộ nhớ các lệnh vi xử lý
(microprocessor instruction cache) cũng dùng bit chẵn lẻ để bảo trợ
hoạt động của nó nữa. Do các dữ liệu trong I-cache chỉ là một bản
sao của bộ nhớ chính (main memory), nội dung của nó có thể được
xóa đi, nạp lại nếu dữ liệu ở trong chẳng may bị thoái hóa
(corrupted).
• Trong truyền thông dữ liệu nối tiếp (serial data transmission), dạng
thức dữ liệu được dùng phổ thông nhất là dạng thức 7 bit, với một
bit chẵn lẻ dùng quy luật số chẵn, một Start bit và một hoặc hai Stop
bit để đánh dấu/đồng bộ điểm bắt đầu cũng như kết thúc một byte
dữ liệu trong chuỗi bit trên đường truyền. Dạng thức này thích ứng
hầu hết các dạng thức 7-bit ký tự ASCII dưới hình thức byte 8-bit.
Một byte dữ liệu trên đường truyền nối tiếp sẽ gồm 01 Start bit (bắt
đầu), 7 bit dữ liệu, một parity bit và 01 Stop bit (kết thúc). Byte là
một hình thức tiện lợi để biểu đạt dữ liệu. Những dạng thức khác

cũng có thể thực hiện được, như dạng thức 8 bit dữ liệu cộng với
một bit chẵn lẻ có thể dùng để chuyên chở tất cả các giá trị byte 8-
bit.
• Trong ngữ cảnh của truyền thông nối tiếp (serial communication),
bit chẵn lẻ thường được phát sinh và kiểm tra bởi phần cứng giao
thức - chẳng hạn như UART - và khi thu nhận, CPU có thể sử dụng
kết quả nhận được (và hệ điều hành nữa) thông qua bit báo tình hình
(status bit) trong thanh ghi của phần cứng giao thức. Việc khôi phục
lại sau khi tình trạng lỗi xảy ra thường được thi hành bằng cách tái
truyền dữ liệu, và chi tiết của việc này thường là do phần mềm phụ
trách (ví dụ dùng các thường trình nhập/xuất (I/O routine) của hệ
điều hành).
III.Mô phỏng Vb:
Phần giao diện Vb:
Code:
Dim x As Boolean
Dim cd2, cd1, i, d As Integer
Dim st As String
Private Sub Command1_Click() ' tao ma chan
Text3.Text = " "
st = Text1.Text
cd1 = Len(st)
d = 0
For i = 1 To cd1
If Mid(st, i, 1) = "1" Then
d = d + 1
End If
Next
If d Mod 2 = 0 Then
st = 0 & st

Else: st = 1 & st
End If
Text2.Text = st
x = True
End Sub
Private Sub Command2_Click() ' tao ma le
Text3.Text = " "
st = Text1.Text
cd1 = Len(st)
d = 0
For i = 1 To cd1
If Mid(st, i, 1) = "1" Then
d = d + 1
End If
Next
If d Mod 2 = 0 Then
st = 1 & st
Else: st = 0 & st
End If
Text2.Text = st
x = False
End Sub
Private Sub Command3_Click() ' tao loi
If Mid(st, Len(st), 1) = "1" Then
st = Mid(st, 1, Len(st) - 1) & 0
Else: st = Mid(st, 1, Len(st) - 1) & 1
End If
Text3.Text = st
End Sub
Private Sub Command4_Click() ' giu nguyen

st = Text2.Text
Text3.Text = st
End Sub
Private Sub Command5_Click() 'kiem tra
cd2 = Len(st)
d = 0
For i = 1 To cd2
If Mid(st, i, 1) = "1" Then
d = d + 1
End If
Next
If x = True Then 'true ma chan
If d Mod 2 = 0 Then
MsgBox "Truyen Dung", vbOKOnly, "Ket Qua"
Else: MsgBox "Truyen Sai", vbOKOnly, "Thong Bao"
End If
Else 'false ma le
If d Mod 2 = 0 Then
MsgBox "Truyen Sai", vbOKOnly, "Ket Qua"
Else: MsgBox "Truyen Dung", vbOKOnly, "Thong Bao"
End If
End If
End Sub
Private Sub Command6_Click()
End
End Sub

×