matlab - 在MATLAB中计算指数加权移动平均值时如何从向量中连续去除异常值?
问题描述
我在 MacOS 上使用 MATLAB R2020a。我正在使用 dsp.MovingAverage 函数计算指数加权移动平均值,并尝试根据 2 个条件实时删除矢量元素 - 如果新元素导致平均值超过迄今为止“整体”平均值的 1.5 倍,或者如果它低于到目前为止“整体”平均值的 0.5 倍。
也就是说,将当前元素的加权平均值与之前的加权平均值进行比较,如果当前元素导致加权平均值增加到之前平均值的 1.5 倍以上或低于之前平均值的 0.5 倍,则应忽略并且递归方程改为应用于下一个元素,依此类推。最后,我想删除一个包含异常值的向量。
这是我用来计算指数加权移动平均值的函数:
movavgExp = dsp.MovingAverage('Method', 'Exponential weighting', 'ForgettingFactor', 0.4);
mean_cycle_period_exp = movavgExp(cycle_periods);
我尝试通过创建一个 for 循环来操作 dsp.MovingAverage 函数使用的算法,如下所述:
https://uk.mathworks.com/help/dsp/ref/dsp.movingaverage-system-object.html
但是,这种查找加权平均值的手动方法会为函数产生不同的图形输出。
% Create a vector containing 60 cycle periods with a step increase by 0.002 seconds
cycle_period_step_change = [0.7:0.002:0.82];
% Calculate weights manually
lambda = 0.1;
w = zeros(length(cycle_period_step_change),1);
w(1) = 1; % initialize the weight for the first sample
for i = 2:length(cycle_period_step_change)
w(i) = lambda*w(i-1) + 1; % calculate the successive weights
end
% Calculate moving mean with weights manually
x = zeros(length(cycle_period_step_change), 1);
x(1) = 2;
for i = 2:length(cycle_period_step_change)
x(i) = (1 - 1/w(i))*x(i - 1) + (1/w(i))*x(i);
end
这是我手动计算加权平均值 时的输出 这是我使用函数计算加权平均值时的输出
此外,当我实现一个 for 循环以实时从移动平均值中排除异常值时,它会产生错误:
% Calculate moving mean with weights manually
x = zeros(length(cycle_period_step_change), 1);
x(1) = 2;
for i = 2:length(cycle_period_step_change)
x(i) = (1 - 1/w(i))*x(i - 1) + (1/w(i))*x(i);
if x(i) > 1.5*(1 - 1/w(i - 1))*x(i - 2) + (1/w(i - 1))*x(i - 1)
x(i) = [];
elseif x(i) < 0.5*(1 - 1/w(i - 1))*x(i - 2) + (1/w(i - 1))*x(i - 1)
x(i) = [];
end
end
我非常感谢有关如何解决此问题的任何建议,在此先感谢!
解决方案
推荐阅读
- python-3.x - 从 Resnet 提取的特征不正确的问题
- android - Android:多个自定义广播接收器不起作用
- python - 使用 pymodbus 转换 Modbus 响应
- sql - 对于 SQL Server 中的此类数据,我应该使用什么循环?
- java - 无法在 Spring RestTemplate 中模拟 JSON 响应
- .net - 如何使用 Terraform azurerm_app_service 指定 .net 核心版本
- python - Python 脚本挂在 json.loads() 上
- javascript - JavaScript:如何从 json 字符串中获取逗号分隔的字符串?
- google-cloud-platform - 无法创建 GCP 帐户。国家中国选项不可用
- uikit - 如何将 UIImage 转换或加载到 PKDrawing 中?