Файл: Лабораторная работа 6 Фильтр Калмана в задаче обработки экспериментальных данных Вариант 5 Балашов И. В. Кутуков Л. А.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.12.2023
Просмотров: 12
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
| Министерство науки и высшего образования Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего образования «Самарский государственный технический университет» (ФГБОУ ВО «СамГТУ») |
Лабораторная работа №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"); |
Вывод: познакомились с математическим методом фильтрации экспериментальных данных – фильтром Калмана и научились использовать фильтр Калмана в задаче обработки экспериментальных данных.