Mã hóa nguồn
215
Để đơn giản hoá các vấn đề không cần thiết, chúng ta sẽ tạo ra một chuỗi dữ liệu để mã hoá
thay vì lấy chuỗi dữ liệu ngẫu nhiên. Chuỗi dữ liệu này gồm có 3 ký hiệu. Ta sẽ dùng hàm
repmat
để tăng chiều dài chuỗi dữ liệu nhưng vẫn giữ nguyên xác suất xuất hiện các ký hiệu
(hàm repmat sẽ tạo một ma trân mới bằng cách lặp lại nhiều lần một ma trận có kích thước
nhỏ hơn).
% Dữ liệu mã hoá (lặp lại 50 lần đoạn [2 1 4 2 1 1 5 4 3 1])
sig = repmat([2 1 4 2 1 1 5 4 3 1],1,50);
symbols = [1 2 3 4 5]; % Tập các ký hiệu có trong dữ liệu cần mã hoá
p = [0.4 0.2 0.1 0.2 0.1]; % Xác suất ký hiệu tương ứng của các ký hiệu
dict = huffmandict(symbols,p); % Thành lập bộ mã.
hcode = huffmanenco(sig,dict); % Mã hoá dữ liệu.
dhsig = huffmandeco(hcode,dict); % Giải mã.
dhsig(1:10) % Hiển thị 10 ký hiệu đầu tiên của chuỗi dữ liệu đã được
% giải mã
14.8. MAÕ HOÙA SOÁ HOÏC (ARITHMETIC CODING)
Đây là một phương pháp khác để nén dữ liệu. Phương pháp này thích hợp cho các nguồn dữ
liệu có số ký hiệu ít và xác suất xuất hiện các ký hiệu chênh lệch lớn. Mã hoá số học đòi hỏi
phải cung cấp tính chất thống kê của tập dữ liệu nguồn. Cụ thể, đối với MATLAB, ta phải
cung cấp số lần xuất hiện của từng ký hiệu trong tập dữ liệu nguồn. Ví dụ, để mã hoá một
nguồn dữ liệu gồm 10 ký hiệu x, 10 ký hiệu y và 80 ký hiệu z, ta phải định nghĩa vector
counts chỉ ra số lần xuất hiện của 3 ký hiệu x, y, z như sau:
>> counts = [10,10,80];
Khi đã xác định rõ số lần xuất hiện của các phần tử trong vector counts nói trên, ta có thể
thực hiện mã hoá và giải mã bằng các hàm sau:
>> code = arithenco(seq, counts)
>> dseq = arithdeco(code, counts, len)
code là chuỗi dữ liệu đã được mã hoá còn dseq là chuỗi dữ liệu được khôi phục với số ký
hiệu khôi phục được xác định bởi len.
Ví dụ 14-8. Thực hiện mã hoá và giải mã theo phương pháp số học cho một chuỗi dữ liệu
gồm 10 ký hiệu x, 10 ký hiệu y và 80 ký hiệu z.
seq = repmat([3 3 1 3 3 3 3 3 2 3],1,50); % x: 1, y: 2, z: 3
counts = [10 10 80];
code = arithenco(seq,counts);
dseq = arithdeco(code,counts,length(seq));
#
Bài tập 14-1.
Tạo một chuỗi dữ liệu ngẫu nhiên lấy từ tập M = 8 ký hiệu. Vẽ tín hiệu biểu diễn chuỗi dữ
liệu trên dùng:
a. Tin hiệu nhị phân (2 mức 0 và 1)
b. Tín hiệu 8 mức
#
Bài tập 14-2.