function [ filtered ] = OutlierFilter( data )
    init_count = 0;
    init_flag = 0;
    filtered = zeros(1, length(data));
    filtered(1) = data(1);
    for i = 2:length(data)
        % 等待数据初始化、数据没有过大的波动才能正确追踪数据
        if(abs(data(i) - data(i-1)) < 30 && init_flag == 0)
            filtered(i) = data(i);
            init_count = init_count + 1;
            if(init_count >= 5)
                init_flag = 1;
            end
            continue;
        end
        % 如果没有初始化则不做任何处理
        if(init_flag == 0)
            filtered(i) = data(i);
            continue;
        end
        
        % 默认情况下，滤波后数据等于原始值
        filtered(i) = data(i);
        % 如果数据出现过大的波动
        if(abs(filtered(i) - filtered(i - 1)) > 40)
            % 计算数据反向后的差距, 因为目前数据经常看到相位差刚好是反向的
            dif1 = abs(data(i) + filtered(i - 1));
            % 如果反向后差别很小，说明是反向的错误，直接用当前值取负处理填充
            if(dif1 < 20)
                filtered(i) = -data(i);
            else
                % 如果数据不完全是反向的，那就用上一个滤波值
                filtered(i) = filtered(i-1);
            end
        end
    end
end

