Phương pháp mã Huffman

Một phần của tài liệu Phương pháp nén tín hiệu EEG (Trang 31 - 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 w length c i i

1 ( )là chiều dài tổng cộng của từ mã C. Điều kiện phải đạt

Đâ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 Huffman truyền thống rất có khả năng sẽ tạo ra những từ mã rất dài, mà vượt quá khả 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 A2 như 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 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 A.

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ã đó, nếu cần thiết cộng thêm b bit do mã hóa chuỗi bit nguồn khi lá biểu diễn A2. Vì 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 Khi đó Ps = ∑(pe + pf) = 0.1 (adsbygoogle = window.adsbygoogle || []).push({});

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 Phương pháp nén tín hiệu EEG (Trang 31 - 34)