findchangepts() - Signal Processing
ipt = findchangepts(x) returns
the index at which the mean of x changes most
significantly.
exampleipt = findchangepts(x,Name,Value) specifies
additional options using name-value pair arguments. Options include
the statistic to measure, the number of changepoints to report, and
the minimum distance between changepoints.
example[ipt,residual]
= findchangepts(___) also returns the residual
error of the signal against the modeled changes, incorporating any
of the previous specifications.
examplefindchangepts(___) without
output arguments plots the signal and any detected changepoints.
Syntax
ipt = findchangepts(x)ipt = findchangepts(x,Name,Value) example[ipt,residual]
= findchangepts(___) examplefindchangepts(___) example
Example
Changepoint Search OptionsOpen This Example
Reset the random number generator for reproducible results. Generate a random signal where:
The mean is constant in each of seven regions and changes abruptly from region to region.The standard deviation is constant in each of five regions and changes abruptly from region to region.
close all
rng('default')
lr = 20;
mns = [0 1 4 -5 2 0 1];
nm = length(mns);
vrs = [1 4 6 1 3];
nv = length(vrs);
v = randn(1,lr*nm*nv)/2;
f = reshape(repmat(mns,lr*nv,1),1,lr*nm*nv);
y = reshape(repmat(vrs,lr*nm,1),1,lr*nm*nv);
t = v.*y+f;
Plot the signal, highlighting the steps of its construction.subplot(2,2,1)
plot(v)
title('Original')
subplot(2,2,2)
plot([f;v+f]')
title('Means')
subplot(2,2,3)
plot([y;v.*y]')
title('STD')
subplot(2,2,4)
plot(t)
title('Final')
Find the five points where the mean of the signal changes most significantly.figure
findchangepts(t,'MaxNumChanges',5)
Find the five points where the root-mean-square level of the signal changes most significantly.findchangepts(t,'MaxNumChanges',5,'Statistic','rms')
Find the point where the mean and standard deviation of the signal change the most.findchangepts(t,'Statistic','std')
Audio File SegmentationOpen This ExampleLoad a speech signal sampled at
. The file contains a recording of a female voice saying the word "MATLABĀ®."load mtlb
Discern the vowels and consonants in the word by finding the points at which the root-mean-square level of the signal changes significantly. Limit the number of changepoints to five.numc = 5;
[q,r] = findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc);
Plot the signal and display the changepoints.findchangepts(mtlb,'Statistic','rms','MaxNumChanges',numc);
Play the sound with a pause after each of the segments.soundsc(1:q(1),Fs)
for k = 1:length(q)-1
soundsc(mtlb(q(k):q(k+1)),Fs)
pause(1)
end
soundsc(q(end):length(mtlb),Fs)
Change of Mean, RMS Level, Standard Deviation, and SlopeOpen This Example
Create a signal that consists of two sinusoids with varying amplitude and a linear trend.
vc = sin(2*pi*(0:201)/17).*sin(2*pi*(0:201)/19).* ...
[sqrt(0:0.01:1) (1:-0.01:0).^2]+(0:201)/401;
Find the points where the signal mean changes most significantly. The 'Statistic' name-value pair is optional in this case. Specify a minimum residual error improvement of 1.findchangepts(vc,'Statistic','mean','MinThreshold',1)
Repeat the computation, but now find the points where the root-mean-square level of the signal changes the most. Specify a minimum residual error improvement of 6.findchangepts(vc,'Statistic','rms','MinThreshold',6)
Repeat the computation, but now find the points where the standard deviation of the signal changes most significantly. Specify a minimum residual error improvement of 10.findchangepts(vc,'Statistic','std','MinThreshold',10)
Find the points where the mean and the slope of the signal change most abruptly. Specify a minimum improvement of 0.6.findchangepts(vc,'Statistic','linear','MinThreshold',0.6)
Output / Return Value
Limitations
Alternatives / See Also
Reference