| Министерство науки и высшего образования Российской Федерации
федеральное государственное бюджетное образовательное учреждение
высшего образования
«Самарский государственный технический университет»
(ФГБОУ ВО «СамГТУ»)
| Лабораторная работа №6 «Фильтр Калмана в задаче обработки экспериментальных данных» Вариант 5 Выполнил: Балашов И. В. Кутуков Л. А. Шишканов В. Б. Проверил: Узенгер А. А. Самара 2022 Цель работы: познакомиться с математическим методом фильтрации экспериментальных данных – фильтром Калмана. Научиться использовать фильтр Калмана в задаче обработки экспериментальных данных.
1. Ознакомиться с работой функции kalm() в Scilab.
2. Разобраться с вышеприведенным примером.
3. Подключить набор экспериментальных данных и выполнить настройку параметров модели фильтра Калмана, наилучшим образом характеризующие экспериментальные данные.
Эксперимент 1: объект 2-го порядка
clear; // Параметры для рассчета
file1 = 'F:\3-1\Эксперименты\6\data_5.bin';
N = 10000;
ts = 0.01;
n = 1:N; // Открытие файла
fd1 = mopen(file1,'rb');
y = mget(N, 's', fd1) - 18230;
mclose(fd1); // System
a = [0.7; 0.2; 1]; b = [1; 0.2];
A = [0 1; -a(1)/a(3) -a(2)/a(3)];
B = [0; 1];
C = [b(1) b(2)];
I = eye();
//
F = I + A*ts + (A*ts)^2/2 + (A*ts)^3/3;
G = (I*ts + A*ts*ts/2 + (A*ts)^2*ts/3)*B;
H = C;
//
R = 0; Q = 2.4; // Initialize for loop
p0 = [0.1 0.1; 0.1 0.1];
x0 = zeros(2,1);
x1 = x0;
p1 = p0; // Kalman filter
for i = 1:N-1
[x1(:,i+1),p1,x,p]=kalm(y(:,i),x1(:,i),p1,F,G,H,Q,R);
end clf;
//subplot(2,1,2);
plot(n, y(1,:),"m");
plot(n, x1(1,:),"k");
|
Эксперимент 2:
clear; // Параметры для рассчета
file1 = 'F:\3-1\Эксперименты\6\data_5.bin';
N = 10000;
ts = 0.01;
n = 1:N; // Открытие файла
fd1 = mopen(file1,'rb');
y = mget(N, 's', fd1) - 18230;
mclose(fd1); // System
a = [0; 0.5; 0.5]; b = [0.9; 0.2];
A = [0 1; -a(1)/a(3) -a(2)/a(3)];
B = [0; 1];
C = [b(1) b(2)];
I = eye();
//
F = I + A*ts + (A*ts)^2/2 + (A*ts)^3/3;
G = (I*ts + A*ts*ts/2 + (A*ts)^2*ts/3)*B;
H = C;
//
R = 0.1; Q = 6.4; // Initialize for loop
p0 = [0.1 0.1; 0.1 0.1];
x0 = zeros(2,1);
x1 = x0;
p1 = p0; // Kalman filter
for i = 1:N-1
[x1(:,i+1),p1,x,p]=kalm(y(:,i),x1(:,i),p1,F,G,H,Q,R);
end clf;
//subplot(2,1,2);
plot(n, y(1,:),"m");
plot(n, x1(1,:),"k");
|
Вывод: познакомились с математическим методом фильтрации экспериментальных данных – фильтром Калмана и научились использовать фильтр Калмана в задаче обработки экспериментальных данных. |