Шумоподавление вейвлета инварианта перевода с вращением цикла

Вращение цикла компенсирует из-за отсутствия инвариантности сдвига в критически выбранном вейвлете, преобразовывают путем усреднения по denoised циклически переключенных версий сигнала или изображения. Соответствующий обратный оператор сдвига циркулянта применяется к сигналу/изображению denoised, и результаты усреднены вместе, чтобы получить финал denoised сигнал/изображение.

Существует N уникальные циклически переключенные версии сигнала длины, N. Для M-by-N изображение, существуют версии MN. Это делает использование всех возможных переключенных версий в вычислительном отношении препятствующим. Однако на практике хорошие результаты могут быть получены при помощи небольшого подмножества возможных циклических сдвигов.

Следующий пример показывает, как вы используете wdenoise и circshift к denoise 1D сигнал с помощью вращения цикла. Для шкалы полутонов шумоподавления и изображений RGB, wdenoise2 поддерживает вращение цикла.

1D вращение цикла

Этот пример показывает, как к denoise 1D сигнал с помощью вращения цикла и shift-variant ортогональный безызбыточный вейвлет преобразовывает. Пример сравнивает результаты двух методов шумоподавления.

Создайте шумный 1D сигнал ударов с отношением сигнал-шум 6. Отношение сигнал-шум задано как N||X||22σ где N длина сигнала, ||X||22 норма L2 в квадрате, и σ2 отклонение шума.

rng default
[X,XN] = wnoise('bumps',10,sqrt(6));
subplot(2,1,1)
plot(X)
title('Original Signal')
subplot(2,1,2)
plot(XN)
title('Noisy Signal')

Denoise сигнал с помощью цикла, вращающегося с 15 сдвигами, 7 налево и 7 направо, включая переключенный нулем сигнал. Используйте wdenoise с настройками по умолчанию. По умолчанию wdenoise использует Добечиса меньше всего - асимметричный вейвлет с четырьмя исчезающими моментами, sym4. Шумоподавление до минимума floor(log2(N)) и wmaxlev(N,'sym4'), где N является количеством выборок в данных.

ydenoise = zeros(length(XN),15);
for nn = -7:7
    yshift = circshift(XN,[0 nn]);
    [yd,cyd] = wdenoise(yshift);
    ydenoise(:,nn+8) = circshift(yd,[0, -nn]);
end
ydenoise = mean(ydenoise,2);

Denoise сигнал с помощью wdenoise. Сравните с результатами вращения цикла.

xd = wdenoise(XN);
subplot(2,1,1)
plot(ydenoise,'b','linewidth',2)
hold on
plot(X,'r')
axis([1 1024 -10 10])
legend('Denoised Signal','Original Signal','Location','SouthEast')
ylabel('Amplitude')
title('Cycle Spinning Denoising')
hold off
subplot(2,1,2)
plot(xd,'b','linewidth',2)
hold on
plot(X,'r')
axis([1 1024 -10 10])
legend('Denoised Signal','Original Signal','Location','SouthEast')
xlabel('Sample')
ylabel('Amplitude')
title('Standard Orthogonal Denoising')
hold off

absDiffDWT = norm(X-xd,2)
absDiffDWT = 12.4248
absDiffCycleSpin = norm(X-ydenoise',2)
absDiffCycleSpin = 10.6124

Цикл, вращающийся только с 15 сдвигами, уменьшал ошибку приближения.

Смотрите также

Функции

Приложения