Các Fast Fourier Transform mất hoạt động, trong khi nhanh wavelet transform mất . Nhưng cụ thể, FWT tính toán cái gì?O ( N )
Mặc dù chúng thường được so sánh, nhưng có vẻ như FFT và FWT là táo và cam. Theo tôi hiểu, sẽ phù hợp hơn khi so sánh STFT (FFT của các khối nhỏ theo thời gian) với Morlet WT phức tạp , vì cả hai đều là biểu diễn tần số thời gian dựa trên các hình sin phức tạp (vui lòng sửa cho tôi nếu tôi sai ). Điều này thường được hiển thị với một sơ đồ như thế này:
( Một ví dụ khác )
Bên trái cho thấy STFT là một nhóm các FFT xếp chồng lên nhau khi thời gian trôi qua (đại diện này là nguồn gốc của phổ ), trong khi bên phải hiển thị WT dyadic, có độ phân giải thời gian tốt hơn ở tần số cao và tần số tốt hơn độ phân giải ở tần số thấp (đại diện này được gọi là scalogram ). Trong ví dụ này, cho STFT là số cột dọc (6), và một đơn hoạt động FFT tính toán một hàng duy nhất của hệ số từ mẫu. Tổng cộng là 8 FFT mỗi điểm 6 điểm, hoặc 48 mẫu trong miền thời gian.
Những gì tôi không hiểu:
Có bao nhiêu hệ số để một phép toán hoạt động FWT duy nhất và chúng nằm ở đâu trên biểu đồ tần suất thời gian ở trên?
Những hình chữ nhật nào được điền vào bởi một tính toán duy nhất?
Nếu chúng ta tính toán một khối các hệ số tần số thời gian bằng nhau bằng cả hai, chúng ta có nhận được cùng một lượng dữ liệu không?
FWT vẫn hiệu quả hơn FFT?
Ví dụ cụ thể bằng PyWavelets :
In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[2]:
(array([ 0.70710678, 0. , 0. , 0. ]),
array([ 0.70710678, 0. , 0. , 0. ]))
Nó tạo ra hai bộ 4 hệ số, do đó, nó giống như số lượng mẫu trong tín hiệu gốc. Nhưng mối quan hệ giữa 8 hệ số này và các ô trong sơ đồ là gì?
Cập nhật:
Trên thực tế, tôi có lẽ đã làm điều này sai, và nên sử dụng wavedec()
, đó là một phân tách DWT đa cấp:
In [4]: wavedec([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[4]:
[array([ 0.35355339]),
array([ 0.35355339]),
array([ 0.5, 0. ]),
array([ 0.70710678, 0. , 0. , 0. ])]