Khóa luận Các phương pháp nén được sử dụng để nén tín hiệu EEG

Tài liệu Khóa luận Các phương pháp nén được sử dụng để nén tín hiệu EEG: LỜI MỞ ĐẦU Trong thập kỉ trước nén dữ liệu đã được sử dụng ở khắp mọi nơi. Có thể nói rằng nén dữ liệu đã trở thành yêu cầu chung cho các hầu hết các phần mềm ứng dụng, và cũng là một lĩnh vực nghiên cứu quan trọng và hấp dẫn trong khoa học máy tính. Nếu không có các kĩ thuật nén dữ liệu thì sẽ không bao giờ có sự phát triển của Internet, TV số, truyền thông di động hay sự phát triển của các kĩ thuật truyền thông video. Ưu điểm nổi bật và hiệu quả của nén đã được áp dụng và phát triển nhiều lĩnh vực khác như truyền thông đa phương tiện hay các lĩnh vực nghiên cứu khác. Thời gian gần đây, một lĩnh vực đang phát triển rất nhanh và ngày càng thu hút sự quan tâm của nhiều người đó là y tế từ xa (Telemedicine), mà nén đóng vai trò rất quan trọng. Từ đó con người sẽ được chăm sóc sức khoẻ tốt hơn bằng cách có thể khám, chữa bệnh từ bất kì một bệnh viện nào trên thế giới mà không cần phải đến tận nơi đó. Chỉ cần giao tiếp với bác sĩ qua thiết bị thu ghi và phương tiện truyền thông thì sau đó...

doc50 trang | Chia sẻ: hunglv | Lượt xem: 1151 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Các phương pháp nén được sử dụng để nén tín hiệu EEG, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI MỞ ĐẦU Trong thập kỉ trước nén dữ liệu đã được sử dụng ở khắp mọi nơi. Có thể nói rằng nén dữ liệu đã trở thành yêu cầu chung cho các hầu hết các phần mềm ứng dụng, và cũng là một lĩnh vực nghiên cứu quan trọng và hấp dẫn trong khoa học máy tính. Nếu không có các kĩ thuật nén dữ liệu thì sẽ không bao giờ có sự phát triển của Internet, TV số, truyền thông di động hay sự phát triển của các kĩ thuật truyền thông video. Ưu điểm nổi bật và hiệu quả của nén đã được áp dụng và phát triển nhiều lĩnh vực khác như truyền thông đa phương tiện hay các lĩnh vực nghiên cứu khác. Thời gian gần đây, một lĩnh vực đang phát triển rất nhanh và ngày càng thu hút sự quan tâm của nhiều người đó là y tế từ xa (Telemedicine), mà nén đóng vai trò rất quan trọng. Từ đó con người sẽ được chăm sóc sức khoẻ tốt hơn bằng cách có thể khám, chữa bệnh từ bất kì một bệnh viện nào trên thế giới mà không cần phải đến tận nơi đó. Chỉ cần giao tiếp với bác sĩ qua thiết bị thu ghi và phương tiện truyền thông thì sau đó sẽ nhận được kết quả chẩn đoán và phương thức chữa bệnh của bác sĩ gửi về. Một trong những tín hiệu EEG quan trọng nhất đó là tín hiệu EEG. Và trong bài báo cáo này sẽ trình bày các phương pháp nén được sử dụng để nén tín hiệu EEG. Sự cần thiết của việc này như thế nào sẽ được trình bày sau đây. CHƯƠNG 1: GIỚI THIỆU CHUNG 1.1. Nén dữ liệu Nén dữ liệu hay còn gọi là mã hóa nguồn (source coding), là sự biểu diễn thông tin của dữ liệu nguồn dưới dạng nén. Nó đã là một công nghệ then chốt trong cuộc cách mạng truyền thông đa phương tiện số trong nhiều thập kỉ. Mục tiêu của nén dữ liệu bao gồm việc tìm ra một thuật toán hiệu quả để loại bỏ dư thừa tồn tại trong dữ liệu đó. Ví dụ cho một xâu kí tự S, thì cái gì là chuỗi kí tự có thể thay thế được để cho ta một không gian tích trữ nhỏ hơn? Những giải pháp cho vấn đề này là những thuật toán nén mà sẽ xuất phát từ chuỗi kí tự có thể thay thế được để thu được số bit ít hơn trong toàn bộ số bit cần biểu diễn, cùng với những thuật toán giải nén để khôi phục lại dữ liệu ban đầu. Tuy nhiên, ít hơn bao nhiêu bit? Điều đó phụ thuộc vào việc lựa chọn thuật toán mà được sử dụng và lượng dư thừa thông tin tồn tại trong dữ liệu nguồn. Dữ liệu khác nhau có thể yêu cầu những thuật toán khác nhau để nhận ra dư thừa và loại bỏ nó. Rõ ràng, điều này khiến cho những bài toán nén trở nên khó giải quyết vì yêu cầu chung khó được trả lời một cách dễ dàng khi nó gồm quá nhiều trường hợp. May mắn thay, chúng ta có thể đưa ra một số ràng buộc nhất định và kết hợp với kinh nghiệm về dữ liệu cũng như mục đích sử dụng dữ liệu để đưa ra những thuật toán phù hợp. Khi nén dữ liệu, chúng ta cần thiết phải phân tích những đặc tính của dữ liệu được nén và hy vọng suy ra một vài mô hình để biểu diễn nén. Điều này làm tăng mức độ đa dạng về mô hình dữ liệu. Do vậy, kĩ thuật biểu diễn là một khâu trọng tâm của kĩ thuật nén. Một cách cụ thể, nén dữ liệu có thể được xem như là một phương pháp biểu diễn hiệu quả một nguồn dữ liệu số như văn bản, hình ảnh, âm thanh hay bất kì một dạng kết hợp nào của tất cả các loại này ví dụ như video. Hình 1: data in compression Hình 2: figure of data compression Mục đích của nén dữ liệu là biểu diễn nguồn số này bằng số lượng bit ít nhất có thể khi gặp những yêu cầu tối thiểu để khôi phục lại dữ liệu ban đầu. Lý thuyết thông tin (information theory) được sử dụng nhiều trong nén dữ liệu. 1.2. Tín hiệu EEG (Electroencephalograph) và Sự cần thiết nén dữ liệu y sinh (Biomedical data compression) Hình 3: system 10/20 Một ứng dụng quan trọng về nén dữ liệu là trong lĩnh vực y học. Yêu cầu nén tín hiệu y-sinh ngày càng cao do sự phát triển ngày càng đa dạng của các dịch vụ y tế từ xa. Những ứng dụng y tế từ xa càng ngày càng dành được nhiều sự quan tâm, nghiên cứu bởi nó cung cấp sự truy nhập dễ dàng tới những thủ tục chuẩn đoán bệnh và đánh giá bệnh. Cần phải truyền một lượng lớn dữ liệu y sinh đã thúc đẩy sự cần thiết của việc nén dữ liệu y sinh mà không mất thông tin quan trọng mang trên những tín hiệu ghi đựơc mà có thể dẫn tới hành động chuẩn đoán hay đánh giá bệnh sai. Do đó, nghiên cứu về nén tín hiệu y-sinh là rất cần thiết. Một trong những tín hiệu y-sinh phổ biến hiện nay là tín hiệu điện não (EEG- Electroencephalogram). 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 chứng bệnh rất phổ biến trên thế giới cũng như ở Việt Nam. 1.2.1. Tín hiệu EEG Những hoạt động điện của vỏ não thường là những tín hiệu nhịp (rhythms) vì chúng thường dao động lặp đi lặp lại. Sự đa dạng của tín hiệu nhịp EEG vô cùng lớn và phụ thuộc vào nhiều yếu tố trong trạng thái tinh thần của đối tượng, như là mức độ kích động, trạng thái đi bộ hay trạng thái ngủ. Thông thường, những tín hiệu được ghi trên da đầu có biên độ nằm trong khoảng từ vài microvolts tới xấp xỉ 100 µV, và tần số trong khoảng từ 0.5 đến 30-40 Hz. Hình 4 : các tín hiệu nhịp EEG Tín hiệu EEG cơ bản được chia thành 5 dải tần sau : Nhịp Alpha : là nhịp cơ sở của não người lớn. Là dạng sóng dễ nhận biết nhất, đi thành chuỗi sóng 8-13 Hz với biên độ 30-50 mV Hình 5: tín hiệu alpha Nhịp Beta : là sóng có tần số 4-35 Hz, điện thế khoảng 5-30 mV Hình 6: tín hiệu Beta Nhịp Delta : là một sóng chậm dưới 4 Hz và có biên độ thay đổi Hình 7: tín hiệu Delta Nhịp Theta : bao gồm các sóng 4-8 Hz , thường có biên độ lớn hơn 20 mV Hình 8: tín hiệu Theta Nhịp Gamma : có tần số > 30 Hz. Đối với người lớn bình thường thì dải tần của tín hiệu EEG nằm giữa khoảng 0.1-100 Hz. Hầu hết những tín hiệu ở trên duy trì trong vài phút , trong khi có những tín hiệu khác chỉ xảy ra trong vài giây, như nhịp gamma. Ngoài ra còn có những tín hiệu mà nó không xuất hiện vào mọi lúc. Nó là những tín hiệu nhất thời, đột ngột, biểu thị hoạt động quá mức, không bình thường của hoạt động điện của não Các gai (Spikes) là những biến đổi điện thế thoáng qua, nhanh, có biên độ thực sự cao hơn hoạt động điện cơ bản. Có khoảng thời gian từ 20 – 70 ms Hình 9: Spike đơn Sóng nhọn (Sharp waves) : là những sóng đơn độc, có khoảng thời gian từ 70 – 200 ms . Có biên độ xấp xỉ bằng với Spikes Phức hợp sóng gai (Spike-wave complexes) : là một sóng phức hợp của một gai (spikes) và theo sau là một sóng chậm. Có tần số vào khoảng 3- 6 Hz Hình 10: Spike and Sharp wave Sự xuất hiện của các dạng sóng này chỉ ra những hành động thần kinh sai lệch thường được tìm thấy ở những người phải trải qua những cơn động kinh. Đó là những tín hiệu biểu hiện bệnh lý. 1.2.2. Sự cần thiết nghiên cứu nén tín hiệu y sinh Mong muốn nén dữ liệu EEG vì nhiều lý do.Như chúng ta đã biết, EEG là một trong những phương pháp phổ biến giúp bác sĩ có thể xác định vị trí ổ bệnh (khu vực phóng điện) và chức phận não bệnh nhân bị tổn thương. Là một phương pháp hữu hiệu để phát hiện và chẩn đoán bệnh động kinh - một căn bệnh phổ biến và nguy hiểm. Theo thống kê của Tổ Chức Y tế Thế giới (WHO), tỉ lệ người mắc bệnh động kinh trên thế giới khoảng 0,5% dân số, thay đổi tuỳ theo từng quốc gia, từng vùng, từng dân tộc, như ở Pháp và ở Mỹ là khoảng 0,85%; Canada là 0,6%. Tại Việt Nam khoảng 2% dân số trong đó có đến 60% số bệnh nhân là trẻ em. Theo BS Lê Văn Tuấn, chuyên khoa nội thần kinh BV Chợ Rẫy, TP.HCM: Động kinh đôi khi biến chứng và tai nạn có thể gặp khi bệnh nhân lên cơn động kinh: cắn phải lưỡi, viêm phổi do hít phải dãi hay chất nôn ói; gãy xương do chấn thương; tổn thương não do cưoin kéo dài làm não thiếu oxy; ngừng thở do tắc nghẽn đường thở… Tuy nhiên, bệnh hoàn toàn có thể điều trị nếu được phát hiện sớm và điều trị đúng cách thì khả năng hoàn toàn khỏi bệnh là rất cao. Đối với trẻ em, nếu không được điều trị kịp thời, hoặc điều trị không đúng cách dẫn tới tình trạng không khống chế được cơn co giật. Lâu dần, trẻ sẽ bị thiểu năng trí tuệ, rối loạn hành vi. Những cơn co giật sẽ làm cho hệ miễn dịch của trẻ yếu đi, dễ nhiễm các bệnh khác và dễ tử vong hơn trẻ bình thường. Tre bị động kinh không được điều trị đúng thuốc, đúng phác đồ nên sinh ra kháng thuốc. Khi đó, khả năng hồi phục sẽ khó khăn hơn rất nhiều. Do đó việc phát hiện kịp thời động kinh, chẩn đoán chính xác bệnh và điều trị hợp lý là vô cùng quan trọng, cấp bách và cần thiết. Song không phải bất kì bệnh viện nào cũng làm được điều đó vì nó hoàn toàn phụ thuộc vào trình độ và khả năng của bác sĩ đọc điện đồ não. Tín hiệu EEG ghi được rất phức tạp bởi bản ghi không chỉ có tín hiệu nền cơ bản (alpha, gamma,…), các xung bất thường (spike, sharp…) mà nó còn có rất nhiều các loại artifact (ECG, EMG…). Hơn nữa việc nhận biết các sóng nhịp cơ bản cũng không đơn giản, dễ dàng do các nhịp này xuất hiện phụ thuộc vào tuổi, vào trạng thái tinh thần của bệnh nhân. Song chúng ta có thể khắc phục được khó khăn này bằng việc gửi tín hiệu điện não EEG từ một nơi không đáng tin cậy đến những nơi tin cậy mà ở đó có những bác sĩ giỏi, kinh nghiệm thực hiện việc đọc bản ghi và chẩn đoán lâm sàng. Từ đây phát sinh một yêu cầu cần thiết là thực hiện truyền hiệu quả tín hiệu EEG cả về mặt vật lý lẫn hiệu quả kinh tế. Do đó thực hiện nén EEG là cần thiết. Hơn nữa thực hiện công việc này cũng sẽ giúp ích rất nhiều trong việc nghiên cứu về tín hiệu EEG như việc loại bỏ artifacts, dò tìm xung động kinh, và phân loại các dạng xung này bằng việc gửi bản ghi điện não từ bệnh viện đến nơi thực hiện nghiên cứu. Trước tiên nén là để giảm thời gian truyền, giảm không gian lưu trữ, và trong những hệ thống xách tay, nó giảm yêu cầu bộ nhớ hay tăng số lượng kênh và dải thông. Một trong những mục đích đầu tiên của việc làm này là tự động thu thập những dữ liệu EEG mà được yêu cầu với những đặc tính hạn chế từ trước ( luồng dữ liệu 20 480 bps) từ bệnh viện ngoại vi hay từ nhà bệnh nhân, mà truyền qua môi trường truyền tốc độ thấp như là đường dây điện thoại đóng mạch hay mạng điện thoại tế bào, với những phần cứng giá rẻ, mà không nhất thiết phải có mặt của bác sĩ. Những thuật toán nén dữ liệu cho phép người bệnh thực thi một hệ thống xách tay để gửi tín hiệu EEG (20 kênh, 128 Hz, 8-b), trong thời gian thực qua đường điện thoại với modem 14 400 bps. Một y tá trực thu tín hiệu và trong quá trình thu, bác sĩ chỉ cần liên lạc với y tá qua điện thoại. Vì vậy, bệnh nhân không cần gặp trực tiếp bác sỹ điều trị nữa. Dữ liệu được thu thập từ nơi bệnh nhân nằm và sau đó kết quả chẩn đoán, phương pháp điều trị sẽ được gửi trở lại. Điều này cũng dẫn đến việc giảm giá toàn bộ, khi việc chuyên chở bệnh nhân là không cần nữa. Một động lực khác để nén dữ liệu là đối với nhiều trường hợp ở đó lượng dữ liệu được lưu trữ vượt quá khả năng của các thiêt bị lưu trữ thương mại. Trong trường hợp này, giá cả và những giới hạn về công nghệ của những thiết bị lưu trữ khối có sẵn bắt buộc chúng ta phải giảm tốc độ lấy mẫu từ 128 tới 64 Hz và số lượng kênh ghi từ 20 kênh xuống 12 kênh, tuy nhiên chất lượng tín hiệu vẫn có thể chấp nhận được, vì vậy những kĩ thuật nén dữ liệu EEG rất hữu ích và đạt hiệu quả thương mại cao . Bộ vi xử lý mà giám sát thiết bị thu EEG có thể được dành cho nén dữ liệu chỉ trong một phần nhỏ thời gian giữa 2 mẫu tín hiệu vào liên tiếp. Chiều dài từ mà mã được tạo ra từ những thuật toán nén có thể là rất dài (những tín hiệu xảy ra hiếm khi), khiến mất dữ liệu do khả năng tính toán giới hạn của bộ vi xử lý. Để đối phó với bộ biến đổi A/D tốc độ dữ liệu và yêu cầu tính toán thấp, một kĩ thuật nén dựa vào chiều dài từ mã lớn nhất cố định được chấp nhận. Từ sự cần thiết đó, mục tiêu của đề tài này là nghiên cứu một vài thuật toán để tìm ra được phương pháp nén EEG hiệu quả nhất dựa trên một yêu cầu và tiêu chí đánh giá nào đó. CHƯƠNG 2: LÝ THUYẾT NÉN DỮ LIỆU 2.1. Những vấn đề chung Mã chiều dài thay đổi là mã được mong muốn cho việc nén dữ liệu vì chúng ta có thể đạt được việc tiết kiệm toàn cục bằng cách gán những từ mã ngắn cho những kí tự xuất hiện thường xuyên và những từ mã dài hơn cho những kí tự xuất hiện ít hơn. Ví dụ, cho mã chiều dài thay đổi (0, 100, 101, 110, 111) với chiều dài từ mã (1, 3, 3, 3, 3) cho bảng kí tự (A, B, C, D, E), và chuỗi kí tự nguồn là BAAAAAAAC với tần suất của mỗi kí tự là (7, 1, 1, 0, 0). Khi đó lượng bít trung bình được yêu cầu là: (2.1) Việc này đã tiết kiệm được gần một nửa số bit so với việc biểu diễn bằng mã chiều dài cố định 3 bits/symbol Một nguồn được mô hình hoá bằng một bảng S = (s1, s2, …, sn) và sự phân phối xác suất tương ứng là P = (p1, p2,…,pn) Giả sử chúng ta xuât phát từ mã C =(c1, c2, …, cn) với chiều dài mỗi từ mã là L = (l1, l2,…, ln). Hình 11 : Code and source data Mục tiêu của chúng ta là cực tiểu hoá chiều dài trung bình của từ mã : (2.2) Do vậy mã chiều dài thay đổi rất hữu ích cho việc nén dữ liệu. Tuy nhiên, một mã chiều dài thay đổi sẽ trở nên vô giá trị nếu như không thể nhận ra một cách duy nhất những từ mã của mã này từ bản tin đã được mã hoá Ví dụ : Cho mã chiều dài thay đổi (0, 10, 010, 101) của bảng kí tự (A, B, C, D) . Một đoạn tin là ‘0100101010’ có thể được giải mã nhiều hơn một cách. Ví dụ ‘0100101010’ có thể dịch là ‘ 0 10 010 101 0’ là ‘ ABCDA’ hoặc ‘010 0 101 010 ‘ là CADC. Khi đó sẽ không nhận được chính xác dữ liệu nguồn Một mã được coi là có khả năng giải mã duy nhất nếu có duy nhất một cách có thể để giải mã bản tin mã hoá. Một giải pháp dường như khả quan cho những trường hợp mã không phải là mã có khả năng giải mã duy nhất đó là thêm vào những kí tự phân cách mở rộng trong giai đoạn mã hoá. Ví dụ, chúng ta sử dụng kí tự ‘/’, sau đó mã hoá chuối kí tự ABCDA là ‘0/10/010/101/0’. Tuy nhiên, phương pháp này phải trả giá quá đắt bởi vì kí tự mở rộng ‘/’ phải được chèn vào cho mỗi từ mã. Mã lý tưởng trong trường hợp này là một mã mà không chỉ có chiều dài thay đổi mà còn có đặc tính tự phân cách. Một loại được gọi là mã tiền tố (prefix code) là mã như thế. “Tiền tố” là một vài bit đầu tiên của một từ mã. Khi hai từ mã có chiều dài khác nhau, có thể từ mã ngắn hơn sẽ giống hệt với vài bít đầu tiên của từ mã dài hơn. Một mã tiền tố (prefix code) là mã trong đó không từ mã nào là tiền tố của từ mã nào, hay cũng không thể một từ mã mà xuất phát từ một từ mã khác bằng cách cộng thêm vào sau vài bit từ từ mã ngắn hơn. Hình 12 : A Prefix code Những mã tiền tố chỉ là một tập con của mã khả năng giải mã duy nhất. Nên nếu một mã không phải là mã tiền tố thì chúng ta không thể khẳng định rằng từ mã này không thể giải mã một cách duy nhất. Ví dụ : mã (0, 01, 011, 0111) cho (A, B, C, D). Rõ ràng đây không phải là mã tiền tố vì từ mã này là tiền tố của từ mã kia. Song nếu nhận được một bản tin mã hoá 01011010111, thì chỉ có một cách giải mã duy nhất là 01 011 01 0111 đó là BCBD. Một số mã có khả năng giải mã duy nhất nhưng yêu cầu phải xem xét ngay từ đầu trong suốt quá trình giải mã. Điều này khiến chúng không hiệu quả bằng mã tiền tố (prefix codes) 2.2. Lý thuyết thông tin 2.2.1. Khái niệm thông tin Thông tin là những tính chất xác định của vật chất mà con người (hoặc hệ thống kĩ thuật) nhận được từ thế giới vật chất bên ngoài hoặc từ những quá trình xảy ra trong bản thân nó. Về mặt thông kê người ta đưa ra một số khái niệm về thông tin như sau: Điều gì đã xác định (khẳng định được, đoán chắc được, không bấp bênh,…) thì không có thông tin và người ta nói rằng lượng thông tin chứa trong điều ấy bằng không Điều gì không xác định (bất định) thì điều đó có thông tin và lượng thông tin chứa trong nó khác không. Nếu ta càng không thể ngờ tới điều ấy thì thông tin điều đó mang lại cho ta càng lớn Tóm lại, ta nhận thấy khái niệm thông tin gắn liền với sự bất định của đối tượng ta cần xét. Có sự bất định về một đối tượng nào đó thì những thông báo về đối tượng đó sẽ cho ta thông tin. Khi không có sự bất định thì sẽ không có thông tin về đối tượng đó. Như vậy, khái niệm thông tin chỉ là một cách diễn đạt khác đi của khái niệm sự bất định. Trước khi nhận tin (được thông báo) về một đối tượng nào đấy thì vẫn còn sự bất định về đối tượng đó, tức là độ bất định về đối tượng đó khác không (có thể lớn hay nhỏ). Sau khi nhận tin (đã được hiểu rõ hoặc hiểu một phần) về đối tượng thì độ bất định của nó giảm đến mức thấp nhất, hoặc hoàn toàn mất. Như vậy, “ thông tin là độ bất định đã bị thủ tiêu” hay nói một cách khác “ làm giảm độ bất định kết quả cho ta thông tin” 2.2.2. Lượng thông tin 2.2.2.1. Định nghĩa lượng thông tin Như chúng ta đã biết : trước khi nhận tin thì độ bất định lớn nhất, sau khi nhận tin (hiểu rõ hoặc hiểu một phần về đối tượng thì độ bất định giảm đến mức thấp nhất), có khi triệt tiêu hoàn toàn. Như vậy, có một sự chệnh lệch giữa độ bất định trước khi nhận tin và độ bất định sau khi nhận tin. Sự chênh lệch đó là mức độ thủ tiêu độ bất định. Độ lớn, nhỏ của thông tin mang đến cho ta phụ thuộc trực tiếp vào mức độ lệch đó. Vậy : “Lượng thông tin là mức độ bị thủ tiêu của độ bất định ó Lượng thông tin = độ chêch của độ bất định trước và sau khi nhận tin = độ bất định trước khi nhận tin - độ bất định sau khi nhận tin (độ bất định tiên nghiệm - độ bất định hậu nghiệm) “. 2.2.2.2.Giới thiệu về lý thuyết thông tin Mặc dù những kiến thức về đo lượng thông tin đã được sử dụng một thời gian, song người đã gom góp tất cả mọi thứ lại thành một lĩnh vực được gọi là lý thuyết thông tin (information theory) là Claude Elwood Shannon, một kĩ sư điện ở phòng thí nghiệm Bell. Shannon đã định nghĩa một đại lượng gọi là lượng thông tin (self-information). Giả sử chúng ta có một sự kiện A, là tập hợp của các kết cục của một thí nghiệm ngẫu nhiên nào đó. Nếu sự kiện A xảy ra với xác suất là P(A), thì lượng thông tin của A được cho bởi i(A) = logb = - logb P(A) (2.3) Chú ý rằng chúng ta không chỉ cụ thể cơ số của hàm log. Chúng ta sẽ thảo luận sau về vấn đề chi tiết hơn. Sử dụng hàm log để đo thông tin không phải là sự lựa chọn tuỳ ý. Nhớ lại rằng log(1) = 0, và –log(x) tăng khi x giảm từ 0 đến 1. Vì vậy, nếu xác suất của một sự kiện là thấp, thì lượng thông tin của nó là cao; nếu xác suất của một sự kiện là cao, lượng thông tin tương ứng là thấp. Hình 13: self-information Một tính chất khác của định nghĩa toán học về thông tin là lượng thông tin thu được từ sự xảy ra của hai sự kiện độc lập là tổng lượng thông tin thu được từ sự xảy ra của mỗi sự kiện riêng lẻ. Giả sử rằng A và B là hai sự kiện độc lập. Lượng thông tin tương ứng của sự xảy ra của cả sự kiện A và B là i(AB) =logb (2.4) Khi A và B là độc lập thì ta có : P(AB) = P(A)P(B) (2.5) Và do đó i(AB) = logb = logb + logb = i(A) + i(B) (2.6) Đơn vị thông tin phụ thuộc vào cơ số của hàm log. Nếu chúng ta sử dụng cơ số 2, thì đơn vị là bits, nếu sử dụng cơ số e, đơn vị là nats; và nếu sử dụng có số 10, thì đơn vị là hartleys. Lưu ý rằng tính toán thông tin bằng bits, chúng ta cần phải lấy logarithm cơ số 2 của xác suất. Bởi vì hàm này không xuất hiện trong máy tính, nên ta phải thực hiện như sau : Ta có : logbx = a Suy ra : ba = x Vì vậy nếu ta muốn lấy log cơ số 2 của x Log2x = a => 2a = x, Chúng ta muốn tìm giá trị của a. Chúng ta có thể lấy hàm log tự nhiên (log cơ số e) hay log cơ số 10 cả 2 vế (2 hàm này có xuất hiện trong máy tính). Thì Ln(2a) = lnx => aln2 = lnx Và a = (2.7) Nếu chúng ta có một tập hợp những sự kiện độc lập Ai, là những tập hợp của các kết cục của thí nghiệm S có nghĩa là UAi = S Ở đây S là không gian mẫu, khi đó lượng thông tin trung bình của thí nghiệm ngẫu nhiên được cho bởi công thức : H = S P(Ai)i(Ai) = - SP(Ai)logbP(Ai). (2.8) Đại lượng này được gọi là entropy của thí nghiệm. Một trong những đóng góp của Shannon là ông đã chỉ ra rằng nếu thí nghiệm là một nguồn bao gồm những kí tự Ai, từ tập hợp A, thì entropy là đại lượng đo số lượng kí tự nhị phân trung bình cần để mã hoá lối ra của nguồn. Shanno đã chứng minh rằng một sơ đồ nén không mất thông tin tốt nhất (lossless compression) là có thể thực hiện được nén lối ra nguồn với lượng bit trung bình bằng với entropy của nguồn. Tập hợp những kí tự A thường được gọi là bảng chữ của nguồn, và những kí tự được gọi là những chữ cái. Đối với một nguồn S tổng quát với bảng chữ A = {1, 2,…, m} mà tạo ra một chuỗi {X1, X2, …}, thì entropy được cho bởi H(S) = (2.9) Ở đây Gn = P(X1=i1,X2=i2,…, Xn=in) (2.10) Và (X1, X2, …, Xn) là một chuỗi chiều dài n từ nguồn. Nếu mỗi thành phần trong chuỗi là phân phối độc lập đồng nhất (independent and identically distributed (iid)) , thì chúng ta cho có chứng minh rằng Gn = -n Và phương trình entropy trở thành H(S) = - (2.11) Đối với đa số các nguồn phương trình (2.9) và (2.11) là không đồng nhất. Nếu chúng ta cần phải phân biệt giữa hai phương trình đó, thì chúng ta sẽ gọi đại lượng được tính toán theo phưong trình (2.11) là entropy bậc nhất (first-order entropy) của nguồn, trong khi đại lượng theo phương trình (2.9) được gọi là entropy của nguồn Thông thường không thể biết được entropy đối với một nguồn vật lý.Vì thế chúng ta phải ước lượng entropy. Việc ước lượng entropy phụ thuộc vào giả thiết của chúng ta về cấu trúc của chuỗi nguồn. 2.3. Các phương pháp nén dữ liệu 2.3.1. Các phương pháp nén không mất thông tin 2.3.1.1 Mã Huffman Một thuật toán mã hoá rất phổ biến là thuật toán mã hoá Huffman. Đầu tiên chúng ta sẽ trình bày một thủ tục để xây dựng mã Huffman khi biết được mô hình xác suất cho nguồn, sau đó một thủ tục giành cho việc xây dựng mã khi không biết được số liệu thống kê của nguồn. Kĩ thuật này được phát triển bởi David Huffman. Mã được tạo ra bằng cách sử dụng kĩ thuật này hay thủ tục này được gọi là mã Huffman. Những mã này là những mã prefix và là mã tối ưu đối với mô hình đã cho (tập hợp xác suất). Thủ tục Huffman được dựa trên hai quan sát đối với mã tiền tố tối ưu. Trong một mã tối ưu, những kí tự mà xảy ra thường xuyên hơn ( có xác suất xảy ra cao hơn) sẽ có từ mã ngắn hơn những kí tự mà xảy ra ít hơn Trong một mã tối ưu, hai kí tự mà tần xuất xảy ra thấp nhất sẽ có cùng chiều dài. Chúng ta dễ dàng nhận ra rằng quan sát đầu tiên là đúng. Nếu những kí tự mà xảy ra thường xuyên hơn có từ mã dài hơn từ mã của những kí tự xảy ra ít thường xuyên hơn, thì số lượng bit trung bình trên mỗi kí tự sẽ lớn hơn nếu trường hợp ngược lại. Vì vậy, một mã gán những từ mã dài hơn cho những kí tự xảy ra thường xuyên không thể tối ưu Chúng ta hãy xem xét tại sao quan sát thứ hai đúng, xét trường hợp sau. Giả sử tồn tại một mã tối ưu C trong đó hai từ mã tương ứng với hai kí tự xác suất thấp nhất không có chiều dài giống nhau. Giả sử từ mã dài hơn dài hơn k bits so với từ mã ngắn hơn. Do đây là mã prefix, nên từ mã ngắn hơn không thể là tiền tố của từ mã dài hơn. Điều này có nghĩa là thậm chí nếu chúng ta để k bits rơi vào k vị trí cuối cùng của từ mã dài hơn, thì hai từ mã này vẫn hoàn toàn khác biệt. Do những từ mã này tương ứng với những kí tự xác suất thấp nhất trong bảng kí tự, nên sẽ không có một từ mã nào khác có thể dài hơn những từ mã này; vì vậy, sẽ không có nguy cơ là từ mã ngắn hơn sẽ trở thành tiền tố của từ mã khác nào đó. Hơn nữa, cắt bỏ k bit này chúng ta sẽ thu được một từ mã mới có chiều dài trung bình ngắn hơn C . Nhưng điều này vi phạm đến luận điểm ban đầu của chúng ta là C là một mã tối ưu. Vì vậy đối với một mã tối ưu quan sát thứ hai là đúng. Thu được thủ tục mã Huffman bằng cách bổ sung một yêu cầu đơn giản đối với hai quan sát này. Yêu cầu này là những từ mã tương ứng với hai kí tự có xác suất thấp nhất chỉ khác nhau ở bit cuối cùng. Có nghĩa là, nếu g và d là hai kí tự xác suất thấp nhất trong bảng kí tự, nếu từ mã của g là m*0, thì từ mã của d sẽ là m*1. Ở đây m là một chuỗi bit 0 và 1, và * biểu thị sự móc nối vào nhau. Yêu cầu này không vi phạm hai quan sát của chúng ta và dẫn đến một thủ tục mã hoá rất đơn giản. Chiều dài trung bình của một mã là : L = (2.12) Trong đó P(ai) là xác suất của kí tự ai còn c(ai) là từ mã tương ứng. Đo hiệu quả của mã này là dư thừa của nó – đó là sự khác nhau giữa entropy và chiều dài trung bình. Thủ tục này sẽ được minh hoạ bằng ví dụ sau: Huffman code for the orginal Five-letter alphabel Letter Probability Codeword a2 0.4 1 a1 0.2 01 a3 0.2 000 a4 0.1 0010 a5 0.1 0011 Huffman Tree (0.4) (0.4) (0.6) 0 a2(0.4) (0.2) (0.4) 0 (0.4) 1 (1.0) a1(0.2) (0.2) 0 (0.2) 1 a3(0.2) a4(0.1) 0 (0.2) a5(0.1) 1 Hình 14: Cây huffman Một cách khác xây dựng mã Huffman sử dụng thực tế là mã Huffman, do ưu điểm của mã tiền tố, có thể biểu diễn là một cây nhị phân trong đó những nút ngoài hay lá ngoài sẽ tương ứng với những kí tự. Mã Huffman này đối với bất kì kí tự nào có thể thu được bằng cách di chuyển trên cây từ nút gốc đến lá tương ứng với kí tự, cộng bit 0 tới từ mã mỗi lần chúng ta đi qua một cành cao hơn, và bit 1 mỗi lần đi qua cành thấp hơn. Chúng ta xây dựng cây nhị phân bắt đầu tại những nút lá. Như đã biết những từ mã của hai kí tự với xác suất nhỏ nhất là giống nhau ngoại trừ bit cuối cùng. Điều này có nghĩa là việc di chuyển từ gốc tới lá tương ứng với hai kí tự này là như nhau trừ bước cuối cùng. Tức là những lá tương ứng với hai kí tự với xác suất thấp nhất sẽ là con của cùng một gốc. Khi chúng ta kết nối những lá tương ứng với những kí tự có xác suất thấp nhất tới một nút duy nhất, thì chúng ta coi như nút này là một kí tự của bảng chữ đã được giảm bớt. Xác suất của kí tự này sẽ là tổng xác suất của các con của nó. Bây giờ chúng ta sẽ sắp xếp những nút tương ứng bảng kí tự giảm bớt và áp dụng quy tắc như trên để tạo ra một nút bố cho những nút tương ứng với hai kí tự có xác suất thấp nhất trong bảng giảm bớt. Cứ tiếp tục như thế cho đến khi ta thu được một nút duy nhất, đó chính là nút gốc. Để thu được một mã cho mỗi kí tự, chúng ta di chuyển trên cây từ gốc tới mỗi nút lá, bằng cách gán 0 tới cành cao hơn và 1 cho cành thấp hơn Ví dụ : Cho bảng tần suất của 5 chữ cái A,B,C,D,E như sau tương ứng là 0.10; 0.15; 0.30; 0.16; 0.29 A B C D E 0.10 0.15 0.30 0.16 0.29 Quá trình xây dựng cây Huffman diễn ra như sau : A B C D E 010 011 11 00 10 èNhư vậy bộ mã tối ưu tương ứng là : 2.3.1.2. Mã số học Một phương pháp khác nhằm tạo ra mã chiều dài biến thiên, phương pháp này ngày càng được sử dụng phổ biến được gọi là phương pháp mã hoá số học (arithmetic coding). Mã số học đặc biệt hữu dụng khi xử lý những nguồn có bảng chữ nhỏ (small alphabets), như là nguồn nhị phân, và bảng chữ có xác suất của các kí tự rất lệch nhau. Nó cũng là một phương pháp rất hữu hiệu khi những vấn đề mô hình (modeling) và mã hoá (coding) của phương pháp nén không mất thông tin (lossless compression) tách rời nhau. Như chúng ta đã nghiên cứu về phương pháp mã hóa Huffman, mà bảo đảm tốc độ mã hóa R trong giới hạn 1 bit của entropy H. Tốc độ mã hóa là số bit trung bình được sử dụng để biểu diễn một kí tự từ nguồn và, đối với một mô hình xác suất đã cho, entropy là tốc độ thấp nhất mà tại đó nguồn có thể được mã hóa. Chúng ta có thể thắt chặt giới hạn này một chút. Nhận thấy rằng thuật toán Huffman sẽ tạo ra một mã mà tốc độ của nó nằm trong giới hạn pmax + 0.086 của entropy, ở đây pmax là xác suất của kí tự xảy ra thường xuyên nhất. Trong nhiều ứng dụng, có khi kích thước bảng chữ là lớn, pmax nhìn chung là khá nhỏ, và độ chênh lệch với entropy, đặc biệt về tỉ lệ tốc độ, là khá nhỏ. Tuy nhiên, có những trường hợp ở đó bảng chữ là nhỏ và xác suất xảy ra của những kí tự khác nhau rất lệch, giá trị của pmax có thể khá lớn và mã Huffman có thể trở nên khá không hiệu quả khi so sánh với entropy. Một cách để tránh vấn đề này là chặn khối nhiều hơn một kí tự với nhau và tạo ra một mã Huffman mở rộng. Tuy nhiên, thực tế không phải phương thức này bao giờ cũng thực hiện được. Tạo ra những từ mã (codewords) cho nhóm hoặc chuỗi kí tự thực sự hiệu quả hơn là tạo ra một từ mã riêng biệt cho mỗi kí tự trong chuỗi. Song phương pháp này trở nên không khả thi khi cố gắng tạo ra mã Huffman cho chuỗi kí tự dài. Để tìm từ mã Huffman cho một chuỗi dài m (sequence of symbols m) riêng biệt chúng ta cần những từ mã cho tất cả những chuỗi chiều dài m có thể. Việc này sẽ làm cho kích thước của sách mã (codebook) tăng theo hàm mũ. Chúng ta cần một phương pháp gán từ mã cho chuỗi riêng biệt này mà không phải tạo những mã cho tất cả các chuỗi có cùng chiều dài. Kĩ thuật mã hoá số học (arithmetic coding technique) sẽ thực hiện được yêu cầu này. Trong mã hoá số học, phải tạo ra một bộ nhận dạng duy nhất hay một nhãn (tag)cho chuỗi được mã hoá. Nhãn này tương ứng với một phân số nhị phân, cái mà sẽ trở thành mã nhị phân của chuỗi. Thực tế việc tạo nhãn và mã nhị phân là hai quá trình giống nhau. Tuy nhiên, chúng ta có thể hiểu dễ dàng hơn phương pháp mã số học nếu về mặt lý thuyết chia phương pháp này thành hai giai đoạn. Trong giai đoạn đầu tạo ra một bộ nhận dạng duy nhất hay nhãn cho chuỗi kí tự đã cho. Sau đó cho nhãn này một mã nhị phân duy nhất . Mã số học duy nhất có thể được tạo ra cho một chuỗi dài m mà không cần phải tạo ra mọi từ mã cho những chuỗi cùng chiều dài. Điều này không giống với mã Huffman. Để phân biệt một chuỗi kí tự này với một chuỗi kí tự khác chúng ta cần phải gán nhãn cho nó bằng một bộ nhận dạng duy nhất. Một tập hợp nhãn có thể dùng biểu diễn những chuỗi kí tự là những số trong khoảng đơn vị [0, 1). Do trong khoảng đơn vị [0, 1) có vô số số, nên có thể gán một nhãn duy nhất cho mỗi kí tự riêng biệt. Để làm điều này chúng ta cần một hàm mà sẽ ánh xạ những chuỗi kí tự vào khoảng đơn vị. Một hàm mà ánh xạ những biến ngẫu nhiên, và chuỗi của biến ngẫu nhiên vào khoảng đơn vị là một hàm phân phối tích luỹ (cdf) của biến ngẫu nhiên của nguồn. Trước khi bắt đầu triển khai mã hóa số học, chúng ta cần phải thiết lập một số kí hiệu. Chúng ta đã biết rằng một biến ngẫu nhiên ánh xạ những kết cục, hay tập hợp những kết cục của một thí nghiệm tới những giá trị trên trục số thực. Sử dụng phương pháp này, chúng ta cần ánh xạ những kí tự nguồn tới những số. Để thuận lợi, chúng ta sử dụng ánh xạ X(ai) = i ai Î A (2.13) Ở đây, A = {a1, a2, …, am} là bảng chữ cho một nguồn rời rạc và X là một biến ngẫu nhiên. Việc ánh xạ này có nghĩa rằng một mô hình xác suất cho trước của nguồn, chúng ta cũng có một hàm mật độ xác suất đối với biến ngẫu nhiên là : P(X = i) = P(ai) Và hàm mật độ tích lũy được xác định như sau : Fx(i) = åik=1 P(X = k) (2.14) Chú ý rằng đối với mỗi kí tự ai với xác suất khác không chúng ta có một giá trị riêng biệt của Fx(i). Chúng ta sẽ sử dụng điều này để sau đó phát triển mã số học. Thủ tục tạo nhãn thực hiện bằng cách giảm kích thước của khoảng mà trong đó nhãn cư trú do càng ngày nhận càng nhiều những phần tử của chuỗi. Hãy bắt đầu bằng việc đầu tiên chia khoảng đơn vị thành những khoảng con có dạng [Fx(i-1), Fx(i)), i = 1, …, m. Vì giá trị cực tiểu của hàm phân phối tích luỹ (cdf) bằng không và giá trị cực đại bằng một, nên việc phân chia phải chính xác khoảng đơn vị. Chúng ta liên kết khoảng con [Fx(i-1), Fx(i)) với kí tự ai. Sự xuất hiện của kí tự đầu tiên trong chuỗi sẽ giới hạn khoảng chứa nhãn từ một trong những khoảng con này. Giả sử rằng kí tự đầu tiên là ak. Sau đó thì khoảng chứa giá trị nhãn sẽ là khoảng [Fx(k-1), Fx(k)). Bây giờ khoảng con này sẽ được phân chia chính xác theo tỉ lệ giống như khoảng nguồn. Có nghĩa là khoảng thứ j tương ứng với kí tự aj được cho bởi [Fx(k-1) + Fx(j-1)/(Fx(k) – Fx(k-1), Fx(k-1) + Fx(j)/(Fx(k) – Fx (k-1)). Vì thế nếu kí tự thứ hai trong chuỗi là aj, thì khoảng chứa giá trị nhãn trở thành [Fx(k-1) + Fx(j-1)/(Fx(k) – Fx(k-1), Fx(k-1) + Fx(j)/(Fx(k) – Fx (k-1)). Mỗi kí tự tiếp theo khiến cho nhãn tương ứng bị giới hạn tới một khoảng mà được phân chia nữa với tỉ lệ giống nhau. Xét Ví dụ: Xét một bảng chữ 3 kí tự A = {a1, a2, a3} với xác suất p(a1) = 0.7, p(a2) = 0.1, và p(a3) = 0.2. Sử dụng phương trình (2.14) ta có Fx(1) = 0.7, Fx(2) = 0.8 và Fx(3) = 1. Sự phân chia này được biểu diễn bằng hình sau: Hình 15: Giới hạn khoảng chứa nhãn cho chuỗi lối vào (a1, a2, a3) Phần con mà nhãn cư trú trong đó phụ thuộc vào kí tự đầu tiên của chuỗi được mã hóa. Ví dụ, nếu kí tự đầu tiên là a1, nhãn sẽ nằm trong khoảng [0.0, 0.7); nếu kí tự đầu tiên là a2, nhãn nằm trong khoảng [0.7, 0.8), nếu là a3, thì nhãn sẽ nằm trong khoảng từ [0.8, 1.0). Khi đã xác định được khoảng chứa nhãn thì những khoảng con còn lại sẽ bị xóa bỏ, và khoảng được giữ lại này lại được phân chia ra thành các khoảng con khác với cùng một tỉ lệ giống như khoảng nguồn. Giả sử kí tự đầu tiên là a1. Nhãn sẽ nằm trong khoảng con [0.0, 0.7). Sau đó khoảng này lại được chia theo tỉ lệ chính xác giống như khoảng nguồn, để tạo ra những khoảng con [0.0, 0.49), [0.49, 0.56), [0.56, 0.7). Khoảng đầu tiên tương ứng với kí tự a1, khoảng thứ hai tương ứng với kí tự a2, và khoảng còn lại [0.56, 0.7) tương ứng với kí tự a3. Giả sử rằng kí tự thứ hai trong chuỗi là a2. Khi đó giá trị nhãn được giới hạn nằm trong khoảng [0.49, 0.56). Bây giờ chúng ta phân chia khoảng này thành các khoảng con theo cùng tỉ lệ như khoảng ban đầu, thu được các khoảng sau : khoảng [0.49, 0.539) tương ứng với kí tự a1, [0.539, 0.546) tương ứng với kí tự a2, và [0.546, 0.56) tương ứng với kí tự a3. Nếu kí tự thứ ba là a3, nhãn sẽ bị giới hạn trong khoảng [0.546, 0.56), sau đó khoảng này có thể sẽ được chia nhỏ hơn nữa. Quá trình này sẽ tiếp tục cho đến khi hoàn thành xong chuỗi nguồn theo cách thức như trên. 2.3.1.3.Kĩ thuật từ điển Kĩ thuật từ điển là một kĩ thuật nén được kết hợp chặt chẽ với cấu trúc trong dữ liệu để tăng lượng nén. Những kĩ thuật này – cả phương pháp tĩnh và thích nghi (adaptive or dynamic) – đều xây dựng một danh sách những mẫu xảy ra phổ biến và mã hóa những mẫu này bằng cách truyền chỉ số của nó trong danh sách. Chúng hữu dụng nhất với những nguồn có một lượng tương đối nhỏ những mẫu được tạo ra khá thường xuyên như là nguồn văn bản và những lệnh máy tính. Trong nhiều ứng dụng, lối ra nguồn bao gồm những mẫu xảy ra liên tiếp. Ví dụ như trong một văn bản có những mẫu hay những từ nào đó tái diễn liên tiếp. Trong khi đó cũng có những mẫu hoàn toàn không xuất hiện, hay nếu có thì xảy ra rất hiếm khi. Cho nên đối với những loại nguồn này một phương pháp rất hợp lý để mã hóa nó là giữ một danh sách hay từ điển những mẫu xảy ra thường xuyên. Khi những mẫu này xuất hiện trong lối ra nguồn, chúng sẽ được mã hóa bằng việc tham chiếu đến bảng từ điển. Nếu mẫu này không xuất hiện trong từ điển, thì nó có thể được mã hóa bằng cách sử dụng một phương pháp khác kém hiệu quả hơn. Trong thực tế chúng ta tách nguồn vào thành hai loại, những mẫu xảy ra thường xuyên và những mẫu xảy ra không thường xuyên. Để phương pháp này có hiệu quả, loại mẫu xảy ra thường xuyên, và do đó kích thước của từ điển, phải nhỏ hơn nhiều so với toàn bộ số mẫu có thể. Giả sử có một nguồn văn bản cụ thể bao gồm những từ có 4 kí tự, 3 kí tự từ 26 chữ cái thường của bảng chữ cái Tiếng Anh theo sau là những dấu phân cách như là dấu chấm (.), dấu phẩy (,), dấu hỏi (?), dấu chấm phẩy (;), dấu hai chấm (:), dấu chấm cảm (!). Hay nói cách khác kích thước bảng chữ nguồn là 32. Nếu chúng ta mã hóa nguồn văn bản mỗi lần một kí tự, coi mỗi kí tự là một sự kiện đồng khả năng, thì chúng ta sẽ cần 5 bit trên một kí tự. Coi tất cả 324 (=220 = 1,048,576) mẫu 4 kí tự (four-character pattern) là đồng khả năng, thì chúng ta sẽ có một mã mà gán 20 bít cho mỗi mẫu 4 kí tự này. Giả sử đặt 256 mẫu 4 kí tự mà có khả năng nhất vào trong từ điển. Lưu đồ truyền thực hiện như sau : bất cứ khi nào muốn gửi một mẫu mà có tồn tại trong từ điển, chúng ta sẽ gửi một bit cờ (flag), giả sử bit 0, theo sau bởi một chỉ số 8 bit tương ứng với mục từ trong từ điển. Nếu mẫu đó không có trong từ điển, chúng ta sẽ gửi bit 1 theo sau bởi 20 bit mã hóa mẫu. Tính hữu dụng của lưu đồ này phụ thuộc vào phần trăm những từ mà chúng ta bắt gặp có trong từ điển. Có thể đánh giá tính hữu dụng này bằng cách tính số bit trung bình trên mỗi mẫu. Nếu xác suất bắt gặp một mẫu trong từ điển là p, thì số bit trung bình trên mỗi mẫu R là : R=9p + 21(1-p) = 21- 12p (2.15) Để sơ đồ này hiệu quả, R phải có giá trị nhỏ hơn 20, khi đó p ≥ 0.084. Giá trị này dường như không lớn. Tuy nhiên, nếu các mẫu xảy ra là đồng khả năng, thì xác suất bắt gặp một mẫu trong từ điển thấp hơn 0.00025. Chúng ta hoàn toàn không muốn một lưu đồ mã hóa mà chỉ thực hiện tốt hơn một chút phương pháp mã hóa thông thường cho những mẫu đồng khả năng; mà chúng ta muốn cải thiện hiệu suất nhiều nhất có thể. Để đạt được điều này, p phải lớn nhất có thể. Có nghĩa là chúng ta phải lựa chon cẩn thận những mẫu có khả năng xảy ra nhất để đưa vào trong từ điển. Do đó chúng ta phải có những hiểu biết khá tốt về cấu trúc lối ra nguồn. Nếu không có thông tin giá trị kiểu này trước khi mã hóa một lối ra nguồn cụ thể, bằng cách này hay cách khác chúng ta cần phải có được thông tin trong khi đang thực hiện mã hóa. Nếu cảm thấy đã có đầy đủ hiểu biết trước, chúng ta có thể sử dụng phương pháp tĩnh (static approach); nếu không, nên sử dụng phương pháp thích nghi (adaptive approach). 2.3.1.4. Phương pháp nén dựa vào ngữ cảnh (context-based compression) Phần này chúng ta sẽ trình bày một phương pháp nén sử dụng tối thiểu những giả thuyết từ trước về thống kê của dữ liệu. Thay vào đó chúng sử dụng ngữ cảnh của dữ liệu đang được mã hoá và lịch sử quá khứ của dữ liệu để cung cấp kĩ thuật nén hiệu quả hơn. Như chúng ta học, chúng ta sẽ nhận được hiệu suất nén càng cao khi bản tin mã hoá có tập hợp xác suất càng “lệch” (“skewed). “Skewed” có nghĩa rằng những kĩ tự có xác suất xảy ra cao hơn so với các kí tự khác trong chuỗi sẽ được nén. Vì thế nó luôn mong đợi những cách biểu diễn bản tin mà sẽ cho kết quả lệch lớn hơn. Một cách rất hiệu quả có thể thực hiện được điều này là xem xét xác suất xảy ra của mỗi một kí tự theo ngữ cảnh mà nó xuất hiện. Có nghĩa là, chúng ta không xem xét mỗi kí tự trong một chuỗi nếu như nó chỉ xảy ra hoàn toàn bất ngờ. Thay vì như thế, chúng ta kiểm tra lịch sử của chuỗi trước khi xác định xác suất có thể của những giá trị khác nhau mà kí tự đó đảm nhận. Trong trường hợp văn bản tiếng Anh, Shannon đã chỉ ra vai trò của ngữ cảnh bằng hai thí nghiệm rất thú vị. Cách đầu tiên, lựa chọn một phần văn bản và yêu cầu một đối tượng nào đó đoán mỗi chữ cái. Nếu người đó đoán đúng, nói cô ấy đúng và chuyển sang chữ cái tiếp theo. Nếu cô ấy đoán sai, nói cho cô ấy biết câu trả lời đúng và lại chuyển sang chữ cái tiếp theo. Đây là kết quả của một trong những thí nghiệm này. Trong đó dấu gạch ngang (dash) biểu diễn những chữ cái đã được đoán đúng Actual text THE ROOM WAS NOT VERY LIGHT A SMALL OBLONG Subject Performance - - - - ROO- - - - - - NOT-V - - - - I - - - - - -SM - - - OBI - - - Lưu ý rằng có một dịp tốt để cho cô ấy đoán đúng chữ cái, đặc biệt nếu chữ cái nằm ở cuối một từ hay nếu theo ngữ cảnh từ đó rất rõ ràng. Bây giờ nếu chúng ta biểu diến chuỗi nguồn bằng hiệu suất đoán, chúng ta sẽ nhận được một tập hợp xác suất khác nhau đối với những giá trị mà mỗi thành phần của chuỗi đảm nhận. Xác suất dứt khoát sẽ lệch hơn nhiều trong hàng thứ hai: “chữ cái” - xảy ra với xác suất cao. Nếu cặp đôi toán học của đối tượng có sẵn ở một điểm cuối khác, chúng ta có thể gửi câu “ lược bỏ” ở dòng thứ hai và có cặp đôi được thông qua quá trình đoán như nhau để tiến đến chuỗi kí tự nguồn. Trong thí nghiệm thứ hai, cho phép đối tượng tiếp tục đoán cho đến khi cô ấy đoán được chữ cái đúng và số lượng đoán cần đến để đoán đúng chữ cái sẽ được ghi nhớ. Hơn nữa, hầu hết những lần đoán đúng, thì kết quả là 1 là số có thể nhất. Sự tồn tại của cặp đôi toán học tại điểm kết thúc nhận sẽ cho phép chuỗi lệch này biểu diễn chuỗi nguồn tại bộ nhận. Shannon đã sử dụng thí nghiệm của mình để tiến đến giới hạn trên và dưới cho bảng chữ cái tiếng Anh (lần lượt là 1.3 bit /chữ cái và 0.6 bit / chữ cái) Cái khó trong việc sử dụng những thí nghiệm này là đối tượng đoán là người dự đoán kí tự tiếp theo trong chuỗi tốt hơn nhiều bất kí một bộ dự đoán toán học nào mà chúng ta có thể triển khai. Giả sử rằng ngữ văn là bẩm sinh đối với mỗi người, ở đó trường hợp phát triển một bộ dự đoán hiệu quả như con người đối với ngôn ngữ là không thể trong tương lai gần. Tuy nhiên thí nghiệm thực hiện cung cấp một phương pháp nén hữu dụng cho nén tất cả mọi loại chuỗi , chứ không chỉ đơn giản cho những biểu diễn ngôn ngữ. Nếu chuỗi kí tự được mã hoá không bao gồm sự xảy ra độc lập của các kí tự, thì những kiến thức về những kí tự đã xảy ra ở lân cận của kí tự đang mã hoá sẽ cung cấp cho chúng ta một hiểu biết tốt hơn nhiều về giá trị của kí tự đang mã hoá. Nếu chúng ta biết được ngữ cảnh trong đó một kí tự xảy ra chúng ta có thể đoán với khả năng thành công lớn hơn nhiều so với giá trị của kí tự. Nói cách khác, trong ngữ cảnh cho trước, một số kí tự xảy ra với xác suất lớn hơn nhiều những chữ khác. Có nghĩa là, sự phân bố xác suất trong ngữ cảnh cụ thể sẽ lệch hơn. Nếu ngữ cảnh được biết ở cả hai bộ mã hoá và giải mã, thì chúng ta có thể sử dụng sự phân bố lệch này để thực hiện mã hoá, vì vậy sẽ tăng mức nén. Bộ giải mã có thể sử dụng những hiểu biết về ngữ cảnh của nó để xác định sự phân bố được sử dụng để giải mã. Nếu chúng ta có thể bằng cách nào đó nhóm những ngữ cảnh giống nhau với nhau, thì rất có thể là những kí tự theo sau những ngữ cảnh này sẽ giống nhau, cho phép sử dụng chiến lược nén đơn giản và hiệu quả. Chúng ta có thể nhận thấy ngữ cảnh đóng vai trò quan trọng trong việc nâng cao hiệu quả nén. Xem xét việc mã hoá từ “probability”. Giả sử chúng ta đã mã hoá bốn chữ cái đầu tiên và muốn mã hoá chữ cái thứ năm , “ a”. Nếu chúng ta bỏ qua bốn chữ cái đầu tiên, xác suất của “a” là 0.06. Nếu chúng ta sử dụng thông tin về chữ cái trước nó là “b”, thì sẽ làm giảm xác suất của vài kí tự giống như là q và z và tăng xác suất xảy ra của “a”. Trong ví dụ này, “ b” sẽ là ngữ cảnh bậc nhất đối với “a”, “ob” là ngữ cảnh bậc hai đối vói “a”, vân vân….Sử dụng nhiều chữ cái hơn để xác định ngữ cảnh mà “a” xảy ra, hay những ngữ cảnh bậc cao, nhìn chung sẽ làm tăng xác suất xảy ra của a trong ví dụ này, và vì vậy làm giảm số bit yêu cầu để mã hoá sự xảy ra đó. Vì vậy chúng ta muốn làm những gì để mã hoá mỗi kí tự sử dụng xác suất xảy ra của nó đối với ngữ cảnh bậc cao. 1.4. Đo chất lượng nén Do yêu cầu cần phải khôi phục lại tín hiệu EEG sau khi nén là chính xác, không đánh mất bất kì một thông tin nào. Nên các phương pháp được nghiên cứu là những phương pháp nén không mất thông tin (lossless compression). Vì vậy trong giới hạn khoá luận này, chúng ta sẽ chỉ trình bày những đại lượng được đưa ra để đo hiệu quả của mỗi kĩ thuật nén lossless. Đối với những thuật toán nén không mất thông tin, chúng ta đo hiệu quả nén bằng số lượng co lại của file nguồn so với kích thước file nén. Một số phương pháp sau : Tỉ lệ nén. Compression ratio = (2.18) Hệ số nén Compression factor = (2.19) Phần trăm tiết kiệm %tiết kiệm = (2.20) CHƯƠNG 3: NÉN TÍN HIỆU EEG 3.1. Các phương pháp đã được sử dụng để nén EEG 3.1.1. Các phương pháp nén không mất thông tin (lossless compression) 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: Dữ liệu nguồn (EEG signal) Source binary file Compressed binary file Compression (coding) Hình 16 : data EEG in compression Compressed binary file Reconstructed binary file Decoded data in file (EEG signal) Decompression (decoding) 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. 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 00000000 00000001 00000010 00000011 00000100 ………… 1 00 011 1001 110 ……. 00000001 00000010 00000000 0 1 0 1 1 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 : H = - (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 - (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) = 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 = (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 - - 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) 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 rãi để giảm bớt entropy của tín hiệu : entropy của tín hiệu biến đổi càng thấp thì tỉ lệ nén đạt được càng cao. Thực hiện việc dự đoán một mẫu tín hiệu dựa vào vài giá trị mẫu quá khứ là nhiệm vụ của một khối được gọi là bộ dự đoán, và sai số (error) giữa giá trị thực và giá trị dự đoán được mã hoá bằng mã chiều dài thay đổi (e.g … mã Huffman). Hình 19: sự truyền tín hiệu dựa vào sơ đồ dự đoán Sai số này được biểu diễn bởi hiệu sau : en = xn – f (xn-1,…, xn-N) (3.11) ở đó xn là mẫu vào thứ n (viết tắt của x(nT) với 1/T là tốc độ lấy mẫu) và en là sự khác nhau giữa mẫu vào và mẫu dự đoán Nếu dự đoán chính xác tại hầu hết mọi thời điểm thì lỗi dự đoán sẽ càng gần không, và vì vậy có thể sử dụng chuỗi bit ngắn để mã hoá sai số này và những chuỗi bit dài hơn để mã hoá giá trị en khác. Ba loại bộ dự đoán sẽ được xem xét. Đó là những loại dựa vào chuỗi Markov (Markov chains), lọc số (digital filtering), dự đoán tuyến tính thích nghi (adaptive linear prediction). 3.1.1.4.1. Bộ dự đoán Markov Trong toán học, một chuỗi Markov, được đặt theo tên của nhà toán học người Nga Andrey Markov, là một quá trình ngẫu nhiên với tính chất Markov. Có tính chất Markov có nghĩa là, cho trước trạng thái hiện tại, trạng thái tương lai là độc lập với trạng thái quá khứ. Nói cách khác, sự mô tả trạng thái hiện tại nắm bắt đầy đủ tất cả mọi thông tin mà có thể ảnh hưởng đến tiến trình tương lai của quá trình. Tiến đến trạng thái tương lai thông qua quá trình xác suất thay cho quá trình tất định. Tức là, biết hiện tại, không bất cứ điều gì đã xảy ra trong quá khứ có thể ảnh hưởng hay xác định kết cục trong tương lai, tương lai là tất cả mọi điều có thể. Về mặt toán học, quá trình Markov được biểu diễn cho bất kì giá trị n và t1 < t2 < t3, P(x (tn) £ xn / x(t) " t £ tn-1) = P(x(tn) £ xn / x(tn-1)) (3.11) Thông thường, thuật ngữ chuỗi Markov (Markov chain) được sử dụng để nói đến một quá trình Markov thời gian rời rạc. Chuỗi Markov là một chuỗi các biến ngẫu nhiên X1, X2, X3, ... có tính chất Markov. Ta có công thức : Pr(Xn+1 = x|Xn = xn, …, X1 = x1) = Pr(Xn+1 = x|Xn = xn) (3.12) Những giá trị có thể của Xi hình thành tập có thể đếm S được gọi là không gian trạng thái của chuỗi. Cho chuỗi {xn}. Chuỗi này được gọi là theo mô hình Markov bậc k nếu : P(xn / xn-1,…,xn-k) = P(xn / xn-1, …, xn-k,..) (3.13) Nói cách khác, biết về k mẫu quá khứ cũng là biết về toàn bộ lịch sử quá khứ của quá trình. Nếu kích thước của bảng nguồn là l, thì số trạng thái là lk. Mô hình Markov được sử dụng phổ biến nhất là mô hình Markov bậc nhất, khi đó P(xn / xn-1) = P(xn / xn-1, xn-2, xn-3,…) (3.14) Phưong trình (3.13) và (3.14) biểu thị sự tồn tại sự phụ thuộc giữa các mẫu. Tuy nhiên, chúng không mô tả dạng phụ thuộc. Chúng ta có thể phát triển những mô hình Markov bậc nhất (first-order Markov) khác nhau tuỳ thuộc vào giả thiết của chúng ta dạng phụ thuộc giữa các mẫu Bộ dự đoán được biểu diễn bằng hình 19 có thể được thực thi dưới giả thiết là tín hiệu có tính chất Markov và được tạo bởi một nguồn được mô hình là một chuỗi Markov. Một chuỗi Markov bậc nhất được sử dụng để mô hình tín hiệu; nó yêu cầu ước lượng tất cả mọi xác suất điều kiện P[Xn = ai / Xn-1 = aj], ở đó Xn là một biến ngẫu nhiên rời rạc lấy những giá trị trên bảng chữ hữu hạn A = {a1, …, aM}. Những xác suất này có thể được xấp xỉ với tần suất nếu có sẵn một tập huấn luyện đủ lớn. Một ma trận tần suất, mà những thành phần của nó Fij đếm sự xảy ra Xn = ai khi Xn-1 = aj, được xuất phát từ một tập huấn luyện (training set) bao gồm 96 mẫu EEG; một tập kiểm tra khác cũng bao gồm 58 mẫu EEG được sử dụng để đánh giá. Ma trận Fij tương đương với sự phân bố xác suất kết hợp của Xn và Xn-1 và được sử dụng trong (3.15) để ước lượng xác suất điều kiện Pij = P[Xn = ai / Xn-1 = aj] » (3.15) Sau đây sẽ ước lượng cho kí tự kế tiếp của kí tự aj bằng cách sử dụng phương pháp tối thiểu hoá sai số bình phương trung bình Succ (aj) = với " aj Î A (12) (3.16) Do dữ liệu được lượng tử bằng 8 b, sẽ có 256 kí tự tạo ra một ma trận tần suất 256´256; bằng chứng thực nghiệm đã chứng tỏ rằng : trên tập kiểm tra, sự khác nhau giữa ma trận đơn vị (identity function)và những kí tự kế tiếp có thể nhất của các kí tự 0….255, được tính toán theo như (3.16) thuộc khoảng từ -3 tới +3, biểu thị rằng ước lượng Markov (Markovian estimate) nhìn chung rất gần với ma trận đơn vị (identity function) 3.1.1.4.2 Bộ dự đoán lọc số Có thể thiết kế một bộ lọc dự đoán tuyến tính số cho tín hiệu EEG và có thể sử dụng nó theo như sơ đồ dự đoán hình 19. Hãy xem xét bộ lọc số được mô tả bằng phương trình sai phân en = xn – b1xn-1 – b2xn-2 - … - bNxn-N (3.17) Trong đó bộ dự đoán ở hình 19 được biểu diễn bằng phương trình sau sử dụng một tập hợp các hệ số giống như {b1…bN} yn = b1xn-1 + b2xn-2 + … + bNxn-N (3.18) Có thể thu được tín hiệu lỗi (error signal) entropy thấp en bằng cách tối thiểu hóa sai số bình phương tổng: E = (3.19) Với quy ước sau : t = [b1…bN] t = [xn-1…xn-N] (3.20) Bộ dự đoán tuyến tính sai số bình phương trung bình tối thiểu của dạng = t . được cho bởi nghiệm của phưong trình t . = E[xnt] (3.21) ở đó là ma trận tương quan của quá trình xn. Thực tế, hàm tự tương quan thật không biết được và thu được sự ước lượng từ việc sử dụng một tập hợp các mẫu. 3.1.1.4.3. Dự đoán tuyến tính thích nghi Hai bộ dự đoán tuyến tính thích nghi là bộ dự đoán tuyến tính thích nghi dấu (the sign adaptive linear predictor) và bộ dự đoán tuyến tính thích nghi bình phương trung bình tối thiểu (the least mean square adaptive linear predictor) Những hệ số bộ dự đoán ở (3.18) có thể được xem như những hàm phụ thuộc thời gian, có khả năng thích nghi với những hành vi của tín hiệu (signal behavior). Thuật toán bình phương trung bình tối thiểu sẽ cập nhật những hệ số bộ dự đoán theo phương trình bi(n) = bi(n-1) + bxn-1en (3.22) ở đây trọng số b là tốc độ thích nghi, và en là sai số dự đoán tại thời điểm n Những hệ số bộ dự đoán trong thuật toán thích nghi dấu được cập nhật theo phương trình: bi(n) = bi(n-1) + Dxn-1sgn (en) (3.23) ở đây trọng số D là tốc độ thích nghi, và sgn (en) lấy giá trị +1 hay -1 tuỳ theo dấu sai số dự đoán. Tuy nhiên việc lựa chọn giá trị b và D phải có giới hạn vì: trong khi lựa chọn giá trị thấp sẽ dẫn tới việc thích nghi không đủ, còn lựa chọn giá trị cao có thể khiến cho hệ thống không ổn định. 3.1.1.4. Phương pháp nén biến đổi (Transformation compression) Một chuỗi N mẫu tín hiệu có thể được xem như là một điểm X trong không gian N chiều. Có thể biểu diễn X hiệu quả hơn bằng cách áp dụng một phép biến đổi trực giao Y = TX, ở đây Y biểu thị vectơ biến đổi và T biểu thị ma trận biến đổi. Mục tiêu là lựa chọn một chuỗi con của Y gồm M thành phần, ở đó M nhỏ hơn N (vẫn còn (N-M) thành phần bị loại bỏ) dẫn đến nén. Bằng cách mã hoá Huffman sự khác nhau giữa tín hiệu nguồn và tín hiệu được khôi phục từ M thành phần kia, thì những kĩ thuật này lại trở thành mã hoá không mất thông tin, bởi vì có thể khôi phục lại chính xác từ M thành phần và sự sai khác đó. Có thể chứng minh được rằng biến đổi Karhunen-Loeve (KLT) là phương pháp tối ưu để biểu diễn tín hiệu về giới hạn sai số bình phương trung bình. Nhược điểm chính trong việc sử dụng KLT là thời gian tính toán đáng kể. Phép biến đổi cosin rời rạc (the discrete cosine transform (DCT)), với tính chất nén năng lượng mạnh có nghĩa là: hầu hết mọi thông tin tín hiệu đều hướng đến tập trung tại một vài thành phần tần số thấp của DCT, là giải pháp kề tối ưu với sự thuận lợi hơn về tính toán, thực tế, có tồn tại thuật toán nhanh. Phép biến đổi này cho những vectơ lối vào thực đã trở nên rất đáng được quan tâm trong mục đích sử dụng để nén tín hiệu EEG. Hình 20: Phổ EEG trung bình khi được tính bởi DCT. Đỉnh 10 Hz là do tín hiệu alpha, và đỉnh 50 Hz là đỉnh của dòng điện nguồn Hình 20 biểu diễn phổ trung bình EEG được tính bởi DCT trên toàn bộ . Một số lượng đáng kể các công suất phổ được định vị tại những tần số thấp, tuy nhiên mức độ giảm phổ không cao. Vì vậy, tỉ lệ nén dựa vào DCT không được mong đợi là cao do những thành phần bị loại bỏ có thể phát sinh ra những lỗi nghiêm trọng. Một điều cần phải chú ý là đỉnh phổ tại vị trí 10 Hz, tương ứng những dạng sóng EEG quan trọng nhất, sóng alpha, thuộc phạm vi từ 8 đến 13 Hz. Một đỉnh thứ hai tại 50 Hz biểu diễn nhiễu mạng điện lưới và luôn được loại bỏ bởi bộ lọc North số trước khi có thể nhìn thấy. Do những thành phần quan trọng về mặt sinh học nằm dưới 20 Hz, tương ứng với 50 của 256 thành phần, nên 50 thành phần DCT đầu tiên sẽ được giữ lại trong quá trình nén. 3.1.2. Giới thiệu các phương pháp nén EEG khác 3.2. Những đặc trưng của tín hiệu EEG Những phương pháp được trình bày ở trên gần như không sử dụng những thông tin về EEG. Một điều chắc chắn rằng sử dụng những thông tin phụ thuộc miền của tín hiệu cực kì quan trọng và nó sẽ cung cấp một chiến lược nén tốt nhất. Tín hiệu EEG có sự tương quan về không gian và cả thời gian mà ta có thể khai thác để thiết kế những chiến lược nén hiệu quả. Về sự tương quan không gian, vài kĩ thuật có thể sử dụng là lượng tử hoá vectơ (vector quantization) và phân tích chuỗi thời gian đa biến. Chúng ta có thể khai thác kĩ thuật lượng tử hoá vector bằng cách ánh xạ một vectơ bao gồm những mẫu kênh lối vào tới một vectơ mã, và mã hoá cùng với vectơ lỗi. Sự tương quan thời gian được nghiên cứu và đưa ra kết quả được biểu diễn bằng đồ thị sau : Hình 21: Sự tương quan thời gian trung bình của tín hiệu EEG Sử dụng hiểu biết này vào việc nén bằng cách điều chỉnh phương pháp nén thông thường được biểu diễn ở hình 19 và bổ sung một số lối vào trễ cho bộ dự đoán. 3.2.1. Nén dự đoán với những lối vào trễ Ở hình 21 biểu diễn sự tương quan thời gian trung bình được tính toán trên một tập huấn luyện tín hiệu EEG. Nhận thấy rõ ràng sự tương quan thời gian không chỉ tồn tại đối với những mẫu gần nhau, mà còn ở những mẫu có độ trễ khoảng 12 mẫu. Mức cực đại thu được cho độ trễ 12 mẫu tương ứng khoảng 10.6 Hz. Điều này được giải thích về mặt sinh học như sau: thực tế, sóng alpha, dạng sóng đặc trưng cho tín hiệu EEG bình thường, thuộc dải từ 8 – 13 Hz. Để lợi dụng ưu điểm của đỉnh tương quan sóng alpha này chúng ta điều chỉnh (3.11) để tính toán đến khoảng trễ dài hơn. Đặt N = {k|a £ k £b} xác định lân cận của độ trễ đã cho ở (3.11) được viết lại như sau: en = xn – f(xn-1, ..., xn-N, xn-a, ...,xn-b) (3.24) Giá trị tương quan từ hình 21 gợi ý rằng chọn N = 5, a = 10 và b = 15 sẽ cung cấp cho bộ dự đoán những mẫu quá khứ tương quan nhất. Thực tế, kết quả thực nghiệm cho thấy N và b - a có thể chọn thấp hơn mà không giảm hiệu suất của bộ dự đoán, trong khi điều này sẽ làm cho nó đơn giản hơn và nhanh hơn. Kết quả chọn N = 2, a = 12, và b = 13. 3.2.2. Lượng tử hoá vectơ của tín hiệu EEG Trong lượng tử hoá vectơ chúng ta nhóm lối ra nguồn thành những khối hay những vectơ. Ví dụ chúng ta coi L mẫu liên tiếp của tín hiệu là những thành phần của một vectơ N chiều. Vectơ của lối ra nguồn này tạo thành lối vào của bộ lượng tử hoá vectơ. Tại cả bộ mã hoá và giải mã của bộ lượng tử vectơ, sẽ có một tậ hợp những vectơ N-chiều được gọi là sách mã (codebook) của bộ lượng tử. Những vectơ trong sách mã này, được hiểu là những vectơ mã (code-vectơ), sẽ được lựa chọn làm biểu diễn của vectơ tín hiệu chúng ta tạo ra từ lối ra nguồn. Mỗi vectơ mã sẽ được gán một chỉ số nhị phân. Tại mỗi bộ mã hoá, vecơt lối vào được so sánh với mỗi vectơ mã để tìm ra vectơ mã gần nhất với vectơ lối vào. Những thành phần của vectơ mã này là những giá trị lượng tử của lối ra nguồn. Để cho bộ giải mã biết về vectơ mã nào đó được tìm thấy là gần với vectơ lối vào nhất, chúng ta truyền hay lưu trữ chỉ số nhị phân của vectơ-mã. Do bộ giải mã có sách mã giống hệt bộ mã, nên có thể khôi phục lại được vectơ mã được cho bởi chỉ số nhị phân của nó. Biểu diễn quá trình này bằng sơ đồ trực quan sau: Source output reconstruction Encoder Decoder Un- block Table lookup Find closest code-vector Group into vectors ........ … codebook indexx index codebook Hình 22: Thủ tục lượng tử hoá vectơ Diễn đạt theo một cách khác thì một bộ lượng tử hoá vectơ k chiều và kích thước N là một phép ánh xạ Q từ một vectơ k chiều, trong không gian Ơclit Rk, vào một tập hữu hạn C bao gồm N lối ra hay những điểm mô phỏng, được gọi là những mã vectơ hay những từ mã Q: Rk à C ở đó C = {y(1), y(2), .. y(N)} và y(i) Î Rk đối với mỗi i {1, 2, …, N}. Tập C được gọi là sách mã hay đơn giản là mã. Áp dụng phương pháp này cho tín hiệu EEG bằng cách tính toán những vectơ của những kênh lối vào và bằng cách xây dựng một sách mã cho tập vectơ này. Có một sự biến đổi nhỏ là tính toán đạo hàm thay cho những giá trị của kênh do đạo hàm EEG có thể rất gần không. Vì vậy, với cùng một sách mã như nhau, có thể thu được méo trung bình thấp hơn. CHƯƠNG 4: MÔ PHỎNG 4.1. Mã Huffman Sau đây mô phỏng thuật toán Huffman truyền thống với chiều dài từ mã không cố định tức là mỗi kí tự nguồn của nguồn sẽ có từ mã của riêng nó. Thủ tục xây dựng mã dựa vào xác suất của các kí tự nguồn hoàn toàn giống như đã trình bày ở trên. Hình 23 : tín hiệu nguồn và tín hiệu khôi phục sau khi nén và giải nén bằng phương pháp mã Huffman Hình 24 : tín hiệu lỗi giữa tín hiệu nguồn và tín hiệu giải nén. Kết quả: Name Size Bytes Class T 1x18432 147456 double array ans 32x1 147456 double array compr_data 1x38568 38568 uint8 array data 1x147456 147456 uint8 array decom_data 1x147456 147456 uint8 array info 1x1 1872 struct array recov_data 1x18432 147456 double array Grand total is 388886 elements using 777720 bytes tỉ lệ nén = 0.2616 hệ số nén = 3.8233 phần trăm tiết kiệm = 73.84% Nhận thấy nén tín hiệu EEG sử dụng mã Huffman khá hiệu quả: hệ số nén tương đối » 4, phần trăm tiết kiệm khá cao 73.84%, mức độ phức tạp tính toán thấp, và quan trọng nhất là nó cho phép khôi phục lại hoàn toàn chính xác tín hiệu ban đầu. Nên đối với yêu cầu đảm bảo thông tin chính xác mang trên tín hiệu EEG ghi được từ bệnh nhân để không gây ra sai sót trong việc chẩn đoán và kết luận lâm sàng đối với bệnh nhân, bác sĩ hoàn toàn có thể tin tưởng vào phương pháp nén này. Đối với những thiết bị lưu trữ và tính toán ngày nay, phương pháp này tỏ ra rất hiệu quả. 4.2. Biến đổi DCT Mô tả khái quát phương pháp sử dụng DCT transform: B1:Coi tín hiệu EEG vào là : data B2: Bước tiếp theo biến đổi DCT tín hiệu vào : DCT_data B3: Giữ lại N phần tử đầu tiên để gửi đi, còn loại bỏ đi K phần tử còn lại B4: biến đổi DCT ngược dữ liệu [N K]; ở đây K gồm K số 0 :gọi là recov_data B5: tính lỗi giữa tín hiệu thật và DCT ngược : err=data-recov_data B6: Lượng tử hoá lỗi này, sau đó sử dụng Huffman coding để nén và truyền sai số này đi Ở bên nhận sẽ thực hiện như B4 sau đó lấy kết quả cộng với lỗi nhận được để khôi phục lại dữ liệu ban đầu. Kết quả mô phỏng: Hình 25 : tín hiệu nguồn và sau khi khôi phục Hình 26 : tín hiệu lỗi tỉ lệ nén = 0.3336 phần trăm tiết kiệm = 66.64% Nhận thấy sử dụng biến đổi DCT để nén EEG cũng đạt được kết quả tương đối. Mặc dù sai số giữa tín hiệu khôi phục và tín hiệu ban đầu cũng khá nhỏ, song vẫn có thể xảy ra xác suất gây lỗi chẩn đoán. Hơn nữa hiệu quả nén không cao bằng Huffman. Tuy nhiên nó cho phép mức độ tính toán đơn giản Một vấn đề khó giải quyết hơn một chút trong quá trình mô phỏng này là việc lượng tử hoá lỗi. Khi lấy hệ số N khá cao thì sai số giữa tín hiệu nguồn và tín hiệu khôi phục không lớn. Nên ta có thể sử dụng một số ít bit hơn để biểu diễn lỗi. Trong Matlab dữ liệu nó xử lý nhỏ nhất là 8 bit, điều này khiến cho việc mô phỏng trong trường hợp này không bộc lộ hết hiệu quả mà tiềm năng của nó có thể thực hiện được. Từ đó rút ra nhận xét là : tuỳ thuộc vào thiết bị phần cứng về tốc độ xử lý và khả năng lưu trữ mà chúng ta lựa chọn phương pháp nào cho phù hợp. Người ta cho rằng, phương pháp nén không mất thông tin không giành được nhiều sự quan tâm bởi nó cho hiệu quả nén không cao, mà người ta tập trung nghiên cứu các phương pháp nén mất thông tin để đạt được hiệu quả nén cao hơn. Song tín hiệu EEG đặc biệt cần thiết yêu cầu khả năng khôi phục lại hoàn toàn dữ liệu đựơc ghi ban đầu, nên nếu sử dụng phương pháp nén mất thông tin chúng ta bằng cách nào đó phải biến nó về loại không mất dữ liệu (ví dụ như nén lỗi và gửi cả lỗi như phương pháp biến đổi DCT ở trên). Khi đó về hiệu quả nén chúng ta cần phải xem xét kĩ, tuỳ vào từng trường hợp mà lựa chọn phương pháp nào hơn. Có lẽ điều đáng quan tâm là ở mức độ phức tạp tính toán? TÀI LIỆU THAM KHẢO [1] Guiliano Antoniol and Paolo Tonella.” EEG data compression techniques”. IRST, trento, Italy, Tech. Rep. 9508-03, 1997. [2] G.Nave and A. Cohen, “ECG compression using long-term prediction” IEEE trans. Biomed. Eng., Vol. 40, no. 9, pp. 877-885, Sept. 1993. [3] Ida Mengyi Pu.” fundamental data compression”.Nxb Elsevier.,2006 [4] J. Markel and A. Grey. Linear Prediction of speech. New york: Springer-Verlag, 1976. [5] Khalid Sayood .”Introduction to data compression”, third edition., Nxb Elseveer., 2006 [6] Leif Sörnmo and Pablo Laguna. “Bioelectrical signal processing in cardiac and neurological applications”. tr.3-161 [7] Peyton Z. Peebles, Jr., Ph.D.” Probability, Random variables, and random signal principles” [8] PGS.TS. Nguyễn Bình.” Lý thuyết thông tin”. tr. 3-63 [9] Trần Mạnh Tuấn.” Xác suất & thống kê lý thuyết và thực hành tính toán”. Nxb ĐHQGHN . IV/2004 [10] Website : www.datacompression.com MỤC LỤC NỘI DUNG

Các file đính kèm theo tài liệu này:

  • doccác phương pháp nén được sử dụng để nén tín hiệu EEG.DOC
Tài liệu liên quan