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

mã hóa lzw(lempel-ziv-wech)

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 (1.26 MB, 47 trang )

Chương 1 TỔNG QUAN
1.1. Tổng quan về nén dữ liệu
Trong khoa học máy tính và lí thuyết thông tin, nén dữ liệu là quá trình mã hóa
thông tin dùng ít bit hơn so với thông tin chưa được mã hóa bằng cách dùng một
hoặc kết hợp của các phương pháp nào đó. Dựa theo nguyên tắc này giúptránh các
hiện tượng kênh truyền bị quá tải và việc truyền tin trở nên kinh tế hơn .Nén dữ liệu
giúp tiết kiệm các tài nguyên như dung lượng bộ nhớ, băng thông, thời gian. Ngược
lại, dữ liệu đã được nén cần phải được giải nén để đọc (thực thi, nghe, xem v.v…),
quá trình này cũng đòi hỏi các tài nguyên nhất định. Một ví dụ điển hình là việc nén
video đòi có thể đòi hỏi phần cứng đắt tiền để quá trình giải nén đủ nhanh để ta có
thể xem được. Do đó việc thiết kế một chương trình nén dữ liệu phụ thuộc nhiều
yếu tố như mức độ nén, độ méo (đối với nén có tổn hao), tài nguyên hệ thống dùng
để thực hiện quá trình nén và giải nén dữ liệu.Mặc dù các chương trình nén dữ liệu
thường sử dụng kết hợp nhiều thuật toán có độ phức tạp khác nhau tuy nhiên có thể
mô tả bằng hình dưới đây.
Hình 1.1: Tổng quan quá trình xữ lý dữ liệu
1.1.1. Các chương trình nén hoạt động như thế nào
Nguyên tắc của các chương trình nén nói chung giống nhau: Tận dụng sự lặp lại
của dữ liệu, các chuỗi dữ liệu lặp lại được thay thế bởi con trỏ chung có độ dài bé
hơn. Kỹ thuật này rất có hiệu quả đối với dữ liệu dạng bảng tính, hoặc file DBF
(nén trên 70%), vì tính lặp lại của dữ liệu loại này cao: File chương trình (.EXE
hoặc .COM) nén được ít hơn.
1.1.2. Tốc độ và tỷ lệ nén
Ngay cả khi tất cả các chương trình nén file đều dùng chung một thuật toán thì hoạt
động của chúng cũng khác nhau. Mỗi hãng triển khai thuật toán một kiểu để dung
Trang 1
Quá trình nén
Quá trình giải nén
Dữ liệu nénDữ liệu gốc
hòa hai vấn đề: thời gian và tỷ lệ nén. Chương trình PKZIP thường trội hơn các
chương trình nén khác về mặt tốc độ, về mặt tỷ lệ nén, nhiều khi nó cũng khá hơn.


Tính ổn định của các chương trình nén cũng là điều cần quan tâm. Các file nén nói
chung rất ít khi bị hỏng. Cũng cần lưu ý là các loại file nén không tương thích với
nhau, tức là nếu gửi file nén cho người khác thì người đó cần phải có chương trình
thích hợp mới giải nén ra được. Tuy nhiên để giải quyết vấn đề này, cả 3 chương
trình ARC + PLUS, LHA và PKZIP đều cho phép tạo file nén tự tời - tức file nén ở
dạng chương trình thực hiện, khi chạy sẽ tự động tời ra, trên thị trường cũng bắt
đầu xuất hiện chương trình chuyển đổi từ dạng file nén này sang dạng file nén
khác, ví dụ chương trình D'Compress for Windows chuyển các file PKZIP, ARC,
LHA sang dạng ARJ.
Các chương trình nén giá không cao (PKZIP: 47USD, LHA cung cấp miễn phí) nên
được dùng khá rộng rãi. Hạn chế hiện nay của chúng là giao diện người dùng
không thuận tiện, thường phải bấm lệnh với nhiều tham số ở dấu nhắc của DOS để
thực hiện một công việc nào đó. Cải tiến theo hướng này đang được thực hiện:
ARC + PLUS có giao diện kiểu menu, PKZIP cũng đã có phần bổ sung là PKZIP
menu.
Nhiều chương trình quản lý file trong DOS và trong Windows đã bắt đầu dùng kỹ
thuật nén. Chương trình Magellan của hãng Lotus dùng PKZIP từ năm 1990,
chương trình Xtree Gold đưa PKZIP vào công cụ quản lý file năm 1991.
Thư mục nén rời sau đó lại phải tời ra để dùng của các chương trình nén file khá
rườm rà, chính bởi lý do này mà các chương trình nén đĩa như Stacker hoặc Super
Store được sử dụng tương đối rộng rãi. Các chương trình nén đĩa cũng hoạt động
trên nguyên tắc giống như nén file, chỉ khác là chúng tự động nén và tời mà người
dùng không phải quan tâm đến. Thời gian và tỷ lệ nén của các chương trình nén
loại này khác nhau. Để tời 3,5 Mb dữ liệu, chương trình này hết 12 giây, chương
trình khác 40 giây. Tỷ số nén đối với file văn bản cũng khác: từ 2:1 đến 3:1. Tóm
lại khi dùng chương trình nén đĩa, người dùng yên tâm là dung lượng ổ cứng dường
như tăng khoảng 2 lần.
Việc tời và nén khi làm việc với file sẽ làm công việc chậm lại đôi chút. Đối với
các file dữ liệu lớn, điều này thể hiện khá rõ. Bởi công việc thì nhiều chương trình
dùng Coprocessor để tăng tốc độ lên. Khi làm việc, các chương trình nén đĩa hoạt

động ở dạng thường trú, bởi thế một mặt nó chiếm dụng bộ nhớ RAM, một mặt có
thể gây xung đột với các chương trình thường trú khác. Các chương trình nén file
Trang 2
khi có sự cố chỉ hỏng một vài file, còn chương trình nén đĩa làm hỏng cả ổ đĩa. Tuy
điều này rất ít khi xảy ra nhưng nó cũng làm cho nhiều người e ngại không dám
dùng.
Để cài đặt chương trình nén đĩa cần phân chia lại ổ cứng vì máy tính cần được khởi
động bằng đĩa nén trước khi chương trình nén hoạt động. Nếu dùng Windows thì
phần không nén cần khá lớn (thông thường cần dành 10 Mb cho vùng không nén,
chỉ nén vùng đĩa còn lại).
Một điều có thể làm người dùng đau đầu là phải quyết định tỷ lệ nén là bao nhiêu.
Với tỷ lệ nén 10:1 chẳng hạn, chương trình nén sẽ dành nhiều "con trỏ" để trỏ đến
các dữ liệu, mỗi con trỏ chiếm 2 byte, khi đó dễ xảy ra trường hợp không đủ con
trỏ, chương trình báo đĩa đầy mà thực ra không phải như vậy.
Cuối cùng, việc loại bỏ chương trình nén đĩa khi đã cài đặt cũng là một vấn đề hơi
phiền toái. Nhiều chương trình - chẳng hạn Double Density có chức năng loại bỏ.
Đối với các chương trình khác cần tóm các file ẩn của chương trình nén và xóa bỏ
chúng đi. Có khi phải format lại ổ cứng.
Tóm lại, dù một số hạn chế, nén dữ liệu là cách thức kinh tế nhất để mở rộng dung
lượng ổ cứng. Ngoài ra còn có thể tiết kiệm được khá nhiều thời gian và kinh phí
khi nén dữ liệu trước khi truyền đi
Tỷ lệ nén là một trong các đặc trưng quan trọng nhất của mọi phương pháp nén.
Tuy nhiên, về cách đánh giá và các kết quả công bố trong các tài liệu cũng cần
được quan tầm xem xét. Nhìn chung, người ta định nghĩa tỷ lệ nén như sau :
Tỷ lệ nén = 1/ r x %
Với r là tỷ số nén được định nghĩa : r = kích thước dữ liệu gốc / kích thước dữ liệu
thu được sau nén. Như vậy hiệu suất của nén là : ( 1 - tỷ lệ nén) x %
Trong các trình bày sau khi nói đến kết quả nén, chúng ta dùng tỷ số nén, thí dụ
như 10 trên 1 có nghĩa là dữ liệu gốc là 10 sau khi nén chỉ có 1 phần.
Tuy nhiên, cũng phải thấy rằng những số đo của một phương pháp nén chỉ có giá trị

với chính sự nén đó, vì rằng hiệu quả của nén còn phụ thuộc vào kiểu dữ liệu định
nén. nhiều khi tỷ lệ nén cao cũng chưa thể nói rằng phương pháp đó là hiệu quả hơn
các phương pháp khác, vì còn các chi phí khác như thời gian, không gian và thậm
chí cả độ phức tạp tính toán nữa. Thí dụ như nén phục vị trong truyền dữ liệu : vấn
đề đặt ra là hiệu quả nén có tương hợp với đường truyền không
Trang 3
1.1.2.1 Các loại dư thừa dữ liệu.
Như trên đã nói, nén nhằm mục đích giảm kích thước dữ liệu bằng cách loại bỏ dư
thừa dữ liệu. việc xác định bản chất các kiểu dư thừa dữ liệu rất có ích cho việc xây
dựng các phương pháp nén dữ liệu khác nhau. Nói một cách khác, các phương pháp
nén dữ liệu khác nhau là do sử dụng các kiểu dư thừa dữ liệu khác nhau. người ta
coi có 4 kiểu dư thừa chính :
• Sự phân bố ký tự.
Trong một dãy ký tự, có một số ký tự có tần suất xuất hiện nhiều hơn một số dãy
khác. Do vậy, ta có thể mã hoá dữ liệu một cách cô đọng hơn. Các dãy ký tự có tần
xuất cao được thay bởi một từ mã nhị phân với số bít nhỏ; ngược lại các dãy có tần
xuất thấp sẽ được mã hoá bởi từ mã có nhiều bít hơn. Đây chính là bản chất của
phương pháp mã hoá Huffman.
• Sự lặp lại của các ký tự
Trong một số tình huống như trong ảnh, 1 ký hiệu (bít "0" hay bít "1") được lặp đi
lặp lại một số lần. Kỹ thuật nén dùng trong trường hợp này là thay dãy lặp đó bởi
dãy mới gồm 2 thành phần: số lần lặp và kí hiệu dùng để mã. Phương pháp mã hoá
kiểu này có tên là mã hoá loạt dài RLC (Run Length Coding). Phương pháp mã hoá
RLC.
• Những mẫu sử dụng tần suất
Có thể có dãy ký hiệu nào đó xuất hiện với tần suất tương đối cao. Do vậy, có thể
mã hoá bởi ít bít hơn. Đây là cơ sở của phương pháp mã hoá kiểu từ điển do
Lempel-Ziv đưa ra và có cải tiến vào năm 1977, 1978 và do đó có tên gọi là
phương pháp nén LZ77, LZ78. Năm 1984, Terry Welch đã cải tiến hiệu quả hơn và
đặt tên là LZW (Lempel-Ziv- Welch)

• Độ dư thừa vị trí
Do sự phụ thuộc lẫn nhau của dữ liệu, đôi khi biết được ký hiệu (giá trị) xuất hiện
tại một vị trí, đồng thời có thể đoán trước sự xuất hiện của các giá trị ở các vị trí
khác nhau một cách phù hợp. Chẳng hạn, ảnh biểu diễn trong một lưới hai chiều,
một số điểm ở hàng dọc trong một khối dữ lệu lại xuất hiện trong cùng vị trí ở các
hàng khác nhau. Do vậy, thay vì lưu trữ dữ liệu, ta chỉ cần lưu trữ vị trí hàng và cột.
Phương pháp nén dựa trên sự dư thừa này gọi là phương pháp mã hoá dự đoán.
Trang 4
Cách đánh giá độ dư thừa như trên hoàn toàn mang tính trực quan nhằm biểu thị
một cái gì đó xuất hiện nhiều lần. Đối với dữ liệu ảnh, ngoài đặc thù chung đó, nó
còn có những đặc thù riêng. Thí dụ như có ứng dụng không cần toàn bộ dữ liệu thô
của ảnh mà chỉ cần các thông tin đặc trưng biểu diễn ảnh như biên ảnh hay vùng
đồng nhất. Do vậy, có những phương pháp nén riêng cho ảnh dựa vào biến đổi ảnh
hay dựa vào biểu diễn ảnh.
1.2. Phân loại và ứng dụng
1.2.1 Dựa vào nguyên lý nén
• Theo cách này người ta phân thành 2 họ:
• Các thuật toán nén không tổn hao
Trong phương pháp nén không tổn hao, dữ liệu được nén sau khi giải nén sẽ giống
y như ban đầu. Trong đó thông dụng nhất là thuật toán Lemple-Ziv (LZ).
DEFLATE, là một biến thể của thuật toán LZ, được tối ưu hóa nhằm tăng tốc độ
giải nén và tỉ lệ nén, bù lại thuật toán này có tốc độ của quá trình nén chậm.
DEFLATE được dùng trong PKZIP, GZIP, và PNG. LZW (Lemple-Zip-Welch)
được dùng trong định dạng file GIF. Hai biến thể của thuật toán LZ cũng đáng chú
ý là thuật toán LZX dùng trong định dạng file CAB của Microsoft (Microsoft còn
dùng thuật toán nén này trong file CHM, các file office 2007) và thuật toán LZMA
dùng trong chương trình 7-ZIP.
Các thuật toán nén không tổn hao được dùng để nén các file như file thực thi, file
văn bản, word, excel, v.v… Các loại dữ liệu này không thể sai lệch dù chỉ một bit.
Các thuật toán nén không tổn hao cơ bản là:

- Shannon-Fano
- Run-length coding
- LZ77 , LZ78, LZW
• Nén tổn hao
Trong các phương pháp nén tổn hao thì dữ liệu được nén khi giải nén ra sẽ không
giống với dữ liệu gốc, tuy nhiên phải đảm bảo dữ liệu sau khi nén vẫn còn hữu ích.
Trang 5
Đối với hình ảnh, âm thanh, video, do giới hạn của mắt và tai người nên một lượng
lớn dung lượng có thể được tiết kiệm bằng cách loại bỏ các phần dư thừa, trong khi
chất lượng hầu như không thay đổi. Trong thực tế, các file hình ảnh âm thanh hay
là video được lưu trữ trên máy tính đều đã được nén có tổn hao để tiết kiệm dung
lượng và băng thông. Đối lập với nén không tổn hao các phương pháp nén có tổn
hao thường gây giảm chất lượng rất nhanh khi thực hiện nén và giải nén đệ qui
nhiều lần. Mã hóa suy hao thực hiện theo 2 kiểu chính:
- Các mẫu hình ảnh âm thanh sẽ được chia thành các phần nhỏ và được biến đổi
qua miền khác. Các hệ số biến đổi này sẽ được lượng tử hóa sau đó được mã hóa
bằng mã huffman hoặc mã hóa số học
- Các mẫu hình ảnh âm thanh trước được sử dụng để dự đoán các mẫu tiếp theo. Sai
số giữa dữ liệu dự đoán và dữ liệu thực sẽ được lượng tử hóa rồi mã hóa.
Ưu điểm của nén tổn hao so với nén không tổn hao đó là nén tổn hao trong nhiều
trường hợp cho tỉ lệ nén cao hơn rất nhiều so với bất cứ thuật toán nén không tổn
hao được biết, trong khi vẫn đảm bảo được chất lượng. Nén tổn hao thường được
sử dụng để nén ảnh, âm thanh, video. Âm thanh có thể nén với tỉ lệ 10:1 mà hầu
như không giảm chất lượng. Video có thể nén với tỉ lệ 300:1 với chất lượng giảm ít.
Trong các phần trình bày dưới đây, ta sẽ theo cách phân loại này.
1.2.2 Dựa vào cách thức thực hiện nén
• Theo cách này, người ta cũng phân thành hai họ:
• Phương pháp không gian (Spatial Data Compression): các phương pháp
thuộc họ này thực hiện nén bằng cách tác động trực tiếp lên việc lấy mẫu của ảnh
trong miền không gian.

• Phương pháp sử dụng biến đổi (Transform Coding): Gồm các phương
pháp tác động lên sự biến đổi của ảnh gốc mà không tác động trực tiếp như họ trên.
• Theo cách của Jain, các phương pháp nén gồm 4 họ chính:
• Phương pháp điểm.
• Phương pháp dự đoán.
• Phương pháp dựa vào biến đổi.
Trang 6
Chương 2: NỘI DUNG CÁC THUẬT TOÁN
2.1. Phương pháp nén không tổn hao
2.1.1. Mô hình thống kê
2.1.1.1. Thuật toán Shannon-Fano
• Các bước thực hiện mã hoá theo thuật toán Shanon-Fano.
Bước 1: Sắp xếp các ký tự theo thứ tự giảm dần.
Bước 2: Tính xác suất
Bước 3: Đệ quy làm hai phần, mỗi phần có tổng xác suất gần bằng nhau. Mã
hoá phần trên bằng bit 0 (hoặc bit 1), phần dưới bằng bit 1(hoặc bit 0).
Bước 4: Vẽ sơ đồ cây.
Bước 5: Tính Entropy, số bits mã hoá trung bình và số bit mã hoá thông thường.
 Ví dụ mô tả thuật toán
Ký hiệu A B C D E
Số lần xuất hiện 15 7 6 5 6
Ký hiệu Đếm P
i
Log
2
(1/p
i
) Mã Tổng bits
A 15 15/39 1.38 0 0 30
B 7 7/39 2.48 0 1 14

C 6 6/39 2.7 1 0 12
E 6 6/39 2.7 1 1 0 18
D 5 5/39 2.96 1 1 1 15
Bảng 2.1: Mô tả thuật toán Shannon-Fano
Số bits sử dụng trung bình: (tổng bits/ số lần xuất hiện.
R = (30+14+12+18+15) / 39 = 2.29 bits
• Ưu nhược điểm.
Trang 7
 Nhược điểm:
- Thuật toán Shanon có hệ số nén khá thấp và yêu cầu khá phức tạp nên
hiếm khi được sử dụng.
 Ưu điểm:
- Đơn giản, dễ thực hiện.
2.1.1.2. Thuật toán Huffman
Thuật toán Huffman có ưu điểm là hệ số nén tương đối cao, phương
pháp thực hiện tương đối đơn giản, đòi hỏi ít bộ nhớ, có thể xây dựng dựa
trên các mảng bé hơn 64KB. Nhược điểm của nó là phải chứa cả bảng mã
vào tập tin nén thì phía nhận mới có thể giải mã được do đó hiệu suất nén
chỉ cao khi ta thực hiện nén các tập tin lớn.
• Nguyên lý:
Nguyên lý của phương pháp Huffman là mã hóa các bytes trong tệp dữ liệu
nguồn bằng biến nhị phân. Nó tạo mã độ dài biến thiên là một tập hợp các bits. Đây
là phương pháp nén kiểu thống kê, những ký tự xuất hiện nhiều hơn sẽ có mã ngắn
hơn
• Thuật toán:
a) Thuật toán nén:
Bước 1: Tìm hai ký tự có trọng số nhỏ nhất ghép lại thành một, trọng số của ký
tự mới bằng tổng trọng số của hai ký tự đem ghép.
Bước 2: Trong khi số lượng ký tự trong danh sách còn lớn hơn một thì thực hiện
bước một, nếu không thì thực hiện bước ba.

Bước 3: Tách ký tự cuối cùng và tạo cây nhị phân với quy ước bên trái mã 0,
bên phải mã 1.
 Xét ví dụ.
Ký hiệu A B C D E
Số lần xuất hiện 15 7 6 5 6
Ký hiệu Xác suất Mã Tổng bit
Trang 8
A 15/39 1
0
13/39 0
0
1
11/39
1 15
B 7/39 000 21
C 6/39 001 18
E 6/39 010 18
D 5/39 011 15
Bảng 2.2: Mô tả thuật toán Huffman
- Số bit trung bình: 87/39 =2.23 (<2.28) Hiệu quả hơn Shannon –
Fano.
b) Thuật toán giải nén:
Bước 1: Đọc lần lượt từng bit trong tập tin nén và duyệt cây nhị phân đã được
xác định cho đến khi hết một lá. Lấy ký tự ở lá đó ghi ra tệp giải nén.
Bước 2: Trong khi chưa hết tập tin nén thì thực hiện bước một, ngược lại thì
thực hiện
Bước 3: Kết thúc thuật toán.
• Một số ưu, nhược điểm mã hufman:
 Nhược điểm:
- Mã Huffman chỉ thực hiện được khi biết được tần suất xuất hiện của các ký

tự.
- Mã Huffman chỉ giải quyết được độ dư thừa phân bố ký tự.
- Huffman tĩnh đòi hỏi phải xây dựng cây nhị phân sẵn chứa các khả năng.
Điều này đòi hỏi thời gian không ít do ta không biết trước kiểu dữ liệu sẽ được thực
hiện nén.
- Quá trình giải nén phức tạp do chiều dài mã không biết trước cho đến khi ký
tự đầu tiên được tìm ra.
Ưu điểm:
Trang 9
1
1
0
- Thuật toán Huffman có ưu điểm là hệ số nén tương đối cao, phương pháp
thực hiện tương đối đơn giản, đòi hỏi ít bộ nhớ, có thể xây dựng dựa trên các mảng
bé hơn 64KB.
2.1.1.3. Thuật toán Run-length
Loại dư thừa đơn giản nhất trong một tập tin là các đường chạy dài gồm các kí tự
lặp lại, điều này thường thấy trong các tập tin đồ hoạ bitmap, các vùng dữ liệu hằng
của các tập tin chương trình, một số tập tin văn bản
 Ví dụ, xét chuỗi sau:
AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD
Chuỗi này có thể được mã hoá một cách cô đọng hơn bằng cách thay thế chuỗi kí
tự lặp lại bằng một thể hiện duy nhất của kí tự lặp lại cùng với một biến đếm số lần
kí tự đó được lặp lại. Ta muốn nói rằng chuỗi này gồm bốn chữ A theo sau bởi ba
chữ B rồi lại theo sau bởi hai chữ A, rồi lại theo sau bởi năm chữ B Việc nén một
chuỗi theo phương pháp này được gọi là mã hoá độ dài loạt. Khi có những loạt dài,
việc tiết kiệm có thể là đáng kể. Có nhiều cách để thực hiện ý tưởng này, tuỳ thuộc
vào các đặc trưng của ứng dụng (các loạt chạy có khuynh hướng tương đối dài hay
không . Có bao nhiêu bit được dùng để mã hoá các kí tự đang được mã ?).
Nếu ta biết rằng chuỗi của chúng ta chỉ chứa các chữ cái, thì ta có thể mã hoá biến

đếm một cách đơn giản bằng cách xen kẻ các con số với các chữ cái. Vì vậy chuỗi
kí tự trên được mã hoá lại như sau: 4A3BAA5B8CDABCB3A4B3CD
Ở đây "4A" có nghĩa là "bốn chữ A" Chú ý là không đáng để mã hoá các loạt
chạy có độ dài 1 hoặc 2 vì cần đến hai kí tự để mã hoá.
Ðối với các tập tin nhị phân một phiên bản được tinh chế của phương pháp này
được dùng để thu được sự tiết kiệm đáng kể. Ý tưởng ở đây là lưu lại các độ dài
loạt, tận dụng sự kiện các loạt chạy thay đổi giữa 0 và 1 để tránh phải lưu chính các
số 0 và 1 đó. Ðiều này giả định rằng có một vài loạt chạy ngắn (Ta tiết kiệm các bit
trên một loạt chạy chỉ khi độ dài của đường chạy là lớn hơn số bit cần để biễu diễn
chính nó trong dạng nhị phân), nhưng khó có phương pháp mã hoá độ dài loạt nào
hoạt động thật tốt trừ phi hầu hết các loạt chạy đều dài.
Việc mã hoá độ dài loạt cần đến các biễu diễn riêng biệt cho tập tin và cho bản đã
được mã hoá của nó, vì vậy nó không thể dùng cho mọi tập tin, điều này có thể
hoàn toàn bất lợi, ví dụ, phương pháp nén tập tin kí tự đã được đề nghị ở trên sẽ
không dùng được đối với các chuỗi kí tự có chứa số. Nếu những kí tự khác được sử
Trang 10
dụng để mã hoá các số đếm, thì nó sẽ không làm việc với các chuỗi chứa các kí tự
đó. Giả sử ta phải mã hoá bất kì kí tự nào từ một bảng chữ cái cố định bằng cách
chỉ dùng các kí tự từ bảng chữ cái đó. Ðể minh hoạ, giả sử ta phải mã hoá bất kì
một chuỗi nào từ một chữ cái đó, ta sẽ giả định rằng ta chỉ có 26 chữ cái trong bảng
chữ cái (và cả khoảng trống) để làm việc.
Ðể có thể dùng vài chữ cái để biểu diễn các số và các kí tự khác biểu diễn các phần
tử của chuỗi sẽ được mã hoá, ta phải chọn một kí tự được gọi là kí tự "Escape".
Mỗi một sự xuất hiện của kí tự đó báo hiệu rằng hai chữ cái tiếp theo sẽ tạo thành
một cặp (số đếm, kí tự) với các số đếm được biểu diễn bằng cách dùng kí tự thứ i
của bảng chữ cái để biểu diễn số i. Vì vậy, chuỗi ví dụ của chúng ta sẽ được biểu
diễn như sau với Q được xem là các kí tự
Escape"QDABBBAABQHCDABCBAAAQDBCCCD
Tổ hợp của kí tự "Escape", số đếm và một kí tự lặp lại được gọi là một dãy Escape.
Chú ý rằng không đáng để mã hoá các đường chạy có chiều dài ít hơn bốn kí tự, vì

ít nhất là cần đến ba kí tự để mã hoá bất kì một loạt chạy nào.
Trong trường hợp bản thân kí tự "Escape" xuất hiện trong dãy kí tự cần mã hoá ta
sử dụng một dãy "Escape" với số đếm là 0 (kí tự space) để biểu diễn kí tự "Escape".
Như vậy trong trường hợp kí tự "Escape" xuất hiện nhiều thì có thể làm cho tập tin
nén phình to hơn trước.
Các loạt chạy dài có thể được cắt ra để mã hoá bằng nhiều dãy Escape, ví dụ, một
loạt chạy gồm 51 chữ A sẽ được mã hoá như QZAQYA bằng cách dùng trên.
Phương pháp mã hoá độ dài loạt thường được áp dụng cho các tập tin đồ hoạ
bitmap vì ở đó thường có các mảng lớn cùng màu được biểu diễn dưới dạng bitmap
là các chuỗi bit có đường chạy dài. Trên thực tế, nó được dùng trong các tập tin
.PCX, .RLE.
2.1.2. Mô hình từ điển
2.1.2.1. Thuật toán LZ78
Thay vì thông báo vị trí đoạn văn lặp lại trong quá khứ, mã LZ78 đánh số tất
cả các đoạn văn sao cho mỗi đoạn ghi nhận số hiệu đoạn văn lặp lại trong quá khứ
cộng với một ký tự mà nó làm cho đoạn đó khác với đoạn trong quá khứ. Như vậy
mỗi đoạn mới là một đoạn ký tự trong quá khứ cộng với một ký tự trong quá khứ.
Chính vì thế đoạn mới khác với đoạn cũ trong quá khứ.
Ví dụ: Giả sứ ta có đoạn văn bản sau:” aaabbabaabaaabab”
Trang 11
Theo thuật toán LZ78 thì chúng được phân đoạn như sau:
Bảng 2.3: Mô tả thuật toan LZ78
Như vậy bản nén của chúng ta là: (0,a); (1,a); (0,b); (3,a); (4,a); (5,a); (4,b)
 Thuật toán nén:
Bước 1: Đọc một ký tự -> ch, đoạn được gán bằng 1, kết nạp ký tự đó vào từ điển,
w=ch;
Bước 2: While not eof(f) do
Begin
Đọc tiếp ký tự tiếp theo w:= ww+ch;
If w thuộc từ điển then ww:=w;

Else begin
Code(w,j);
Ghi j và ch vào tệp nén.
Thêm w vào từ điển.
End;
End;
Bước 3: Dừng chương trình.
 Thuật toán giải nén
Bước 1: Đọc thông tin về từ điển đã được lưu trong tệp nén, tl:=false;
Input A Aa b Ba baa baaa bab
Đoạn 1 2 3 4 5 6 7
output 0+a 1+a 0+b 3+a 4+a 5+a 4+b
Trang 12
Bước 2: while not eof(f) do
Begin
Đọc byte tiếp theo -> b
Decode(b,s,t);
If tl=false then w:=w+s
Else w:=ww+s;
TIMCHU(w,t);
If t=false then
Begin
Ghi s ra tệp giải nén Thêm s vào từ
điển
End
Else Begin
ww:=s;
End;
End;
Bước 3: Dừng chương trình.

- Đánh giá: Nói chung thuật toán LZ78 là một thuật toán nén văn bản khá tốt, có
thời gian chạy chương trình tương đối nhanh tuy nhiên khả năng tiết kiệm chưa
được khai thác
2.1.2.2. Thuật toán LZW
Chúng ta sẽ phân tích thuật toán LZW ở phần tiếp theo dưới đây.
2.2. Phương pháp nén tổn hao
2.2.1. Phương pháp nén ảnh MPEG
MPEG (Moving Picture Expert Group) được ra đời vào năm 1988 nhằm mục đích
chuẩn hoá cho nén tín hiệu âm thanh và video. MPEG - 1 có thể nén tín hiệu video
tới 1.5Mbit/s với chất lượng VHS và âm thanh lập thể (stereo audio) với tốc độ 192
bit/s. Nó được dùng để lưu trữ video và âm thanh trên CD-ROM.
Trang 13
Vào những năm 1990, MPEG-2 đã ra đời nhằm đáp ứng các tiêu chuẩn nén video
cho truyền hình. MPEG-2 có khả năng mã hoá tín hiệu truyền hình ở tốc độ 3-
15Mbit/s và truyền hình độ nét cao ở tốc độ tới 15-30Mbit/s. MPEG-2 cho phép mã
hoá tín hiệu video với nhiều mức độ phân giải khác nhau, chúng có khả năng đáp
ứng cho nhiều ứng dụng khác nhau. Nhiều thuật toán tương ứng với nhiều các ứng
dụng khác nhau đã phát triển và được tập hợp lại thành một bộ tiêu chuẩn đầy đủ
của MPEG. Việc áp dụng toàn bộ các đặc điểm của chuẩn MPEG-2 trong tất cả các
bộ mã hoá và giải mã là không cần thiết do sự phức tạp của thiết bị cũng như sự tốn
kém về dải thông của đường truyền Vì vậy trong hầu hết các trường hợp ta chỉ sử
dụng một phần nhất định trong toàn bộ các đặc điểm của chuẩn MPEG-2, chúng
thường được gọi là profiles và levels. Một profile sẽ xác định một thuật toán (điều
chỉnh bitstream và độ phân giải màu) và một level sẽ xác định một số tiêu chí bắt
buộc cho các tham số của bức ảnh (ví dụ như kích thứơc ảnh và số lượng bit).
MPEG-4 trở thành một tiêu chuẩn cho nén ảnh kỹ thuật truyền hình số, các ứng
dụng về đồ hoạ và video tương tác hai chiều (games, videoconferencing) và các
ứng dụng multimedia tương tác hai chiều (World Wide Web hoặc các ứng dụng
nhằm phân phát dữ liệu video như truyền hình cáp, Internet video ) vào năm 1999.
Ngày nay, MPEG-4 đã trở thành một tiêu chuẩn công nghệ trong quá trình sản xuất,

phân phối và truy cập vào các hệ thống video. Nó đã góp phần giải quyết vấn đề về
dung lượng cho các thiết bị lưu trữ, giải quyết vấn đề về băng thông của đường
truyền tín hiệu video hoặc kết hợp cả hai vấn đề trên.
MPEG không phải là một công cụ nén đơn lẻ mà ưu điểm của nén ảnh dùng MPEG
chính là ở chỗ MPEG có một tập hợp các công cụ mã hoá chuẩn, chúng có thể được
kết hợp vói nhau một cách linh động để phục vụ cho một loạt các ứng dụng khác
nhau.
Nén MPEG là sự kết hợp hài hoà của bốn kỹ thuật cơ bản: Tiền xử lý
(Preprocessing), đoán trước sự chuyển động của các frame ở bộ mã hoá (temporal
prediction), bù chuyển động ở bộ giải mã (motion compensation) và mã lượng tử
hoá (quatisation coding). Các bộ lọc tiền xử lý sẽ lọc ra những thông tin không cần
thiết từ tín hiệu video và những thông tin khó mã hoá nhưng không quan trọng cho
sự cảm thụ của mắt người. Kỹ thuật đoán chuyển động dựa trên nguyên tắc là các
ảnh trong chuỗi video dường như có liên quan mật thiết với nhau theo thời gian:
Mỗi frame tại một thời điểm nhất định sẽ có nhiều khả năng giống với các frame
đứng ngay phía trước và ngay phía sau nó. Các bộ mã hoá sẽ tiến hành quét lần lượt
từng phần nhỏ trong mỗi frame gọi là macro blocks, sau đó nó sẽ phát hiện macro
Trang 14
block nào không thay đổi từ frame này tới frame khác. Bộ mã hoá sẽ tiên đoán
trước sự xuất hiện của các macro blocks khi biết vị trí và hướng chuyển động của
nó. Do đó chỉ những sự thay đổi giữa các khối trong frame hiện tại (motion
compesated residual) và các khối được tiên đoán mới được truyền tới bên phía thu.
Phía bên thu tức bộ giải mã đã lưu trữ sẵn những thông tin mà không thay đổi từ
frame này tới frame khác trong bộ nhớ đệm của nó và chúng được dùng để điền
thêm một cách đều đặn vào các vị trí trống trong ảnh được khôi phục.
Nén tín hiệu video được thực hiện nhờ việc loại bỏ cả sự dư thừa về không gian
(spatial coding) và thời gian (temporal coding). Trong MPEG, việc loại bỏ dư thừa
về thời gian (nén liên ảnh) được thực hiện trước hết nhờ sử dụng các tính chất
giống nhau giữa các ảnh liên tiếp (Inter-frame techniques). Chúng ta có thể sử dụng
tính chất này để tạo ra các bức ảnh mới nhờ vào những thông tin từ những ảnh đã

gửi trước nó (“predicted”). Do vậy ở phía bộ mã hoá, ta chỉ cần gửi những bức ảnh
có thay đổi so với những ảnh trước, sau đó ta lại dùng phương pháp nén về không
gian để loại bỏ sự dư thừa về không gian trong chính bức ảnh sai khác này. Nén về
không gian dựa trên nguyên tắc là phát hiện sự giống nhau của các điểm ảnh
(pixels) lân cận nhau (Intra-frame coding techniques). JPEG chỉ áp dụng phương
pháp nén theo không gian vì nó được thiết kế để xử lý và truyền các ảnh tĩnh. Tuy
nhiên nén tín hiệu theo phương pháp của JPEG cũng có thể được dùng để nén các
bức ảnh một cách độc lập trong dãy tín hiệu video. ứng dụng này thường được gọi
là JPEG động (Motion JPEG). Trong một chu kỳ gửi một dãy các bức ảnh theo kiểu
JPEG động, ảnh đầu tiên được nén nhờ sự loại bỏ độ dư thừa về không gian, sau đó
các ảnh tiếp theo được nén nhờ sự loại bỏ độ dư thừa về thời gian (nén liên ảnh).
Quá trình được lặp đi lặp lại cho một dãy các bức ảnh trong tín hiệu video.
Thuật toán nén MPEG cũng dựa trên phép biến đổi DCT cho các khối ảnh 8x8
picxels để tìm ra sự thừa về không gian một cách có hiệu quả giữa các điểm ảnh
trong cùng một bức ảnh. Tuy nhiên, trong trường hợp có mối tương quan chặt chẽ
giữa các điểm ảnh trong các bức ảnh kế tiếp nhau tức là trong trường hợp hai bức
ảnh liên tiếp có nội dung trùng nhau, kỹ thuật Inter-frame coding techniques sẽ
được dùng cùng với việc tiên đoán sự dư thừa về không gian để tạo thành kỹ thuật
tiên đoán bù chuyển động giữa các bức ảnh (Motion compesated prediction
between frames). Trong nhiều sơ đồ nén MPEG, người ta thường kết hợp cả việc
tiên đoán bù chuyển động theo thời gian và phép biến đổi thông tin theo không gian
để đạt hiệu quả nén cao (Hybrid DPCM/DCT coding of video).
Trang 15
Hầu hết các sơ đồ nén MPEG đều dùng kỹ thuật lấy mẫu bổ xung (Subsampling)
và lượng tử hoá (Quantization) trước khi mã hoá. Lấy mẫu bổ xung nhằm mục đích
để làm giảm kích thước bức ảnh đầu vào theo cả theo chiều ngang và chiều dọc,
như vậy sẽ giảm số lượng các điểm ảnh trước mã hoá. Cũng nên nhớ rằng trong
một số trường hợp người ta còn lấy mẫu bổ xung theo thời gian để làm giảm số
lượng các bức ảnh trong dãy ảnh trước khi mã hoá. Đây được xem như là một kỹ
thuật rất cơ bản nhằm loại bỏ sự dư thừa dựa vào khả năng lưu ảnh của mắt người

cảm thụ. Thường thường, chúng ta có thể phân biệt sự thay đổi về độ sáng của ảnh
(changes in Brightness) tốt hơn so với sự thay đổi về màu (Chromaticity changes).
Do đó trước hết các sơ đồ nén MPEG sẽ tiến hành chia bức ảnh thành các thành
phần Y (Luminance hay brightness plane) và UV (Chrominance hay color planes)
tức là một thành phần về độ sáng và hai thành phần về độ màu. Các tín hiệu video
thành phần này sẽ được lấy mẫu (samples) và số hoá (digitised) để tạo nên các
điểm ảnh rời rạc theo tỷ lệ 4 : 2 : 2 và 4 : 2 : 0.
Kỹ thuật tiên đoán bù chuyển động được sử dụng như là một trong những công cụ
mạnh để làm giảm sự dư thừa về không gian giữa các bức ảnh. Khái niệm về bù
chuyển động là dựa trên sự phán đoán hướng chuyển động của các bức ảnh tức là
các ảnh thành phần trong dãy video sẽ được thay thế gần đúng. Kỹ thuật tiên đoán
bù chuyển động giữa các bức ảnh được xem như là biện pháp để hạn chế bớt các
thông số của chuyển động bởi việc dùng các vector chuyển động để mô tả sự dịch
chuyển của các điểm ảnh. Kết quả tiên đoán tốt nhất của một điểm ảnh là dựa trên
sự tiên đoán bù chuyển động từ một bức ảnh đã mã hoá được truyền phía trước của
nó. Cả hai thông số, sai số chuyển động (biên độ) và các vectors chuyển động
(hướng chuyển động) đều được truyền tới phía bên nhận. Tuy nhiên do có mối quan
hệ tương quan chặt chẽ giữa các điểm ảnh về không gian (trùng về không gian),
một vector chuyển động có thể được dùng cho một khối các điểm ảnh gồm các
pixels lân cận nhau (MPEG -1 và MPEG -2 dùng các khối 16 x16 pixels).
Trong MPEG-2, có nhiều phương pháp để tiên đoán sự chuyển động. Ví dụ một
khối ảnh có thể được tiên đoán xuôi từ những ảnh đã được truyền trước nó
(Forward Predicted), có thể đoán ngược từ những ảnh truyền sau nó (Backward
Predicted) hoặc theo cả hai chiều (Bidirectionally Predicted). Các phương pháp
dùng để tiên đoán các khối trong cùng một ảnh cũng có thể không giống nhau,
chúng có thể thay đổi từ khối nọ sang khối kia. Hơn nữa, hai trường (fields) trong
cùng một khối cũng có thể được tiên đoán theo hai cách khác nhau dùng các vector
độc lập nhau hoặc chúng có thể dùng chung một vector. Đối với mỗi khối ảnh, bộ
Trang 16
mã hoá sẽ chọn các phương pháp tiên đoán thích hợp, cố gắng đảm bảo chất lượng

ảnh tốt nhất khi được giải mã trong điều kiện yêu cầu khắt khe về số bit. Các thông
số liên quan tới chọn phương pháp tiên đoán cũng được truyền tới bộ giải mã cùng
với dự đoán sai số nhằm khôi phục gần chính xác ảnh gốc.
Trong MPEG, có 3 kiểu ảnh khác nhau được dùng để mã hoá cho các khối ảnh.
Kiểu ảnh ‘Intra’ (I-pictures) là ảnh được mã hoá một cách độc lập mà không cần
tham khảo tới các ảnh khác. Hiệu quả nén tín hiệu đạt được do loại bỏ sự thừa về
không gian mà không có yếu tố thời gian tham gia vào quá trình. I-pictures được
dùng một cách tuần hoàn để tạo thành các điểm tựa cho dòng dữ liệu trong quá
trình giải mã.
Ảnh ‘Predictive’ (P-pictures) có thể sử dụng các ảnh I hoặc P ngay sát phía trước
nó để bù chuyển động và chính nó cũng có thể được dùng để tham khảo cho việc
tiên đoán các ảnh khác tiếp theo. Mỗi khối ảnh trong P-picture có thể hoặc được mã
theo kiểu tiên đoán (predicted) hoặc được mã một cách độc lập (intra-coded). Do sử
dụng cả nén theo không gian và thời gian, hiệu quả nén của P-pictures được tăng
lên một cách đáng kể so với I-pictures.
Ảnh ‘Bidirectionally-Predictive’ pictures hay B- Pictures có thể sử dụng các ảnh I
hoặc P phía trước hoặc phía sau nó cho việc bù chuyển động và do vậy cho kết quả
nén cao nhất. Mỗi khối trong B-pictures có thể được tiên đoán theo chiều ngược,
xuôi, cả hai hướng hoặc được mã một cách độc lập. Để có thể tiên đoán ngược từ
một bức ảnh phía sau nó, bộ mã hoá sẽ tiến hành sắp xếp lại các bức ảnh từ thứ tự
xuất hiện một cách tự nhiên sang một thứ tự khác của các ảnh trên đường truyền.
Do vậy từ đầu ra của bộ mã hoá, B-pictures được truyền sau các ảnh dùng để tham
khảo ở phía trước và phía sau của nó. Điều này sẽ tạo ra độ trễ do phải sắp xếp lại
thông tin, độ trễ này lớn hay nhỏ là tuỳ thuộc vào số các bức ảnh B-pictures liên
tiếp nhau được truyền.
Các ảnh I, P, B-pictures thường xuất hiện theo một thứ tự lặp đi lặp lại một cách
tuần hoàn, do đó ta có khái niệm về nhóm các bức ảnh GOP (Group of Pictures).
Một ví dụ của GOP ở dạng ảnh tự nhiên xuất hiện theo thứ tự như sau:
B
1

B
2
I
3
B
4
B
5
B
7
B
8
P
9
B
10
B
11
P
12
Thứ tự xuất hiện của chúng trên đường truyền bị thay đổi do sự sắp xếp lại của bộ
mã hoá như sau:
I
3
B
1
B
2
P
6

B
4
B
5
P
9
B
7
B
8
P
12
B
10
B
11
Trang 17
Cấu trúc của một GOP có thể được mô tả bởi hai tham số: N là số các ảnh trong
GOP và M là khoảng cách giữa các ảnh P-pictures. Nhóm GOP này được miêu tả
như N = 12 và M = 3.
 SƠ ĐỒ CỦA BỘ MÃ HOÁ VÀ GIẢI MÃ DÙNG MPEG-2
Sơ đồ bộ mã hoá và giải mã MPEG 2 được trình bày trên hình 3.1.
• Mã hoá MPEG-2
Quá trình mã hoá cho P pictures và B pictures được giải thích như sau:
Dữ liệu từ các khối ảnh (macroblocks) cần được mã hoá sẽ được đưa đến cả bộ trừ
(Subtractor) và bộ đoán chuyển động (Motion Estimator). Bộ đoán chuyển động sẽ
so sánh các khối ảnh mới được đưa vào này với các khối ảnh đã được đưa vào
trước đó và được lưu lại như là các ảnh dùng để tham khảo (Reference Picture). Kết
quả là bộ đoán chuyển động sẽ tìm ra các khối ảnh trong ảnh tham khảo gần giống
nhất với khối ảnh mới này. Bộ đoán chuyển động sau đó sẽ tính toán vector chuyển

động (Motion Vector), vector này sẽ đặc trưng cho sự dịch chuyển theo cả hai
chiều dọc và ngang của khối ảnh mới cần mã hoá so với ảnh tham khảo. Chúng ta
lưu ý rằng vector chuyển động có độ phân giải bằng một nửa do thực hiện quét xen
kẽ.
Bộ đoán chuyển động cũng đồng thời gửi các khối ảnh tham khảo này mà chúng
thường được gọi là các khối tiên đoán (Predicted macroblock) tới bộ trừ để trừ với
khối ảnh mới cần mã hoá (thực hiện trừ từng điểm ảnh tương ứng tức là Pixel by
pixel). Kết quả là ta sẽ được các sai số tiên đoán (Error Prediction) hoặc tín hiệu
dư, chúng sẽ đặc trưng cho sự sai khác giữa khối ảnh cần tiên đoán và khối ảnh
thực tế cần mã hoá.
Tín hiệu dư hay sai số tiên đoán này sẽ được biến đổi DCT, các hệ số nhận được
sau biến đổi DCT sẽ được lượng tử hoá để làm giảm số lượng các bits cần truyền.
Các hệ số này sẽ được đưa tới bộ mã hoá Huffman, tại đây số bits đặc trưng cho
các hệ số tiếp tục được làm giảm đi một cách đáng kể. Dữ liệu từ đầu ra của mã hoá
Huffman sẽ được kết hợp với vector chuyển động và các thông tin khác (thông tin
về I, P, B pictures) để gửi tới bộ giải mã.
Trang 18
Hình 2.1 Sơ đồ bộ mã hoá và giải mã dùng MPEG
Đối với trường hợp P-pictures, các hệ số DCT cũng được đưa đến bộ giải mã nội
bộ (nằm ngay trong bộ mã hoá). Tín hiệu dư hay sai số tiên đoán được biến đổi
ngược lại dùng phép biến đổi IDCT và được cộng thêm vào ảnh đứng trước để tạo
nên ảnh tham khảo (ảnh tiên đoán). Vì dữ liệu ảnh trong bộ mã hoá được giải mã
luôn nhờ vào bộ giải mã nội bộ ngay chính bên trong bộ mã hoá, do đó ta có thể
thực hiện thay đổi thứ tự các bức ảnh và dùng các phương pháp tiên đoán như đã
trình bày ở trên.
• Giải mã MPEG-2
Quá trình khôi phục lại ảnh tại bộ giải mã là hoàn toàn ngược lại. Từ luồng dữ liệu
nhận được ở đầu vào, vector chuyển động được tách ra và đưa vào bộ bù chuyển
động (Motion Compensator), các hệ số DCT được đưa vào bộ biến đổi ngược
IDCT để biến tín hiệu từ miền tần số thành tín hiệu ở miền không gian. Đối với P

pictures và B pictures, vector chuyển động sẽ được kết hợp với các khối tiên đoán
(predicted macroblock) để tạo thành các ảnh tham khảo.
Trang 19
2.2.2. Phương pháp nén âm thanh
• Mục đích:
Biểu diễn chuỗi số ngắn gọn.
Tốc độ bit thấp.
Chất lượng cao
• Động cơ:
Giảm tốc độ dữ liệu.
Giảm chi phí truyền dẫn (BW).
Giảm các yêu cầu lưu trữ.
• Các yêu cầu:
Cảm nhận trong suốt.
Độc lập nguồn.
Có khả năng đa kênh.
 Kỹ thuật nén MPEG1:
• Giới thiệu
Hình 2.2 : Các lớp của MPEG1
Được phát triển trên cơ sở phối hợp chuẩn ISO/IEC 11172.
Sử dụng tần số lấy mẫu của CD-DA, với fs=32;44.1;48kHz, mã hoá 16bits/mẫu tín
hiệu.
Tốc độ bít: 32 - 768 kbps/channel.
Các kiểu: Mono, dual-mono, dual-stereo, joint-stereo.
MPEG-1
Lớp I Lớp II Lớp III
Mono và Stereo
32, 44.1, 48kHz
Trang 20
Xác định các tham số khác nhau về tốc độ, dòng số sau khi nén, số mẫu trong

header cho một kênh, cấu trúc thời gian khung, phương pháp mã hoá dự đoán và
các chế độ làm việc.
• Đặc tính:
Hình 2.3: Sơ đồ xữ lý tín hiệu audio
• Khung lớp I : 12x32 =384.
• Khung lớp II, III: 12x32x3=1152.
• Kiến trúc:
Lớp I Lớp II Lớp III
Dùng cho thiết bị dân dụng Dùng cho thiết bị chuyên
dụng, đa môi trường
Dùng cho thiết bị chuyên
dụng, đa môi trường
Tốc độ dòng số liệu từ 32-
448kbps
Tốc độ dòng số liệu từ 32-
384kbps
Tốc độ dòng số liệu từ 32-
320kbps
384mẫu/khung/kênh 1152mẫu/khung/kênh 1152mẫu/khung/kênh
32 băng con đều nhau, mỗi
băng con gồm block 12 mẫu
32 băng con đều nhau, mỗi
băng con gồm block 36 mẫu
32 băng con tới hạnthành 18
MDCT
Chu kỳ một khung 8ms cho
kênh có f
s
=48kHz
Chu kỳ một khung 24ms

cho kênh có f
s
=48kHz
Chu kỳ một khung 24ms
cho kênh có f
s
=48kHz
Hệ số tỷ lệ 6 bits/băng, phân
phối bit theo phương thức ứng
trước.
Hệ số tỷ lệ 6 bits/băng, phân
phối bit theo phương thức
ứng trước.
Hệ số tỷ lệ 6 bits/băng, phân
phối bit theo phương thức
ứng trước.
Lọc băng con 0
Lọc băng con 1
Lọc băng con 31
Lọc băng con 2

Các mẫu
Audio
ngõ vào
12 mẫu 12 mẫu 12 mẫu
12 mẫu 12 mẫu 12 mẫu
12 mẫu 12 mẫu 12 mẫu
12 mẫu 12 mẫu 12 mẫu
Khung
lớp I

Khung lớp II
và lớp III
Trang 21
Hình 2.4 Sơ đồ xữ lý của các lớp MPEG1
• Thuật toán cơ bản
– Tiến hành chia ngõ vào thành 32 băng con bởi các băng lọc.
• Lấy 32 mẫu PCM trong cùng một thời điểm, kết quả là 32 hệ
số tần số ở ngõ ra.
– Trong MPEG-1 lớp I thì tập 32 giá trị PCM được kết hợp vào trong
khối gồm 12 nhóm 32 mẫu này.
– MPEG-1 lớp II và lớp III thì gồm 3 khối 12 nhóm này.
– Phân bố bit đảm bảo rằng mọi nhiễu lượng tử nằm ở dưới các ngưỡng
che.
– Với mỗi băng con, xác định mức biên độ và mức nhiễu bằng mô hình
tâm sinh lý nghe. SMR (signal-mask rate) được sử dụng để xác định
số bit cho quá trình lượng tử hoá đối với mỗi băng con với mục đích
giảm thiểu dung lượng.
• Phân phối bit
– Là thủ tục xác định số bit cho mỗi băng con.
– Dựa vào thông tin vào từ mô hình tâm sinh lý nghe
Băng lọc
phân tích đa
pha 32 kênh
Lýợng tử
hoá
Mã hoá
MU
X
FFT
LI: 512

LII: 1024
Phân tích
tâm sinh lý
âm học
Phân phối
bit động
32
Dữ liệu
Thông
tin thêm
32
s(n)
Băng lọc
phân tích đa
pha 32 kênh
MDCT
MUX
FFT
Phân tích tâm
sinh lý âm
học
SMR
32
s(n)
kênh
Vòng lặp chỉ định bit
Lýợng tử hoá
Mã hoá Huffman
Mã thông
tin thêm

↓32
MPEG1 lớp1,2
1,2
MPEG1 lớp3
3
SMR (Signal Mark
Rate): Tỷ số tín
hiệu/ngưỡng che
Trang 22
Ví dụ: Sau khi phân tích, mức của 16 băng con đầu là:
Band 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Level (db) 0 8 12 10 6 2 10 60 35 20 15 2 3 5 3 1
Nếu mức của băng con thứ 8 là 60 thì nó che 12 dB ở băng con thứ 7 và 15 dB ở
băng con thứ 9.
Băng con 7 có mức 10dB<12dB: loại. Băng con 9 có mức 35dB>15dB: gởi đi.
 Chỉ có các mức lớn hơn mức che là được gởi đi thay vì dùng 6 bits để
mã hoá, ta chỉ dùng 4 bits.
MPEG-Layer I: Bộ lọc DCT 1 khung và tần số bằng phẳng trong mỗi băng con. Mô
hình tâm sinh lý nghe sử dụng che tần số.
MPEG-Layer II: Có 3 khung trong bộ lọc (trước, hiện tại và kế), tổng là 1125 mẫu.
Sử dụng vài bits để che thời gian.
MPEG-Layer III: Sử dụng bộ lọc tới hạn để đáp ứng tốt hơn. Mô hình tâm sinh lý
nghe sử dụng che thời gian, che tần số, tính toán độ dư thừa stereo và mã hoá
Huffman.
• Cấu trúc khung:
Hình 2.5 Cấu trúc khung MPEG
- Header: Gồm 12 bits đồng bộ; 20 bis thông tin hệ thống chỉ thị tốc độ bit
- CRC với đa thức sinh x16+x15+x2+1.
- Side Info: Gồm phân bố bit: lớp 1 với 4 bits tuyến tính cho các băng con,
lớp II 4 bits cho các băng con tần thấp, 3 bit tần trung và 2 bits tần cao; hệ số tỷ

lệ là 6 bits/băng con kết hợp với phân bố bits và các bits mã hóa cho băng con
đó để xác định giá trị, lớp III mã hóa âm thanh nổi.
Trang 23
SCFSI: Scale Factor Selection Information
Layer I
Layer II
Layer III
Header CRC Bit Allocation Scale Factors Samples Ancillary Data
(32) (0-16) (128-256) (0-384) (384)
Header CRC Bit Allocation Scale Factors Samples Ancillary Data
(32) (0-16) (128-256) (0-60) (0-384) (1152)
SCFSI
Header CRC Side Information Bit Reservoir Ancillary Data
(32) (0-16) (128-256) (384) (1152)
Samples
– Bit Reservoir: Bit cung cấp, các mẫu dữ liệu từ 1 hoặc 2 khung trước.
– Samples: 32x12 mẫu đối với lớp I và 32x36 mẫu đối với lớp II và lớp III.
– Ancillary Data: Dữ liệu bổ sung
 Kỹ thuật nén MPEG2:
• Mở rộng MPEG-1 cho các ứng dụng mới.
• Có khả năng áp dụng nhiều tốc độ khác nhau, từ 32 đến 1066kbps. Tần số
lấy mẫu có thể giảm 1 nửa so với MPEG-1 (16; 22,05; 24kHz).
• Khả năng đa kênh, tốc độ bits mở rộng có thể lên đến 1 Mbps cho các ứng
dụng tốc độ cao. Cho phép nén đồng thời nhiều kênh.
• Chất lượng âm thanh tuỳ thuộc ứng dụng.
• Hỗ trợ khả năng lồng tiếng, bình luận nhiều ngôn ngữ trong phần bits mở
rộng (7 kênh).
• MPEG-2 sử dụng mã hoá cường độ cao, giảm xuyên âm, mã hoá dự đoán
liên kênh và mã hoá ảo ảnh kênh trung tâm để nhận được tốc độ bit kết hợp
384 kbps.

• Khung MPEG-2 được chia thành 2 phần, phần đầu là MPEG-1stereo, phần
mở rộng MPEG-2 chứa tất cả những dữ liệu surround khác.
Hình 2.6 Cấu trúc khung MPEG2
Mono-stereo
MPEG-1
32;44.1;48kHz
MPEG-2
Layer I
Layer II
Layer III
Mono-stereo
MPEG-2
16;22,05;24kHz
Layer I
Layer II
Layer III
5 channels
MPEG-2
multi channel
32;44.1;48kHz
Layer I
Layer II
Layer III
Trang 24
Mã hóa và giải mã MPEG2:
Hình 2.7 Sơ đồ mã hóa và giải mã của MPEG2 dùng cho âm thanh
2.3. Lựa chọn phương pháp
2.3.1. Phân tích ưu nhược điểm của các thuật toán
Trong giới hạn tìm hiểu nén dữ liệu dưới dạng một bản tin em nhận thấy các
phương pháp nén được dùng phổ biến trên có những đặc điểm đáng chú ý: thuật

toán nén độ dài loạt (Runlength) không thể áp dụng cho nhiều loại tập tin được, ví
dụ như tập tin chương trình, tập tin cơ sở dữ liệu vì ở đó các loạt chạy là rất ngắn,
do đó nếu áp dụng thuật toán này không những không làm bé tập tin mà còn làm
phình to chúng
Các thuật toán còn lại (Huffman, Shannon-Fano,LZ77 và LZW) đều có thể áp dụng
được để nén nhiều loại tập tin trên các máy vi tính.
Thuật toán Shanon có hệ số nén khá thấp và yêu cầu khá phức tạp nên hiếm khi
được sử dụng.
Thuật toán Huffman có ưu điểm là hệ số nén tương đối cao, phương pháp thực hiện
tương đối đơn giản, đòi hỏi ít bộ nhớ, có thể xây dựng dựa trên các mảng bé hơn
64KB. Nhược điểm của nó là phải chứa cả bảng mã vào tập tin nén thì phía nhận
mới có thể giải mã được do đó hiệu suất nén chỉ cao khi ta thực hiện nén các tập tin
lớn
Matrix
MPEG-1
encoder
MPEG-2
Extensio
n
encoder
L
C
R
LS
RS
L0
R0
T3
T4
T5

+
MPEG-1
decoder
MPEG-2
Extensio
n
decoder
L0

R0

T3

T4

T5

Inverse
Matrix
L

C

R

LS

RS

channel

Trang 25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×