Этот пример обсуждает проблему восстановления сигнала после шумных данных. Общая процедура шумоподавления включает три шага. Базовая версия процедуры выполняет шаги, описанные ниже:
Разложитесь: Выберите вейвлет, выберите уровень 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 для получения дополнительной информации.