Số lượng hệ số Daubechies


8

Tôi đang tự hỏi về mối tương quan giữa kích thước đầu vào và số lượng các hệ số được đưa ra bởi một biến đổi wavelet rời rạc.

Tôi đang sử dụng các bước sóng Daubechies để mô tả hàm 1D và tôi đang sử dụng PyWavelets để thực hiện nó (tương tự như hộp công cụ MATLAB).

Tôi bắt đầu bằng cách thực hiện nó bằng cách sử dụng sóng con Haar, cho kết quả chính xác và tôi hiểu chính xác cách thức hoạt động của nó. Giả sử hàm đầu vào của tôi có 16 điểm dữ liệu, nếu tôi sử dụng Haar, những gì tôi nhận được từ phân tách đa cấp ( wavedec) là như thế này (số lượng ca trong ngoặc):

V1[1], W1[1], W2[2], W3[4], W4[8]

Đây là tất cả tốt và tốt. V1 cung cấp cho tôi chức năng chia tỷ lệ và các bước sóng W1 - W5 có quy mô và độ giãn nở khác nhau. Vấn đề của tôi là khi tôi sử dụng các Daubechies tiếp theo (được gọi là 'db2'trong hộp công cụ, được gọi là D4 ) và tôi nhận được

V1[6], W1[6], W2[9]

Tôi mất tất cả trực giác của tôi. Tôi không biết 6, 6 và 9 đến từ đâu và chúng thay đổi tùy thuộc vào cấp độ tôi chỉ định (thậm chí không chắc ý nghĩa của việc xác định cấp độ) và tất nhiên là kích thước đầu vào. Làm cách nào tôi có thể dự đoán số lượng hệ số, và một số tài nguyên tốt để hiểu rõ hơn về lý do tại sao?

Cảm ơn!

EDIT: Làm rõ trên V và W:

Vn thường biểu thị nhịp của một hàm chia tỷ lệ nhất định, ϕ, I E {ϕn,k}, Ở đâu k là sự thay đổi và n tỉ lệ. Wn là như nhau ngoại trừ chức năng wavelet, ψ. Tôi có thể đã lạm dụng ký hiệu một chút bằng cách tham khảo các vectơ hệ số theo V và W.

EDIT2: Mã

Đây là mã MATLAB để sản xuất ở trên:

>> [C, L] = wavedec(1:16, 4, 'db1'); L
L = 
     1     1     2     4     8    16
>> [C, L] = wavedec(1:16, 2, 'db2'); L
L =
     6     6     9    16

Tôi thực sự đã sử dụng PyWavelets, nơi nó trông như thế này:

>>> import pywt
>>> map(len, pywt.wavedec(range(16), 'db1')) # defaults to level = 4
[1, 1, 2, 4, 8]
>>> map(len, pywt.wavedec(range(16), 'db2')) # defaults to level = 2
[6, 6, 9]

1
Là gì VW?
Phonon

@Phonon Tôi đã thêm một làm rõ trong câu hỏi.
Gustav Larsson

Vậy theo V1[6], W1[6], W2[9]bạn có nghĩa là bạn có được một hàm chia độ dài 6 và hai hàm sóng con có độ dài 6 và 9? Hay đây là những số hệ số của mức tín hiệu biến đổi khác nhau của bạn? Mã MATLAB để có được những điều này cũng sẽ rất hữu ích.
Phonon

@Phonon Cái sau. Kiểm tra mã tôi đã thêm. Cảm ơn!
Gustav Larsson

Vâng, điều này rất hữu ích. Tôi sẽ đào xung quanh trong các tài liệu MATLAB.
Phonon

Câu trả lời:


4

Theo tài liệu MATLAB trên wavedec,

Độ dài của mỗi bộ lọc bằng 2N. Nếu n = length(s), các tín hiệuFG có chiều dài n+2N1 và các hệ số cA1cD1 có chiều dài

floor(n12)+N

Đây, n=16 là độ dài tín hiệu của bạn và N=2 là số Daubechies.

Đặt tất cả những thứ đó lại với nhau, các hệ số chi tiết của bạn ở cấp độ thứ hai phải có độ dài

floor(1612)+2=7+2=9.

Ở cấp độ thứ hai, các hệ số của bạn phải có độ dài

floor(912)+2=4+2=6.

Nếu bạn đang tự hỏi tại sao điều này phải là trường hợp, hãy tưởng tượng thủ tục lọc-decimation. Chức năng mở rộng và wavelet chodbm sóng con có chiều dài 2m. Khi bạn kết hợp chiều dàin tín hiệu với chiều dài 2m tín hiệu, bạn nhận lại một tín hiệu về chiều dài l0=n+2m1. Nếu bạn lấy mỗi mẫu thứ hai của tín hiệu kết quả này, bạn sẽ nhận lại được thứ gì đó có độ dàil1=n+2m12=l02. Tất nhiên nếul0 là số lẻ (nlà chẵn), sau đó chúng ta không thể chia tín hiệu chính xác thành hai phần . Với toán học thông minh mà tôi sẽ không đi sâu vào đây, bạn có thể chỉ ra rằng hệ số không ghép đôi cuối cùng này là không cần thiết (dù sao cũng không có thông tin mà chúng tôi chưa biết), vì vậy bạn có thể bỏ qua nó. Do đó, chúng ta sẽ luôn có tín hiệu giảm dần về chiều dài

l1=floor(l02)=floor(n+2N12)=floor(n12)+N.

Chính xác là loại phái sinh mà tôi đang tìm kiếm. Cảm ơn rất nhiều!
Gustav Larsson

Bạn có thể giải thích rằng tín hiệu F và G là gì?
Weam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.