В этом примере показано, как использовать Преобразования Хаара, чтобы анализировать данные временных рядов и изображения. Чтобы запустить весь код в этом примере, у вас должны быть Signal Processing Toolbox™ и Image Processing Toolbox™.
Во-первых, визуализируйте вейвлет Хаара.
[~,psi,x] = wavefun('haar',10); x = x(2:end-1); psi = psi(2:end-1); hl = plot(x(1:512),psi(1:512)); grid on hold on line(x(513:end),psi(513:end)) xlabel('t') ylabel('\psi(t)','fontsize',14) title('Haar Wavelet')
Вейвлет Хаара прерывист. В результате это обычно не используется в приложениях шумоподавления или сжатия, где гладкость вейвлета реконструкции является важным соображением. Однако Преобразования Хаара полезны во многих приложениях из-за их превосходящего времени (пространственная) локализация и вычислительный КПД. Wavelet Toolbox™ поддерживает анализ Хаара в большинстве дискретных аналитических инструментов вейвлета. Этот пример показывает Хаар, снимающий реализации, которые поддерживают вейвлет от целого числа к целому числу, преобразовывает и для 1D и для 2D данные и многоканальные (многомерные) 1D данные.
Загрузите и постройте clock_571
набор данных. Этим примером является по существу воссоздание анализа, представленного в Percival & Walden [3], стр 13–16.
load clock_571; figure; plot(clock_571) xlabel('Days') grid on; title('Daily Average Fractional Frequency Deviates -- Cesium Clock');
Данные являются ежедневной средней дробной частотой, отклоняется для атомарных часов луча конкретного цезия относительно американского Военно-морского основного тактового генератора Обсерватории. Если значение временных рядов 0, который означает, что цезиевые часы ни не проиграли, ни выиграли время относительно основного тактового генератора по длительности дня. Если значение отрицательно, часы потеряли время в тот день, положительное значение означает, что часы выиграли время. Для этих данных значения являются всем отрицанием. Для определенных приложений, как геодезия, важно знать, существуют ли определенные масштабы времени, где отклонение часов от основного тактового генератора в его самом низком значении. Другими словами, есть ли определенные шкалы, где часы соглашаются наиболее тесно с основным тактовым генератором? Преобразование Хаара полезно здесь, потому что оно обладает двумя важными свойствами: Это декоррелирует данные шкалой, и это делит энергию сигнала среди шкалы.
Чтобы проиллюстрировать свойство декорреляции, получите Преобразование Хаара вниз к уровню 6. Постройте последовательность автокорреляции исходных данных наряду с автокорреляцией коэффициентов вейвлета шкалой для шкал 2,4,8,16, и 32 дня. Пунктирные линии на графиках формируют рисунок 95% доверительных интервалов для входных параметров белого шума. Значения, превышающие те линии, показательны из значительной автокорреляции в данных.
[s,w] = haart(clock_571,6); helperAutoCorr(clock_571,w);
Главный график показывает последовательность автокорреляции для исходных данных. Последующие графики показывают последовательности автокорреляции для коэффициентов вейвлета во все больше более грубых шкалах. Ясно, что последовательность автокорреляции исходных данных показывает корреляцию во всех задержках, в то время как коэффициенты Преобразования Хаара декоррелируются. Затем продемонстрируйте энергосбережение.
sigenergy = norm(clock_571,2)^2 energyByScale = cellfun(@(x)norm(x,2)^2,w); haarenergy = norm(s,2)^2+sum(energyByScale)
sigenergy = 2.7964e+05 haarenergy = 2.7964e+05
Общая энергия сигнала сохраняется Преобразованием Хаара. Из-за этих свойств можно сделать значимые выводы на основе пропорции энергии сигнала полученными коэффициентами вейвлета в каждой шкале.
scales = 2.^(1:6); figure plot(scales,energyByScale,'-o') xlabel('Scale (days)') set(gca,'xscale','log') set(gca,'xtick',2.^(1:6)) ylabel('Proportion of Signal Energy') grid on
Вы видите, что энергия как минимум для шкал 16 и 32 дней. Для вейвлета Хаара (и всех вейвлетов Daubechies), коэффициенты вейвлета в данной шкале представляют различия между взвешенными средними данных по длительности 1/2 длина шкалы. Этот график показывает шкалы, по которым цезиевые часы находятся в лучшем соглашении с основным тактовым генератором. Это означает, что, рассматривая данные приблизительно 2D неделя или даже одномесячные периоды более точны, чем данные по меньшим или более длинным шкалам. Как ранее упомянуто, это имеет важные последствия для геодезии, где чрезвычайно точные измерения времени очень важны.
Несмотря на то, что вейвлет Хаара прерывист, это все еще эффективно при представлении различных видов временных рядов. Примеры включают данные о количестве и данные, где значения временных рядов связываются к некоторому определенному состоянию, которое влияет на уровень временных рядов. Как пример, рассмотрите отношение между сердечным ритмом и состоянием сна.
Данные состоят из двух временных рядов. Временные ряды являются сердечным ритмом 66-дневного старого младенца, производимого каждые 16 секунд в течение чуть более чем 9 часов. Временные ряды сердечного ритма с целочисленным знаком. Другие временные ряды являются квалифицированно выигранным состоянием сна того же младенца за тот же период с той же частотой дискретизации. Данные о состоянии сна были выиграны на основе EEG младенца и EOG (движение глаз) данные, не на основе сердечного ритма. Коды состояния сна 1=quiet сон, 2=between тихий и активный сон, 3=active сон, и 4=awake. И временные ряды были зарегистрированы профессором Питером Флемингом, доктором Эндрю Сокзенко и Жанин Янг из Института Здоровья детей, Королевской Больницы для Больных Дочерних элементов, Бристоля и любезно предусмотрены использование в этом примере. Отобразите данные о сердечном ритме на графике наряду с состояниями сна.
load BabyECGData figure yyaxis left plot(times,HR) ylabel('HR') xlabel('Hrs') YLim = [min(HR)-1 max(HR)+1]; yyaxis right plot(times,SS) ylabel('Sleep State') YLim = [0.5 4.5]; title('Baby ECG and Sleep State')
Контроль данных показывает очевидную корреляцию между состоянием сна и сердечным ритмом, но данные являются чрезвычайно шумными. Поскольку Преобразование Хаара предоставляет приближение лестницы сигналу, часто полезно в ситуациях, где ответ зависит от переменного предиктора с небольшим количеством дискретных состояний. Здесь дискретные состояния являются четырьмя этапами сна. Получите приближение Хаара данных о сердечном ритме с помощью приближения уровня 5. Поскольку данные о сердечном ритме с целочисленным знаком, используйте 'integer'
отметьте, чтобы гарантировать, что данные с целочисленным знаком возвращены. Постройте результат.
[S,W] = haart(HR,'integer'); HaarHR = ihaart(S,W,5,'integer'); figure hL = plotyy(times,HaarHR,times,SS); Ax1 = hL(1); Ax2 = hL(2); Ax1.YLim = [min(HaarHR)-1 max(HaarHR)+1]; Ax1.YLabel.String = 'HR'; Ax2.YLim = [0.5 4.5]; Ax2.YLabel.String = 'Sleep State'; xlabel('Hrs') title('Haar Approximation and Sleep State')
Приближение Хаара больше ясно показывает отношение между состоянием сна и данными о сердечном ритме. Можно оценить это изменение путем рассмотрения корреляции между необработанными данными и временными рядами состояния сна.
corr(SS,HR)
ans = 0.5576
Теперь сравните значение 0,56 с корреляцией между данными о состоянии сна и приближением Хаара
corr(SS,HaarHR)
ans = 0.6907
Корреляция увеличилась с 0,56 до 0,69. Более усовершенствованный анализ вейвлета и моделирование этих данных представлены в Нэзоне, von Sachs, & Kroisandt [1] и Nason, Sapatinas, & Sawczenko [2].
Создание водяных знаков является важным инструментом защиты данных. Это - пассивный метод защиты, где маркер тайно вставляется в некоторые данные для того, чтобы проверить подлинность или целостность данных. Методы вейвлета в целом и Преобразование Хаара в частности часто используются в создании водяных знаков на изображениях. Этот пример иллюстрирует использование Преобразования Хаара в создании водяных знаков на изображении и восстановлении водяного знака. Пример использует простую схему создания водяных знаков, выбранную для простоты рисунка. В этой схеме водяной знак вставляется в коэффициенты приближения на уровне 3.
Делайте водяные знаки на изображении Mandril с одним из медового барсука. Читайте в изображении Мандрила. Измените размер его к 2048x2048 и отобразите результат.
coverIM = imread('mandrill.jpg'); coverIM = rgb2gray(coverIM); coverIM = imresize(im2double(coverIM),[2048 2048]); imagesc(coverIM) colormap gray title('Original Image to Watermark') axis off axis square
Получите Преобразование Хаара изображения Мандрила вниз к уровню 3.
[LLorig,LHorig,HLorig,HHorig] = haart2(coverIM,3); imagesc(LLorig) title('Level 3 Haar Approximation') axis off axis square
Читайте в водяном знаке, отображают и изменяют размер его.
watermark = imread('honeybadger.jpg');
watermark = im2double(rgb2gray(watermark));
watermark = imresize(watermark,[2048 2048]);
Получите Преобразование Хаара изображения водяного знака вниз к уровню 3.
[LLw,LHw,HLw,HHw] = haart2(watermark,3); imagesc(LLw) colormap gray title('Level 3 Haar Approximation--Watermark') axis off axis square
Добавьте медовый водяной знак барсука в изображение Mandril путем ослабления коэффициентов приближения уровня 3 водяного знака и вставки ослабленных коэффициентов в коэффициенты приближения Мандрила уровня 3.
LLwatermarked = LLorig+1e-4*LLw; markedIM = ihaart2(LLwatermarked,LHorig,HLorig,HHorig); imagesc(markedIM) title('Watermarked Image') axis off axis square colormap gray
Водяной знак (медовый барсук) не отображается в изображении, на котором делают водяные знаки. Поскольку вы знаете, какой алгоритм использовался, чтобы вставить водяной знак, можно восстановить водяной знак с помощью Преобразования Хаара.
[LLr,LHr,HLr,HHr] = haart2(markedIM,3); LLmarked = (LLr-LLorig).*1e4; imagesc(LLmarked) title('Recovered Watermark') colormap gray axis off axis square
[1] Нэзон, G. P. Р. фон Закс и Г. Кроизандт. "Процессы вейвлета и адаптивная оценка эволюционного спектра вейвлета". Дж. Р. Стэтист. Soc. Серии B. Объем 62, Выпуск 2, 2000, стр 271–292.
[2] Нэзон, G. P. Т. Сэпэтинас и А. Савцзенко. "Пакетное моделирование вейвлета младенческого состояния сна с помощью данных о сердечном ритме". Sankhyā: индийский Журнал Статистики. Серии B. Объем 63, № 2, 2001, стр 199–217.
[3] Персиваль, D. B. и А. Т. Уолден. Методы вейвлета для анализа временных рядов. Кембридж, Великобритания: Издательство Кембриджского университета, 2000.