Сигналы с очень быстрыми эволюциями, такими как переходные сигналы в динамических системах могут претерпеть резкие изменения, такие как скачок или резкое изменение в первой или второй производной. Анализ Фурье обычно не в состоянии обнаружить те события. Цель этого примера состоит в том, чтобы показать, как анализ вейвлетами может обнаружить точный момент, когда сигнал изменяется и также тип (разрыв сигнала или резкое изменение в его первой или второй производной) и амплитуда изменения. В обработке изображений одно из основных приложений является обнаружением ребра, которое также включает обнаруживающие резкие изменения.
Короткие вейвлеты являются часто более эффективными, чем длинные единицы при обнаружении разрыва сигнала. Поэтому, чтобы идентифицировать разрыв сигнала, мы будем использовать вейвлет Хаара. Прерывистый сигнал состоит из медленной синусоиды, резко сопровождаемой средней синусоидой.
load freqbrk
x = freqbrk;
Вычислите многоуровневое 1D разложение вейвлета на уровне 1.
level = 1;
[c,l] = wavedec(x,level,'haar');
Извлеките коэффициенты детали на уровне 1 от разложения вейвлета и визуализируйте результат. Интерполируйте коэффициенты детали, таким образом, у них и сигнала есть та же длина.
d1 = detcoef(c,l,level);
subplot(2,1,1)
plot(x)
subplot(2,1,2)
plot(interpft(d1,2*length(d1)))
ylabel('d1')
Детали первого уровня (d1
) покажите разрыв наиболее ясно, потому что разрыв содержит высокочастотную часть. Разрыв локализуется очень точно около времени = 500.
Присутствие шума делает идентификацию разрывов более сложной. Если более прекрасные уровни разложения могут использоваться, чтобы устранить значительную часть шума, разрыв иногда отображается на более грубых уровнях в разложении.
Цель этого примера состоит в том, чтобы показать, как анализ вейвлетами может обнаружить разрыв в одной из производных сигнала. Сигнал, в то время как, по-видимому, одна плавная кривая, на самом деле состоит из двух отдельных экспоненциалов.
load scddvbrk; x = scddvbrk; level = 2; [c,l] = wavedec(x,level,'db4'); [d1,d2] = detcoef(c,l,1:level); d1up = dyadup(d1,0); d2up = dyadup(dyadup(d2,0),0); subplot(3,1,1) plot(x) xlim([400 600]) subplot(3,1,2) plot(d1up) ylabel('d1') xlim([400 600]) subplot(3,1,3) plot(d2up) ylabel('d2') xlim([400 600])
Мы увеличили масштаб средней части сигнала показать более ясно, что происходит около времени = 500. Детали высоко только посреди сигнала и незначительны в другом месте. Это предлагает присутствие высокочастотной информации — внезапного изменения или разрыва — около времени = 500.
Обратите внимание на то, что, чтобы обнаружить сингулярность, выбранный вейвлет должен быть достаточно регулярным, который подразумевает более длинную импульсную характеристику фильтра. Регулярность может быть важным критерием в выборе вейвлета. Мы приняли решение использовать db4
, который является достаточно регулярным для этого анализа. Если бы мы выбрали вейвлет Хаара, разрыв не был бы обнаружен. При попытке повторить этот анализ с помощью вейвлета Хаара на уровне два, вы заметите, что детали равны нулю во время = 500.
Для изображений двумерный дискретный вейвлет преобразовывает, приводит к разложению коэффициентов приближения на уровне j в четырех компонентах: приближение на уровне j+1 и детали в трех ориентациях (горизонталь, вертикальная, и диагональная).
load tartan; level = 1; [c,s] = wavedec2(X,level,'coif2'); [chd1,cvd1,cdd1] = detcoef2('all',c,s,level);
subplot(1,2,1) image(X) colormap(map) title('Original Image') subplot(1,2,2) image(chd1) colormap(map) title('Horizontal Edges')
subplot(1,2,1) image(cvd1) colormap(map) title('Vertical Edges') subplot(1,2,2) image(cdd1) colormap(map) title('Diagonal Edges')