主要内容

检测爆发和信号的显着变化

此示例显示了如何通过累积和累积和转换点检测来确定信号中的更改或分组。

通过累积额度检测爆发

您正在监控数据的许多实用应用程序,并且当底层进程发生更改时,您希望尽快发出警告。一种非常流行的技术来实现这一点是通过累积和控制图表。

为了说明CUSUM如何工作,首先检查2014年西非埃博拉疫情的总报告案件。

资源:疾病预防与控制中心

加载Westawricanebolaoutbreak2014绘图(WhorePortdate,[TotalCasesguinea TotalCasesliberia Totalcasessierraleone],'.-')传奇('几内亚''利比里亚''塞拉利昂');标题('艾博拉病毒病的总疑似,有可能和确诊病例');

如果您查看几内亚第一次爆发的前沿,您可以看到2014年3月25日左右报告了一百个案例,并在该日期之后显着增加。有趣的是,虽然3月利比里亚也有一些涉嫌案件,但案件数量相对控制,直至三十天后。

为了了解新患者的进货率,请在2015年3月25日开始,从发病开始的案件总数的相对日变化。

DaysSinceOutbreak = DateTime(2014,3,24+(0:400));案例= Interp1(Woroportdate,TotalCasesliberia,Dayssince Outbreak);DayOverdaycases = Diff(案例);绘制(DayOverdayCase)标题(自2014年3月25日起利比里亚的新案例(每日)的率');ylabel('每日报告案件数量的变化');Xlabel('爆发开始的天数'开始');

如果您在数据的前一百天放大,则可以看到,虽然存在初始填充情况,但在第30天之后,其中许多排除了,其中变化率暂时下降到零以下。您还看到了第95和100天之间的显着上升趋势,其中达到了每天七种新案例的速度。

XLIM([1 101])

对输入数据执行CUSUM测试可以是一种快速方法来确定爆发发生何时发生爆发。Cusum跟踪两种累积总和:何时临时何时向上移动时的上和,以及检测何时何时向下移动时的较低金额。集成技术提供了CUSUM能够在输入率中忽略大(瞬态)峰值,但仍然具有敏感性,以达到速度的速度较小。

在默认参数中调用CUSUM将检查前二十五个样本和报警的数据,当它遇到初始数据中的均值超过五个标准偏差时的换档。

CUSUM(DayOverdayCases(1:101))传奇('上总和''较低金色'

请注意,CUSUM在第30天(第33天)捕获了错误报告的案例,并在第80天开始挑选爆发的初始发作(第90天)。如果您仔细比较以前的情节,您可以看到CUSUM能够在第29天忽略虚假的上升,但仍然在第95天开始的大向上趋势前五天触发警报。

如果调整cusum,使其具有零例/天的目标平均值,具有加上或减少三个案例/日的目标,您可以在第30天忽略错误的警报,并在第92天提出爆发:

Climit = 5;mshift = 1;tmean = 0;tdev = 3;CUSUM(DayOverdayCase(1:100),Climit,Mshift,Tmean,TDEV)

发现差异发生重大变化

检测统计数据突然变化的另一种方法是通过ChangePoint检测,该转换点检测将信号划分为统计(例如平均,方差,斜率等)在每个段内恒定的段。

下一个例子分析了尼罗河河河的年度最小水平622至1281年在开罗附近的Roda Cauge测量的广告。

加载尼斯计多年= 622:1284;情节(年,Nileriverminima)标题('年度最低水平的尼罗河')xlabel('年')ylabel('水平(m)'

施工开始于715广告约715左右的更新更准确的测量设备。在这段时间之前没有太多别名,但在进一步检查之前,您可以看到大约722左右的可变性程度相当较小。要找到新设备变为运营时的时间段,您可以搜索root的最佳变化在进行元素方面的平均水位后,分化在进行任何缓慢变化的趋势之后。

我= findchangepts(diff(nileriverminima),'统计''rms');斧头= GCA;XP = [岁(i)axlim([2 2])年(i)];yp = ax.ylim([1 1 2 2]);补丁(Datenum(XP),YP,[。5 .5 .5],'Facealpha',0.1);

虽然样本明智的差异是消除趋势的简单方法,但还有其他更复杂的方法来检查更大的尺度方差。有关如何使用此数据集执行通过小波进行更改点检测的示例,请参阅小波变换点检测(小波工具箱)

检测输入信号中的多个变化

下一个例子涉及CR-CR 4速传输块的45秒模拟,以1ms间隔采样。下面示出了汽车发动机RPM和扭矩的仿真数据。

加载Simcarsig.子图(2,1,2);情节(Bartorquenm);Xlabel('样品');ylabel('扭矩(n m)');标题('扭矩');子图(2,1,1);情节(Carenginerpm);Xlabel('样品');ylabel('速度(rpm)');标题('引擎速度');

在这里,汽车加速,改变齿轮三次,切换到中性,然后施加制动器。

由于发动机速度可以自然地建模为一系列线性段,因此可以使用找到挑选找到汽车改变齿​​轮的样品。

Figce foodchangepts(carenginerpm,'统计''线性''maxnumchanges',4)xlabel('样品');ylabel('发动机速度(rpm)');

在这里,您可以看到四个更改(在五个线性段之间),它们围绕10,000,200,000,30,000和40,000个样本标记发生。缩放到波形的空闲部分:

XLIM([18000 22000])

请注意,直线拟合紧密追踪输入波形,但可以提高它。

观察信号之间共享的多级事件的变化

要查看改进,将变换点的数量增加到20,并观察样品编号的齿轮变化附近的变化

findchangepts(carenginerpm,'统计''线性''maxnumchanges',20)XLIM([18000 22000])

观察到在样品19035开始的发动机速度开始下降,并在19550年稳定之前进行了510个样品。由于采样间隔为1ms,这是一个〜0.51的延迟,并且在更换齿轮后是典型的时间。

现在看看同一区域内发动机扭矩的变速点:

findchangepts(fartorquenm,'统计''线性''maxnumchanges',20)XLIM([19000 20000])

观察到发动机转速完成沉降后,将发动机扭矩完全递送到轴上的轴,55毫秒。这次与发动机的进气冲程与扭矩产生之间的延迟有关。

要找到离合器何时开始订阅,您可以进一步放大信号。

XLIM([19000 19050])

在样品19011中抑制离合器,并采取约30个样品(毫秒)以完全脱离。

也可以看看

||