Этот пример обсуждает проблему восстановления сигнала после зашумленных данных. Общая процедура шумоподавления включает три шага. Базовая версия процедуры выполняет шаги, описанные ниже:
Разложитесь: Выберите вейвлет, выберите уровень 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. Мягкий пороговый сигнал является sign(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: Выбор с помощью минимаксного принципа
thr = thselect(y,'minimaxi')
thr = 2.2163
Минимакс и пороговые правила выбора SURE более консервативны и были бы более удобными когда маленькие детали лжи сигнала около шумовой области значений. Два других правила удаляют шум более эффективно.
Давайте использовать тестовые данные "блоков", зачисленные на Донохо и Джонстона как первый пример. Сгенерируйте исходный сигнал xref и шумную версию x, добавляющую стандартный Гауссов белый шум.
sqrt_snr = 4; % Set signal to noise ratio init = 2055615866; % Set rand seed [xref,x] = wnoise(1,11,sqrt_snr,init);
Первый denoise сигнал с помощью 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')
Denoise сигнал с шумом во второй раз, на этот раз с помощью мягкой эвристической пороговой обработки SURE на коэффициентах детали, полученных из разложения x, на уровне 3 sym8
вейвлет. Сравните с предыдущим сигналом denoised.
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')
Только начиная с небольшого количества больших коэффициентов характеризуют исходный сигнал, оба, которых сигналы denoised сравнивают хорошо с исходным сигналом. Можно использовать Wavelet Signal Denoiser, чтобы исследовать влияния, которые другие параметры шумоподавления оказывают на сигнал с шумом.
Когда вы подозреваете цветной шум, пороги должны быть перемасштабированы зависимой уровнем оценкой шума уровня. Как второй пример, давайте попробуем метод на высоко встревоженной части электрического сигнала. Давайте использовать db3
вейвлет и разлагается на уровне 3. Чтобы иметь дело с составной шумовой природой, давайте попробуем зависимую уровнем шумовую оценку размера.
load leleccum indx = 2000:3450; x = leleccum(indx); % Load electrical signal and select part of it.
Denoise сигнал с помощью мягкой фиксированной пороговой обработки формы и зависимой уровнем шумовой оценки размера.
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)) используется вместо длины (y), если фиксированный порог формы используется.
Сгенерируйте шумное изображение.
load woman
init = 2055615866;
rng(init);
x = X + 15*randn(size(X));
В этом случае фиксированный порог формы используется с оценкой шума уровня, режим пороговой обработки является мягким, и коэффициенты приближения сохранены.
[thr,sorh,keepapp] = ddencmp('den','wv',x); thr
thr = 107.9838
Изображение Denoise с помощью глобальной опции пороговой обработки.
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
и Wavelet Signal Denoiser для получения дополнительной информации.