主要内容

findchangepts

寻找信号的突变

描述

例子

ipt= findchangepts (x的平均值所在的索引x变化最为显著。

  • 如果x是一个向量N元素,然后findchangepts分区x分为两个区域,x (1: ipt-1)而且x (ipt: N),使每个区域的残差(平方)误差从其局部均值的和最小化。

  • 如果x是一个——- - - - - -N矩阵,然后findchangepts分区x分为两个区域,x (1: M, 1: ipt-1)而且ipt x (1: M: N),返回使每个区域从其局部的残差之和最小的列索引维的意思。

例子

ipt= findchangepts (x名称,值使用名称-值参数指定其他选项。选项包括要报告的变更点的数量和要测量的统计数据,而不是平均值。看到Changepoint检测获取更多信息。

例子

ipt剩余= findchangepts(___还返回信号相对于建模更改的残余误差,其中包含任何先前的规范。

例子

findchangepts (___如果没有输出参数,则绘制信号和任何检测到的更改点。有关更多信息,请参见统计

请注意

在绘图之前,findchangepts函数清除(clf)目前的数字。要在子图中绘制信号和检测到的变化点,请使用绘图函数。看到音频文件分割

例子

全部折叠

加载一个数据文件,其中包含以8192hz采样的火车汽笛录音。找出信号均方根水平变化最显著的10个点。

负载火车findchangepts (y,“MaxNumChanges”10“统计”“rms”

计算信号的短时功率谱密度。将信号划分为128个采样段,并对每个采样段进行汉明窗窗操作。指定120个相邻段之间的重叠样本和128个DFT点。找出功率谱密度平均值变化最显著的10个点。

[s,f,t,pxx] =谱图(y,128,120,128,Fs);findchangepts (pow2db (pxx),“MaxNumChanges”, 10)

图中包含2个轴对象。Axes对象1包含131个line类型的对象。更改点数量= 10总残差= 2820745.8453包含11个类型为image, line的对象。

重置随机数发生器可重现的结果。生成一个随机信号,其中:

  • 7个地区的平均值都是不变的,而且在不同地区之间变化很突然。

  • 在五个区域中,方差都是恒定的,但在不同区域之间变化很突然。

rng (“默认”) lr = 20;MNS = [0 1 4 -5 2 0 1];Nm =长度(mns);VRS = [1 4 6 1 3];Nv =长度(vrs);V = randn(1,lr*nm*nv)/2;F =重塑(repmat(mns,lr*nv,1),1,lr*nm*nv);Y =重塑(repmat(vrs,lr*nm,1),1,lr*nm*nv);T = v.*y+f;

画出信号,突出它的构造步骤。

分段图(2,2,1)分段图(v)标题(“原始”700) xlim([0])次要情节(2 2 2)情节([f; v + f]”)标题(“手段”700) xlim([0])次要情节(2,2,3)情节([y, y v *]”)标题(“差异”) xlim([0 700]) subplot(2,2,4) plot(t) title(“最后一次”xlim([0 700])

图中包含4个轴对象。标题为Original的坐标轴对象1包含一个类型为line的对象。标题为Means的坐标轴对象2包含2个line类型的对象。标题为Variances的Axes对象3包含2个类型为line的对象。标题为Final的Axes对象4包含一个line类型的对象。

找出信号均值变化最显著的五个点。

图findchangepts (t)“MaxNumChanges”5)

图中包含一个轴对象。标题为Number of changepoints = 5 Total residual error = 1989.3814的axes对象包含3个类型为line的对象。

找出信号均方根水平变化最显著的五个点。

findchangepts (t)“MaxNumChanges”5,“统计”“rms”

图中包含一个轴对象。标题为Number of changepoints = 5的坐标轴对象包含2个类型为line的对象。

找出信号的均值和标准差变化最大的点。

findchangepts (t)“统计”“性病”

图中包含一个轴对象。标题为Number of changepoints = 1 Total log weighted dispersion = 1263.4625的axis对象包含3个line类型的对象。

加载采样的语音信号 F 年代 7 4 1 8 H z .该文件包含一段女性声音的录音,说的是“MATLAB®”。

负载mtlb

通过找到信号方差显著变化的点来辨别单词中的元音和辅音。将变更点的数量限制在5个。

Numc = 5;[q,r] = findchangepts(mtlb,统计=“rms”MaxNumChanges = numc);

基于变点索引为语音信号创建一个信号掩码。看到signalMask有关使用信号掩码的详细信息。

t = (0:length(mtlb)-1)/Fs;Roitable = ([[1;q] [q;length(mtlb)]]);X = [“M”“一个”“T”“L”“一个”“B”]“;C = category (x,unique(x,“稳定”));msk = signalMask(table(t(roitable),c),SampleRate=Fs,RightShortening=1);roimask (msk)
ans =6×2表Var1 c ___________________ _ 0 0.017525 M 0.01766 0.10461 A 0.10475 0.22162 T 0.22176 0.33675 L 0.33688 0.46535 A 0.46549 0.53909 B

在子图中绘制语音信号和检测到的变化点,以及来自信号掩码的感兴趣区域:

  • 在上面的子图中,使用plotsigroi函数可视化信号掩码区域。调整设置,使颜色条出现在顶部。

  • 在下面的子图中,绘制原始语音信号,并将检测到的变化点添加为垂直线。

Subplot (2,1,1) plotsigroi(msk,mtlb) colorbar(“关闭”) nc =数字(c)-1;colormap (gca、线(nc));colorbar (TickLabels =类别(c),蜱虫= 1/2 / nc: 1 / nc: 1,...TickLength = 0,位置=“northoutside”)包含("") subplot(2,1,2) plot(t,mtlb) hold住参照线(q / Fs)Xlim ([0 t(end)])“秒”

图中包含2个轴对象。Axes对象1包含6个line类型的对象。坐标轴对象2包含6个line、constantline类型的对象。

要在每个片段之后播放暂停的声音,取消注释这些行。

k = 1时的%:长度(可旋转)% intv = roitable(k,1):roitable(k,2);% soundsc (mtlb (intv)。*损害(长度(intv)), Fs)%暂停(5)%结束

创建一个由两个具有不同振幅和线性趋势的正弦信号组成的信号。

Vc = sin(2*pi*(0:201)/17).*sin(2*pi*(0:201)/19).*...(√0:0.01:1 (1:-0.01:0)^ 2)+ (0:201)/ 401;

找出信号均值变化最显著的点。的“统计”在这种情况下,名称-值参数是可选的。指定最小残留误差改进为1。

findchangepts(风投,“统计”“的意思是”“MinThreshold”, 1)

图中包含一个轴对象。标题为Number of changepoints = 2的axes对象包含3个类型为line的对象。

找出信号的均方根水平变化最大的点。指定最小残留误差改进为6。

findchangepts(风投,“统计”“rms”“MinThreshold”6)

图中包含一个轴对象。标题为changepoints Number = 4的坐标轴对象包含2个line类型的对象。

找出信号的标准差变化最显著的点。指定最小剩余误差改进为10。

findchangepts(风投,“统计”“性病”“MinThreshold”, 10)

图中包含一个轴对象。标题为changepoints Number = 26的坐标轴对象包含3个类型为line的对象。

找出信号的均值和斜率变化最突然的点。指定最小残留误差改进为0.6。

findchangepts(风投,“统计”“线性”“MinThreshold”, 0.6)

图中包含一个轴对象。标题为changepoints Number = 3的axes对象包含3个类型为line的对象。

生成带有20个随机控制点的二维1000样本Bézier曲线。Bézier曲线的定义如下:

C t k 0 k t k 1 - t - k P k

在哪里 P k k th的 控制点, t 取值范围为0 ~ 1,和 k 是二项式系数。画出曲线和控制点。

M = 20;P = randn(m,2);T = linspace(0,1,1000)';^(0:m-1).*(1-t).^(m-1:-1:0);Bin = gamma(m)./gamma(1:m)./gamma(m:-1:1);crv = bin.*pol*P;情节(crv (: 1), crv (:, 2), P (: 1), P (:, 2),”啊,“

图中包含一个轴对象。axis对象包含2个line类型的对象。

将曲线划分为三段,使得每段中的点距离段均值的距离最小。

findchangepts (crv ',“MaxNumChanges”3)

图中包含2个轴对象。Axes对象1包含5个line类型的对象。坐标轴对象2带有标题的变更点数量= 2总残差= 158.2579包含3个类型为line的对象。

将曲线划分为直线拟合最好的20段。

findchangepts (crv ',“统计”“线性”“MaxNumChanges”19)

图中包含2个轴对象。Axes对象1包含5个line类型的对象。更改点数量= 19总残留错误= 0.090782包含21个类型为line的对象。

生成并绘制带有20个随机控制点的三维Bézier曲线。

P = rand(m,3);crv = bin.*pol*P;plot3 (crv (: 1), crv (:, 2), crv (:, 3), P (: 1), P (:, 2), P (:, 3),”啊,“)包含(“x”) ylabel (“y”

图中包含一个轴对象。axis对象包含2个line类型的对象。

从上面想象曲线。

视图([0 0 1])

图中包含一个轴对象。axis对象包含2个line类型的对象。

将曲线划分为三段,使得每段中的点距离段均值的距离最小。

findchangepts (crv ',“MaxNumChanges”3)

图中包含2个轴对象。Axes对象1包含7个line类型的对象。更改点数量= 2总残差= 7.2855包含3个类型为line的对象。

将曲线划分为直线拟合最好的20段。

findchangepts (crv ',“统计”“线性”“MaxNumChanges”19)

图中包含2个轴对象。Axes对象1包含7个line类型的对象。更改点数量= 19总的残差= 0.0075362包含21个类型为line的对象。

输入参数

全部折叠

输入信号,指定为实向量。

例子:重塑(randn(100,3)+[-3 0 3], 1300)是均值有两次突变的随机信号。

例子:重塑(randn(100 3)。*[1 20 5], 1300)是在均方根水平上有两次突变的随机信号。

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“MaxNumChanges”、3、“统计”,“rms”、“MinDistance”,20找到最多三个均方根水平变化最显著的点,并且这些点被至少20个样本分开。

要返回的重要更改的最大数目,指定为整数标量。找到变化最显著的点后,findchangepts逐步放宽其搜索条件,以包括更多的变更点,而不超过指定的最大值。如果任何搜索设置返回的值大于最大值,则函数不返回任何值。如果MaxNumChanges未指定,则函数返回变化最大的点。你不能指定MinThreshold而且MaxNumChanges同时进行。

例子:Findchangepts ([0 1 0])返回第二个示例的索引。

例子:findchangepts([0 1 0],'MaxNumChanges',1)返回一个空矩阵。

例子:findchangepts([0 1 0],'MaxNumChanges',2)返回第二个和第三个点的索引。

数据类型:|

要检测的更改类型,指定为以下值之一:

  • “的意思是”-检测平均值的变化。如果你打电话findchangepts在没有输出参数的情况下,该函数绘制信号、变化点和由连续变化点包围的每个段的平均值。

  • “rms”-检测均方根水平的变化。如果你打电话findchangepts在没有输出参数的情况下,该函数绘制信号和变化点。

  • “性病”-检测标准偏差的变化,使用高斯对数似然。如果你打电话findchangepts在没有输出参数的情况下,该函数绘制信号、变化点和由连续变化点包围的每个段的平均值。

  • “线性”-检测平均值和斜率的变化。如果你打电话findchangepts在没有输出参数的情况下,该函数绘制信号、变化点和最适合由连续变化点包围的信号的每个部分的直线。

例子:findchangepts([0 1 2 1],'Statistic',"mean")返回第二个示例的索引。

例子:findchangepts([0 1 2 1],'统计',"rms")返回第三个样本的索引。

变更点之间的最小样本数,指定为整数标量。如果您没有指定这个数字,那么默认的平均值变化为1,其他变化为2。

例子:findchangepts(罪(2 *π*(0:10)/ 5),‘MaxNumChanges’,5,MinDistance, 1)返回五个索引。

例子:findchangepts(罪(2 *π*(0:10)/ 5),‘MaxNumChanges’,5,“MinDistance”,3)返回两个索引。

例子:findchangepts(罪(2 *π*(0:10)/ 5),‘MaxNumChanges’,5‘MinDistance’,5)不返回索引。

数据类型:|

每个更改点的总剩余误差的最小改进,指定为表示惩罚的实标量。这个选项通过对每个预期的更改点应用额外的惩罚来限制返回的重要更改的数量。你不能指定MinThreshold而且MaxNumChanges同时进行。

例子:findchangepts([0 1 2],'MinThreshold',0)返回两个索引。

例子:findchangepts([0 1 2],'MinThreshold',1)返回一个索引。

例子:findchangepts([0 1 2],'MinThreshold',2)不返回索引。

数据类型:|

输出参数

全部折叠

变更点位置,作为整数索引的向量返回。

信号相对于建模变化的残余误差,以矢量形式返回。

更多关于

全部折叠

Changepoint检测

一个changepoint信号的某些统计特性突然发生变化的样本或时间瞬间。所讨论的属性可以是信号的平均值、方差或光谱特征等等。

为了找到信号转换点,findchangepts采用参数全局方法。功能:

  1. 选择一个点,将信号分成两部分。

  2. 计算每个部分所需统计属性的经验估计。

  3. 在剖面内的每一点上,测量属性偏离经验估计的程度。将所有点的偏差相加。

  4. 添加段与段之间的偏差,以查找总剩余误差。

  5. 改变分割点的位置,直到总剩余误差达到最小值。

当选择的统计量是平均值时,这个过程是最清楚的。这样的话,findchangepts使每个部分的“最佳”水平水平的总残留误差最小化。给定一个信号x1x2、……xN,子序列均值和方差

的意思是 x x n 1 n + 1 r n x r var x x n 1 n + 1 r n x r 的意思是 x x n 2 年代 x x | n n + 1

在哪里平方和

年代 x y | n r n x r 的意思是 x x n y r 的意思是 y y n

findchangepts发现k这样

J 1 k 1 x 的意思是 x 1 x k 1 2 + k N x 的意思是 x k x N 2 k 1 var x 1 x k 1 + N k + 1 var x k x N

是最小的。这个结果可以推广到其他统计数据中。findchangepts发现k这样

J k 1 k 1 Δ x χ x 1 x k 1 + k N Δ x χ x k x N

是最小的,给定截面的经验估计值χ并进行偏差测量Δ。

最小化残留误差相当于最大化对数似然。给定有均值的正态分布μ和方差σ2的对数似然N独立观测是

日志 1 N 1 2 π σ 2 e x μ 2 / 2 σ 2 N 2 日志 2 π + 日志 σ 2 1 2 σ 2 1 N x μ 2

  • 如果统计指定为“的意思是”时,方差固定,函数使用

    n Δ x χ x x n | n x 的意思是 x x n 2 n + 1 var x x n

    如前所述。

  • 如果统计指定为“性病”时,均值固定,函数使用

    n Δ x χ x x n n + 1 日志 n σ 2 x x n n + 1 日志 1 n + 1 n x 的意思是 x x n 2 n + 1 日志 var x x n

  • 如果统计指定为“rms”时,总偏差与式相同“性病”但当均值设为0时:

    n Δ x χ x x n n + 1 日志 1 n + 1 r n x r 2

  • 如果统计指定为“线性”时,该函数使用信号值与最小二乘线性拟合预测值之间的方差平方和作为总偏差。这个量也被称为误差平方和,或上交所.最合适的线穿过xx+1、……xn

    x t 年代 x t | n 年代 t t | n t 的意思是 t t n + 的意思是 x x n

    SSE为

    n Δ x χ x x n n x x t 2 年代 x x | n 年代 x t 2 | n 年代 t t | n n + 1 var x x n n x 的意思是 x x n 的意思是 + 1 n 2 n + 1 var + 1 n

感兴趣的信号通常有不止一个更改点。当变更点的数量已知时,泛化过程是很简单的。当数字未知时,必须在剩余误差中添加一个惩罚项,因为添加变更点总是会减少剩余误差并导致过拟合。在极端情况下,每个点都成为一个变点,剩余误差消失。findchangepts使用随更改点数量线性增长的惩罚项。如果有K找到变化点,然后函数最小化

J K r 0 K 1 k r k r + 1 1 Δ x χ x k r x k r + 1 1 + β K

在哪里k0而且kK分别是信号的第一个和最后一个样本。

  • 比例常数,表示为β并在MinThreshold,对应于为每个更改点添加的固定惩罚。findchangepts如果剩余误差的减少不满足阈值,则拒绝添加额外的变更点。集MinThreshold归零以返回所有可能的更改。

  • 如果您不知道要使用什么阈值,或者对信号中的变更点数量有一个粗略的概念,请指定MaxNumChanges代替。此选项逐渐增加阈值,直到函数发现的更改少于指定值。

为了实现最小化,findchangepts采用一种基于动态规划的穷举算法。

参考文献

基利克、丽贝卡、保罗·费恩海德和伊德里斯·a·埃克利。“用线性计算代价对变化点进行最佳检测。”美国统计协会杂志.Vol. 107 No. 500, 2012, pp. 1590-1598。

拉维尔,马克。“在改变点问题上使用惩罚对比。”信号处理.第85卷,2005年8月,1501-1510页。

扩展功能

版本历史

在R2016a中引入

另请参阅