You are on page 1of 14

BÀI 4: MÃ NGUỒN RỜI RẠC

I. Chuẩn đầu ra của học phần:


L1: Xác định được giá trị nhị phân đầu ra của mã nguồn cho tín hiệu rời rạc
và tín hiệu liên tục; chuỗi bit mã hóa và kết quả giải mã của các mã kênh
thông dụng; dạng sóng và phổ của tín hiệu khi truyền qua kênh băng cơ sở
và qua kênh băng thông dải; ưu, nhược điểm và ứng dụng của các kỹ thuật
ghép kênh cơ bản.
L2: Xây dựng được sơ đồ khối và phân tích được chức năng, nguyên lý hoạt
động của các khối trong hệ thống truyền thông số
II. Mục tiêu bài học:
Bài học cung cấp kiến thức về mã nguồn cho tín hiệu rời rạc, Sử dụng
phương pháp thống kê tối ưu mã cho nguồn rời rạc. Sau khi học xong bài
học này, sinh viên có thể xác định được giá trị nhị phân đầu ra của mã
nguồn cho tín hiệu rời rạc bằng các phương pháp như Shannon- Fano hay
Huffman
III. Nội dung:

4.4. Mã hóa nguồn rời rạc

Hệ thống thông tin được sử dụng có thể truyền tin tức từ nguồn tin đến nhận tin.
Nguồn tin có rất nhiều dạng khác nhau nhưng có thể phân thành hai loại chính
là nguồn liên tục như nguồn âm thanh, nguồn video... và nguồn rời rạc như
nguồn dữ liệu máy tính.

Trong hệ thống thông tin số, đầu ra của nguồn phải được chuyển thành dạng
thích hợp có thể truyền đi bằng kỹ thuật số. Theo sự phân loại nguồn, ta có hai
kỹ thuật mã hóa nguồn chính là mã hóa nguồn liên tục và mã hóa nguồn rời rạc.
Nội dung mã hóa nguồn liên tục cũng trùng với nội dung số hóa tín hiệu liên tục
đã xét trong chương trước.
Nguồn tin

Nguồn liên tục (continuos Nguồn rời rạc (discrete


source): nguồn âm thanh, source): nguồn dữ liệu từ
video… PC

Mã hóa nguồn liên tục Mã hóa nguồn rời rạc


(continuos source encoding) (discrete source encoding)

Trong phần này ta xét quá trình mã hóa nguồn rời rạc. Nguồn rời rạc là nguồn
sinh ra các ký tự với một quy luật phân bố xác xuất nào đó. Để cho đơn giản, ta
xét trường hợp nguồn không nhớ, các ký tự được sinh ra độc lập với nhau.
Thông thường quy luật phân bố xác xuất sinh ra các ký tự là không đều nên độ
dư của nguồn lớn, entropy của nguồn bé, tốc độ lập tin của nguồn còn xa mới
đạt đến thông lượng kênh. Lúc đó nhiệm vụ vủa mã hoá nguồn rời rạc làm cho
cấu trúc thống kê của nguồn trở nên hợp lý bằng cách tăng entropy của các ký
tự dùng để mã hóa nguồn.

 Mã hóa thống kê: Có tính đến quy luật phân bố xác suất. Xác suất lớn
thì từ mã ngắn và ngược lại

 Mã hóa thống kê tối ưu: Mã hóa sao cho độ dài từ mã trung bình ngắn
nhất

4.4.1 Hiệu suất mã:

Định nghĩa hiệu suất mã là tỷ số giữa entropy của nguồn tin có các ký tự độc lập
và entropy cực đại của nguồn đó:

M
1
H
 p(m) log 2
p ( m)
 .100%  m1
.100%
H max log 2 M

Nếu các ký tự nguồn được mã hóa thành một tập các ký tự mới như hình 3.2 thì
H và Hmax là entropy và entropy cực đại của tập ký tự mới này
Hình 3.2 Chuyển đổi bản tin giữa hai tập ký tự khác nhau

Nếu các ký tự nguồn được mã hóa thành từ mã nhị phân thì có một cách khác để
tính hiệu suất mã:

H H
 .100%  M
.100% (bit/ số nhị phân)
 p(m)l
L
m
m 1

ở đây lm là độ dài của mỗi từ mã nhị phân và L là độ dài từ mã trung bình.

So sánh hai công thức tính hiệu suất mã ở trên, ta rút ra được:

Hmax (bit/ký tự) = L (bit/từ mã)

4.4.2. Mã hóa Shannon - Fano

Các bước lập mã:

B1.Sắp xếp các nguồn tin theo thứ tự xác suất tăng dần hoặc giảm dần

B2. Chia toàn bộ nguồn tin làm 2 nhóm có tổng xác suất xấp xỉ bằng nhau. Gán
cho mỗi nhóm 1 chữ mã là 0, 1.

B3. Lặp lại bước 2 cho đến khi mỗi nhóm chỉ còn 1 ký hiệu

B4. Từ mã tương ứng của mỗi ký hiệu là tổ hợp các chữ mã của mỗi nhóm (từ
trái sang phải)

Ví dụ: Cho nguồn tin X có xác suất phân bố như sau:

X A B C D E F G H

P(xi) 0,25 0,25 0,125 0,125 0,0625 0,0625 0,0625 0,0625

Entropy của nguồn:


H = - (0,25log0,25 + 0,25log0,25 + 0,125log0,125 + 0,125log0,125 +
0,0625log0,0625 + 0,0625log0,0625 + 0,0625log0,0625 + 0,0625log0,0625) =
2,75

Ví dụ:

Hiệu suất nguồn trước khi mã hóa:


2,75
= 100% = 91,7%
3

Kết quả

X A B C D E F G H

Từ mã 00 01 100 101 1100 1101 1110 1111

Độ dài từ mã TB:

L = 2(0,25+0,25) + 3(0,125+0,125) + 4(0,0625+ 0,0625+ 0,0625+ 0,0625) =


2,75
𝟐,𝟕𝟓
Hiệu suất mã:  = 𝟏𝟎𝟎% = 100%
𝟐,𝟕𝟓

Nhận xét:

Ký tự Tần suất

A 30
B 20

C 20

D 13

E 7

F 5

G 3

H 2

1. Mã Shannon-Fano là mã có tính prefix

2. Lớp tin có xác suất xuất hiện lớn thì từ mã dài và ngược lại

3. Mã không duy nhất (do phương pháp lấy tổng xác suất xấp xỉ)

4.4.3 Mã hóa Huffman cơ sở (Basic Huffman Encoding)

Giả sử có một số bản tin được truyền giữa hai máy tính qua mạng PSTN. Các
bản tin chỉ chứa các ký tự từ A đến H. Theo kết quả thống kê cho thấy xác suất
xuất hiện của các ký tự như sau:

Ký tự A B C D E F G H
Xác suất 0,1 0,18 0,4 0,05 0,06 0,1 0,07 0,04

Entropy của nguồn là:

8
1
H   p (m) log 2  2,55 (bit/ ký tự)
m 1 p ( m)

Entropy cực đại của nguồn là:


H  log 2 8  3 (bit/ ký tự)

Như vậy hiệu suất của nguồn là:

2,55
 .100%  85%
3

Nếu mỗi ký tự trên được mã hóa thành 3 bít thì hiệu suất mã hóa sẽ giữ nguyên
không thay đổi là 85%.

Mã hóa Huffman thực hiện mã hóa sử dụng ít bit hơn cho các ký tự có xác suất
xuất hiện cao vì chúng được truyền đi thường xuyên hơn và ngược lại, nhiều bit
cho các ký tự có xác suất xuất hiện thấp nên có thể tăng được hiệu suất.

Thuật toán mã hóa Huffman gồm các bước sau:

(1) Sắp xếp các ký tự theo thứ tự xác suất giảm dần.

(2) Gán cho hai ký tự có xác suất xuất hiện thấp với hai nhánh (0) và (1) của cây
mã.

Từ hai ký tự có xác suất thấp nhất giảm còn một ký tự với xác suất bằng tổng
của hai xác suất.

(3) Lặp lại từ bước (1) cho đến khi chỉ còn lại một ký tự duy nhất với xác suất là
1.

(4) Duyệt cây mã để tìm ra từ mã tương ứng với từng ký tự của nguồn.

Hình 3.6a. trình bày ví dụ về mã hóa Huffman cho nguồn tin trên. Nếu ta quy
ước gán cho nhánh đi ra từ ký hiệu có xác suất cao hơn là 1 và nhánh kia là 0,
nhánh 0 sẽ ở bên trái, nhánh 1 vẽ ở bên phải thì ta có thể vẽ lại cây mã Huffman
vừa lập được như hình 3.6b.
(a) Tạo cây mã (b) Cây mã

Gọi trọng số của các nút trong cây mã là xác suất của nút đó, ta nhận thấy cây
mã Huffman vừa lập là cây mã tối ưu theo nghĩa thứ tự trọng số của các nút
tăng dần theo chiều từ dưới lên trên và trái sang phải.

Nhìn vào cây mã, ta thấy kết quả mã hóa Huffman của nguồn tin trên như sau:

Ký tự C B A F G E D H
Từ mã 0 110 100 1111 1011 1010 11101 11100
Độ dài từ mã trung bình bây giờ là:

L = 1(0,4) + 3(0,18 + 0,10) + 4(0,10 + 0,07 + 0,06) + 5(0,05 + 0,04) = 2,61


(bit/ký tự)

Vậy độ lợi mã hóa là:

H 2,55
 .100%  .100%  97,7%
L 2,61

Qua ví dụ trên ta thấy hiệu suất 85% (khi không mã hóa) đã tăng lên đến 97,7%
(khi mã hóa Huffman).

Ta thấy rằng phương pháp mã hóa Huffman không phải chỉ cho một bộ mã duy
nhất, vì ta có thể ký hiệu bất cứ nhánh nào là 0 hay 1 chứ không bắt buộc. Tất
nhiên, khi đó hiệu suất mã hóa sẽ không thay đổi, nhưng thứ tự trọng số của các
nút sẽ thay đổi.

Do từ mã Huffman khác nhau đối với các tập ký tự khác nhau nên để bên thu có
thể giải mã được thì yêu cầu bên thu phải biết các từ mã liên quan đến dữ liệu
phát. Có thể thực hiện điều này bằng hai cách. Hoặc là bên phát gởi bảng mã
trước khi phát dữ liệu, hoặc là bên thu phải có sẵn bảng mã.

Phương pháp đầu có ưu điểm là có thể mã hóa nén thích nghi, vì từ mã có thể
thay đổi cho phù hợp với kiểu dữ liệu truyền, nhưng có khuyết điểm là phải mất
thời gian truyền bảng mã mới mỗi khi gởi kiểu dữ liệu mới.

4.4.4. Mã hóa Huffman động (Dynamic Huffman encoding)

Khác với mã hóa Huffman cơ sở, phương pháp mã hóa Huffman động không
yêu cầu bên phát và bên thu biết bảng mã liên quan đến dữ liệu phát, cũng
không yêu cầu kết quả thống kê xác suất xuất hiện ký tự của nguồn tin. Phương
pháp mã hóa Huffman động cho phép cả bên phát (mã hóa) và bên thu (giải mã)
lập cây Huffman – và dẫn đến bảng mã - một cách động khi ký tự được
phát/thu.

Với phương pháp này, nếu ký tự phát đang có mặt trong cây mã tương ứng sẽ
được xác định giống mã Huffman cơ sở và gởi theo cách thông thường. Nếu ký
tự chưa có mặt trong cây mã - nghĩa là xuất hiện lần đầu, thì nó sẽ được gởi đi
theo dạng không nén. Bộ mã hóa bên phát cập nhật vào cây mã Huffman bằng
cách tăng số lần xuất hiện (tăng trọng số) của ký tự phát hoặc là đưa thêm ký tự
mới vào cây.

Ngoài ra, để cho bên thu có thể xác định được ký tự mà nó nhận, mỗi từ mã phát
được mã hóa theo cùng cách của bên thu. Bên thu tiến hành các thay đổi giống
như bên phát và có một bảng sao riêng của cây. Nhờ đó bên thu sẽ xác định
đúng từ mã tiếp theo được nhận tùy vào cấu trúc cây mới cập nhật.

Cả bên phát và bên thu đều bắt đầu với một cây mã chỉ có một nhánh trái –
nhánh 0 – và một nút lá rỗng (empty leaf node) – nút lá có 0 lần xuất hiện.

Để mô tả chi tiết phương pháp này, ta xét ví dụ bản tin truyền đi bắt đầu bằng
dãy ký tự:

A B C D C D C...

Hình 3.7 minh họa các bước lập cây mã Huffman.

Trước tiên, cả bên phát và bên thu cùng thành lập cây ban đầu (một nhánh 0 và
một nút lá rổng e0).

Tiếp theo, bộ mã hóa bắt đầu đọc ký tự đầu tiên trong bản tin - A – và gán ‘A’
và nhánh phải – nhánh 1 đầu tiên. Vì đây là lần xuất hiện đầu tiên của ‘A’ nên
nó được truyền đi không nén (dạng ASCII). Vì cây bên giải mã đang rỗng nên
nó nhận ra dãy bít nhận được là một ký tự không nén và nó sắp xếp ký tự này
vào trong cây theo cách giống bên mã hóa (Hình 3.7a).
Với mỗi ký tự tiếp theo, trước hết bộ mã hóa kiểm tra xem ký tự đó đã có mặt
trong cây mã chưa. Nếu có rồi thì bộ mã hóa sẽ gởi từ mã theo cách thông
thường giống như mã Huffman cơ sở, từ mã được xác định bởi vị trí của ký tự
trong cây. Nếu chưa có thì bộ mã hóa gởi từ mã hiện hành cho nút lá rỗng -
được xác định bởi vị trí của nút lá rỗng trong cây, theo sau là từ mã không nén
của ký tự. Vì bộ giải mã cũng có cây mã y như vậy nên nó có thể suy ra từ dòng
bit nhận được đâu là mã có nén, đâu là nút lá rỗng với ký tự không nén theo sau.

Bộ mã hóa và giải mã cập nhật vào cây mã dựa trên ký tự cuối cùng được phát/
thu. Nếu đây là ký tự mới thì nút lá rỗng đang tồn tại trong cây được thay bằng
một nút nhánh mới, nút là rỗng được gán bên nhánh 0 và ký tự bên nhánh 1
(hình 3.7 b).

Nếu ký tự đã có mặt trong cây thì số lần xuất hiện của nút là tương ứng tăng dần
1. Ví dụ hình 3.7 e, bộ mã hóa kiểm tra và thấy ký tự ‘C’ đã có mặt trong cây
mã nên nó truyền đi từ mã tương ứng là ‘01’, trọng số của nút C từ 1 tăng lên
thành 2. Các ví dụ tương tự khác ở trong hình 3.7 f và g.

Lúc này, vị trị của nút lá có thể không còn là vị trí tối ưu nữa. Vì vậy, mỗi lần
cập nhật cây – tức lá thêm ký tự mới hoặc tăng số lần xuất hiện của ký tự sẵn có
– cả bộ mã hóa và giải mã đều phải kiểm tra và nếu cần thì phải thay đổi vị trí
hiện tại của tất cả các nút trong cây.

Để đảm bảo cả bộ mã hóa và giải mã đều làm việc này theo cùng một cách,
trước hết cả bộ mã hóa và giải mã phải liệt kê các trọng số của các nút theo
chiều từ trái sang phải, từ dưới lên trên bắt đầu từ nút lá rỗng. Nếu thứ tự sắp
xếp tăng dần thì không thay đổi cây, nếu không đúng thì phải thay đổi cấu trúc
của cây bằng cách thay đổi vị trí của các nút trong cây. Khi đưa nút lá đến vị trí
mới phải kèm theo toàn bộ các nhánh và nút con của chúng (hình 3.7 c đến 3.7
g).
Các bước lập cây mã Huffman động

Qua ví dụ trên ta thấy nếu truyền dãy ký tự A B C D C D C... bằng mã ASCII


thì mất 49 bit, trong khi dùng mã Huffman động thì mất 41 bit. Băng truyền dẫn
chỉ được tiết kiệm bắt đầu từ khi có ký tự lặp lại. Thực tế, các file văn bản luôn
có sự lặp lại ký tự, và mã Huffman động được ứng dụng trong nhiều ứng dụng
truyền thông, như là nén dữ liệu trong modem V.32.

You might also like