滤波算法——赫尔移动平均

滤波算法——赫尔移动平均

  • 1 算法原理-参考链接
  • 2 MATLAB代码
  • 3 滤波效果

1 算法原理-参考链接

移动平均:你知道的与你不知道的

2 MATLAB代码

clc;clear;close all; % 清屏
%%% https://zhuanlan.zhihu.com/p/38276041
%%% 赫尔移动平均

%% 数据准备
A=100*sin(0.008*(1:1:1000));
A=A+2*randi([-1,1],1,1000); % 11000列的随机数矩阵,数值在30-100之间
[size_A1,size_A2]=size(A);% 获取A的 行数和列数

%% 预先设置的参数
T=80;
DOUBLE_T=2*T;

%% 预置滤波后数据的空间
A_WMA_1=A(1,1:T-1); % 预置滤波后数据的空间
A_WMA_2=A(1,1:DOUBLE_T-1); % 预置滤波后数据的空间

%% 计算T内的加权移动平均
for k=T:1:size_A2
    S=0;
    for kk=0:1:T-1
        S=S+(T-kk)*A(1,k-kk);
    end
    S=(2*S)/(T*(1+T));
    A_WMA_1=[A_WMA_1 S];
end


%% 计算2*T内的加权移动平均
for k=DOUBLE_T:1:size_A2
    S=0;
    for kk=0:1:DOUBLE_T-1
        S=S+(DOUBLE_T-kk)*A(1,k-kk);
    end
    S=(2*S)/(DOUBLE_T*(1+DOUBLE_T));
    A_WMA_2=[A_WMA_2 S];
end

%% 新序列
A_WMA_3=2*A_WMA_1-A_WMA_2;

%% 使用新序列,计算根号T取整内的加权移动平均
T=sqrt(T);
T=round(T);
A_HMA=A_WMA_3(1,1:T-1); % 预置滤波后数据的空间
for k=T:1:size_A2
    S=0;
    for kk=0:1:T-1
        S=S+(T-kk)*A_WMA_3(1,k-kk);
    end
    S=(2*S)/(T*(1+T));
    A_HMA=[A_HMA S];
end

%% 滤波结果可视化
figure('Name','FRAMA滤波演示','NumberTitle','off');
plot1=plot(A,'b-'); % 原始数据
hold on;
plot2=plot(A_WMA_1,'r--'); % 滤波后数据
hold on;
plot3=plot(A_WMA_2,'k--'); % 滤波后数据
hold on;
plot4=plot(A_HMA,'m--'); % 滤波后数据
hold on;
legend([plot1,plot2,plot3,plot4],'原始数据','A\_WMA_1','A\_WMA\_2','A\_HMA');

3 滤波效果

滤波算法——赫尔移动平均_第1张图片

你可能感兴趣的:(数据处理,MPC,控制算法,时序数据库,大数据)