CUSUM统计

CUSUM用信号的均值和方差信息来判断新输入的信号是否是异常值。

当新输入的监测值明显比正常情况下的均值高或者低的时候,也就是超过了上界或者下界。认为新输入的信号是异常的。

 

以下部分转载自:https://blog.csdn.net/cai2016/article/details/53289687

用3个tips解释这个过程
step1: 信号序列在未发生突变之前,CUSUM统计量g(k)是一个在0附近随机波动的变量。
step2:信号发生突变,当发生正向偏移时g(k+)就会不断增大,也就是一个累计的过程。当发生反向偏移时g(k-)不断累计。
step3:当累积达到一定的程度(超过设定的阈值)时就可以认为已经发生了信号突变,这样暂态信号就监测出来了。根据延迟时间d还可以推算出发生信号突变的时间

 

 

### 关于MATLAB中的CUSUM算法 CUSUM(Cumulative Sum)是一种统计过程控制技术,用于检测数据序列中小幅度的变化。它通过累积偏差的方式识别异常情况,在工业质量控制、金融数据分析等领域有广泛应用。 在MATLAB中实现CUSUM算法可以通过编写自定义函数来完成。以下是基于标准CUSUM逻辑的一个简单实现: #### CUSUM算法的核心原理 CUSUM算法主要依赖两个变量:正向累计和负向累计。这些值会随着输入信号逐步更新,并与预设阈值比较以判断是否存在显著变化[^1]。 #### 实现代码示例 以下是一个简单的MATLAB脚本,展示如何实现基本的CUSUM算法: ```matlab function [positive_sum, negative_sum, change_detected] = cusum_algorithm(data, threshold, drift) % 初始化参数 positive_sum = zeros(size(data)); negative_sum = zeros(size(data)); change_detected = false; % 遍历数据并计算Cusum值 for i = 2:length(data) delta = data(i) - mean(data(1:i)); % 更新正向和负向累加器 positive_sum(i) = max(0, positive_sum(i-1) + delta - drift); negative_sum(i) = min(0, negative_sum(i-1) + delta + drift); % 判断是否超过阈值 if positive_sum(i) > threshold || abs(negative_sum(i)) > threshold change_detected = true; break; end end end ``` 此函数接受三个输入参数: - `data` 是待分析的数据序列; - `threshold` 定义触发报警所需的最小偏移量; - `drift` 表示允许的小幅漂移范围。 调用该函数时可以传入实际测量数据以及设定好的门限值来进行监控。 #### 使用说明 为了验证上述函数的效果,您可以创建一组测试数据并向其中注入人工误差点作为实验对象。例如: ```matlab % 创建模拟数据集 rng(0); % 设置随机种子以便重复结果 test_data = cumsum(randn(100,1)); % 注入突变 test_data(75:end) = test_data(75:end)+5; % 调用cusum_algorithm 函数 [~, ~, detected] = cusum_algorithm(test_data, 4, 0.5); if detected disp('Change Detected!'); else disp('No significant changes.'); end ``` 以上例子展示了如何利用CUSUM方法探测时间序列里的突然变动。 #### 结论 通过这种方式可以在MATLAB环境下轻松构建自己的CUSUM监测工具。这种方法不仅适用于单一维度的时间序列分析,还可以扩展到多维空间或者更复杂的场景下应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值