www.gusucode.com > wavelet 源码程序 matlab案例代码 > wavelet/discontdemo.m
%% Detecting Discontinuities and Breakdown Points % Signals with very rapid evolutions such as transient signals in dynamic % systems may undergo abrupt changes such as a jump, or a sharp change in % the first or second derivative. Fourier analysis is usually not able to % detect those events. The purpose of this example is to show how analysis by % wavelets can detect the exact instant when a signal changes and also the % type (a rupture of the signal, or an abrupt change in its first or second % derivative) and amplitude of the change. In image processing, one of the % major application is edge detection, which also involves detecting abrupt % changes. % Copyright 2012 The MathWorks, Inc. %% Frequency Breakdown % Short wavelets are often more effective than long ones in detecting a % signal rupture. Therefore, to identify a signal discontinuity, we will % use the haar wavelet. The discontinuous signal consists of a slow sine % wave abruptly followed by a medium sine wave. load freqbrk x = freqbrk; %% % Compute the multilevel 1-D wavelet decomposition at level 1 level = 1; [c,l] = wavedec(x,level,'haar'); %% % Extract the detail coefficients at level 1 from the wavelet decomposition % and visualize the result d1 = detcoef(c,l,level); subplot(211) plot(x) subplot(212) plot(interpft(d1,2*length(d1)));ylabel('d1') %% % The first-level details (d1) show the discontinuity most clearly, because % the rupture contains the high-frequency part. The discontinuity is % localized very precisely around time = 500. % % The presence of noise makes identification of discontinuities more % complicated. If the finer levels of the decomposition can be used to % eliminate a large part of the noise, the rupture is sometimes visible at % coarser levels in the decomposition. %% Second Derivation Breakdown % The purpose of this example is to show how analysis by wavelets can % detect a discontinuity in one of a signal's derivatives. The signal, % while apparently a single smooth curve, is actually composed of two % separate exponentials. load scddvbrk; x = scddvbrk; level = 2; [c,l] = wavedec(x,level,'db4'); [d1 d2] = detcoef(c,l,1:level); d1up = dyadup(d1,0); d2up = dyadup(dyadup(d2,0),0); subplot(311) plot(x) xlim([400 600]) subplot(312) plot(d1up);ylabel('d1'),xlim([400 600]) subplot(313), plot(d2up);ylabel('d2'),xlim([400 600]) %% % We have zoomed in on the middle part of the signal to show more clearly % what happens around time = 500. The details are high only in the middle % of the signal and are negligible elsewhere. This suggests the presence of % high-frequency information -- a sudden change or discontinuity -- around % time = 500. % % Note that to detect a singularity, the selected wavelet must be % sufficiently regular, which implies a longer filter impulse response. % Regularity can be an important criterion in selecting a wavelet. We have % chosen to use db4, which is sufficiently regular for this analysis. Had % we chosen the haar wavelet, the discontinuity would not have been % detected. If you try repeating this analysis using haar at level two, % you'll notice that the details are equal to zero at time = 500. %% Edge Detection % For images, a two-dimensional DWT leads to a decomposition of % approximation coefficients at level j in four components: the % approximation at level j+1, and the details in three orientations % (horizontal, vertical, and diagonal). load tartan; level = 1; [c,s] = wavedec2(X,level,'coif2'); [chd1,cvd1,cdd1] = detcoef2('all',c,s,level); %% subplot(1,2,1) image(X); colormap(map) title('Original Image') subplot(1,2,2) image(chd1) colormap(map) title('Horizontal Edges') %% subplot(1,2,1) image(cvd1) colormap(map) title('Vertical Edges') subplot(1,2,2) image(cdd1) colormap(map) title('Diagonal Edges')