В этой теме рассматриваются функции 1-D дискретного стационарного вейвлет с помощью программного обеспечения Wavelet Toolbox™. Для получения дополнительной информации смотрите Nondecimated Discrete Stationary Wavelet Transforms (SWT) в Руководстве пользователя Wavelet Toolbox.
Тулбокс обеспечивает эти функции для 1-D дискретного стационарного вейвлет. Для получения дополнительной информации о функциях см. страницы с описанием.
Имя функции | Цель |
---|---|
Разложение |
Имя функции | Цель |
---|---|
Реконструкция |
Стационарная структура разложения вейвлетов более прослеживаема, чем вейвлет. Так что полезные для вейвлета случая утилиты не нужны для стационарного преобразования вейвлета (SWT).
В этом разделе вы научитесь
Загрузка сигнала
Выполните стационарное вейвлет сигнала
Создайте приближения и детали из коэффициентов
Отображение приближения и детализации на уровне 1
Регенерируйте сигнал при помощи обратного стационарного вейвлет
Выполните многоуровневое стационарное вейвлет сигнала
Восстановите приближение уровня 3
Восстановите данные уровней 1, 2 и 3
Восстановите приближения уровня 1 и 2
Отображение результатов разложения
Восстановите исходный сигнал от разложения уровня 3
Удалите шум из сигнала
Поскольку вы можете выполнить анализ или из командной строки или с помощью приложения Wavelet Analyzer, в этом разделе есть подразделы, охватывающие каждый метод.
В конечном подразделе обсуждается, как обмениваться информацией о сигнале и коэффициентах между диском и графическими инструментами.
Этот пример включает шумный сигнал Допплеровского теста.
Загрузите сигнал.
Из MATLAB® приглашение, тип
load noisdopp
Установите переменные. Напечатать
s = noisdopp;
Для SWT, если разложение на уровне k
требуется, 2^k
необходимо разделить равномерно на длину сигнала. Если ваш исходный сигнал не имеет правильной длины, вы можете использовать wextend
функция, чтобы расширить его.
Выполните одноуровневое стационарное разложение вейвлет.
Выполните одноуровневое разложение сигнала с помощью db1
вейвлет. Напечатать
[swa,swd] = swt(s,1,'db1');
Это генерирует коэффициенты приближения уровня 1 (swa) и детализации (swd). Обе длины совпадают с длиной сигнала. Напечатать
whos
Имя | Размер | Байты | Класс |
---|---|---|---|
noisdopp | 1x1024 | 8192 | double array |
s | 1x1024 | 8192 | double array |
swa | 1x1024 | 8192 | double array |
swd | 1x1024 | 8192 | double array |
Отобразите коэффициенты приближения и детализации.
Чтобы отобразить коэффициенты приближения и детализации на уровне 1, введите
subplot(1,2,1), plot(swa); title('Approximation cfs') subplot(1,2,2), plot(swd); title('Detail cfs')
Регенерируйте сигнал Обратным Стационарным Преобразованием Вейвлета.
Чтобы найти обратное преобразование, введите
A0 = iswt(swa,swd,'db1');
Чтобы проверить идеальную реконструкцию, введите
err = norm(s-A0) err = 2.1450e-14
Создайте и отобразите приближение и детализацию из коэффициентов.
Чтобы создать приближение и детализацию уровня 1 (A1
и D1
) из коэффициентов swa
и swd
, type
nulcfs = zeros(size(swa)); A1 = iswt(swa,nulcfs,'db1'); D1 = iswt(nulcfs,swd,'db1');
Чтобы отобразить приближение и детализацию на уровне 1, введите
subplot(1,2,1), plot(A1); title('Approximation A1'); subplot(1,2,2), plot(D1); title('Detail D1');
Выполните многоуровневое стационарное разложение вейвлет.
Для выполнения разложения на уровне 3 сигнала (снова используя db1
вейвлет), тип
[swa,swd] = swt(s,3,'db1');
Это генерирует коэффициенты приближений на уровнях 1, 2 и 3 (swa
) и коэффициенты деталей (swd
). Заметьте, что строки swa
и swd
имеют ту же длину, что и длина сигнала. Напечатать
clear A0 A1 D1 err nulcfs whos
Имя | Размер | Байты | Класс |
---|---|---|---|
noisdopp | 1x1024 | 8192 | double array |
s | 1x1024 | 8192 | double array |
swa | 3x1024 | 24576 | double array |
swd | 3x1024 | 24576 | double array |
Отобразите коэффициенты приближений и деталей.
Чтобы отобразить коэффициенты приближений и деталей, введите
kp = 0; for i = 1:3 subplot(3,2,kp+1), plot(swa(i,:)); title(['Approx. cfs level ',num2str(i)]) subplot(3,2,kp+2), plot(swd(i,:)); title(['Detail cfs level ',num2str(i)]) kp = kp + 2; end
Восстановите приближение на уровне 3 Из коэффициентов.
Чтобы восстановить приближение на уровне 3, введите
mzero = zeros(size(swd)); A = mzero; A(3,:) = iswt(swa,mzero,'db1');
Восстановите детали из коэффициентов.
Чтобы восстановить детали на уровнях 1, 2 и 3, введите
D = mzero; for i = 1:3 swcfs = mzero; swcfs(i,:) = swd(i,:); D(i,:) = iswt(mzero,swcfs,'db1'); end
Восстановите и отобразите приближения на уровнях 1 и 2 из аппроксимации на уровне 3 и детали на уровнях 2 и 3.
Чтобы восстановить приближения на уровнях 2 и 3, введите
A(2,:) = A(3,:) + D(3,:); A(1,:) = A(2,:) + D(2,:);
Чтобы отобразить приближения и детали на уровнях 1, 2 и 3, введите
kp = 0; for i = 1:3 subplot(3,2,kp+1), plot(A(i,:)); title(['Approx. level ',num2str(i)]) subplot(3,2,kp+2), plot(D(i,:)); title(['Detail level ',num2str(i)]) kp = kp + 2; end
Снимите шум пороговым значением.
Чтобы денонсировать сигнал, используйте ddencmp
команда для вычисления глобального порога по умолчанию. Используйте wthresh
команду для выполнения фактического порога коэффициентов детализации, а затем использовать iswt
команда для получения деноизмененного сигнала.
Примечание
Все методы для выбора порогов в 1-D случае Дискретного Вейвлет-Преобразования также действительны для 1-D Стационарного Вейвлет-Преобразования, которые также используются Wavelet Analysis app. это также верно для 2-D преобразований.
[thr,sorh] = ddencmp('den','wv',s); dswd = wthresh(swd,sorh,thr); clean = iswt(swa,dswd,'db1');
Чтобы отобразить как исходный, так и деноизированный сигналы, введите
subplot(2,1,1), plot(s); title('Original signal') subplot(2,1,2), plot(clean); title('denoised signal')
Полученный сигнал остается немного биту шумным. Результат может быть улучшен путем рассмотрения разложения s
на уровне 5 вместо уровня 3 и повторяющихся этапах 14 и 15. Для улучшения предыдущего шумоподавления введите
[swa,swd] = swt(s,5,'db1'); [thr,sorh] = ddencmp('den','wv',s); dswd = wthresh(swd,sorh,thr); clean = iswt(swa,dswd,'db1'); subplot(2,1,1), plot(s); title('Original signal') subplot(2,1,2), plot(clean); title('denoised signal')
Второй синтаксис может использоваться для swt
и iswt
функции, дающие те же результаты:
lev = 5; swc = swt(s,lev,'db1'); swcden = swc; swcden(1:end-1,:) = wthresh(swcden(1:end-1,:),sorh,thr); clean = iswt(swcden,'db1');
Можно получить тот же график с помощью тех же команд plot, что и на шаге 16 выше.
Теперь мы исследуем стратегию денуизации сигналов, основанную на 1-D стационарном вейвлет с помощью приложения Wavelet Analyzer. Основная идея состоит в том, чтобы усреднить много немного различных дискретных вейвлет.
Запустите Stationary Wavelet Transform Denoizing 1-D Инструмент.
Из подсказки MATLAB введите waveletAnalyzer
.
Появится Wavelet Analyzer.
Выберите меню SWT Шумоподавления 1-D элемента. Появляется дискретный стационарный инструмент вейвлета преобразования шумоподавления для 1-D сигналов.
Загрузка данных.
В командной строке MATLAB введите
load noisbloc;
noisbloc
переменная. Нажмите OK, чтобы импортировать сигнал шумных блоков.Выполните стационарное разложение вейвлет.
Выберите db1
вейвлет из меню Wavelet и выберите 5 из меню Level, а затем нажмите кнопку Decompose Signal. После паузы на расчет инструмент отображает стационарные коэффициенты вейвлета приближения и детализации разложения. Они также называются неразрешенными коэффициентами, поскольку они получаются с использованием той же схемы, что и для DWT, но без шага десятикратного уменьшения (см. «Алгоритм быстрого преобразования вейвлет (FWT)» в Руководстве пользователя Wavelet Toolbox).
денуризировать сигнал с помощью Стационарного Преобразования Вейвлета.
Несмотря на то, что для подстройки алгоритма шумоподавления доступен ряд опций, мы примем значения по умолчанию мягкого порога фиксированной формы и немасштабированного белого шума. Ползунки, расположенные в правой части окна, управляют зависящими от уровня порогами, обозначенными желтыми пунктирными линиями, проходящими горизонтально через графики коэффициентов детализации слева от окна. Желтые пунктирные линии также можно перетащить непосредственно с помощью левой кнопки мыши над графиками.
Обратите внимание, что коэффициенты приближения не порога.
Нажмите кнопку denoise.
Результат вполне удовлетворителен, но, кажется, перегружен вокруг разрывов сигнала. Это можно увидеть, посмотрев на невязки и изменение масштаба точки разрушения, например, вокруг положения 800.
Выберите жесткий режим порога вместо мягкого, а затем нажмите кнопку denoise.
Результатом является хорошее качество, и невязки выглядят как выборка шума. Чтобы выяснить эту последнюю точку, вы можете получить дополнительную информацию об невязках, нажав кнопку «Невязки».
Инструмент позволяет сохранять деноизированный сигнал на диск. Тулбокс создает MAT-файл в текущей папке с именем по вашему выбору.
Чтобы сохранить вышеуказанный деноизированный сигнал, используйте опцию меню File > Save denoised Signal. Появляется диалоговое окно, которое позволяет вам задать папку и имя файла для хранения сигнала. Введите имя dnoibloc
. После сохранения данных сигнала в файл dnoibloc.mat
, загрузите переменные в рабочую область:
load dnoibloc whos
Имя | Размер | Байты | Класс |
---|---|---|---|
dnoibloc | 1x1024 | 8192 | double array |
thrParams | 1x5 | 580 | cell array |
wname | 1x3 | 6 | char array |
Деноизированный сигнал задается dnoibloc
. В сложение доступны параметры процесса шумоподавления. Имя вейвлета содержится в wname
:
wname wname = db1
и зависимые от уровня пороги закодированы в thrParams
, который является массивом ячеек длиной 5 (уровень разложения). Для i от 1 до 5, thrParams{i}
содержит нижнюю и верхнюю границы интервала порога и пороговое значение (поскольку допускаются интервально зависимые пороги). Для получения дополнительной информации смотрите 1-D Адаптивное пороговое значение коэффициентов вейвлета.
Для примера, для уровня 1,
thrParams{1} ans = 1.0e+03 * 0.0010 1.0240 0.0041
Здесь нижняя граница равна 1, верхняя граница равна 1024, и пороговое значение равно 4,1. Общий временной интервал не сегментирован, и процедура не использует интервально зависимые пороги.