findchangepts
寻找信号的突变
语法
描述
使用名称-值参数指定其他选项。选项包括要报告的变更点的数量和要测量的统计数据,而不是平均值。看到Changepoint检测获取更多信息。ipt
= findchangepts (x
,名称,值
)
例子
一维和二维中的变化点
加载一个数据文件,其中包含以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)
变更点搜索选项
重置随机数发生器可重现的结果。生成一个随机信号,其中:
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])
找出信号均值变化最显著的五个点。
图findchangepts (t)“MaxNumChanges”5)
找出信号均方根水平变化最显著的五个点。
findchangepts (t)“MaxNumChanges”5,“统计”,“rms”)
找出信号的均值和标准差变化最大的点。
findchangepts (t)“统计”,“性病”)
音频文件分割
加载采样的语音信号 .该文件包含一段女性声音的录音,说的是“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)])“秒”)
要在每个片段之后播放暂停的声音,取消注释这些行。
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)
找出信号的均方根水平变化最大的点。指定最小残留误差改进为6。
findchangepts(风投,“统计”,“rms”,“MinThreshold”6)
找出信号的标准差变化最显著的点。指定最小剩余误差改进为10。
findchangepts(风投,“统计”,“性病”,“MinThreshold”, 10)
找出信号的均值和斜率变化最突然的点。指定最小残留误差改进为0.6。
findchangepts(风投,“统计”,“线性”,“MinThreshold”, 0.6)
2-D和3-D的变化点Bézier曲线
生成带有20个随机控制点的二维1000样本Bézier曲线。Bézier曲线的定义如下:
,
在哪里 是 th的 控制点, 取值范围为0 ~ 1,和 是二项式系数。画出曲线和控制点。
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),”啊,“)
将曲线划分为三段,使得每段中的点距离段均值的距离最小。
findchangepts (crv ',“MaxNumChanges”3)
将曲线划分为直线拟合最好的20段。
findchangepts (crv ',“统计”,“线性”,“MaxNumChanges”19)
生成并绘制带有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”)
从上面想象曲线。
视图([0 0 1])
将曲线划分为三段,使得每段中的点距离段均值的距离最小。
findchangepts (crv ',“MaxNumChanges”3)
将曲线划分为直线拟合最好的20段。
findchangepts (crv ',“统计”,“线性”,“MaxNumChanges”19)
输入参数
x
- - - - - -输入信号
真正的向量
输入信号,指定为实向量。
例子:重塑(randn(100,3)+[-3 0 3], 1300)
是均值有两次突变的随机信号。
例子:重塑(randn(100 3)。*[1 20 5], 1300)
是在均方根水平上有两次突变的随机信号。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“MaxNumChanges”、3、“统计”,“rms”、“MinDistance”,20
找到最多三个均方根水平变化最显著的点,并且这些点被至少20个样本分开。
MaxNumChanges
- - - - - -要返回的最大重要更改数
1(默认)|整数标量
要返回的重要更改的最大数目,指定为整数标量。找到变化最显著的点后,findchangepts
逐步放宽其搜索条件,以包括更多的变更点,而不超过指定的最大值。如果任何搜索设置返回的值大于最大值,则函数不返回任何值。如果MaxNumChanges
未指定,则函数返回变化最大的点。你不能指定MinThreshold
而且MaxNumChanges
同时进行。
例子:Findchangepts ([0 1 0])
返回第二个示例的索引。
例子:findchangepts([0 1 0],'MaxNumChanges',1)
返回一个空矩阵。
例子:findchangepts([0 1 0],'MaxNumChanges',2)
返回第二个和第三个点的索引。
数据类型:单
|双
统计
- - - - - -要检测的更改类型
“的意思是”
(默认)|“rms”
|“性病”
|“线性”
要检测的更改类型,指定为以下值之一:
“的意思是”
-检测平均值的变化。如果你打电话findchangepts
在没有输出参数的情况下,该函数绘制信号、变化点和由连续变化点包围的每个段的平均值。“rms”
-检测均方根水平的变化。如果你打电话findchangepts
在没有输出参数的情况下,该函数绘制信号和变化点。“性病”
-检测标准偏差的变化,使用高斯对数似然。如果你打电话findchangepts
在没有输出参数的情况下,该函数绘制信号、变化点和由连续变化点包围的每个段的平均值。“线性”
-检测平均值和斜率的变化。如果你打电话findchangepts
在没有输出参数的情况下,该函数绘制信号、变化点和最适合由连续变化点包围的信号的每个部分的直线。
例子:findchangepts([0 1 2 1],'Statistic',"mean")
返回第二个示例的索引。
例子:findchangepts([0 1 2 1],'统计',"rms")
返回第三个样本的索引。
MinDistance
- - - - - -变更点之间的最小样本数
整数标量
变更点之间的最小样本数,指定为整数标量。如果您没有指定这个数字,那么默认的平均值变化为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
- - - - - -最小的改进总残留误差
真正的标量
每个更改点的总剩余误差的最小改进,指定为表示惩罚的实标量。这个选项通过对每个预期的更改点应用额外的惩罚来限制返回的重要更改的数量。你不能指定MinThreshold
而且MaxNumChanges
同时进行。
例子:findchangepts([0 1 2],'MinThreshold',0)
返回两个索引。
例子:findchangepts([0 1 2],'MinThreshold',1)
返回一个索引。
例子:findchangepts([0 1 2],'MinThreshold',2)
不返回索引。
数据类型:单
|双
输出参数
ipt
-变更点位置
向量
变更点位置,作为整数索引的向量返回。
剩余
-剩余误差
向量
信号相对于建模变化的残余误差,以矢量形式返回。
更多关于
Changepoint检测
一个changepoint信号的某些统计特性突然发生变化的样本或时间瞬间。所讨论的属性可以是信号的平均值、方差或光谱特征等等。
为了找到信号转换点,findchangepts
采用参数全局方法。功能:
选择一个点,将信号分成两部分。
计算每个部分所需统计属性的经验估计。
在剖面内的每一点上,测量属性偏离经验估计的程度。将所有点的偏差相加。
添加段与段之间的偏差,以查找总剩余误差。
改变分割点的位置,直到总剩余误差达到最小值。
当选择的统计量是平均值时,这个过程是最清楚的。这样的话,findchangepts
使每个部分的“最佳”水平水平的总残留误差最小化。给定一个信号x1,x2、……xN,子序列均值和方差
在哪里平方和
findchangepts
发现k这样
是最小的。这个结果可以推广到其他统计数据中。findchangepts
发现k这样
是最小的,给定截面的经验估计值χ并进行偏差测量Δ。
最小化残留误差相当于最大化对数似然。给定有均值的正态分布μ和方差σ2的对数似然N独立观测是
如果
统计
指定为“的意思是”
时,方差固定,函数使用如前所述。
如果
统计
指定为“性病”
时,均值固定,函数使用如果
统计
指定为“rms”
时,总偏差与式相同“性病”
但当均值设为0时:如果
统计
指定为“线性”
时,该函数使用信号值与最小二乘线性拟合预测值之间的方差平方和作为总偏差。这个量也被称为误差平方和,或上交所.最合适的线穿过x米,x米+1、……xn是SSE为
感兴趣的信号通常有不止一个更改点。当变更点的数量已知时,泛化过程是很简单的。当数字未知时,必须在剩余误差中添加一个惩罚项,因为添加变更点总是会减少剩余误差并导致过拟合。在极端情况下,每个点都成为一个变点,剩余误差消失。findchangepts
使用随更改点数量线性增长的惩罚项。如果有K找到变化点,然后函数最小化
在哪里k0而且kK分别是信号的第一个和最后一个样本。
比例常数,表示为β并在
MinThreshold
,对应于为每个更改点添加的固定惩罚。findchangepts
如果剩余误差的减少不满足阈值,则拒绝添加额外的变更点。集MinThreshold
归零以返回所有可能的更改。如果您不知道要使用什么阈值,或者对信号中的变更点数量有一个粗略的概念,请指定
MaxNumChanges
代替。此选项逐渐增加阈值,直到函数发现的更改少于指定值。
为了实现最小化,findchangepts
采用一种基于动态规划的穷举算法。
参考文献
基利克、丽贝卡、保罗·费恩海德和伊德里斯·a·埃克利。“用线性计算代价对变化点进行最佳检测。”美国统计协会杂志.Vol. 107 No. 500, 2012, pp. 1590-1598。
拉维尔,马克。“在改变点问题上使用惩罚对比。”信号处理.第85卷,2005年8月,1501-1510页。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
如果指定输入参数
统计
,那么它必须是一个编译时常数。
版本历史
在R2016a中引入
另请参阅
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。