Існує багато способів визначення основи вейвлетів. Зазвичай вейвлет виглядає приблизно так:
wx0,k0(x)=Aexp(ik0x)e(k0(x−x0))
У якому - центр у часі, - центр за частотою, а - функція вікна. поглинає фазу і нормалізацію. Основний спосіб, по якому це відрізняється від вашого STFT, полягає в тому, що ширина вікна залежить від .x0k0eAk
Зазвичай для обмеження кількості вейвлетів використовується дискретні точки . Як і у вашому STFT, часто добре використовувати більшу кількість точок, ніж розмірність сигналу. Метою є наближення відповіді, яку ви отримаєте, використовуючи всі можливі , але з розумними обчислювальними ресурсами.(x0,k0)(x0,k0)
Оскільки розмірність трансформованих даних перевищує розмір сигналу, основа вейвлет не буде ортонормальним. Тобто, помилковим буде наступне:
⟨wk0,x0|wk′0,x′0⟩=δ(x0,x′0)δ(k0,k′0)
Однак для відповідних і ви можете домовитись про те, що основа буде неповною:Aw
∑x0,k0|wx0,k0⟩1k0−−√⟨wx0,k0|=identity
Іншими словами, ви можете реконструювати сигнал ідеально, додавши його складові вейвлети.
Вашу "модифікацію" можна просто вставити у вказану вище суму:
my_filter=∑x0,k0|wx0,k0⟩f(x0,k0)⟨wx0,k0|
Оновлення 2013-11-19 рр.: Додавання нижче деталей щодо впровадження відповідно до запиту.
Для деякого сигналу ми хочемо обчислити коефіцієнти:f(x)
cx0,k0=⟨wx0,k0|f⟩
Для фіксованого , може розглядатися як функція , і ця функція є просто відфільтрованою версією . Зокрема, це згортання з , яке ми можемо ефективно обчислити, використовуючи метод Фур'є. Таким чином, ми можемо ефективно обчислити всі наступним чином:k0cx0,k0x0ffw0,k0cx0,k0
- Застосуйте перетворення Фур'є до щоб отримати . Ймовірно, ви хочете зробити це вікно за один раз, з достатньою кількістю накладок, щоб можна було викинути артефакти вікон тощо, але для простоти припустимо, що ви робите весь сигнал одразу, і що його довжина є потужністю дві.ff^
- Для кожного в деякій геометричній прогресії з проміжком приблизно на пропускну здатність фільтра (або точніше, якщо потрібно):
k01/4
- Створіть добуток з .f^w^0,k0
- Скоротіть спектр до деякого інтервалу , довжина якого є потужністю два, і який містить ненульову частину .[kl,kr)w^0,k0
- До цього застосуйте зворотне перетворення Фур'є.
- Помножте це на для виправлення фази. Результат розглядається як функція .exp(ixkl+kr2)cx0,k0x0
При цьому обчислюються всі коефіцієнти вейвлет. Ви можете вибрати роздільну здатність в , налаштувавши співвідношення в геометричній прогресії. Роздільна здатність у задається довжиною усіченого спектру і змінюватиметься залежно від пропускної здатності , що в свою чергу залежить від . Обчислювальні зусилля - це одне перетворення Фур'є з високою часовою роздільною здатністю, плюс одне зворотне перетворення Фур'є для кожного значення при набагато нижчому дозволі часу. Він працює приблизно так само, як і STFT - можливо, повільніше якийсь невеликий фактор, який залежить від обраної вами роздільної здатності.k0x0w0,k0k0k0
Потім ви можете змінити як вважаєте за потрібне, і ви можете реконструювати сигнал, повернувши вищевказаний процес, підсумовуючи спектри по перш ніж нарешті зробити загальне зворотне перетворення Фур'є.cx0,k0k0
Спектри обрізання іноді вводять проблеми нормалізації, залежно від того, як визначено ваш FFT. Я не буду намагатися охопити всі можливості тут. Нормалізація - це в основному проста проблема. ;-)
Залишилося лише вибрати відповідний конверт вейвлета. Виявляється, легше отримати право, ніж отримати прямо. Відповідне визначення (з багатьох можливостей) таке:w^x0,k0(k)wx0,k0(x)
w^x0,k0=Aexp(−i(k−k0)x0)exp(−(Qlog(k/k0))2)
в якій - безрозмірна константа, яка вибирає пропускну здатність вашого фільтра, тобто роздільну здатність частот ваших вейвлетів, а вибирається за необхідності для нормалізації. З цим визначенням і достатньо високою роздільною здатністю для виконується умова перевиконання, і реконструкція сигналу запрацює.A k 0QAk0