MATLAB卡尔曼滤波去噪代码
时间: 2025-01-03 17:02:01 浏览: 10
好的,以下是一个使用MATLAB实现卡尔曼滤波进行信号去噪的示例代码:
```matlab
% 初始化参数
dt = 1; % 时间步长
F = [1 dt; 0 1]; % 状态转移矩阵
H = [1 0]; % 观测矩阵
Q = [1 0; 0 3]; % 过程噪声协方差矩阵
R = 1; % 观测噪声协方差
% 初始化状态向量和协方差矩阵
x = [0; 0]; % 初始状态向量
P = eye(2); % 初始协方差矩阵
% 生成带噪声的信号
t = 0:dt:100;
x_true = 0.5 * t.^2; % 真实信号
noise = randn(size(t)); % 观测噪声
y = x_true + noise; % 带噪声的信号
% 卡尔曼滤波
n = length(t);
x_est = zeros(2, n);
for i = 1:n
% 预测步骤
x_pred = F * x;
P_pred = F * P * F' + Q;
% 更新步骤
K = P_pred * H' / (H * P_pred * H' + R);
x = x_pred + K * (y(i) - H * x_pred);
P = (eye(2) - K * H) * P_pred;
% 存储估计值
x_est(:, i) = x;
end
% 绘图
figure;
plot(t, y, 'r.', 'DisplayName', '带噪声的信号');
hold on;
plot(t, x_true, 'g-', 'DisplayName', '真实信号');
plot(t, x_est(1, :), 'b-', 'DisplayName', '卡尔曼滤波估计');
xlabel('时间');
ylabel('信号');
legend;
title('卡尔曼滤波去噪示例');
grid on;
阅读全文