首页 > 其他分享 >卡尔曼滤波(Kalman Filter)MATLAB代码

卡尔曼滤波(Kalman Filter)MATLAB代码

时间:2024-10-15 22:51:19浏览次数:9  
标签:disp pred 卡尔曼滤波 Filter 协方差 MATLAB filtered data

卡尔曼滤波(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

相关文章