В этом примере рассматривается проблема восстановления сигнала из шумных данных. Общая процедура обезвреживания включает три этапа. Базовая версия процедуры выполняется следующим образом:
Разложение: выберите вейвлет, выберите уровень N. Вычислите вейвлет-разложение сигнала на уровне N.
Пороговые коэффициенты детализации: для каждого уровня от 1 до N выберите порог и примените мягкое пороговое значение к коэффициентам детализации.
Реконструкция: Вычислить вейвлет-реконструкцию с использованием исходных коэффициентов аппроксимации уровня N и модифицированных коэффициентов детализации уровней от 1 до N.
В частности, необходимо рассмотреть два вопроса:
как выбрать порог,
и как выполнить пороговое значение.
Пороговое значение может быть выполнено с помощью функции wthresh который возвращает мягкое или жесткое пороговое значение входного сигнала. Жесткое пороговое значение является самым простым методом, но мягкое пороговое значение имеет хорошие математические свойства. Давайте thr обозначают пороговое значение.
thr = 0.4;
Жесткое пороговое значение может быть описано как обычный процесс установки в нуль элементов, абсолютные значения которых ниже порогового значения. Жесткий пороговый сигнал x, если x > thr, и равно 0, если x thr.
y = linspace(-1,1,100);
ythard = wthresh(y,'h',thr);Мягкое пороговое значение является расширением жесткого порогового значения, сначала устанавливая нулевое значение для элементов, абсолютные значения которых ниже порогового значения, а затем уменьшая ненулевые коэффициенты до 0. Мягким пороговым сигналом является знак (x) (x-thr), если x > thr и равен 0, если x thr.
ytsoft = wthresh(y,'s',thr); subplot(1,3,1) plot(y) title('Original') subplot(1,3,2) plot(ythard) title('Hard Thresholding') subplot(1,3,3) plot(ytsoft) title('Soft Thresholding')

Как можно видеть на рисунке выше, жесткая процедура создает разрывы при x = ± t, в то время как мягкая процедура не создает.
Вызов шага 2 процедуры denoise, функции thselect выполняет выбор порога, а затем каждый уровень устанавливается пороговым значением. Этот второй шаг можно выполнить с помощью wthcoeff, непосредственно обрабатывая структуру вейвлет-разложения исходного сигнала. В функции реализованы четыре правила выбора пороговых значений thselect. Обычно интересно показывать их в действии, когда входной сигнал является гауссовым белым шумом.
rng default
y = randn(1,1000);Правило 1: Выбор с использованием принципа объективной оценки риска Штайна (SURE)
thr = thselect(y,'rigrsure')thr = 2.0518
Правило 2: Порог фиксированной формы равен sqrt (2 * log (длина (y)))
thr = thselect(y,'sqtwolog')thr = 3.7169
Правило 3: Выбор с использованием смеси первых двух вариантов
thr = thselect(y,'heursure')thr = 3.7169
Правило 4: Выбор с использованием принципа minimax
thr = thselect(y,'minimaxi')thr = 2.2163
Правила выбора порога Minimax и SURE являются более консервативными и были бы более удобными, когда мелкие детали сигнала лежат вблизи диапазона шума. Два других правила устраняют шум более эффективно.
Давайте используем в качестве первого примера «блочные» тестовые данные, приписанные Донохо и Джонстоуну. Создайте исходную ссылку на сигнал и шумную версию x, добавив стандартный гауссовский белый шум.
sqrt_snr = 4; % Set signal to noise ratio init = 2055615866; % Set rand seed [xref,x] = wnoise(1,11,sqrt_snr,init);
Сначала отключите сигнал с помощью wdenoise с настройками по умолчанию. Сравните результат с исходными и шумными сигналами.
xd = wdenoise(x); subplot(3,1,1) plot(xref) axis tight title('Original Signal') subplot(3,1,2) plot(x) axis tight title('Noisy Signal') subplot(3,1,3) plot(xd) axis tight title('Denoised Signal - Signal to Noise Ratio = 4')

Денуазировать шумный сигнал второй раз, на этот раз с использованием мягкого эвристического порогового значения SURE для коэффициентов детализации, полученных из разложения x, на уровне 3 на sym8 вейвлет. Сравните с предыдущим преобразованным сигналом.
xd2 = wdenoise(x,3,'Wavelet','sym8',... 'DenoisingMethod','SURE',... 'ThresholdRule','Soft'); figure subplot(3,1,1) plot(xref) axis tight title('Original Signal') subplot(3,1,2) plot(xd) axis tight title('First Denoised Signal: Default Settings') subplot(3,1,3) plot(xd2) axis tight title('Second Denoised Signal')

Поскольку только небольшое количество больших коэффициентов характеризует исходный сигнал, оба деноизированных сигнала хорошо сравниваются с исходным сигналом. Можно использовать Vavelet Signal Denoiser для изучения влияния других деноизирующих параметров на шумный сигнал.
При подозрении на небелый шум пороговые значения должны быть масштабированы посредством оценки уровня шума. В качестве второго примера рассмотрим метод на сильно возмущенной части электрического сигнала. Давайте использовать db3 вейвлет и разложение на уровне 3. Для решения проблемы составного шума попробуем оценить размер шума, зависящий от уровня.
load leleccum indx = 2000:3450; x = leleccum(indx); % Load electrical signal and select part of it.
Денуазировать сигнал с использованием мягкого порогового значения фиксированной формы и оценки размера шума, зависящего от уровня.
xd = wdenoise(x,3,'Wavelet','db3',... 'DenoisingMethod','UniversalThreshold',... 'ThresholdRule','Soft',... 'NoiseEstimate','LevelDependent'); Nx = length(x); figure subplot(2,1,1) plot(indx,x) axis tight title('Original Signal') subplot(2,1,2) plot(indx,xd) axis tight title('Denoised Signal')

Результат довольно хороший, несмотря на временную неоднородность характера шума после и до начала отказа датчика в течение времени 2410.
Способ деноизирования, описанный для одномерного случая, применяется также к изображениям и хорошо применяется к геометрическим изображениям. Двухмерная процедура деноизирования имеет те же три шага и использует двумерные вейвлет-инструменты вместо одномерных. Для выбора порога вместо длины (y) используется параметр (size (y)), если используется фиксированный порог формы.
Создание шумного изображения.
load woman
init = 2055615866;
rng(init);
x = X + 15*randn(size(X));При этом используют порог фиксированной формы с оценкой уровня шума, режим пороговой обработки мягкий и сохраняют коэффициенты аппроксимации.
[thr,sorh,keepapp] = ddencmp('den','wv',x); thr
thr = 107.9838
Осквернение изображения с помощью опции глобального порогового значения.
xd = wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp); figure('Color','white') colormap(pink(255)) sm = size(map,1); image(wcodemat(X,sm)) title('Original Image')

figure('Color','white') colormap(pink(255)) image(wcodemat(x,sm)) title('Noisy Image')

image(wcodemat(xd,sm))
title('Denoised Image')
Методы деноизирования, основанные на вейвлет-разложении, являются одним из наиболее значимых применений вейвлетов. Посмотрите wdenoise и Vavelet Signal Denoiser для получения дополнительной информации.