我有 EEG 信号并从中提取 PSD 特征,然后必须对其应用降噪算法,我使用卡尔曼滤波器,
但是论文中的输出信号比我的输出要平滑得多,并且
在我的情况下,垂直轴不同
我认为这是因为卡尔曼滤波器初始化;初始状态和预测。
这是我的输出和纸张输出。
这是MATLAB代码:
N = length(z); % number of Klamn filter iterations
Qfactor = 1; % process noise mult factor
Rfactor = 1; % measurement noise mult factor
F = [ 1 2 % update matrix
0 1 ];
H = [ 1 0 ]; % measurement matrix
sigmaQ = 5e-5;
sigmaR = 1;
Q = sigmaQ^2 * [ 8/3 2 % process noise covariance matrix
2 2 ];
R = sigmaR^2 * [ 1 ]; % measurement noise covariance
P = zeros(2, 2, N);
x = zeros(2, N);
x(:,1) = [ 0
0 ];
P(:,:,1) = Q;
for i=2:N
[xpred, Ppred] = predict(x(:,i-1), P(:,:,i-1), F, Q);
[nu, S] = innovation(xpred, Ppred, z(i), H, R);
[x(:,i), P(:,:,i)] = innovation_update(xpred, Ppred, nu, S, H);
end
情节(x(1,2:N),'b');
功能:
预言
函数 [xpred, Ppred] = predict(x, P, F, Q) xpred = F * x; Ppred = F * P * F' + Q;
创新:
函数 [nu, S] = 创新(xpred, Ppred, z, H, R) nu = z - H * xpred; %% 创新 S = R + H * Ppred * H'; %% 创新协方差
和创新更新:
函数 [xnew, Pnew] = innovation_update(xpred, Ppred, nu, S, H) K = Ppred * H' * inv(S); %% 卡尔曼增益 xnew = xpred + K * nu;%% 新状态 Pnew = Ppred - K * S * K'; %% 新协方差

