Что такое вейвлет-преобразование?
UPD: 21 октября: добавлена новая инфа и пару картинок, исправлены ошибки.
Прежде чем рассказать, как я делал свой кодек, расскажу, что же такое вейвлет преобразование. Остановлюсь на его дискретном варианте. Все, у кого в институте была хоть какая-никакая математика, слышали про ряды Фурье. Это когда функцию можно разложить по базису в таком виде:
f(x) = \sum_{k=0}^{\infty} \langle f(x), \psi_{k}(x) \rangle \psi_{k}(x)
Обычно в виде \psi_{k}(x) берутся всевозможные синусы и косинусы, это называется разложением по гармоническому базису. Я напишу это условно так:
f(x) = \sum_{k=-\infty}^{\infty} \langle f(x), e^{ikx} \rangle e^{ikx}
Как мы видим, \psi_{k}(x) = \psi_{1}(kx), где \psi_{1}(x) = e^{ix}. В результате такого разложения мы получаем набор коэффициентов, где каждый коэффициент отвечает за "наличие" в функции гармонического колебания с частотой 1,2,3 итд. За это мы "забываем" информацию о времени, то есть когда же именно в функции были эти колебания. Решением проблемы стали оконные преобразования Фурье, когда функция предварительно домножалась на "плавающее" во времени окно.
Другим подходом к вопросу о сохранении информации о времени является (дискретное) вейвлет преобразование. Его можно записать в виде
c_{m,n} = \langle f(x), \psi_{m,n}(x) \rangle = a^{-m/2}\langle f(x), \psi(a^{-m}x-nb) \rangle
Здесь, как мы видим, смысл похож на ряд Фурье, за исключением того, что функция \psi(x) не только меняет свой масштаб ("икс" домножается на множитель), но и сдвигается по времени. Таким образом, мы получаем и частотную составляющую, и временную. Однако тут есть простое правило, которое заключается в следующем: если мы точно знаем частоту сигнала, то никогда не узнаем, когда он произошел, и если точно знаем время — никогда не узнаем частоту. Возможны варианты посередине — например, частота сигнала почти 100Гц (с примесями), сигнал возник между таким-то временем и таким-то.
Существует множество вариантов функции \psi(x), для которого существует обратное преобразование (т.е., по коэффициентам можно восстановить f(x)). Я остановлюсь на случае a=2, b=1:
\psi_{m,n} = 2^{-m/2}\psi(2^{-m}x - n).
Также я покажу, как найти \psi(x), для которых
f(x) = \sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x)
Обычно в виде \psi_{k}(x) берутся всевозможные синусы и косинусы, это называется разложением по гармоническому базису. Я напишу это условно так:
f(x) = \sum_{k=-\infty}^{\infty} \langle f(x), e^{ikx} \rangle e^{ikx}
Как мы видим, \psi_{k}(x) = \psi_{1}(kx), где \psi_{1}(x) = e^{ix}. В результате такого разложения мы получаем набор коэффициентов, где каждый коэффициент отвечает за "наличие" в функции гармонического колебания с частотой 1,2,3 итд. За это мы "забываем" информацию о времени, то есть когда же именно в функции были эти колебания. Решением проблемы стали оконные преобразования Фурье, когда функция предварительно домножалась на "плавающее" во времени окно.
Другим подходом к вопросу о сохранении информации о времени является (дискретное) вейвлет преобразование. Его можно записать в виде
c_{m,n} = \langle f(x), \psi_{m,n}(x) \rangle = a^{-m/2}\langle f(x), \psi(a^{-m}x-nb) \rangle
Здесь, как мы видим, смысл похож на ряд Фурье, за исключением того, что функция \psi(x) не только меняет свой масштаб ("икс" домножается на множитель), но и сдвигается по времени. Таким образом, мы получаем и частотную составляющую, и временную. Однако тут есть простое правило, которое заключается в следующем: если мы точно знаем частоту сигнала, то никогда не узнаем, когда он произошел, и если точно знаем время — никогда не узнаем частоту. Возможны варианты посередине — например, частота сигнала почти 100Гц (с примесями), сигнал возник между таким-то временем и таким-то.
Существует множество вариантов функции \psi(x), для которого существует обратное преобразование (т.е., по коэффициентам можно восстановить f(x)). Я остановлюсь на случае a=2, b=1:
\psi_{m,n} = 2^{-m/2}\psi(2^{-m}x - n).
Также я покажу, как найти \psi(x), для которых
f(x) = \sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x)
Multiresolution analysis.
Инфа здесь пойдет без пруфов, так как материал слишком большой. Предположим что мы знаем некое пространство V_0, которое является подпространством L^2. Допустим, мы знаем набор функций \phi_{0,n}(x) = \phi (x-n), являющихся в нём ортнормированным базисом. Также мы знаем, что более "раздутая" версия \phi(x) выражается через более "сжатые" версии себя самой так:
\phi(x) = \sqrt{2} \sum_{n=-\infty}^{\infty} h_{n}\phi(2x-n)
Тогда функция \psi(x) = \sqrt{2} \sum_{n=-\infty}^{\infty} d_{n}\phi(2x-n), где d_{n} = (-1)^{n-1}h_{-n-1} будет служить "основой" для функций \psi_{m,n} = 2^{-m/2}\psi(2^{-m}x - n), которые будут ортнормированным базисом на всём пространстве L^2. \psi(x) определяются уникально вплоть до сдвига. Например, для коэффициентов d_n можно использовать уравнение d_{n} = (-1)^{n-1}h_{2N-n-1}, где N — любое целое.
Любую функцию f \in L^2 можно представить в виде:
f(x) = \sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x) или f(x) = \sum_{m=-\infty}^{M} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x) + \sum_{n=-\infty}^{\infty} \langle f(x), \phi_{M,n}(x) \rangle \phi_{M,n}(x).
Функция \phi(x) называется scaling function, а \psi(x) — mother wavelet.
Любую функцию f \in L^2 можно представить в виде:
f(x) = \sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x) или f(x) = \sum_{m=-\infty}^{M} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \psi_{m,n}(x) + \sum_{n=-\infty}^{\infty} \langle f(x), \phi_{M,n}(x) \rangle \phi_{M,n}(x).
Обычно ценятся вейвлеты, где только конечное число h_n не равны нулю. Тогда \phi(x) и \psi(x) будут иметь компактный носитель и хорошо оценивать время, когда произошел тот или иной сигнал.
Самый простой пример вейвлета, построенного таким образом — вейвлет Хаара. Возьмем \phi(x) = \chi[0,1] Очевидно, что \langle \phi(x-k), \phi(x-l) \rangle = \delta_{k,l}. Видно, что \phi(x) = \sqrt{2} (\frac{1}{\sqrt {2}} \phi(2x) + \frac{1}{\sqrt {2}} \phi(2x-1)), тогда \psi(x) = \sqrt{2} (-\frac{1}{\sqrt {2}} \phi(2x) + \frac{1}{\sqrt {2}} \phi(2x-1)) = \phi(2x-1) - \phi(2x) = \chi[\frac{1}{2},1] - \chi[0, \frac{1}{2}] будет основой для нашего базиса.
![]() |
График mother wavelet для вейвлета Хаара (умноженный на -1) |
Это единственный пример, который находится так лекго, и функция \psi(x) задаётся в явном виде.
Для построения других примеров введем полезные ограничения. Пусть \int_{-\infty}^{-\infty} \phi(x) dx = 1 и \int_{-\infty}^{-\infty} x^k \psi(x) dx = 0 для всех k = 0, 1, \cdots, N. Про последний интеграл говорят, что mother wavelet имеет N+1 нулевых моментов. В частности вейвлет Хаара имеет один нулевой момент. Нулевые моменты полезны тем, что они отчасти определяют скорость, с которой коэффициенты разложения стремятся к нулю. Представим функцию f(x) в виде ряда Тейлора вблизи точки a: f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2}(x-a)^2 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + \cdots. Тогда \langle f(x), \psi(x) \rangle = \frac {f^{(N+1)}(a)}{(N+1)!}\langle (x-a)^{N+1}, \psi(x) \rangle + \cdots.
Это значит, что при малых масштабах (малом m), коэффициенты разложения будут ближе к 0 при большем N, так как \lim_{n->\infty} (x-a)^n = 0 при \left|x-a\right| < 1.
Возьмем преобразование Фурье уравнения, написанного выше:
\phi(x) = \sqrt{2} \sum_{n=-\infty}^{\infty} h_{n}\phi(2x-n)
Получим следующее:
\hat{\phi}(s) = \frac{1}{\sqrt{2}} \sum_{n=-\infty}^{\infty} h_{n}e^{-ins/2}\hat{\phi}(s/2)
Можно определить функцию \hat{m}(s) = \sum_{n=-\infty}^{\infty} h_{n}e^{-ins}, называющуюся генерирующей функцией. Тогда
\hat{\phi}(s) = \hat{m}(s/2)\hat{\phi}(s/2)
Аналогично
\hat{\psi}(s) = \hat{m_1}(s/2)\hat{\phi}(s/2), где \hat{m_1}(s) = e^{is}\overline{\hat{m}(s+\pi)}
Теперь легко доказать, что условию \int_{-\infty}^{-\infty} \phi(x) dx = 1 соответствует \hat{m}(0) = 1, а условию нулевых моментов — \hat{m}^{(k)}(\pi) = 0 для k = 0, 1, \cdots, N
Условие ортогональности \langle \phi_{0,k}, \phi_{0,n} \rangle = \delta_{kn}, оказывается, можно представить в виде \left| \hat{m}(s) \right|^2 + \left| \hat{m}(s+\pi) \right|^2 = 1.
Добираемся до второго примера. Найдем вейвлет, у которого n исчезающих моментов. Будем искать \hat{m}(s) в виде \hat{m}(s) = (\frac{1+e^{-is}}{2})^n L(s) (видно, что все условия соблюдены, кроме, пока что, условия ортогональности), где L(s) — тригонометрический многочлен. Находим \left| \hat{m}(s) \right|^2 = [(\frac{1+e^{is}}{2})(\frac{1+e^{-is}}{2})]^n Q(\cos s) = \cos^{2n} (\frac{s}{2}) Q(\cos s), где Q(\cos s) — многочлен от \cos s. Вводим переменную x = \sin^2 (\frac{s}{2}).
Тогда \left| \hat{m}(s) \right|^2 = (1-x)^n Q(1-2x)
\left| \hat{m}(s+\pi) \right|^2 = \sin^{2n}(\frac{s}{2}) Q(-\cos s) = x^nQ(2x-1).
Обозначив P(x) = Q(1-2x) получим уравнение
(1-x)^nP(x) + x^nP(1-x) = 1.
Это уравнение называется уравнением Безу (точнее, это его частный случай) и имеет решение
P(x) = \sum_{k=0}^{n-1} C_{n+k-1}^{k} x^k + x^nR(2x-1), где R(x) — нечетный многочлен или 0. Для n=2 подойдет P(x) = 1 + 2x.
Затем мы находим Q(1-2x):
Q(1-2x) = 2 - (1 -2x) = 2 - \cos s
Теперь находим L(s) (нужно искать многочлен той же степени, что и Q).
L(s) = a_0 + a_1 e^{-is}
L(s)L(-s) = (a_0 + a_1^{-is})(a_0 + a_1^{is}) = 2 - \frac{e^{is} + e^{-is}}{2}
После этого находим \hat{m}(s):
\hat{m}(s) = \frac{1}{\sqrt{2}} (\frac{1+\sqrt{3} }{4\sqrt{2}}+ \frac{3+\sqrt{3}}{4\sqrt{2}}e^{-is} + \frac{3-\sqrt{3}}{4\sqrt{2}}e^{-2is} +\frac{1-\sqrt{3}}{4\sqrt{2}}e^{-3is})
Или \phi(x):
\phi(x) = \sqrt{2} (\frac{1+\sqrt{3} }{4\sqrt{2}}\phi(2x)+ \frac{3+\sqrt{3}}{4\sqrt{2}}\phi(2x-1) + \frac{3-\sqrt{3}}{4\sqrt{2}}\phi(2x-2) +\frac{1-\sqrt{3}}{4\sqrt{2}}\phi(2x-3))
Такие вейвлеты называются вейвлетами Добеши, значения коэффициентов h_k для другого количества нулевых моментов есть в википедии.
Графики scaling function и mother wavelet для вейвлетов D4 (2 нулевых момента) и D6 (3 нулевых момента):
или
Для построения других примеров введем полезные ограничения. Пусть \int_{-\infty}^{-\infty} \phi(x) dx = 1 и \int_{-\infty}^{-\infty} x^k \psi(x) dx = 0 для всех k = 0, 1, \cdots, N. Про последний интеграл говорят, что mother wavelet имеет N+1 нулевых моментов. В частности вейвлет Хаара имеет один нулевой момент. Нулевые моменты полезны тем, что они отчасти определяют скорость, с которой коэффициенты разложения стремятся к нулю. Представим функцию f(x) в виде ряда Тейлора вблизи точки a: f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2}(x-a)^2 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + \cdots. Тогда \langle f(x), \psi(x) \rangle = \frac {f^{(N+1)}(a)}{(N+1)!}\langle (x-a)^{N+1}, \psi(x) \rangle + \cdots.
Это значит, что при малых масштабах (малом m), коэффициенты разложения будут ближе к 0 при большем N, так как \lim_{n->\infty} (x-a)^n = 0 при \left|x-a\right| < 1.
Возьмем преобразование Фурье уравнения, написанного выше:
\phi(x) = \sqrt{2} \sum_{n=-\infty}^{\infty} h_{n}\phi(2x-n)
Получим следующее:
\hat{\phi}(s) = \frac{1}{\sqrt{2}} \sum_{n=-\infty}^{\infty} h_{n}e^{-ins/2}\hat{\phi}(s/2)
Можно определить функцию \hat{m}(s) = \sum_{n=-\infty}^{\infty} h_{n}e^{-ins}, называющуюся генерирующей функцией. Тогда
\hat{\phi}(s) = \hat{m}(s/2)\hat{\phi}(s/2)
Аналогично
\hat{\psi}(s) = \hat{m_1}(s/2)\hat{\phi}(s/2), где \hat{m_1}(s) = e^{is}\overline{\hat{m}(s+\pi)}
Теперь легко доказать, что условию \int_{-\infty}^{-\infty} \phi(x) dx = 1 соответствует \hat{m}(0) = 1, а условию нулевых моментов — \hat{m}^{(k)}(\pi) = 0 для k = 0, 1, \cdots, N
Условие ортогональности \langle \phi_{0,k}, \phi_{0,n} \rangle = \delta_{kn}, оказывается, можно представить в виде \left| \hat{m}(s) \right|^2 + \left| \hat{m}(s+\pi) \right|^2 = 1.
Добираемся до второго примера. Найдем вейвлет, у которого n исчезающих моментов. Будем искать \hat{m}(s) в виде \hat{m}(s) = (\frac{1+e^{-is}}{2})^n L(s) (видно, что все условия соблюдены, кроме, пока что, условия ортогональности), где L(s) — тригонометрический многочлен. Находим \left| \hat{m}(s) \right|^2 = [(\frac{1+e^{is}}{2})(\frac{1+e^{-is}}{2})]^n Q(\cos s) = \cos^{2n} (\frac{s}{2}) Q(\cos s), где Q(\cos s) — многочлен от \cos s. Вводим переменную x = \sin^2 (\frac{s}{2}).
Тогда \left| \hat{m}(s) \right|^2 = (1-x)^n Q(1-2x)
\left| \hat{m}(s+\pi) \right|^2 = \sin^{2n}(\frac{s}{2}) Q(-\cos s) = x^nQ(2x-1).
Обозначив P(x) = Q(1-2x) получим уравнение
(1-x)^nP(x) + x^nP(1-x) = 1.
Это уравнение называется уравнением Безу (точнее, это его частный случай) и имеет решение
P(x) = \sum_{k=0}^{n-1} C_{n+k-1}^{k} x^k + x^nR(2x-1), где R(x) — нечетный многочлен или 0. Для n=2 подойдет P(x) = 1 + 2x.
Затем мы находим Q(1-2x):
Q(1-2x) = 2 - (1 -2x) = 2 - \cos s
Теперь находим L(s) (нужно искать многочлен той же степени, что и Q).
L(s) = a_0 + a_1 e^{-is}
L(s)L(-s) = (a_0 + a_1^{-is})(a_0 + a_1^{is}) = 2 - \frac{e^{is} + e^{-is}}{2}
После этого находим \hat{m}(s):
\hat{m}(s) = \frac{1}{\sqrt{2}} (\frac{1+\sqrt{3} }{4\sqrt{2}}+ \frac{3+\sqrt{3}}{4\sqrt{2}}e^{-is} + \frac{3-\sqrt{3}}{4\sqrt{2}}e^{-2is} +\frac{1-\sqrt{3}}{4\sqrt{2}}e^{-3is})
Или \phi(x):
\phi(x) = \sqrt{2} (\frac{1+\sqrt{3} }{4\sqrt{2}}\phi(2x)+ \frac{3+\sqrt{3}}{4\sqrt{2}}\phi(2x-1) + \frac{3-\sqrt{3}}{4\sqrt{2}}\phi(2x-2) +\frac{1-\sqrt{3}}{4\sqrt{2}}\phi(2x-3))
Такие вейвлеты называются вейвлетами Добеши, значения коэффициентов h_k для другого количества нулевых моментов есть в википедии.
Графики scaling function и mother wavelet для вейвлетов D4 (2 нулевых момента) и D6 (3 нулевых момента):
![]() |
Вейвлет D6 (scaling function — фиолетовый, mother wavelet — зеленый график) |
![]() |
Вейвлет D4 |
Я использую один из биортогональных вейвлетов. Это когда f(x) = \sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} \langle f(x), \psi_{m,n}(x) \rangle \tilde{\psi}_{m,n}(x)
Принцип их построения очень прост. Вводятся две функции \hat{m}(s) и \tilde{\hat{m}}(s) и условие ортогональности заменяется на \hat{m}(s)\overline{\tilde{\hat{m}}(s)} + \hat{m}(s+\pi)\overline{\tilde{\hat{m}}(s+\pi)} = 1. Для коэффициентов d_n и \hat{d}_n используются формулы:
d_n = (-1)^{n+1}\tilde{h}_{-n+1}
\tilde{d}_n = (-1)^{n+1}h_{-n+1}
Пример построения, когда обе функции \psi(x) и \tilde{\psi}(x) имеют 2 исчезающих момента:
Возьмем \hat{m}(s) = (\frac{1+e^{-is}}{2})^2 и \tilde{\hat{m}}(s) = (\frac{1+e^{-is}}{2})^2Q(\cos s)
Заметим, что \cos^2 (\frac{s}{2}) = \frac{(e^{is/2} + e^{-is/2})^2}{4} = \frac{1}{4}(e^{is} + 2 + e^{-is}) = e^{is}(\frac{1+e^{-is}}{2})^2
Тогда
\hat{m}(s) = e^{-is}(\cos^2 \frac{s}{2})^2 и \tilde{\hat{m}}(s) = e^{-is}(\cos^2 \frac{s}{2})^2Q(\cos s)
Относительно переменной x = \sin^2 \frac{s}{2} снова получаем уравнение
(1-x)^nP(x) + x^nP(1-x) = 1, где P(x) = Q(1-2x).
Решив его получим:
\hat{m}(s) = \frac{1}{\sqrt 2} (\frac{1}{2\sqrt{2}}e^{-is} + \frac{1}{\sqrt{2}} + \frac{1}{2\sqrt{2}}e^{is})
\tilde{\hat{m}}(s) = \frac{1}{\sqrt 2} (-\frac{1}{4\sqrt{2}}(e^{-2is} + e^{2is}) + \frac{1}{2\sqrt{2}}(e^{-is} + e^{is}) + \frac{3}{2\sqrt{2}})d_n = (-1)^{n+1}\tilde{h}_{-n+1}
\tilde{d}_n = (-1)^{n+1}h_{-n+1}
Пример построения, когда обе функции \psi(x) и \tilde{\psi}(x) имеют 2 исчезающих момента:
Возьмем \hat{m}(s) = (\frac{1+e^{-is}}{2})^2 и \tilde{\hat{m}}(s) = (\frac{1+e^{-is}}{2})^2Q(\cos s)
Заметим, что \cos^2 (\frac{s}{2}) = \frac{(e^{is/2} + e^{-is/2})^2}{4} = \frac{1}{4}(e^{is} + 2 + e^{-is}) = e^{is}(\frac{1+e^{-is}}{2})^2
Тогда
\hat{m}(s) = e^{-is}(\cos^2 \frac{s}{2})^2 и \tilde{\hat{m}}(s) = e^{-is}(\cos^2 \frac{s}{2})^2Q(\cos s)
Относительно переменной x = \sin^2 \frac{s}{2} снова получаем уравнение
(1-x)^nP(x) + x^nP(1-x) = 1, где P(x) = Q(1-2x).
Решив его получим:
\hat{m}(s) = \frac{1}{\sqrt 2} (\frac{1}{2\sqrt{2}}e^{-is} + \frac{1}{\sqrt{2}} + \frac{1}{2\sqrt{2}}e^{is})
или
\phi(x) = \sqrt 2 (\frac{1}{2\sqrt{2}}(\phi(2x-1) + \phi(2x+1)) + \frac{1}{\sqrt{2}}\phi(2x))
\tilde{\phi}(x) = \sqrt 2 (-\frac{1}{4\sqrt{2}}(\tilde{\phi} (2x-2) + \tilde{\phi}(2x+2)) + \frac{1}{2\sqrt{2}}(\tilde{\phi} (2x-1) + \tilde{\phi}(2x+1)) + \frac{3}{2\sqrt{2}}\tilde{\phi}(2x))![]() |
График функции \tilde{\phi}(x) (взято из википедии). |
Что делать с коэффициентами?
На данном этапе мы имеем набор коэффициентов h_n и d_n для функций \phi(x) и \psi(x) соответственно. Мы можем построить их на компьютере и считать скалярные произведения (чисто в целях визуализации можно использовать этот мой пакет для построения вейвлетов). Но лучше сделать иначе. Допустим, только K коэффициентов h_n отличны от нуля (для вейвлетов Добеши с N исчезающими моментами, 2N коэффициентов отличны от нуля).
Чисто интуитивно предположим, что на самом-самом мелком масштабе, скажем, при m=0 значения нашей функции будут равны константе на некотором малом отрезке. Тогда \langle f(x), \phi_{1,n}(x) \rangle = \sum_{k=0}^{K-1} h_k \langle f(x), \phi(2(x-n)-k) \rangle = \sum_{k=0}^{K-1} h_k f_{2n+k}\langle 1, \phi(2(x-n)-k) \rangle = \sum_{k=0}^{K-1} h_k f_{2n+k}. Эта формула обозначает свертку (дискретную) функции f(z) с фильтром h(z) = \sum_{k=0}^{K-1} h_k z^{-k} и выбрасыванием каждого второго (нечетного) семпла. Такая же операция проводится с фильтром d(z) = \sum_{k=0}^{K-1} d_k z^{-k}. Итого scaling function можно рассматривать как низкочастотный (low pass) фильтр, а mother wavelet — как высокочастотный (high pass) фильтр. Из N семплов функции получаем N/2 коэффициентов a_n от low pass фильтра и b_n от high pass. Далее повторяем процесс для коэффициентов a_n, получая результат для более "крупного" масштаба пока не остается один коэффициент a_n.
Реконструкция сигнала происходит добавлением нулей через каждый второй семпл и пропусканием через те же фильтры в обратном порядке
Ещё одна схема применения — через составление прямой и обратной матриц преобразования. Подробности здесь.
И наконец есть так называемая lifting scheme. Этот механизм я использую в своём кодеке. Подробности можно узнать в статье "Factoring wavelet transforms into lifting steps" (Daubechies, 1996).
Для биортогональных вейвлетов получаются два набора фильтров: h(z), d(z) и \tilde{h}(z), \tilde{d}(z). Один используется для прямого преобразования, другой — для обратного. К слову, только биортогональные вейвлеты могут быть симметричными (за исключением вейвлета Хаара). Симметричные вейвлеты имеют линейную фазу, а значит все частотные составляющие исходного сигнала получают одинаковую задержку после прохождения через фильтры.
Мой кодек.
Мой кодек работает выполняя вейвлет преобразование (я использую (4,2) биортогональный B-сплайн вейвлет). Так как любая (би)ортогональная последовательность функций слабо сходится к нулю, коэффициенты преобразования на малых масштабах весьма малы. Я использую этот факт, чтобы кодировать коэффициенты вейвлет преобразования кодом Райса, выбирая свой параметр для каждого масштаба. Результат сжатия — 50-70% от исходного размера. Реализяция на языке Common Lisp тут.
Comments
Post a Comment