Этот пример иллюстрирует, как сгенерировать новый вейвлет, начиная с шаблона.
Принцип разработки нового вейвлета для CWT состоит в том, чтобы аппроксимировать данный шаблон, используя оптимизацию методом наименьших квадратов под ограничениями, приводящими к допустимому вейвлету, хорошо подходящему для обнаружения шаблона с помощью непрерывного вейвлет-преобразования [1].
Загрузите оригинальный шаблон: псевдосинус.
load ptpssin1
who
Your variables are: IntVAL X Y caption
Переменные X
и Y
содержать шаблон. Интегрируйте шаблон через интервал [0, 1]. Постройте график шаблона.
dX = max(diff(X));
patternInt = dX*sum(Y);
disp(['Integral of pattern = ',num2str(patternInt)]);
Integral of pattern = 0.15915
plot(X,Y) title('Original Pattern') grid on
Шаблон на интервале [0, 1] интегрируется в 0.15915. Это не вейвлет, но хороший кандидат, так как он колеблется как вейвлет.
Чтобы синтезировать новый вейвлет, адаптированный к данному шаблону, используйте полиномиальное приближение степени 6 с ограничениями непрерывности в начале и конце шаблона.
[psi,xval,nc] = pat2cwav(Y, 'polynomial',6, 'continuous');
Новый вейвлет задается xval
и nc*psi
.
figure plot(X,Y,'-',xval,nc*psi,'--') grid on legend('Original Pattern','Adapted Wavelet','Location','NorthWest')
Проверяйте это psi
удовлетворяет определению вейвлет, подтверждая, что он интегрируется в нуль и имеет норма равна 1.
dxval = max(diff(xval));
newWaveletIntegral = dxval*sum(psi);
disp(['Integral of new wavelet = ',num2str(newWaveletIntegral)])
Integral of new wavelet = 1.9626e-05
newWaveletSqN = dxval*sum(psi.^2);
disp(['New wavelet has L2-norm = ',num2str(newWaveletSqN)])
New wavelet has L2-norm = 1
[1] Misiti, M., Y. Misiti, G. Oppenheim, and J.-M. Погги. Les ondelettes et использует приложения. Франция: Hermes Science/Lavoisier, 2003.