卡尔曼滤波(Kalman Filter)是一种用于估计动态系统状态的递归算法,尤其适用于含有噪声的线性系统。它在时间序列数据的噪声抑制、状态估计、轨迹跟踪等领域非常常用,如自动控制、信号处理、导航系统等。
卡尔曼滤波通过 预测 和 更新 两个步骤来递归地估计系统的状态,并根据噪声和测量的不确定性动态调整估计值。
% 提示用户输入列号n
n = input('请输入要进行卡尔曼滤波的列号n: ');
% 从data.xlsx文件中读取数据
data = xlsread('data.xlsx');
% 检查输入的列号是否有效
if n > size(data, 2)
error('输入的列号超出数据范围,请输入一个有效的列号。');
end
% 获取要进行卡尔曼滤波的n列数据
data_n = data(:, n);
% 初始化卡尔曼滤波的参数
% 假设初始估计值为0,初始协方差为1
x_est = 0; % 估计值
P = 1; % 估计误差协方差
Q = 0.01; % 过程噪声协方差(可根据需要调整)
R = 1; % 测量噪声协方差(可根据需要调整)
% 初始化存储滤波结果的数组
filtered_data = zeros(size(data_n));
[l,m]=size(filtered_data)
% 卡尔曼滤波主循环
for k = 1:length(data_n)
% 预测步骤
x_pred = x_est; % 预测值
P_pred = P + Q; % 预测误差协方差
% 更新步骤
K = P_pred / (P_pred + R); % 卡尔曼增益
x_est = x_pred + K * (data_n(k) - x_pred); % 更新估计值
P = (1 - K) * P_pred; % 更新协方差
% 存储滤波后的结果
filtered_data(k) = x_est;
end
% 显示原始数据和滤波后的数据
disp('原始数据:');
disp(data_n);
disp('卡尔曼滤波后的数据:');
disp(filtered_data);
figure;
plot(1:l,filtered_data)
hold on
plot(1:l,data_n)
% 选项:保存结果为新的Excel文件
xlswrite('filtered_data.xlsx', filtered_data);
disp('滤波后的数据已保存为 filtered_data.xlsx');
标签:disp,pred,卡尔曼滤波,Filter,协方差,MATLAB,filtered,data
From: https://blog.csdn.net/subject625Ruben/article/details/142966396