Hàm Wavelet ψ(t) và hàm tỉ lệ Haarφ(t) cơ bản

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu và ứng dụng một số thuật toán nén tiếng nói luận văn ths công nghệ thông tin 60 48 05001 (Trang 25 - 27)

Để minh họa cách biến đổi Haar sử dụng để nén dữ liệu, chúng ta xét một mảng một chiều có n phần tử. Để đơn giản, chúng ta giả sử rằng n là một lũy thừa của 2 (Chúng ta sử dụng giả thiết này mà không mất đi tính tổng quát. Nếu n có một giá trị khác, dữ liệu có thể mở rộng bằng cách thêm 0 vào. Sau khi giải nén phần dữ liệu thừa được loại bỏ.) Xét một mảng r gồm 8 giá trị p = {1; 2; 3; 4; 5; 6; 7; 8}.

Trước tiên chúng ta tính toán 4 giá trị trung bình của 2 phần tử liên tiếp (1 + 2)/2 = 3/2, (3 +4)/2=7/2, (5 + 6)/2=11/2, và (7 + 8)/2=15/2. Ta không thể xây dựng lại 8 giá trị gốc ban đầu từ 4 giá trị này, vì vậy ta tính sự khác biệt của 4 cặp (1 − 2)/2=−1/2,(3 − 4)/2= −1/2, (5 − 6)/2= −1/2, và (7 − 8)/2= −1/2. Ta gọi những khác biệt này là các hệ số chi tiết (detail coefficients). Chúng ta có thể coi các giá trị trung bình là biểu diễn độ phân giải thô của dữ liệu gốc và các hệ số chi tiết là dữ liệu cần thiết để xây dựng lại dữ liệu gốc từ độ phân giải thô. Nếu các giá trị là tương quan khi đó biểu diễn dữ liệu thô sẽ gần giống với dữ liệu gốc, trong khi đó các hệ số chi tiết rất nhỏ. Điều này giải thích vi sao wavelet Haar nén dữ liệu sử dụng các giá trị trung bình và các hệ số chi tiết.

Từ các giá trị trung bình và các hệ số chi tiết ta có mảng q = {3/2, 7/2, 11/2, 15/2,−1/2,−1/2,−1/2,−1/2}. Thật dễ để thấy rằng từ mảng q này ta có thể khôi phục lại mảng p ban đầu. Mảng q này có 8 phần tử nhưng 4 phần tử cuối của nó, độ khác biệt có xu hướng số nhỏ, điều này giúp ích trong việc nén dữ liệu. Tiếp tục cách này ta lặp lại quá trình trên 4 giá trị trung bình (các giá trị lớn trong mảng q), chúng chuyển sang dạng 2 thành phần là các giá trị trung bình và các hệ số chi tiết ta được mảng

Bước tiếp theo và là cuối cùng ta lặp đi lặp lại quá trình này để chuyển đổi hai phần tử đầu tiên của mảng mới thành một giá trị trung bình (giá trị trung bình của tất cả 8 phần tử của mảng q ban đầu) và một hệ số chi tiết ta được mảng

q’= {36/8,−16/8,−4/4,−4/4,−1/2,−1/2,−1/2,−1/2}.

Mảng q’ cuối cùng này là kết quả biến đổi wavelet Haar của các dữ liệu ban đầu. Phép biến đổi wavelet Haar có xu hướng làm nhỏ khối hệ số chi tiết so với giá trị dữ liệu gốc, nhờ vậy nó xuất hiện nhiều giá trị giống nhau nên rất thuận tiện cho việc nén sử dụng RLE, kết hợp với kỹ thuật nén mã hóa Huffman sẽ tăng hiệu quả của quá trình nén. Nén có tổn thất dữ liệu có thể đạt được nếu một vài hệ số chi tiết nhỏ hơn được làm tròn hay thậm trí xóa bỏ hoàn toàn (thay thành 0).

Trước khi tiếp tục, chúng ta tính toán độ phức tạp tính toán của phép biến đổi, có nghĩa là tính số phép toán số học cần thiết theo kích thước dữ liệu đầu vào để thực hiện phép biến đổi. Trong ví dụ trên chúng ta cần (8 + 4 + 2) = 14 phép tính (phép tính cộng và trừ), số 14 này có thể viết thành 14 = 2(8 - 1). Trong trường hợp tổng quát, giả sử rằng chúng ta bắt đầu với kích thước dữ liệu đầu vào là N=2n. Trong vòng lặp đầu tiên chúng ta cần 2n phép tính, trong vòng lặp thứ 2 chúng ta cần 2n-1 phép tínhvà tiếp tục cho đến vòng lặp cuối cùng ta cần 2n-(n-1) = 21 phép tính. Như vậy tổng số các phép tính là 2𝑖 𝑛 𝑖=1 = 2𝑖 −1 𝑛 𝑖=0 =1−2 𝑛+1 1−2 −1 = 2 𝑛+1−2 = 2 2𝑛 −1 = 2 𝑁 −1 .

Phép biến đổi wavelet Haar của dữ liệu đầu vào kích thước N có thể thực hiện với

2(N – 1) phép tính, vì vậy độ phức tạp tính toán của nó là O(N), một kết quả tuyệt vời. Nó rất hữu ích để kết hợp với mỗi lần lặp một đại lượng gọi là độ phận giải (resolution), được định nghĩa là số lượng giá trị trung bình còn lại ở vòng lặp cuối. Độ phân giải sau mỗi lần lặp của ba lần lặp trong ví dụ trên là 4(= 22), 2(= 21), và 1(= 20)

Mỗi phần tử của phép biến đổi wavelet cần phải được chuẩn hóa bằng cách chia cho căn bậc hai của độ phân giải (đây là trực chuẩn của biến đổi Haar - orthonormal Haar transform), vì vậy biến đổi wavelet của chúng ta trở thành

36/8 20 ,−16/8 20 ,−4/4 21 ,−4/4 21 ,−1/2 22 ,−1/2 22 ,−1/2 22 ,−1/2 22 .

Nếu việc chuẩn hóa phép biến đổi wavelet được thực hiện thì về nguyên tắc nó cho phép ta bỏ qua các hệ số chi tiết quá nhỏ, chính vì thế phép biến đổi wavelet là lựa chọn tốt nhất cho việc nén có tổn thất dữ liệu do nó làm mất mát thông tin dữ liệu ít nhất.

Hai thủ tục trong Hình 1.11 thể hiện cách phép biến đổi wavelet tính toán chuẩn hóa một mảng n phần tử (n là lũy thừa của 2). Khôi phục lại mảng gốc từ mảng đã được phép biến đổi wavelet chuẩn hóa được thể hiện bằng hai thủ tục trong Hình 1.12

procedure NWTcalc(a:array of real, n:int);

//n là kích thước của mảng (Một lũy thừa của 2)

a:=a/√n // chia toàn bộ mảng

j:=n; while j≥ 2 do NWTstep(a, j); j:=j/2; endwhile; end;

procedure NWTstep(a:array of real, j:int); for i=1 to j/2 do

b[i]:=(a[2i-1]+a[2i])/√2; b[j/2+i]:=(a[2i-1]-a[2i])/√2; endfor;

a:=b; // Chuyển toàn bộ mảng

end;

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu và ứng dụng một số thuật toán nén tiếng nói luận văn ths công nghệ thông tin 60 48 05001 (Trang 25 - 27)