CWT ở quy mô thấp: PyWavelets vs Scipy
Các thang đo thấp được cho là thách thức nhất để thực hiện do những hạn chế trong các đại diện tùy tiện. So sánh chi tiết tại đây ; sự khác biệt chính là ở cách xử lý hai wavelets ở mỗi tỷ lệ :
- pywt :
diffcủaint_psiresampled ở mỗi quy mô, tự bình thường ( caveat2 );int_psi == cumsum(psi) - scipy : wavelet được tính toán lại và chuẩn hóa rõ ràng ở mỗi tỷ lệ
(Đối với pywt, nó không chính xác diff(int_psi), nhưng hành vi chính là tương đương) Các biểu đồ dưới đây so sánh CWT morlet thực và phức tạp để có tín hiệu chuyển tiếp sắc nét; tất cả các hệ số được chuẩn hóa L1.
Tôi không nhận được gì nhiều từ việc kiểm tra hình dạng của các wavelet tương ứng (xanh dương = biên dịch lại, cam = lấy mẫu lại, cả hai đều được thay đổi tỷ lệ -1 thành 1):
Vậy thỏa thuận là gì? Tôi có thiếu điều gì đó trong sự khác biệt tùy ý hay cách tiếp cận wavelet tích hợp của pywt có ưu việt hơn đối với các quy mô thấp hơn (nếu vậy, tại sao)?
Trả lời
Phán quyết : Tôi kết luận scipy của đỉnh tận cùng bên trái cao hơn là do biên độ thấp hơn ở quy mô thấp hơn và wavelets scipy của wavelets cả của pywt tương quan mạnh với tần số thấp hơn ở quy mô thấp hơn. Nhìn chung, cả hai đều tương quan xấp xỉ đồng đều với các tần số không liên quan (scipy tệ hơn một chút), nhưng pywt "lép vế" với các mối tương quan xấu của nó được bù đắp với biên độ wavelet nhỏ hơn ở các thang đo thấp hơn, do đó đỉnh nhỏ hơn.
Tôi không chắc chính xác tại sao việc tính toán lại trực tiếp của scipy lại tệ hơn việc lấy mẫu lại của pywt; Tôi muốn nói vấn đề giải quyết với số lượng mẫu rất hạn chế ngay từ đầu và lấy mẫu lại tích hợp hoạt động tốt hơn (nó cũng lâu hơn một chút), nhưng chưa được điều tra rõ ràng.
Để biết thêm đánh giá về quy mô thấp pywt và scipy, hãy xem phần dưới cùng. Phần còn lại của câu trả lời phục vụ để biện minh cho phán quyết, nhưng không bổ sung thêm nhiều; nhiều thông tin nhất là Hình 2. Một số mã được cung cấp, có thể được sử dụng lại để kiểm tra các phép biến đổi khác.
Một loại chuẩn mực ngây thơ hơn chỉ ra câu trả lời; zero-mean + hệ số thang đo giữa$[-1,1]$ mỗi quy mô:
Đối với cốt truyện hàng đầu, a $[0,1]$-cale là tương đương, vì vậy nó cho thấy sức mạnh tương quan chuẩn hóa với wavelet bất kể năng lượng (thực tế không hoàn toàn; cảnh báo1). Điều này cho thấy sự khác biệt bắt nguồn từ biên độ sóng ; hãy so sánh. (- mã hệ số3 )
Chúng có tương quan khác nhau không? - Đối với tất cả các ô, blue = scipy, cam = pywt.
Được chuẩn hóa theo tỷ lệ : chia mỗivectơ tỷ lệ theo mức tối đa của riêng mình (tương quan tuyệt đối cao nhất trong tất cả các dịch chuyển thời gian ). Vẽ biểu đồ giá trị tuyệt đối của mỗi vectơ tỷ lệ, do đó thời gian dịch chuyển theo phương ngang. Giá trị lớn hơn tại một khoảng dịch chuyển thời gian nhất định cho thấy mối tương quan lớn hơn của thang đo được vẽ biểu đồ so với tất cả các dịch chuyển thời gian khác ở thang đo đó .
- Ở trên cho thấy các thang đo ban đầu của scipy có các mối tương quan có thể so sánh được ở mỗi thang đo cho cả hai nửa của tín hiệu, trong khi đối với pywt, nửa bên phải lại chiếm ưu thế.
- Điều này có ngụ ý rằng scipy tương quan mạnh mẽ hơn với các tần số thấp hơn ở các thang đo thấp hơn pywt (tức là đối với cùng biên độ wavelet)? Vâng ; chúng ta sẽ nhận được quy mô chuẩn hóa giống hệt nhau nếu chúng ta buộc các biên độ wavelet giống nhau. Xem biểu đồ được cân bằng biên độ đã thu phóng trong Hình 2; lưu ý cách tại chỉ số 2 và 4 pywt vượt quá scipy và quan sát gif ở trên.
Timeshift-chuẩn hóa : chia mỗivector dịch chuyển thời gian cho tối đa của riêng mình (tương quan tuyệt đối cao nhất trong tất cả các thang đo ). Vẽ biểu đồ giá trị tuyệt đối của mỗi vectơ tỷ lệ, do đó thời gian dịch chuyển theo phương ngang. Giá trị lớn hơn tại một khoảng dịch chuyển thời gian nhất định cho thấy mối tương quan lớn hơn của thang đo được vẽ biểu đồ so với tất cả các thang đo khác tại thời điểm dịch chuyển .
- Ở trên cho thấy, đối với nửa bên trái, sức mạnh tương quan như nhau cho tất cả 20 thang đo so với thang đo tương quan mạnh nhất. Nửa bên phải dao động nhiều hơn cho cả hai, nhưng scipy giữ cho chính nó bội số trên pywt. Điều này có nghĩa là hầu hết sự khác biệt về năng lượng ở các thang này là do nửa bên phải.
- Nhưng tại sao lại do nửa phải? Và tại sao nửa bên trái tương đối cố định? Hình 1; về phía thang âm cao hơn (tần số thấp hơn, nửa bên trái), scipy và pywt đồng ý ở cả biên độ và hình dạng sóng.
So sánh biên độ Wavelet
Thay vì nhìn vào biên độ tối đa, tôi xác định một thước đo "biên độ trung bình": giá trị trung bình của giá trị tuyệt đối của wavelet cắt đuôi, trong đó "tail" = bất kỳ khoảng trống nào nhỏ hơn 1e7 lần so với biên độ đỉnh (thay vì hoàn toàn bằng 0, hiếm hơn). Điều này là để bỏ thiên vị cho các wavelet có đuôi dài: (- code2 )
left = [i for i, v in enumerate(x) if abs(v) > x.max() / 1e7][0]
right = [i for i, v in enumerate(x[::-1]) if abs(v) > x.max() / 1e7][0]
meanamp = np.mean(np.abs(x[left:-(right + 1)]))
Tại scales[0], tỷ lệ là 2,58 - khi bình phương cho các năng lượng, đó là một hệ số lớn hơn x6,64 cho scipy do sự khác biệt về biên độ sóng sóng. Tuy nhiên, tỷ lệ năng lượng của các hệ số ở thang đo đó là 8,33, vì vậy có một yếu tố khác - và yếu tố này chắc chắn là mối tương quan mạnh hơn của scipy với phần tần số thấp của tín hiệu, như được hiển thị trước đó.
Để xem chính xác biên độ chiếm bao nhiêu, chúng ta có thể chuẩn hóa bằng nó; hệ số tỷ lệ theo tỷ lệ của biên độ (trung bình):
Chúng tôi thấy đối với hầu hết các thang đo thấp hơn, năng lượng của scipy lớn hơn ngay cả khi tính theo biên độ, chỉ để lại sức mạnh tương quan là nguồn khác biệt. Cũng thú vị khi thấy pywt tương quan mạnh hơn nhiều ở chế độ true đầu tiên (~ tỷ lệ 50).
Lưu ý 1: Hình 0 bị sai lệch
Lưu ý bước nhảy scipy phía trên pywt ở cạnh bên phải, tuy nhiên, nếu chúng ta nhìn vào biên độ trung bình của logcale, pywt's đều lớn hơn và tương quan mạnh hơn theo biểu đồ biên độ. Thỏa thuận là gì? Nhớ lại cách xác định ô tiêu chuẩn hóa theo tỷ lệ; điều này cũng tương tự, nhưng bây giờ đối với hệ số - các vectơ tỷ lệ được thay đổi tỷ lệ so với chính chúng , thay vì giữa pywt và scipy.
Giá trị lớn hơn trong Hình 0 cho kết quả nếu hầu hết các điểm không thấp hơn quá nhiều so với mức tối đa (vì tất cả các điểm được chia cho tối đa) qua các dịch chuyển thời gian hoặc wavelet ở thang đo tương quan nhất quán hơn với mỗi chuyển dịch thời gian. Vì vậy, nó là một biện pháp nhất quán hơn ; đây là thang đo cuối cùng, được hiển thị cho mọi dịch chuyển thời gian:
Vậy ... pywt tốt hơn ở thang thấp hơn? - Không chắc chắn, nhưng pywt thắng trong hai trường hợp thử nghiệm quan trọng:
Tần số tối đa cao hơn
Tín hiệu tần số kết hợp ồn ào