www.gusucode.com > wavelet 源码程序 matlab案例代码 > wavelet/OneDCycleSpinningExample.m

    %% 1-D Cycle Spinning  
% This example shows how to denoise a 1-D signal using cycle spinning and
% the shift-variant orthogonal nonredundant wavelet transform. The example
% compares the results of the two denoising methods.   

%% 
% Create a noisy 1-D _bumps_ signal with a signal-to-noise ratio of 6. The
% signal-to-noise ratio is defined as $N||X||{2\atop 2}\over\sigma$ where $N$ is the 
% length of the signal, $||X||{2\atop 2}$ is the squared L2 norm, and 
% $\sigma^{2}$ is the variance of the noise. 
rng default;
[X,XN] = wnoise('bumps',10,sqrt(6));
subplot(211)
plot(X); title('Original Signal');
subplot(212)
plot(XN); title('Noisy Signal');     

%% 
% Denoise the signal using cycle spinning with 15 shifts, 7 to the left
% and 7 to the right, including the zero-shifted signal. Use Daubechies’
% least-asymmetric wavelet with 4 vanishing moments (|sym4|) and denoise
% the signal down to level 4 using soft thresholding and the universal threshold
% estimated from the level-1 detail coefficients. 
ydenoise = zeros(length(XN),15);
for nn = -7:7
    yshift = circshift(XN,[0 nn]);
    [yd,cyd] = wden(yshift,'sqtwolog' ,'s','sln',4,'sym4');
    ydenoise(:,nn+8) = circshift(yd,[0, -nn]);
end
ydenoise = mean(ydenoise,2);  

%% 
% Denoise the signal using the orthogonal nonredundant discrete wavelet
% transform (DWT) with the same parameters. Compare the orthogonal DWT with
% cycle spinning. 
xd = wden(XN,'sqtwolog','s','sln',4,'sym4');
subplot(211)
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');
subplot(212)
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');
absDiffDWT = norm(X-xd,2)
absDiffCycleSpin = norm(X-ydenoise',2)    

%%
% Cycle spinning with only 15 shifts has reduced the approximation error.