Các phương pháp nén không mất thông tin (lossless compression)

Một phần của tài liệu các phương pháp nén được sử dụng để nén tín hiệu EEG (Trang 26 - 49)

3.1.1.1. Giới thiệu phương pháp nén

Như chúng ta đã biết tín hiệu EEG ghi lại các hoạt động điện của não nhằm phục vụ các nghiên cứu về não, hay chẩn đoán và điều trị bệnh nhân có rối lọan não. Ví dụ như, chuẩn đoán động kinh và vị trí não bị tổn thương liên quan đến rối loạn này. Một đặc điểm của tín hiệu EEG đo được trên người bị động kinh là có sự xuất hiện đột ngột, bất thường, quá mức của các xung động kinh như gai (Spike) hay phức hợp gai-sóng đứng (Spike and sharp wave complex). Vì thế, khi nén tín hiệu EEG phục vụ cho động kinh, các thông tin về các xung liên quan đến bệnh động kinh cần được bảo toàn đọ chính xác. Hay nói cách khác, kĩ thuật nén EEG yêu cầu khôi phục lại hoàn toàn dạng sóng từ dữ liệu được nén. Trong bài báo cáo này, những kĩ thuật nén dữ liệu EEG mà cho phép khôi phục lại hoàn toàn dạng sóng ghi được từ dữ liệu được nén sẽ được trình bày và thảo luận. Nén dữ liệu cho phép chúng ta có thể đạt được việc giảm đáng kể không gian được yêu cầu để lưu trữ tín hiệu và giảm thời gian truyền. Kĩ thuật mã Huffman kết hợp với việc tính toán ban đầu đã đạt đựơc tỉ lệ nén cao (trung bình khoảng 58% đối với tín hiệu EEG) với mức độ phức tạp tính toán thấp. Bằng cách khai thác kết quả này một sơ đồ mã hoá / giải mã (coder/decoder) nhanh, đơn giản có khả năng thực hiện thời gian thực trên PC được thực thi:

Hình 16 : data EEG in compression

Dữ liệu nguồn (EEG signal)

Source binary file

Compressed binary file Compression

Hình 17 : data EEG in decompression

Kĩ thuật đơn giản này được so sánh với những phương pháp nén khác như những phép biến đổi dự đoán (predictive transformations), lượng tử hóa véc-tơ (vector quantization), biến đổi cosin rời rạc (discrete consine transform) và những phương pháp nén đếm lặp (repetition count compression methods). Từ đó, người ta chỉ ra rằng cây Huffman “collapsed” cho phép thuật toán nén có thể lựa chọn chiều dài từ mã dài nhất mà không ảnh hưởng nhiều đến tỉ lệ nén. Vì vậy những bộ vi xử lý rẻ tiền và những thiết bị lưu trữ có thể sử dụng hiệu quả để lưu trữ những tín hiệu EEG dài trong dạng nén.

Compressed binary file

Reconstructed binary file

Decoded data in file (EEG signal) Decompression

Khi nén tín hiệu EEG, một yêu cầu cần được đảm bảo là không được cản trở việc khôi phục hoàn toàn thông tin gốc từ dữ liệu đã nén. Những kĩ thuật nén này được gọi là nén không mất thông tin (lossless compression).

Bình thường ta có thể sử dụng đo 32 kênh (là số lượng điện cực chuẩn đo), với độ chính xác là 8-b, tại tốc độ lấy mẫu là 1kHz. Tuy nhiên trong thực tế, ta có thể sử dụng số lượng kênh ít hơn và tốc độ bit thấp hơn cũng đủ. Trong bài báo cáo này chúng ta sẽ đề cập đến tốc độ lấy mẫu là 128 Hz/kênh, độ chính xác 8-b, 20 kênh (luồng dữ liệu 20 480 bps), mà được xem như là đủ để đạt được chất lượng tín hiệu EEG tốt.

Bên cạnh nén không mất thông tin, những kĩ thuật nén mất thông tin (lossy compression) có thể bảo quản được những thông tin quan trọng để đảm bảo rằng tránh được lỗi chẩn đoán. Tuy nhiên, do hiện tại thiếu một luật lệ và chấp nhận một tiêu chuẩn nào, nên trong tiến hành chữa bệnh các bác sĩ cân nhắc việc khôi phục EEG chính xác là một yêu cầu cần thiết trước tiên để thực hiện nén tốt hơn.

Nén dữ liệu lossless EEG đã được nghiên cứu sâu. Vì vậy, những thuật toán nén (đếm lặp, mã Huffman), lượng tử hóa vectơ và những kĩ thuật được sử dụng rộng rãi đã dựa trên những bộ mã dự đoán tín hiệu (những bộ dự đoán tuyến tính, khả năng cực đại, mạng nơron) đã được thực hiện và đánh giá. Những bộ nén dữ liệu được so sánh với 2 chương trình nén được sử dụng rộng rãi là gzip và Iharc. Đầu tiên là dựa vào mã Lempel-Ziv và đã được phát triển dưới dự án GNU, bởi FSF (Free softwave Foundation), sau đó dựa vào mã Huffman và được phát triển bởi Tagawa.

Sau đây, Một tiêu chuẩn được sử dụng để đo mức độ nén dữ liệu được xác định là:

(3.1) Ở đây Lorig và Lcomp là chiều dài của file nguồn và file đã nén

Thực hiện nén tín hiệu bằng việc loại bỏ những dư thừa được bộc lộ ở chính bản thân dữ liệu về sự phụ thuộc thống kê giữa các mẫu. Những phương pháp dự đoán khai thác sự phụ thuộc về mặt thời gian và ước lượng mẫu kế tiếp từ những mẫu trước đó. Sự phụ thuộc về không gian giữa những kênh lối vào sẽ được khai thác bằng những phương pháp không mất thông tin dựa vào phương pháp lượng tử hoá vectơ, phương pháp này thực hiện tốt hơn mọi chiến lược nén dữ liệu khác (khoảng 62%). Tuy nhiên, bằng một sơ đồ dự đoán đơn giản, chúng ta có thể đạt được tỉ lệ nén khoảng 58%, cho phép thực hiện một bộ nén thời gian thực

Để giải quyết khó khăn về sự hạn chế chặt chẽ thời gian, một mã chiều dài từ cực đại đã được thiết kế. Kết quả là 16 b đủ để nén hiệu quả tín hiệu EEG với sự mất mát hạn chế về hiệu suất thực hiện. Hơn nữa, bằng chứng thực hiện đã chứng minh rằng những hiểu biết về những tín hiệu sinh học EEG quan trọng có thể chỉ cải thiện một chút tỉ lệ nén.

Nén dữ liệu không mất thông tin (lossless compression) có thể đạt được bằng cách gán những mô tả ngắn cho những kí tự thường xuyên xuất hiện nhất của dữ liệu nguồn và những miêu tả dài hơn cần thiết cho những kí tự xuất hiện ít hơn. Đối với mục đích của chúng ta, những sự mô tả này là những xâu nhị phân được biểu diễn bởi mã nhị phân chiều dài thay đổi.

Sẽ không mất tính tổng quát nếu chỉ xét đến mã prefix. Những mã này được quan tâm đặc biệt vì chúng đơn giản hóa rất nhiều phép tính mã hóa và giải mã. Thực tế, chúng cho phép nhận ra một từ mã mà không cần biết trước độ dài, khi quét từ trái sang phải những bit của nó không bao giờ thỏa mãn đồng thời vừa là từ mã vừa là tiền tố của từ mã khác.

Ví dụ Phép toán cơ bản của một thuật toán cùng cấu trúc dữ liệu được biểu diễn như sau:

ENCODER DECODER

Input output

Hình 18:

Encoding/decoding scheme

Thực hiện mã hóa bằng cách móc nối những từ mã tương ứng với mỗi kí tự của nó trong file và tìm lại được bằng việc truy nhập bảng tra cứu. Việc giải mã với từ mã prefix cũng đơn giản: một cây nhị phân, lá của nó là những kí tự đã cho, là sự biểu diễn mã prefix thích hợp cho thuật toán giải mã. Những bước giải mã là một chuỗi những bước dịch trái hay phải, tùy theo lối vào là 0 hay 1, cho đến khi tới lá.

Định lý Shannon biểu diễn giới hạn trên của việc nén dữ liệu được biểu diễn bởi đại lượng entropy, một đại lượng dựa trên sự phân phối xác suất nguồn thông tin, được xác định bằng : 00000000 00000001 00000010 00000011 00000100 ………… 1 00 011 1001 110 ……. 00000001 00000010 00000000 0 1 0 1 1

H = - ∑ = M i i i p p 1 2( ) log (3.2)

Ở đây pi là xác suất của kí tự thứ i của bảng kí tự nguồn A= {a1 , a2 , a3 ,…., aM }. Nén đạt mức cực đại bằng :

Clim = 1 - (adsbygoogle = window.adsbygoogle || []).push({});

b H

(3.3) với b là số bit nguồn cố định trên mỗi kí tự .

3.1.1.2. Phương pháp mã Huffman

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 đượ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 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 p

i (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 - Hb - 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ã đó, 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) (adsbygoogle = window.adsbygoogle || []).push({});

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

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}.

3.1.1.3. Nén đếm lặp

Nếu một file chứa những chuỗi dài những kí tự lặp lại có thể nén nó lại, thì chúng ta có thể giảm sự lặp lại những kí tự này bằng phương pháp sử dụng kĩ thuật nén mã chạy loạt (run-length compression techniques). Trong bài báo cáo này này chúng ta sẽ

xem xét một biến thể của nén mã chạy loạt, đó là phương pháp nén đếm lặp (repetion count compression), ở đó mỗi kí tự được theo sau bởi một bộ đếm lặp, mà biểu diễn số lần xảy ra liên tiếp của kí tự đó.

Ví dụ như sau:

Cho một chuỗi AAAAAAAABBBCAAAACCCB. Sử dụng kĩ thuật mã đếm lặp ta mã hóa chuỗi kí tự kia như sau : 8A3BC4A3CB. ‘8A’ có nghĩa là ‘tám chữ A’. Bộ đếm đã đếm số lần lặp lại liên tiếp của các kí tự, sau đó thay những kí tự lặp lại bằng số lần lặp lại của nó.

Kĩ thuật này rất ích lợi khi toàn bộ chi phí được đưa vào cho những bits bộ đếm sẽ được đền bù bằng việc loại bỏ những kí tự lặp lại. Đối với luồng dữ liệu được nén đếm lặp mã Huffman được áp dụng để giảm hơn nữa. Tuy nhiên, toàn bộ quá trình không đạt được tỉ lệ cao hơn so với mã hoá entropy dữ liệu nguồn.

Cụ thể hơn, nếu H là entropy của nguồn và N là số lượng mẫu, L = NH sẽ là chiều dài file được tạo bởi mã hoá entropy. Nếu sử dụng bộ đếm lặp, số lượng kí tự lưu trữ ở file nén được giảm đi:

N / (R + 1) (3.8)

ở đây R là giá trị trung bình bộ đếm lặp. Trong trường hợp như thế, số bit bộ đếm lặp (gọi là B) sẽ làm tăng số lượng bit trên mỗi kí tự. và chiều dài file được tạo bởi phương pháp nén đếm lặp là:

L’ = N(H + B) / (R + 1) (3.9)

Với giả thiết rằng entropy của các kí tự không thay đổi, đây là một giả thuyết tối ưu bởi thông thường entropy được xem như là tăng khi những kí tự lặp lại bị xoá bỏ từ luồng dữ liệu. Vì thế, L’ được coi như là tăng đối với giá trị xấp xỉ này. Đạt được sự cải thiện hiệu quả nén yêu cầu L’ < L. Khi đó :

H R > B (3.10)

Có nghĩa rằng, lợi ích của phương pháp nén này đạt được khi mã hoá Huffman của những kí tự lặp lớn hơn số bit yêu cầu để biểu diễn bộ đếm lặp.

3.1.1.4. Kĩ thuật nén dự đoán (preditive compression techniques)

Hình 19 biểu diễn một sơ đồ để thực hiện phép biến đổi ngược được sử dụng rộng

Một phần của tài liệu các phương pháp nén được sử dụng để nén tín hiệu EEG (Trang 26 - 49)