Файл: Лабораторная работа 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");



Вывод: познакомились с математическим методом фильтрации экспериментальных данных – фильтром Калмана и научились использовать фильтр Калмана в задаче обработки экспериментальных данных.