Tải bản đầy đủ (.pdf) (80 trang)

Các kỹ thuật nén dữ liệu

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 (2.13 MB, 80 trang )

..

LỜI CẢM ƠN
Đầu tiên cho phép tôi đƣợc gửi lời cảm ơn chân thành tới PGS.TS. Phạm
Ngọc Nam. Thầy đã trực tiếp hƣớng dẫn khoa học, chỉ bảo tận tình và tạo điều kiện
tốt nhất giúp tôi trong suốt quá trình nghiên cứu và hồn thiện luận văn.
Để đạt đƣợc thành cơng trong học tập và hồn thành luận văn tơi xin bày tỏ
lịng biết ơn tới các thầy cơ tại Viện Điện tử Viễn thông – Đại học Bách Khoa Hà
Nội, cảm ơn các bạn trong tập thể lớp 11BKTĐT.KH đã chia sẻ, động viên và giúp
đỡ tôi trong thời gian học tập.
Cuối cùng, tơi xin bày tỏ lịng biết ơn sâu sắc, tình yêu thƣơng tới gia đình và
ngƣời thân – nguồn động viên quan trọng về vật chất và tinh thần giúp tơi vƣợt qua
khó khăn để hồn thành khóa học.
Hà Nội, ngày tháng
Học viên

Vũ Huy Thế

năm 2013


LỜI CAM ĐOAN
Với mục đích học tập, nghiên cứu nâng cao trình độ chun mơn nên tơi đã
thực hiện đề tài luận văn một cách nghiêm túc và hoàn toàn trung thực.
Trong luận văn, tơi có sử dụng tài liệu tham khảo của một số tác giả mà tơi
đã có nêu trong danh mục tài liệu tham khảo ở cuối luận văn.
Tôi xin cam đoan và chịu trách nhiệm về nội dung, sự trung thực trong luận
văn tốt nghiệp Thạc sĩ của mình.
Hà Nội, ngày tháng năm 2013
Học viên


Vũ Huy Thế

2


MỤC LỤC
LỜI CẢM ƠN ................................................................................................................. 1
LỜI CAM ĐOAN ........................................................................................................... 2
MỤC LỤC ....................................................................................................................... 3
DANH MỤC CÁC CHỮ VIẾT TẮT ............................................................................. 6
DANH MỤC CÁC BẢNG.............................................................................................. 7
DANH MỤC CÁC HÌNH ............................................................................................... 8
MỞ ĐẦU ....................................................................................................................... 10
CHƢƠNG I. TỔNG QUAN VỀ NÉN DỮ LIỆU ......................................................... 12
1.1. Tổng quan về nén dữ liệu ....................................................................................... 12
1.2. Các kỹ thuật nén dữ liệu......................................................................................... 13
1.2.1. Nén không tổn hao (Lossless Compression) ............................................13
1.2.2. Nén tổn hao (Lossy Compression) ...........................................................13
1.3. Một số khái niệm cơ bản về nén dữ liệu ................................................................ 14
1.3.1. Tỷ số nén ..................................................................................................14
1.3.2. Độ dƣ thừa dữ liệu ....................................................................................14
1.3.3. Độ dài trung bình của từ mã ....................................................................15
1.3.4. Các yếu tố của kỹ thuật nén dữ liệu .........................................................16
1.4. Kỹ thuật nén dữ liệu ............................................................................................... 16
1.4.1. Tổng quan .................................................................................................16
1.4.2. Mô hình ....................................................................................................17
1.4.3. Mã hóa ......................................................................................................20
CHƢƠNG II. CẤU TRÚC FPGA ................................................................................ 26

3



2.1. Tổng quan về FPGA............................................................................................... 26
2.1.1. Giới thiệu công nghệ mạch tổ hợp FPGA ................................................26
2.1.2. Kiến trúc cơ bản của FPGA......................................................................27
2.1.3. Các bƣớc thiết kế hệ thống nhúng trên FPGA của Xilinx........................30
2.1.4. Phần mềm thiết kế hệ thống nhúng ..........................................................32
2.2. Cấu trúc bitstream .................................................................................................. 35
2.3. Cấu hình từng phần ................................................................................................ 36
2.3.1. Giới thiệu về cấu hình từng phần .............................................................36
2.3.2. Quy trình cấu hình từng phần cho FPGA của Xilinx ...............................38
CHƢƠNG III. CÁC THUẬT TOÁN NÉN BITSTREAM .......................................... 40
3.1. Giới thiệu ................................................................................................................ 40
3.1. Nén Bitmask ........................................................................................................... 41
3.2. Thuật toán nén bitstream sử dụng mã Run Length ................................................ 47
3.3. Thuật toán nén bitstream sử dụng mã Huffman ..................................................... 48
3.4. Nén dựa trên Lempel-Ziv ....................................................................................... 49
3.5. Nén Wildcarded (Wildcarded Compression) ......................................................... 52
3.6. Mã hóa số học (Arithmetic coding) ....................................................................... 54
3.7. Nén bitstream trong BCuPR................................................................................... 55
3.7.1. Tổng quan về BCuPR ...............................................................................55
3.7.2. Nén bitstream trong BCuPR .....................................................................57
CHƢƠNG IV. ĐÁNH GIÁ THUẬT TOÁN NÉN BITSTREAM SỬ DỤNG RLE ... 60
4.1. Tổng quan hệ thống đánh giá ................................................................................. 60
4.2. Xây dựng, cài đặt chƣơng trình nén RLE trên máy tính ........................................ 61

4


4.2.1. Chƣơng trình nén ......................................................................................61

4.2.2. Cài đặt và đánh giá chƣơng trình .............................................................65
4.3. Xây dựng, cài đặt chƣơng trình giải nén trên KIT FPGA ...................................... 66
4.31. Sơ đồ khối hệ thống giải nén. ....................................................................66
4.3.2. Xây dựng, cấu hình phần cứng .................................................................68
4.3.3. Xây dựng chƣơng trình giải nén ...............................................................70
KẾT LUẬN ................................................................................................................... 74
TÀI LIỆU THAM KHẢO ............................................................................................. 76
PHỤ LỤC ...................................................................................................................... 77

5


DANH MỤC CÁC CHỮ VIẾT TẮT
Từ viết tắt
FPGA

Từ đầy đủ

Ý nghĩa

Field-Programmable Gate Array

Vi mạch tích hợp các mảng
cổng có thể lập trình đƣợc

IP-core

Là các lõi thiết kế của nhà

Intellectual Property-core


sản xuất hoặc bên thứ ba
cung cấp, thƣờng ngƣời dùng
phải trả tiền
BCuPR

Bitstream Compression using Partial Kỹ thuật nén bitstream sử
dụng cấu hình từng phần của

Reconfiguration

FPGA
FDR

Thanh ghi đầu vào khung dữ

Frame Data input Register

liệu của các FPGA
MFW

Multipe Frame Write

Ghi đa khung

PR

Partial Reconfiguration

Cấu hình từng phần


CLB

Configurable Logic Block

Khối logic có thể cấu hình.
Đây là phần tử cơ bản của
một FPGA

HDL

Hardware Description Language

6

Ngôn ngữ mô tả phần cứng


DANH MỤC CÁC BẢNG

Bảng 2.1: Bảng mô tả các File đầu vào/ ra của quá trình cấu hình từng phần..........38
Bảng 3.1: Chi phí kèm theo khi sử dụng các bitmask ...............................................45
Bảng 4.1: Mơ tả thiết kế giao diện chƣơng trình nén................................................64
Bảng 4.2: Thời gian giải nén trên KIT ......................................................................72

7


DANH MỤC CÁC HÌNH
Hình 1.1: Cấu trúc của bộ nén khơng tổn hao. .............................................................. 17

Hình 1.2: Mã hố theo mơ hình thống kê thích ứng [2]................................................ 19
Hình 1.3: Giải mã theo mơ hình thống kê thích ứng [2] ............................................... 19
Hình 2.1: Cấu trúc của FPGA ....................................................................................... 27
Hình 2.2: Cấu trúc của Slice ......................................................................................... 28
Hình 2.3: Minh họa bảng LUT ...................................................................................... 28
Hình 2.4: Minh họa các Flip-Flop ................................................................................. 29
Hình 2.5: Các bƣớc thiết kế hệ nhúng trên FPGA của hãng Xilinx ............................. 30
Hình 2.6: Cơng cụ tổng hợp mạch ISE Project Navigator ............................................ 33
Hình 2.7: Nhập đầu vào thiết kế FPGA ....................................................................... 33
Hình 2.8: Xây dựng phần cứng hệ thống nhúng ........................................................... 34
Hình 2.9: Tạo mới và nhập một khối chức năng mới vào hệ thống nhúng ................. 34
Hình 2.10: Phát triển phần mềm cho hệ thống nhúng ................................................... 35
Hình 2.11: Tiền đề cơ bản của cấu hình từng phần ...................................................... 37
Hình 2.12: Sơ đồ quá trình thực hiện cấu hình từng phần cho FPGA [7] .................... 38
Hình 3.1: Định dạng cho kỹ thuật nén dựa trên từ điển ................................................ 42
Hình 3.2: Ví dụ về nén từ điển ...................................................................................... 42
Hình 3.3: Ví dụ về nén dựa trên bitmask ...................................................................... 43
Hình 3.4: Định dạng của nén bitsmask ......................................................................... 43
Hình 3.5: Sơ đồ khối giải nén bitmask .......................................................................... 46
Hình 3.6: Một ví dụ về nén sử dụng RLE ..................................................................... 48
Hình 3.7: Ví dụ nén cửa sổ trƣợt LZ77 ......................................................................... 50

8


Hình 3.8: Mơ hình phần cứng cho nén LZ77. ............................................................... 52
Hình 3.9: Ví dụ về nén liên khung bằng cách sử dụng FDR cố thể lập địa chỉ. ........... 53
Hình 3.10: Hình ảnh tổng quan về nén Bitstream sử dụng cấu hình lại từng phần ...... 55
Hình 3.11: So sánh hai trình tự ghi ............................................................................... 58
Hình 4.1: Sơ đồ khối hệ thống ...................................................................................... 60

Hình 4.2: Lƣu đồ chƣơng trình chính nén RLE trên máy tính ...................................... 62
Hình 4.3: Lƣu đồ thuật tốn RLE.................................................................................. 63
Hình 4.4: Giao diện chƣơng trình nén trên máy tính .................................................... 64
Hình 4.5: Mối quan hệ tỉ số nén với các file bitstream kích thƣớc khác nhau ............. 65
Hình 4.6: Mối quan hệ giữa tỉ số nén và số lƣợng bít trên mẫu.................................... 66
Hình 4.7: Sơ đồ khối hệ thống giải nén ........................................................................ 67
Hình 4.8: Tạo dự án XPS mới ....................................................................................... 68
Hình 4.9: Chọn thiết bị .................................................................................................. 68
Hình 4.10: Các ngoại vi của Vi xử lý lõi mềm ............................................................. 69
Hình 4.11: Giao diện bus của phần cứng đã tạo ........................................................... 69
Hình 4.12: Hệ thống phần cứng giải nén ...................................................................... 70
Hình 4.13: Mơi trƣờng làm việc Xilinx SDK ............................................................... 70
Hình 4.14: Thuật tốn chƣơng trình giải nén. ............................................................... 71
Hình 4.15: Nạp chƣơng trình xuống KIT FPGA .......................................................... 71
Hình 4.16: Một kết quả thực hiện chƣơng trình ............................................................ 72
Hình 4.17: Biểu đồ kết quả giải nén trên KIT FPGA ................................................... 73

9


MỞ ĐẦU
Trong những năm gần đây, Field-Programmable Gate Array (FPGA) đang
đƣợc sử dụng rộng rãi trong các hệ thống cấu hình lại. FGPA đƣợc cấu hình nhờ các
bitstream đƣợc tải lên từ bộ nhớ. Việc quan trọng của nén bitstream là sử dụng ít bộ
nhớ, tăng tốc độ cấu hình hệ thống. Nó cải thiện băng thơng và giảm thời gian cấu
hình. Phần lớn các kỹ thuật nén tập trung vào khai thác sự dƣ thừa để nén nhiều
bitstream nhƣng chúng khơng tƣơng thích với việc giải nén thời gian thực. Các kỹ
thuật khác tập trung vào giải nén nhƣng có thỏa hiệp trong hiệu quả nén. Đó là một
thách thức lớn trong việc thiết kế kỹ thuật nén có hiệu quả trong việc giảm kích
thƣớc, trong đó vẫn giữ đƣợc chi phí cho giải nén là nhỏ nhất.

FPGA chứa thơng tin cấu hình trong các bộ nhớ, các bộ nhớ thƣờng bị giới
hạn về dung lƣợng và băng thông. Bộ nhớ lƣu trữ thơng tin cấu hình trở thành một
hệ số trong việc xác định số lõi IP (Intellectual Property Core) mà hệ thống có thể
đƣợc cấu hình và độ trễ trong việc cấu hình lại. Các thuật tốn nén bitstream sẽ giải
quyết vấn đề bộ nhớ bằng cách giảm kích thƣớc bitstream và tăng tốc độ giải nén
bằng việc tăng tốc độ giải mã thông qua các bộ giải mã logic đơn giản. Các phần
cứng giải nén sẽ giải mã và truyền các bits đã giải nén tới các CLB (Configurable
Logic Block) trên FPGA
Xuất phát từ các vấn đề nêu trên, tôi đã chọn và thực hiện đề tài “Nghiên cứu
các thuật toán nén bitstream của FPGA”. Với mong muốn sẽ đƣa ra các gợi ý về
thuật toán nén bitstream tốt, từ đó làm giảm chi phí tăng hiệu quả khi sử dụng
FPGA.
Bố cục của luận văn bao gồm các chƣơng sau:
 Chƣơng I. Tổng quan về nén dữ liệu
o Trình bày tổng quan về nén dữ liệu, các khái niệm cơ bản của nén dữ
liệu, phân loại nén dữ liệu, các loại mã nén dữ liệu thƣờng dùng. Qua
đó chúng ta hiểu thêm về vai trị và chức năng của bài toán nén dữ
liệu.

10


 Chƣơng II. Cấu trúc FPGA.
o Trong chƣơng II, luận văn sẽ trình bày tổng quan về FPGA, cấu trúc
bitstream, phƣơng pháp cấu hình từng phần cho FPGA. Đây sẽ là cơ
sở để chúng ta hiểu thêm về bài toán nén bitstream. Bởi lẽ, khơng có
thuật tốn nén nào mà lại tốt với tất cả các kiểu dữ liệu
 Chƣơng III. Các thuật toán nén bitstream.
o Trong chƣơng III, luận văn sẽ trình bày về các thuật tốn nén
Bitstream đã đƣợc đề xuất bởi các tác giả trên thế giới. Qua đó chúng

ta sẽ có một cái nhìn tổng qt hơn về nén Bitstream.
 Chƣơng IV. Đánh giá thuật toán nén bitstream sử dụng RLE
o Sau khi nghiên cứu cấu trúc bitstream, phƣơng thức cấu hình từng
phần của FPGA, và các thuật tốn nén bitstream. Trên cơ sở đó, trong
chƣơng IV, luận văn sẽ trình bày về việc xây dựng hệ thống đánh giá
thuật toán nén bitstream sử dụng mã RLE. Thuật toán này đƣợc chọn
để đánh giá bởi trong cấu trúc của bitstream có nhiều điểm phù hợp
với ƣu điểm của RLE để có tỉ số nén tốt. Một điểm mới là quá trình
giải nén sẽ thực hiện trên nền hệ nhúng của FPGA.

11


CHƢƠNG I. TỔNG QUAN VỀ NÉN DỮ LIỆU
Chƣơng này sẽ trình bày tổng quan về nén dữ liệu, các khái niệm cơ bản của
nén dữ liệu, phân loại nén dữ liệu, các loại mã nén dữ liệu thƣờng dùng. Qua đó
chúng ta hiểu thêm về vai trị và chức năng của bài toán nén dữ liệu. Nhất là với các
hệ thống có tài nguyên hạn chế, từ đó làm nổi bật thêm lý do chọn đề tài này của
luận văn.
1.1. Tổng quan về nén dữ liệu
Nén dữ liệu là quá trình làm giảm dữ liệu cần thiết để biểu diễn cùng một
lƣợng thông tin cho trƣớc. Các kỹ thuật nén dữ liệu có thể đƣợc thực hiện bằng
phần cứng chuyên dụng hoặc phần mềm.
Các kỹ thuật nén dữ liệu bằng phần cứng địi hỏi phải có các phần cứng đặc
biệt đƣợc thiết kế với băng thông cố định của mạng truyền số liệu. Các kỹ thuật nén
dữ liệu bằng phần mềm đƣợc thực hiện trên máy tính cá nhân (PC) có thể dùng nén
file văn bản, các file ảnh đƣợc nhập vào từ scaner hoặc camera và các file âm thanh.
Trong khái niệm về nén, ta cần phân biệt giữa dữ liệu và thông tin. Dữ liệu
(data) dùng để biểu diễn và truyền tải thông tin (information), cùng một lƣợng
thông tin cho trƣớc ta có thể biểu diễn bằng các lƣợng dữ liệu khác nhau. Đơn vị đo

dữ liệu (dung lƣợng) là bit (binary digit). Một bit dữ liệu về mặt toán học đƣợc biểu
diễn bằng một chữ số nhị phân 0 và 1, về mặt điện đƣợc biểu diễn bằng một trong
hai mức điện áp qui ƣớc.
Một bit thông tin đƣợc định nghĩa là lƣợng thông tin. Giả sử P là xác suất của
một ký hiệu, thì lƣợng thơng tin chứa trong ký hiệu đó đƣợc định nghĩa là –log2P
bít, cơng thức này chính là entropy của ký hiệu. Vậy entropy là gì? Trong lĩnh vực
lý thuyết thơng tin sử dụng thuật ngữ entropy là đơn vị đo thông tin đƣợc mã hóa
trong một thơng điệp. Entropy của một thơng điệp càng cao thì thơng tin nó chứa
đựng càng nhiều. Entropy của tồn bộ thơng điệp là tổng entropy của các ký hiệu
thành phần. Entropy phụ thuộc vào xác suất xuất hiện của ký hiệu, một ký hiệu có

12


xác suất xuất hiện càng cao thì thơng tin chứa đựng trong nó càng thấp và sẽ cần ít
bít hơn để mã hóa.
Bài tốn nén dữ liệu cịn có tầm quan trọng với các hệ thống có tài nguyên
hạn chế nhƣ các hệ thống nhúng. Bởi hệ thống nhúng thƣờng bị rằng buộc bởi bộ
nhớ lƣu trữ, băng thông và khả năng tính tốn với các dữ liệu lớn [1].
1.2. Các kỹ thuật nén dữ liệu
1.2.1. Nén không tổn hao (Lossless Compression)
Nén khơng tổn hao cịn đƣợc gọi là nén khơng nhiễu (Noiseless) hay nén
khơng có lỗi (Free Error), đảm bảo khơng mất mát thơng tin sau q trình mã hóa
và giải mã (nó tạo lại bản sao chính xác của dữ liệu sau q trình mã hóa và giải
mã). Kỹ thuật này sử dụng trên những nguồn dữ liệu để đảm bảo độ chính xác cao
khi lƣu trữ hoặc truyền đi nhƣ các cơ sở dữ liệu, các bảng tính điện tử, các văn
bản…Vì với các tập tin này, việc mất mát dù chỉ một bít thơng tin là điều không thể
đƣợc. Nén không tổn hao sử dụng các phƣơng pháp mã hóa nhƣ: phƣơng pháp mã
hóa Huffman, mã hóa số học, mã hóa LZW…
1.2.2. Nén tổn hao (Lossy Compression)

Nén tổn hao là kỹ thuật nén chấp nhận mất mát một lƣợng thông tin nhất
định để đạt đƣợc hiệu quả nén cao. Có thể nói một cách tƣơng tự: Nén tổn hao sẽ là
tổng của quá trình làm trơn và nén khơng tổn hao. Trong đó, làm trơn là q trình
thực hiện một phép biến đổi nào đó nhƣ: biến đổi dữ liệu từ miền thời gian sang
miền tần số bằng phép biến đổi Fourier rời rạc gọi là FFT (Fast Fourier Transform),
hoặc phép biến đổi Cosine rời rạc gọi là DCT (Discrete Cosine Transform)…, tiếp
đó là q trình lƣợng tử hóa. Dữ liệu càng đƣợc làm trơn thì mất mát thông tin càng
nhiều và tỉ số nén càng cao.
Nén tổn hao thích hợp với các file hình ảnh, âm thanh đƣợc số hóa. Hầu hết
các kỹ thuật nén tổn hao đều có thể đƣợc điều chỉnh để cân bằng giữa độ chính xác

13


và hiệu quả nén. Các phƣơng pháp nén tổn hao nhƣ: nén JPEG, phƣơng pháp
Wavelet, phƣơng pháp MPEG…
1.3. Một số khái niệm cơ bản về nén dữ liệu
Vấn đề đặt ra ở đây là có hay khơng một phƣơng pháp nén tốt nhất cho các
loại dữ liệu khác nhau? Tiêu chuẩn nào để xác định điều đó? Kết quả cho thấy: một
phƣơng pháp nén tốt khi nó có một mơ hình tốt và giải quyết đƣợc độ dƣ thừa về dữ
liệu cao. Tuy nhiên, trong thực tế hầu hết các kỹ thuật nén đều không thể xử lý đƣợc
mọi độ dƣ thừa khác nhau. Vậy độ dƣ thừa dữ liệu là gì?
1.3.1. Tỷ số nén
Tỷ số nén (Compression Ratio) là một đại lƣợng đặc trƣng cho một phƣơng
pháp nén. Muốn biết một kỹ thuật nén là cao hay thấp ngƣời ta căn cứ vào tỷ số nén
mà nó đã đạt đƣợc để đánh giá. Tỷ số nén đƣợc biểu diễn bằng cơng thức tốn học
nhƣ sau:
CN 

N2

N1

(1)

Trong đó, CN là tỉ số nén, N1 là kích thƣớc file đầu vào, N2 là kích thƣớc file
ra. Theo cơng thức trên ta có thể thấy tỉ số nén càng thấp thì hiệu suất nén càng cao
và ngƣợc lại.
1.3.2. Độ dư thừa dữ liệu
Độ dƣ thừa dữ liệu (Data Redundancy) trong một nguồn tin căn cứ vào các
yếu tố sau:
 Sự phân bố ký hiệu: dựa vào sự xuất hiện của các ký hiệu, trong một nguồn
tin bao giờ cũng có trƣờng hợp vài ký hiệu đƣợc sử dụng nhiều hơn các ký
hiệu khác và những ký hiệu này sẽ đƣợc mã hóa ít bit hơn.
 Sự lặp lại của những ký hiệu: Khi các ký hiệu đƣợc lặp đi lặp lại nhiều lần
liên tiếp nhau, tập tin đƣợc mã hóa một cách cơ đọng hơn bằng cách chỉ lƣu
các thuộc tính: số ký hiệu đƣợc lặp lại và mã hóa các ký hiệu đó.

14


 Những mẫu sử dụng mật độ cao: Sự tuần tự của những ký hiệu nào đó sẽ tái
xuất hiện với tần suất xuất hiện tƣơng đối cao do vậy nó sẽ đƣợc mã hóa ít
bít hơn những ký hiệu có tần suất xuất hiện thấp.
 Độ dƣ thừa vị trí: Nếu những ký hiệu nào đó xuất hiện ở một vị trí có thể dự
đốn trƣớc một các phù hợp trong mỗi một khối dữ liệu. Chẳng hạn, một ảnh
lƣới chứa một hàng dọc và hàng dọc đó xuất hiện nhƣ một vật trong cùng
một vị trí ở dịng khác nhau. Khi đó ta có thể mã hóa một cách cơ đọng hơn
bằng cách dữ vị trí của hàng và cột đó thay vì giữ từng ký hiệu trong cột.
Cơng thức biểu diễn tốn học về độ dƣ thừa dữ liệu:
Cơng thức biểu diễn bằng Tốn học về độ dƣ thừa dữ liệu:

RD  1 

1
CN

(2)

Trong đó: CN là tỉ số nén, RD: độ dƣ dữ liệu tƣơng đối.
Nghĩa là: N1 và N2 (đã đƣợc nêu ở phần 1.3.1) là lƣợng dữ liệu trong hai tập dữ liệu
cùng đƣợc dùng để biểu diễn một lƣợng thông tin cho trƣớc và ta có các trƣờng hợp
sau:
 N1 = N2 thì CN =1 và RD = 0 có nghĩa là so với tập dữ liệu thứ hai thì tập dữ
liệu thứ nhất không chứa dữ liệu thừa.
 Khi N2 << N1 , CN tiến tới vô cùng và RD tiến tới 1 có nghĩa là độ dƣ thừa dữ
liệu tƣơng đối của tập dữ liệu thứ nhất là khá lớn hay tập dữ liệu thứ hai đã
đƣợc nén khá nhỏ.
1.3.3. Độ dài trung bình của từ mã
Độ dài trung bình của một từ mã là giá trị trung bình thống kê của tất cả các
từ mã trong một bộ mã. Độ dài trung bình của một từ mã khơng thể nào nhỏ hơn
Entropy của nguồn dữ liệu đƣợc mã hoá. Nhƣ vậy, một bộ mã tối ƣu (có hiệu suất
nén cao) là bộ mã có độ dài trung bình của một từ mã gần với Entropy của nguồn dữ
liệu.

15


1.3.4. Các yếu tố của kỹ thuật nén dữ liệu
Dữ liệu truyền đi trên một kênh thơng tin có thể đƣợc xem nhƣ là một chuỗi
các ký hiệu S1, S2, . . . Sn , các ký hiệu đó thuộc một tập ký hiệu nào đó (có thể là
một tập vô hạn) chẳng hạn:

 Tập hợp các chữ số nhị phân: 0, 1; tập hợp các chữ số thập phân: 1, 2, 3 ..
 Tập hợp các ký hiệu Alphabet: A, B, C ... X, Y, Z
 Tập hợp các từ của một ngơn ngữ.
Do vậy có thể nói các kỹ thuật nén dữ liệu đƣợc sử dụng từ trƣớc cho đến
nay đều dựa vào một trong các đặc trƣng sau:
 Tính hữu hạn của tập ký hiệu.
 Tần số xuất hiện tƣơng đối của các ký hiệu.
 Ngữ cảnh xuất hiện của các ký hiệu.
1.4. Kỹ thuật nén dữ liệu
1.4.1. Tổng quan
Nén dữ liệu bao gồm hai quá trình:
Nén dữ liệu = Mơ hình hố + Mã hố [2]
Trong đó:
 Mơ hình xác định chính xác xác suất xuất hiện của từng ký hiệu (nghĩa là nó lựa
chọn để đƣa ra một từ mã nhất định đối với một ký hiệu hoặc một tập ký hiệu).
 Bộ mã hoá sẽ tạo ra các từ mã dựa trên các xác suất đó.
Nhƣ vậy, mơ hình hố và mã hố là hai vấn đề hồn tồn khác nhau, và ta có thể
phân biệt nhƣ sau:
 Một mơ hình hố nguồn dữ liệu có thể cùng sử dụng một hoặc nhiều phƣơng
pháp mã hoá để cho ra các từ mã.
 Một phƣơng pháp mã hố có thể đƣợc sử dụng trên một hoặc nhiều mơ hình hố
Thế nhƣng chúng ta vẫn thƣờng dùng từ mã hóa để chỉ cho tồn bộ q trình nén dữ
liệu mặc dù đây mới chỉ là một giai đoạn của q trình nén. Ví dụ chúng ta thƣờng

16


dùng mã hóa Huffman, mã hóa số học...để nói về các kỹ thuật nén này. Có rất nhiều
cách để xây dựng mơ hình và các mơ hình này có thể sử dụng cùng một phƣơng
pháp mã hóa. Hình 1.1 mơ tả đầy đủ cấu trúc của bộ nén không tổn hao.


Mơ hình
Sự phân bố

Xác suất

Xác suất
Nguồn ký hiệu

Sự ƣớc lƣợng

Mã hóa
MÃ HĨA

Mơ hình
Sự phân bố
Xác suất

10011010001....
Luồng bít đã mã hóa

Mã hóa

Sự ƣớc lƣợng
Xác suất

Nguồn ký hiệu

GIẢI MÃ


Hình 1.1: Cấu trúc của bộ nén khơng tổn hao.
1.4.2. Mơ hình
Mơ hình là một tập hợp dữ liệu cùng các quy tắc đƣợc sử dụng để xử lý các
ký hiệu vào và đƣa ra các từ mã tƣơng ứng.
Chúng ta biết rằng quá trình nén dữ liệu bao gồm hai giai đoạn: mơ hình hố
và mã hố. Tuy nhiên, hiệu quả của nén dữ liệu phụ thuộc rất nhiều vào mơ hình bất
chấp hiệu quả của bộ mã hố. Vì sao nhƣ vậy? Chức năng của mơ hình là tiên đốn
các ký hiệu để cung cấp một sự phân phối xác suất cho ký hiệu tiếp theo. Xét cùng
một nguồn tin cần đƣợc mã hố, trong đó xét ký hiệu “u” chẳng hạn, nó sẽ có xác
suất thấp hoặc cao tùy thuộc vào bậc của mơ hình ta chọn. Nhƣ vậy, nếu ta thay đổi
bậc mơ hình thì xác suất xuất hiện sẽ thay đổi theo và để nén dữ liệu có hiệu quả
cao thì ta phải chọn đƣợc một mơ hình có thể tiên đoán đƣợc sự xuất hiện của các
ký hiệu với xác suất cao. Rõ ràng xác suất thay đổi thì Entropy của ký hiệu cũng
thay đổi và xác suất càng cao thì cần ít bit hơn để mã hố tạo ra các từ mã tƣơng
ứng sẽ càng ngắn.
Vậy bậc của mơ hình là gì? Trong một luồng dữ liệu, sự xuất hiện của các ký
hiệu là cố định, nhƣng việc tính xác suất cho mỗi ký hiệu thì khơng cố định. Xác
suất của ký hiệu có thể thay đổi phụ thuộc vào cách xây dựng mơ hình. Việc tính
tốn xác suất của ký hiệu đƣợc dựa vào các ký hiệu đứng trƣớc, các ký hiệu đứng

17


trƣớc gọi là ngữ cảnh (context). Từ đó dẫn đến khái niệm bậc của mơ hình, mơ hình
chỉ tính xác suất của ký hiệu dựa vào số ký hiệu đứng trƣớc mà các ký hiệu này tạo
thành ngữ cảnh. Nếu ta tính xác suất của ký hiệu mà khơng dựa vào ngữ cảnh thì ta
có mơ hình bậc 0, nếu số ký hiệu trong ngữ cảnh bằng 1 thì mơ hình có bậc một,
nếu số ký hiệu bằng 2 thì mơ hình có bậc 2…
Kỹ thuật nén khơng tổn hao sử dụng hai kiểu mơ hình:
 Mơ hình thống kê (Statistical): Mơ hình thống kê tĩnh và Mơ hình thống kê động

 Mơ hình từ điển (Dictionary): Mơ hình từ điển tĩnh và Mơ hình từ điển động
1.4.2.1. Mơ hình thống kê
Mơ hình thống kê tĩnh là xây dựng một bảng liệt kê tất cả các giá trị xác suất
của một luồng ký hiệu. Điều này đòi hỏi phải gửi đi thêm một lƣợng dữ liệu nhất
định cho bộ giải mã để giải mã thông điệp. Trƣớc đây, ngƣời ta thƣờng xây dựng
mơ hình tĩnh vạn năng tức là ngƣời ta chỉ phân tích một lần đối với các khối dữ liệu
điển hình để có đƣợc một bảng đếm số lần xuất hiện của từng ký hiệu. Dựa vào kết
quả đó, một cây mã Huffman tĩnh đƣợc xây dựng và lƣu giữ để sử dụng cho nhiều
kiểu dữ liệu khác nhau. Tuy nhiên, nếu luồng dữ liệu vào không tƣơng hợp thì sẽ
dẫn đến hiện tƣợng “nở dữ liệu” (luồng dữ liệu ra sẽ có kích thƣớc lớn hơn luồng
dữ liệu vào).
Để khắc phục hạn chế đó ngƣời ta xây dựng một mơ hình tĩnh riêng cho từng
kiểu dữ liệu và khi giải mã thì ta phải gửi đi trƣớc một lƣợng dữ liệu thống kê nhất
định (cấu trúc cây mã) sau đó mới gửi luồng mã đi. Với mơ hình bậc 0 lƣợng dữ
liệu khơng đáng kể (khoảng 256 byte), tuy nhiên để đạt hiệu quả nén tốt hơn thì
phải sử dụng mơ hình bật cao hơn, với mơ hình bậc 1 thì lƣợng dữ liệu thống kê có
thể lên đến 64KB. Do vậy, ngƣời ta xây dựng mô hình khác gọi là mơ hình thống kê
động. Trong mơ hình này, dữ liệu thống kê của nguồn dữ liệu sẽ đƣợc tích luỹ và
liên tục sửa đổi trong suốt q trình mã hố. Ta có sơ đồ mã hố và giải mã nhƣ sau:

18


Luồng vào
(các ký hiệu)

Luồng ra
Đọc ký hiệu

vào


Xuất mã

Mã hóa
ký hiệu

(các mã)

Mơ hình

Cập nhập mơ
hình

Hình 1.2: Mã hố theo mơ hình thống kê thích ứng [2]

Luồng vào

Đọc mã vào
(read input code)

(các mã)

Xuất ký

Giải mã

hiệu

ký hiệu


Luồng ra

(các ký
hiệu)

Cập nhập
mơ hình
Mơ hình

Hình 1.3: Giải mã theo mơ hình thống kê thích ứng [2]

Với hai sơ đồ trên, chúng ta thấy rằng khi một kí hiệu hoặc một nhóm kí hiệu
đƣợc đọc vào, nó sẽ mã hố hoặc giải mã dựa trên mơ hình hiện thời rồi sau đó mơ
hình mới đƣợc cập nhật dựa trên kí hiệu hoặc nhóm kí hiệu đó. Trong mơ hình
thống kê động dữ liệu thống kê của nguồn dữ liệu không cần phải gửi đi trƣớc
nhƣng yêu cầu khối “cập nhập mơ hình“ phải hoạt động chính xác nhƣ nhau khi mã
hố và giải mã. Với mơ hình này, hiệu ứng nén chỉ xuất hiện rõ rệt khi đã làm việc
với vài ngàn kí tự, và do khơng phải gửi đi trƣớc một nguồn dữ liệu khi giải mã nên
hiệu quả nén cao hơn so với mơ hình tĩnh, thêm vào đó là khả năng thích ứng cao
với mọi kiểu dữ liệu.
1.4.2.2. Mơ hình từ điển
Mơ hình từ điển tĩnh tƣơng tự nhƣ một danh sách tài liệu tham khảo dùng
trong sách báo khoa học, trong đó các sách tham khảo đƣợc thay thế bằng một con

19


số nằm trong ngoặc vuông và con số này lại trỏ đến một tài liệu xác định nào đó
trong danh sách tài liệu tham khảo. Khi đọc vào một từ, nó sẽ tìm một nhóm dữ liệu
tƣơng hợp trên từ điển. Nếu tìm thấy thì xuất ra một con trỏ đến nhóm kí hiệu đó

chứ khơng phải một từ mã trong mơ hình thống kê. Dữ liệu đọc vào càng tƣơng hợp
với nhóm kí hiệu tìm thấy trong từ điển thì hiệu quả nén càng cao. Tuy nhiên giống
nhƣ mơ hình thống kê tĩnh, mơ hình này có nhƣợc điểm là phải phát từ điển đi trƣớc
dữ liệu đã đƣợc mã hoá, nhƣ vậy sẽ làm giảm hiệu quả nén. Để khắc phục, ta dùng
mơ hình từ điển động. Mơ hình này giống nhƣ cách viết tắt mà ta vẫn thƣờng làm,
muốn viết tắt một cụm từ nào đó thì ngay trong lần xuất hiện đầu tiên của nó ta sẽ
viết kèm theo các ký hiệu viết tắt trong cặp ngoặc đơn, và kể từ lần xuất hiện thứ
hai, cụm từ này sẽ đƣợc thay thế bằng các ký hiệu viết tắt tƣơng ứng.
1.4.3. Mã hóa
1.4.3.1. Khái niệm về Mã
Mã chính là một tập hợp hữu hạn các dấu hiệu riêng (symbol) hay bảng chữ
riêng (các dấu mã hay các ký hiệu mã) có phân bố xác suất thoả mãn một số u cầu
quy định nào đó.
1.4.3.2. Các thơng số cơ bản của Mã
Bao gồm 3 thông số cơ bản sau:
 Cơ số của mã (kí hiệu là m): là số các dấu (ký hiệu khác nhau) trong bảng chữ
của mã. Ví dụ: khi mã có cơ số 2 thì gọi là mã nhị phân (m=2).
 Độ dài (tính dấu) của mã (kí hiệu là n): Là số các kí hiệu (các dấu) trong một từ
mã. Nếu các từ mã của một bộ mã đồng một tính dấu nghĩa là cùng một độ dài
thì gọi là mã đồng đều, nếu các từ mã có độ dài khác nhau thì gọi là mã không
đồng đều.
 Tổng số từ mã trong một bộ mã (kí hiệu là N): trƣờng hợp mã đồng đều:
o N=mn: có tất cả các tổ hợp mã gồm n ký hiệu với m trị khác nhau đều đƣợc
dùng làm từ mã gọi là mã đầy. Mã đầy không có tác dụng chống nhiễu
o N
20


1.4.3.3. Khái niệm về sự mã hoá

Nhƣ vậy sự mã hoá là phép biến đổi một đối một giữa các tin của nguồn đƣợc mã
hoá với các từ mã do các dấu mã tạo thành.
* Điều kiện thiết lập mã :
Vấn đề đƣợc đặt ra ở đây là làm thế nào để nhận đƣợc các ký hiệu khác nhau
từ các tổ hợp mã đã đƣợc mã hoá khi các tin tức mã hố truyền đi đƣợc trình bày
dƣới dạng một kí hiệu liên tiếp? Nhƣ vậy, điều kiện tiên quyết là khi ta nhận đƣợc
một chuỗi các ký hiệu, phải có một quy luật đảm bảo tách ra thành phần cơ bản là
các từ mã và cách tách này phải là duy nhất và đúng đắn.
Ta xét các ví dụ sau:
Ví dụ 1:
Giả sử ta nhận đƣợc nguồn tin gồm 4 tin: a, b, c, d đƣợc mã hoá nhị phân nhƣ sau:
a  00, b  01
c  10 , d  11
và ta nhận đƣợc dãy tin: 00110110111000
Khi giải mã nếu ta xác định đƣợc gốc của dãy ký hiệu, ta chỉ có thể giải mã
theo một cách duy nhất là: chia thành từng nhóm 2 ký hiệu mã và giải mã thành dãy
kí hiệu tƣơng ứng là: adbcdca
Ví dụ 2:
Xét một nguồn tin khác cũng gồm 4 tin a, b, c, d đƣợc mã hoá theo quy luật sau:
a  0, b  01
c  101, d  1
và ta nhận đƣợc dãy ký hiệu mã nhƣ ví dụ 1: 00110110111000. Ta có thể giải mã
thành các dãy ký hiệu tƣơng ứng: aaddbcddaaa, abdbcddaaa, abdadcddaaa...trong
trƣờng hợp này ta khơng thể biết chính xác đâu là dãy kí hiệu của nguồn tin trƣớc
khi mã hoá.
* Nhận xét:

21



Từ 2 ví dụ trên, ta thấy: cùng một dãy tin nhận đƣợc nhƣng tùy thuộc vào
quy luật mã hoá nguồn tin ban đầu mà ta có thể giải mã thành một dãy kí hiệu duy
nhất hoặc nhiều dãy khác nhau.
Nhƣ vậy, bộ mã khơng cho phép phân tích các từ mã một cách duy nhất và
đúng đắn thì sự nhận tin khơng thể nhận đƣợc. Từ đó, ta có điều kiện để mã có thể
phân tách đƣợc theo sau.
1.4.3.4. Điều kiện để mã phân tách được
Theo những ví dụ trên, chúng ta thấy rằng muốn mã hoá đƣợc nguồn tin ban
đầu theo một quy luật duy nhất (điều kiện để mã phân tách) thì bộ mã phải thoả mãn
điều kiện cần và đủ sau : bất kỳ dãy các từ mã nào của bộ mã cũng không được
trùng với một dãy từ mã khác của cùng bộ mã.
Để mã có thể phân tách đƣợc hay khơng ngƣời ta dựa vào độ chậm giải mã.
Độ chậm giải mã được định nghĩa là số hiệu nhận được cần thiết phải có mới có thể
phân tách được thành các từ mã.
* Có 2 trƣờng hợp xảy ra:
 Độ chậm giải mã là hữu hạn thì mã phân tách đƣợc.
 Độ chậm giải mã là vơ hạn thì mã khơng phân tách đƣợc.
Để xác định mã có tính phân tách hay khơng và nếu phân tách đƣợc thì độ
chậm giải mã là bao nhiêu, ngƣời ta xây dựng bảng thử mã phân tách theo các bƣớc
sau :
 Đem các từ mã xếp thành một cột, đánh dấu là cột số 1.
 Đối chiếu các từ mã ngắn với các từ mã dài hơn trong cột 1, nếu từ mã ngắn
trùng với phần đầu của từ mã dài thì lấy phần cịn lại ghi vào cột thứ 2.
 Lặp lại bƣớc 2, nghĩa là cột thứ j sẽ là kết quả khi ta đối chiếu cột (j - 1) với cột
1. Tiếp tục làm bƣớc này cho đến khi cột phải điền trở nên trống rỗng.
Ta có điều kiện sau : điều kiện cần và đủ để mã hố có tính phân tách là trong cột j

 2 khơng có một tổ hợp nào trùng với các từ mã trong cột 1.
* Ví dụ 3 :
Lập bảng giải mã cho bộ mã 00, 01, 100, 1010, 1011.


22


1

2

3

00
01
100
1010
1011

Bảng trên cho thấy cột 2 trống rỗng thì độ chậm giải mã = 0 nghĩa là bộ mã phân
tách đƣợc.
* Ví dụ 4:
Lập bảng giãi mã cho bộ mã là 10, 100, 01, 011.

1

2

3

4

5


...

10

0

1

0

1

...

100 1

11

00

11

01

0

1

0


011

00

11

00

Trƣờng hợp này, ta thấy bộ mã có khả năng phân tách vì trong các cột 2, 3,
4... khơng có tổ hợp nào trùng với các từ mã trong cột 1, nhƣng vì các cột j là vô
hạn nên độ chậm giải mã là vô hạn.
Nhƣ vậy, từ bảng thử mã phân tách ta có thể đánh giá độ chậm giải mã: nếu
j là giá trị của cột rỗng thì độ chậm giải mã Tch đƣợc tính theo cơng thức :
 j  1
 j
 2 .nmin  Tch  2 .nmax


 

Trong đó nmin, nmax là độ dài tổ hợp mã ngắn nhất và dài nhất.
1.4.3.5. Tính chất tiền tố của mã
Trong các loại mã có tính phân tách đƣợc, có loại mã mang nhiều đặc điểm
có ích cho việc khai thác sử dụng và đƣợc nghiên cứu nhiều. Đó là loại mã có tính
tiền tố.

23



Tiền tố của một tổ hợp mã là bộ phận của tổ hợp mã đó sau khi bỏ đi ký hiệu
cuối cùng. Ví dụ nhƣ tổ hợp mã 011001110 có các tiền tố 01100111, 0110011,
011001, 01100, 0110, 011, 01, 0.
* Định nghĩa mã có tính tiền tố:
Mã có tính tiền tố nếu bất kỳ tổ hợp mã nào cũng không phải là tiền tố của
bất kỳ một tổ hợp nào khác cùng bộ mã. Mã đầy là bộ mã có tính tiền tố.
Khi biểu diễn mã bằng cây mã, ta nhận thấy bộ mã có tính tiền tố khi các từ
mã chỉ là nút lá. Ví dụ ta có 4 ký hiệu trong bảng mẫu tự X 1, X2, X3, X4 với quy
luật mã hoá tƣơng ứng:
X1  0,

X2  01, X3  00,

X4  11.

Ta biểu diễn chúng bằng 1 cây mã nhƣ sau:
Tình trạng ký
hiệu đầu

1

0
X1

1
X4

0

1


X3

X2

Nếu mẫu tin là 0001, thì dãy bit có thể nhận đƣợc khi giải mã là: X 1X1X2
hoặc X4X2. Vì vậy, mã sẽ khơng có tính giải mã duy nhất do trên thực tế từ cây mã
ta có Xt là nút trung gian và đƣờng dẫn tới X1 là khơng trình bày bit duy nhất tổ
hợp.
Tƣơng tự ta cũng có 4 ký hiệu với quy luật mã hoá sau:
X1  0,

X2  10, X3  110,

Biểu diễn bằng cây nhƣ hình dƣới:

24

X4  111.


Tình trạng ký
hiệu đầu

1

X1

1
1

X4

0

0
X2

0
X3

Giả sử ta nhận đƣợc nguồn tin: 0010111110, khi giải mã ta chỉ có thể nhận
đƣợc một dãy ký hiệu là: X1X1X2X4X3. Điều này cho thấy: nếu mã có tính tiền tố
thì khi biểu diễn bằng cây mã mỗi từ mã sẽ tƣơng ứng với một nút lá trong cây mã.
1.4.3.6. Các phương pháp mã hoá
 Mã hố với độ dài từ mã khơng thay đổi: chủ yếu ở các loại mã vơi có tính chất
phát hiện và sửa sai.
 Mã hoá với độ dài từ mã thay đổi: đƣợc thực hiện với các loại mã không đồng
đều. Đặc điểm của phƣơng pháp này dùng một số nguyên các bit để biểu diễn
các từ mã và độ dài từ mã phụ thuộc vào xác suất xuất hiện của các ký hiệu. Với
mục đích xây dựng các loại mã có độ dài trung bình từ mã ngắn nhất còn gọi là
mã thống kê tối ƣu.
Kết luận:
Trong chƣơng I, luận văn đã trình bày tổng quan về nén dữ liệu, một số khái
niệm cơ bản, kỹ thuật nén dữ liệu. Những lý thuyết tổng quan về nén dữ liệu này sẽ
là cơ sở để phân tích về các thuật tốn nén bitstream sẽ đƣợc trình bày trong phần
sau của cuốn luận văn này.

25



×