Вращение цикла компенсирует из-за отсутствия инвариантности сдвига в критически произведенном вейвлете, преобразовывают путем усреднения по denoised циклически переключенных версий сигнала или изображения. Соответствующий обратный оператор сдвига циркулянта применяется к сигналу/изображению denoised, и результаты усреднены вместе, чтобы получить финал denoised сигнал/изображение.
Существует N уникальные циклически переключенные версии сигнала длины, N. Для M-by-N изображение, существуют версии MN. Это делает использование всех возможных переключенных версий в вычислительном отношении препятствующим. Однако на практике хорошие результаты могут быть получены при помощи небольшого подмножества возможных циклических сдвигов.
Следующий пример показывает, как вы используете wdenoise
и circshift
к denoise 1D сигнал с помощью вращения цикла. Для шкалы полутонов шумоподавления и изображений RGB, wdenoise2
вращение цикла поддержек.
В этом примере показано, как к denoise 1D сигнал с помощью вращения цикла и shift-variant ортогональный безызбыточный вейвлет преобразовывают. Пример сравнивает результаты двух методов шумоподавления.
Создайте шумный 1D сигнал ударов с отношением сигнал-шум 6. Отношение сигнал-шум задано как где длина сигнала, норма L2 в квадрате, и отклонение шума.
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 сдвигами, уменьшал ошибку приближения.