Main Content

wvarchg

Find variance change points

Description

[chgpts,kopt,est] = wvarchg(Y) computes estimated variation change points for the signal Y for six change points, where the minimum delay between two change points is 10.

example

[___] = wvarchg(Y,K) computes estimated variation change points for j change points, where j = 0, 1, 2, …, K, and the minimum delay between two change points is 10.

[___] = wvarchg(Y,K,D) computes estimated variation change points where the minimum delay between two change points is D.

  • wvarchg(Y,6,10) is equivalent to wvarchg(Y).

  • wvarchg(Y,K,10) is equivalent to wvarchg(Y,K).

Examples

collapse all

For reproducibility, set the random seed to the default value. Load the blocks wavelet test signal. Add white noise with two variance change points located at indices 180 and 600. Plot the noise and the noisy signal.

rng default
x = wnoise(1,10);
cp1 = 180;
cp2 = 600;
bb = 1.5*randn(1,length(x));
seg1 = bb(1:cp1);
seg2 = bb(cp1+1:cp2)/4;
seg3 = bb(cp2+1:end);
wn = [seg1 seg2 seg3];
x = x+wn;
subplot(2,1,1)
plot(wn)
title('Noise')
subplot(2,1,2)
plot(x)
title('Noisy Signal')

Figure contains 2 axes objects. Axes object 1 with title Noise contains an object of type line. Axes object 2 with title Noisy Signal contains an object of type line.

Use the db3 wavelet and do a level-1 wavelet decomposition of the signal. Reconstruct the detail coefficients. Replace the top 2% of values with the mean value of the wavelet coefficients to remove most of the signal. Plot the values.

wname = 'db3';
lev = 1;
[c,l] = wavedec(x,lev,wname);
det = wrcoef('d',c,l,wname,1);
y = sort(abs(det));
v2p100 = y(fix(length(y)*0.98));
ind = find(abs(det)>v2p100);
det(ind) = mean(det);
figure
plot(det)
title('Reconstructed Details')

Figure contains an axes object. The axes object with title Reconstructed Details contains an object of type line.

Estimate the variance change points using the wavelet coefficients.

[pts_Opt,kopt,t_est] = wvarchg(det,5);
fprintf('The estimated change points are %d and %d.',pts_Opt)
The estimated change points are 181 and 601.

Input Arguments

collapse all

Input signal, specified as a real-valued vector. The input signal Y should have zero mean.

Data Types: double

Number of change points, specified as an integer. K satisfies the inequalities 1 < K ≪ length(Y).

Data Types: double

Number of change points, specified as an integer. D satisfies the inequalities 1 ≤ D ≪ length(Y).

Data Types: double

Output Arguments

collapse all

Estimated variance change points, returned as a vector. chgpts is the empty vector [] when no change points are found.

Proposed number of change points, returned as a nonnegative integer in the interval [0, k].

Instants of the variation change points, returned as a real-valued matrix. For 1 ≤ k ≤ K, est(k+1,1:k) contains the k instants of the variance change points. If kopt > 0, then chgpts = est(kopt+1,1:kopt), else chgpts = [].

References

[1] Lavielle, M. "Detection of multiple changes in a sequence of dependent variables." Stochastic Processes and their Applications. Vol. 83, Number 1, 1999, pp. 79–102.

Version History

Introduced before R2006a