matlab 卡尔曼滤波对二维信号去噪代码
时间: 2023-08-17 10:39:50 浏览: 73
下面是一个简单的 MATLAB 卡尔曼滤波对二维信号去噪的代码示例:
```
% 生成二维高斯噪声
noise = randn(256, 256);
% 生成原始信号
[x, y] = meshgrid(1:256);
signal = sin(x/20) + cos(y/10);
% 添加噪声
noisy_signal = signal + noise;
% 初始化状态和协方差矩阵
x0 = zeros(4, 1);
P0 = eye(4);
% 系统模型
dt = 1;
A = [1 0 dt 0; 0 1 0 dt; 0 0 1 0; 0 0 0 1];
H = [1 0 0 0; 0 1 0 0];
Q = 0.01*eye(4);
R = 0.1*eye(2);
% 卡尔曼滤波器
filtered_signal = zeros(256, 256);
P = P0;
xhat = x0;
for i=1:256
for j=1:256
% 预测
xhat = A*xhat;
P = A*P*A' + Q;
% 更新
K = P*H'/(H*P*H' + R);
xhat = xhat + K*(noisy_signal(i, j) - H*xhat);
P = (eye(4) - K*H)*P;
% 记录滤波后的信号
filtered_signal(i, j) = xhat(1);
end
end
% 绘制原始信号和去噪信号
figure;
subplot(1, 2, 1);
imagesc(signal);
title('原始信号');
axis image;
colormap(gray);
subplot(1, 2, 2);
imagesc(filtered_signal);
title('去噪信号');
axis image;
colormap(gray);
```
在这个示例中,我们生成了一个二维高斯噪声和一个二维正弦余弦信号作为输入信号。然后,我们定义了系统模型和初始状态,并使用一个双重 for 循环对输入信号的每个像素点进行卡尔曼滤波。最后,我们将原始信号和去噪信号绘制在同一个图中。在这个示例中,我们使用了非常简单的系统模型和参数,您可以根据自己的需求进行调整。