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 (___)如果没有输出参数,则绘制信号和任何检测到的更改点。看到“统计”为更多的信息。

例子

全部折叠

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

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

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

[S,F,T,PXX] =谱图(Y,128120128,FS);findchangepts(pow2db(PXX),'MaxNumChanges',10)

重置随机数产生器以获得可重现的结果。生成随机信号,其中:

  • 这七个地区的平均值都是不变的,但在不同地区之间却突然发生变化。

  • 在这五个地区中,差异是恒定的,而在不同地区之间则突然发生变化。

RNG('默认') lr = 20;mns = [0 1 4 -5 2 0 1];纳米长度= (mns);vrs = [1 4 6 1 3];nv =长度(工具);v = randn (lr *纳米* nv) / 2;f =重塑(repmat (mns、lr * nv 1), 1, lr *纳米* nv);y =重塑(repmat(工具与lr * nm, 1), 1, lr *纳米* 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]) (2,2,4) (t)“最后一次”700)xlim ([0])

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

图findchangepts(T,'MaxNumChanges',5)

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

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

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

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

加载在。处取样的语音信号 F 年代 = 7 4 1 8 H z 。该文件包含一个女性声音的录音,说“MATLAB®”。

负载mtlb

通过查找信号变化显著的点来辨别单词中的元音和辅音。限制更改点的数目为5。

numc = 5;(q, r) = findchangepts (mtlb,“统计”,“rms”,'MaxNumChanges'numc)
q =5×1132 778 1646 2500 3454
r = -4.4055 e + 03

标绘信号并显示变化点。

findchangepts (mtlb“统计”,“rms”,'MaxNumChanges'numc)

若要在每个片段之后暂停播放该声音,请取消下面的注释。

% soundsc(1:问(1),Fs)k = 1时的%:长度(q)-1% soundsc (mtlb (q (k): q (k + 1)), Fs)%暂停(1)%结束% soundsc (q(结束):长度(mtlb), Fs)

创建一个信号,由两个变化幅度的正弦信号和一个线性趋势。

vc =罪(2 *π*(0:201)/ 17)。*罪(2 *π* (0:201)/ 19)。*(√0:0.01:1 (1:-0.01:0)^ 2)+ (0:201)/ 401;

找出信号平均值变化最显著的点。的“统计”在本例中,名称-值对是可选的。指定最小残差改进为1。

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

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

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

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

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

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

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

生成具有20个随机控制点的1000个样本的二维贝塞尔曲线。Bezier曲线定义为:

C ( t ) = k = 0 ( k ) t k ( 1 - t ) - k P k ,

在哪里 P k k th的 控制点, t 范围从0到1,和 ( k ) 为二项式系数。绘制曲线和控制点。

米= 20;P = randn(M,2);T = linspace(0,1,1000)';POL = T ^(0:M-1)*(1-T)^(M-1:-1:0)。。。;仓=伽马(米)./伽玛(1:M)./伽马(M:-1:1);crv =本。*波尔* P;情节(CRV(:,1),CRV(:,2),P(:,1),P(:,2),”啊,“)

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

findchangepts (crv ','MaxNumChanges'3)

将曲线划分为20个最适合直线的部分。

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

生成和绘制一个三维贝塞尔曲线与20随机控制点。

P =兰德(m, 3);crv =本。*波尔* P;plot3 (crv (: 1), crv (:, 2), crv (:, 3), P (: 1), P (:, 2), P (:, 3),”啊,“)包含(“x”)ylabel (“y”)

从上面想象这条曲线。

视图([0 0 1])

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

findchangepts (crv ','MaxNumChanges'3)

将曲线划分为20个最适合直线的部分。

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

输入参数

全部折叠

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

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

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

数据类型:|

名称-值对的观点

的可选逗号分隔对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数名1,值1,...,NameN,值N

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

返回的最大重要更改数,指定为逗号分隔的对,由'MaxNumChanges'和一个整数标量。在找到变化最明显的点之后,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],'Statistic','rms')返回第三个示例的索引。

更改点之间的最小样本数,指定为逗号分隔的对,由“MinDistance”和一个整数标量。如果没有指定这个数字,则平均值变化的缺省值为1,其他变化的缺省值为2。

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

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

例子:findchangepts(罪(2 *π* (0:10)/ 5),‘MaxNumChanges’, 5‘MinDistance’, 5)没有返回任何指数。

数据类型:|

每一个改变点在总剩余误差上的最小改进,指定为逗号分隔对所组成的“MinThreshold”一个实标量表示罚值。此选项通过对每个预期更改点施加额外惩罚来限制返回的重大更改的数量。你不能指定“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从每个部分的“最佳”水平水平最小化总剩余误差。给一个信号x1,x2、……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 )

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

    x ^ ( t ) = 年代 x t | n 年代 t t | n ( t 意思 ( ( t t n ] ) ) + 意思 ( ( x x n ] )

    上证综指是

    = 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 ,

在哪里k0kK分别为信号的第一个和最后一个样本。

  • 比例常数,表示β和指定的“MinThreshold”,对应于为每个更改点添加的固定罚款。findchangepts如果剩余误差的减少没有达到阈值,拒绝添加额外的改变点。集“MinThreshold”返回所有可能的更改。

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

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

参考

[1] Killick, Rebecca, Paul Fearnhead和Idris A. Eckley。用线性计算成本最优检测变化点。美国统计协会杂志。第107卷第500号2012年1590-1598页

[2]Lavielle,马克。“使用惩罚对比来解决变更点问题。”信号处理。第85卷,2005年8月,第1501-1510页

另请参阅

介绍了R2016a