Phương pháp mã Huffman

Một phần của tài liệu BÁO CÁO TỐT NGHIỆP: NÉN TÍN HIỆU _EEG ppsx (Trang 32 - 34)

Sơ đồ mã hóa Huffman tạo ra những mã prefix tối ưu thông qua thuật toán tham

lam nhằm khai thác cây nhị phân Huffman. Do tỉ lệ nén nén của nó rất gần với giới

hạn nén được biểu diễn ở (3), mã hóa Huffman cũng được gọi là mã hóa entropy. Kĩ

thuật này được sử dụng cho phương pháp nén dữ liệu không mất thông tin. Do đó ta

hoàn toàn có thể sử dụng nó như là một phương pháp điển hình cho nén tín hiệu EEG. Ở đây chúng ta sử dụng những thuật ngữ “kí tự” (symbol or character), để biểu diễn dữ

liệu lối vào cho thuật toán của chúng ta, đó là những mẫu tín hiệu EEG. Việc này hoàn toàn chỉ là thuận lợi cho việc mô tả thuật toán.

Input

Bảng chữ A = {a1, a2, …,an} là bảng kí hiệu kích thước n

Tập W = {w1, w2, …,wn} là tập hợp những trọng số kí tự (luôn luôn tỉ lệ thuận với xác

suất của kí tự), cụ thể wi = weight (ai) , 1  i  n.

Output

Mã C(A, W) = {c1, c2,…,cn}, là tập hợp những từ mã (mã nhị phân), ở đây ci là từ mã của ai, 1  i  n Mục đích Đặt L(C) =    n i c length wi i 1 )

( là chiều dài tổng cộng của từ mã C. Điều kiện phải đạt được là L(C)  L(T) đối với mọi mã T (A, W).

Đây là thuật toán xây dựng mã Huffman thông thường dựa vào xác suất đã biết

của các mẫu tín hiệu. Tuy nhiên, đối với tín hiệu EEG, nhiều khi cần phải tiến hành ghi tín hiệu điện não trong thời gian dài (long-term signal), và nhiều lúc xuất hiện

những tín hiệu bộc phát biểu hiện bệnh lý bất thường có biên độ lớn hơn rất nhiều so

với các tín hiệu cơ bản hay các tín hiệu xảy ra hiếm khi. Khi đó sử dụng thuật toán

năng của các thiết bị lưu trữ thông thường. Để giải quyết vấn đề này chúng ta sẽ sử

dụng một kĩ thuật dựa vào cây Huffman “collapsed” (collapsed Huffman Tree - CHT). Kĩ thuật này cho phép tạo ra một mã mà chứa từ mã có chiều dài cực đại xác định (fixed- maximum length codeword). Trên CHT, mỗi lá sẽ được liên kết với một

xâu bit chiều dài thay đổi mà mã hóa kí tự tương ứng trên lá đó và sẽ tồn tại chính xác

một lá mà tương ứng với một tập hợp những kí tự thay cho một kí tự duy nhất . Ý tưởng là tạo ra những lá cây co (collapse) để những đường dẫn dài từ gốc (root) được

ngắn lại, vì vậy sẽ giới hạn được chiều dài xâu bit cực đại của những từ mã.

Cho một bảng kí tự nguồn là A={a1, a2, a3,…., aM} và đặt I ={1, 2, …, M} là tập

hợp của những chỉ số của nó. Sẽ không mất tính tổng quát, khi giả sử những kí tự này

được sắp xếp thứ tự theo xác suất của nó, cụ thể là , nếu pi là xác suất của ai thì p1>p2>….>pM (3.4)

Giả sử rằng A được chia thành hai tập con không giao nhau A1 và A2 , với chỉ số tương ứng trong I1, I2. Thuật toán nén CHT coi A2như là một kí tự duy nhất s được mã hóa, với xác suât tương ứng

Ps = 

I2

i

pi (3.5)

Xem xét vấn đề thu được sự khôi phục chính xác những mẫu từ kí tự ak thuộc A2, và chia mã tiền tố giống nhau mà được sinh ra cho s cho tất cả các thành phần khác (adsbygoogle = window.adsbygoogle || []).push({});

của A2. Trong trường hợp này, theo sau từ mã s là b bít chiều dài cố định, ban đầu của

kí tự ak sẽ được phát ra.

Trong các bước giải mã, khi chuỗi bit tương ứng với s được tìm ra, thì b bit liên tiếp được dịch như giống như kí tự nguồn.

Tỉ lệ nén đạt được bởi kĩ thuật này là :

C = 1 -

b H

- ps (3.6)

Ở đây H là entropy của những kí tự A1{s} = {ai1,…., aim, s}. Số hạng ps là xác suất

của các kí tự thuộc A2.

Sự ép buộc chiều dài từ mã cực đại sẽ được gán vào giá trị được lựa chọn cho m

(cụ thể, chủ yếu của A1), vì cây Huffman cuối cùng có m+1 lá, nên số lượng bit của từ

mã được tính bằng tổng chiều cao của cây CHT mà dẫn đến lá tương ứng với từ mã

được xem như là sự phân chia A thành hai tập con A1, A2, để thiết kế một mã tối ưu

tập hợp chỉ số I1* phải được chọn lựa sao cho

(3.7)

Không may mắn là có thể lựa chọn tập I1 của m chỉ số từ {1, …, M} trong số

những cách bằng nhị thức của m trên M. Rõ ràng không thể khảo sát tỉ mỉ trong toàn bộ không gian tìm kiếm, vì vậy chúng ta lựa chọn để xác định tập I1, I2 bằng kinh

nghiệm đơn giản sau:

I1 = {1, 2, …., m}

I2 = {m+1, …., M} (3.8)

Do xác suất được sắp thứ tự, nên sự phân chia này đảm bảo rằng những kí tự có

xác suất cao sẽ có từ mã riêng của nó, trong khi những kí tự không thường xuyên xuất

hiện được co lại thành một lá duy nhất của cây Huffman. Không loại trừ trường hợp

giải pháp này chỉ tương ứng với sự tối ưu cục bộ, bởi hàm được tối thiểu được tổng hợp bởi những số hạng cơ bản mà không phải đơn điệu (-xlog2(x) với x Є [0, 1]), để

không chỉ đơn giản xuất phát từ đáp ứng (behavior) của hàm yêu cầu (7) khi số hạng

pi, pjđược trao đổi giữa I1, I2.

Giả sử cho một bảng kí tự nguồn A= {a, b, c, d, e, f} với xác suất lần lượt là P =

{0.4, 0.2, 0.2, 0.1, 0.05, 0.05}. Khi đó ta sẽ nhóm các kí tự thành 2 nhóm A1, A2

không giao nhau như sau :

A1 = {a, b, c, d} A2 = {e,f} = s (adsbygoogle = window.adsbygoogle || []).push({});

Khi đó Ps = (pe + pf) = 0.1

Ta xây dựng mã Huffman cho tập B = {a, b, c, d, s} với xác suất lần lượt là P’ = {0.4, 0.2, 0.2, 0.1, 0.1}. Với mô hình như trên chúng ta có một mã sắp theo thứ tự của các kí

tự như sau: C’ = {0, 10, 110, 1111, 1110}. Và do đó mã tương ứng của bảng nguồn là C = {0, 10, 110, 1111, 11100, 11111}.

Một phần của tài liệu BÁO CÁO TỐT NGHIỆP: NÉN TÍN HIỆU _EEG ppsx (Trang 32 - 34)