BC/NW 2021№ 2 (38):9.1

РАЗРАБОТКА ПРОГРАММЫ ОБРАБОТКИ РЕЗУЛЬТАТОВ МОДЕЛЬНЫХ ЭКСПЕРИМЕНТОВ

Полушин А.И., Абросимов Л.И.

Современная геополитическая обстановка в мире ставит перед Российской Федерацией задачу создания максимально эффективной системы обороны от любых средств нападения как из воздушной среды, так и из космического пространства [1]. Решение этой задачи требует непрерывного наблюдения за воздушной обстановкой и быстрой обработки информации с последующей передачей её вышестоящим пунктам для принятия решения о дальнейших действиях. Обработкой информации занимаются специально обученные люди. До появления в производствах компьютеров работа была сложной и занимала много времени. Теперь же решение задач обработки информации не требует таких усилий однако, появилась необходимость постоянно обновлять и улучшать программное обеспечение.

Для ПАО «НПО «Алмаз», занимающейся разработкой программного обеспечения и техники для Вооруженных Сил Российской Федерации, необходимо разработать программу, которая будет производить селекцию движущейся в трехмерном пространстве цели. Для этого необходимо обработать результаты модельных экспериментов. Суть обработки состоит в усреднении параметров с привязкой к другому параметру. Программа будет являться компонентом для тестирования. В ней будет происходить селекция движущейся цели по заданным параметрам, и моделирование параметров. Для наглядности параметры модельных экспериментов необходимо выводить на графики. Все параметры хранятся в базе данных SQLite.

В соответствии с техническим заданием были определены следующие задачи:

– Определить параметры воздушных объектов.

– Составить структуру базы данных.

– Разработать программу заполнения базы данных.

– Разработать программу обработки информации путем привязки и усреднения заданных параметров.

– Сделать вывод по результатам работы.

Для решения поставленных задач использованы следующие методы:

– Теоретический анализ и обобщение литературных данных.

– Статистическая обработка данных.

– Моделирование объекта в трехмерном пространстве.

– Математическая обработка данных.

Исходными данными для разработки являются:

– Фреймворк Qt C++.

– Система управления базами данных SQLite.

Ожидаемыми результатами являются: программа заполнения базы данных и программа обработки полученной информации с удобными и понятными интерфейсами.

В данной работе необходимо использовать Qt – фреймворк для разработки кроссплатформенного программного обеспечения на языке программирования C++. Преимущества Qt в его открытости и доступности, кроссплатформенности, наличии хорошей и полной документации [2]. Также для хранения и структурирования данных необходимо использовать СУБД SQLite. SQLite – это система управления базами данных, отличительной особенностью которой является ее встраиваемость в приложения [3].

1. Модель объекта и модельный эксперимент

В первой части данной главы рассматриваются понятия модели и модельного эксперимента. Вторая часть посвящена формальному способу описания модели объекта.

 

Модельный эксперимент

Рассмотрим термин «модель» как способ отображения объекта, средство для получения информации и знаний. Модель — это объект, сохраняющий только важные для исследования свойства настоящего или существующего объекта.

Под термином «эксперимент» понимается деятельность, выполняемая в целях научного познания [4]. По характеру и разнообразию средств и способов их использования эксперименты различают на натурный и модельный. Их отличие состоит в том, что в модельном эксперименте необходимо обосновать отношение модели и оригинального объекта.

Преимущества модельного эксперимента в отличии от натурного:

– изоляция исследуемого объекта от влияния различных побочных явлений;

– возможность многократного повторения эксперимента в контролируемых условиях;

– возможность устанавливать начальные условия эксперимента.

Воздушный объект можно охарактеризовать различным набором параметров, многие из которых не представляют полезной информации. Таким образом, чтобы абстрагироваться от ненужных переменных, свойств и взаимосвязей воздушного объекта нужно создать его модель.

В качестве исследуемого модельного эксперимента будет выступать движущийся в пространстве воздушный объект. Его модель представляет собой набор параметров, описывающих движение объекта в пространстве.

 

Модель объекта

Как уже было изложено выше экспериментом является движение объекта в трехмерном пространстве. Сразу можно выделить основные параметры модели – координаты объекта в трехмерном пространстве. Так как объект меняет свои координаты со временем, то логично выделить следующий параметр – время привязки информации. Несколько объектов могут фиксироваться радаром как один, поэтому уместен параметр – номер объекта. Всякий воздушный объект обладает свойством отражать падающую на него электромагнитную энергию. Чтобы оценить отражательную способность воздушного объекта вводится следующий параметр – ЭПР. ЭПР является дополнительным параметром для тестирования работоспособности программы.

Таким образом, сформирована модель с основными параметрами для решения задачи обработки результатов модельных экспериментов. По этой модели проектируется база данных.

2. Проектирование программ

В соответствии с ТЗ необходимо хранить все данные в базе данных SQLite. В первой части данной главы описывается структура базы данных.

Как уже отмечалось выше, одна из задач выпускной квалификационной работы (ВКР) заключается в создании программы или подпрограммы заполнения базы данных. Вторая часть данной главы содержит в себе основные этапы проектирования этой программы.

Обработку результатов модельных экспериментов выполняет вторая программа. Описание этапов проектирования этой программы содержатся в третьей части данной главы.

Структура базы данных

Для описания модели объекта, выделяются основные параметры: координаты в трехмерном пространстве, ЭПР, время привязки информации, номер объекта. Эти параметры будут основой структуры базы данных. Каждый эксперимент содержит в себе множества этих параметров. Эксперименты отличаются временем начала и названием с комментарием пользователя.

Таким образом, структура базы данных принимает следующий вид: (рис. 1), где, соответственно обозначены, таблица экспериментов с первичным ключом expid, названием эксперимента name, датой и временем начала эксперимента date и комментарием пользователя – comm. Таблица параметров с первичным ключом paramid, внешним ключом expid, временем привязки параметров – date, координатами X, Y и Z, ЭПР – epr, и номером объекта - number. На столбцах expid таблицы экспериментов и paramid таблицы параметров установлен автоинкремент (автоинкремент – функция, которая автоматически генерирует последовательные натуральные числа. )  для упрощения создания новых записей. Столбцы date двух таблиц по умолчанию добавляют текущую дату и время. Столбец number содержит проверку вводимых значений. Значение этого столбца должно быть больше 0.

Рис. 1. Структура базы данных

Программа заполнения базы данных

 

Основными функциями программы заполнения базы данных являются заполнение и редактирование базы данных. Для редактирования базы данных лучше всего подходит ручное редактирование, а для заполнения – моделирование траектории полета воздушного объекта. Исходя из этого реализуем два варианта: ручное заполнение с редактированием и моделирование траектории полета воздушного объекта.

Для удобства представим базу данных в программе в виде таблиц. Чтобы увидеть параметры конкретного эксперимента, пользователю необходимо выбрать его в таблице.

Для того чтобы пользователь мог удобно редактировать базу данных необходимо реализовать редактирование через выбор ячейки таблиц. Пользователь должен нажать два раза на ячейку, содержимое которой хочет изменить, и ввести новое значение.

Пользователь может допустить ошибки при вводе значений, поэтому необходимо реализовать функции проверки содержимого измененных и добавленных ячеек таблиц. Также необходимо добавить функцию обновления таблиц.

Необходимо предусмотреть импорт параметров эксперимента из файла с расширением txt. В первой строчке txt файла содержатся названия параметров через пробел в следующем порядке: date, x, y, z, epr, number. Во всех остальных строках значения параметров в этом же порядке. Значения date должны быть в формате: ГГГГ-ММ-ДД чч:мм:сс. Так как значение параметра date проставляется автоматически, то его можно не указывать (вместо значения ставится пробел, в случае если в первой строке есть date). Примеры txt файлов приведены на рис. 2 и рис. 3.

 

Рис. 2. Пример txt файла

 

Рис. 3. Пример txt файла (без date)

Для моделирования параметров положения объекта в пространстве необходимо знать следующее: вектор начального положения объекта, вектор начальной скорости объекта, шаг времени и количество параметров. Для моделирования ЭПР необходимо знать тип объекта и угол локации. ЭПР является случайной величиной, а тип объекта влияет на функцию распределения ЭПР. В открытом доступе нет информации о типе и параметрах функций распределения. Поэтому за основу возьмем две функции распределения: экспоненциальную и равномерную. В качестве параметров функций распределения будут средние значения ЭПР для первого типа, и минимальное с максимальным значением ЭПР для второго типа. Типы делятся на подтипы, которые влияют на параметры функций распределения. Угол локации также влияет на параметры функции распределения. Исходя из этого, для моделирования ЭПР необходимо выбрать тип объекта, подтип и угол локации. Все параметры ЭПР являются секретными и поэтому указаны случайными величинами.

Координаты объекта рассчитываются в системе координат радиолокационной станции (РЛС), где ноль и есть положение РЛС. Векторы положения и скорости вводятся проекциями на оси в этой системе координат.

 

Программа обработки результатов модельных экспериментов

Обработка результатов модельных экспериментов заключается в том, что пользователь должен указать несколько экспериментов (минимум два) и параметр, который нужно найти во всех таблицах этих экспериментов и усреднить по всем объектам, и привязывается к другому параметру, то есть указывает диапазон значений, в пределах которого нужно найти и усреднить заданный параметр. Диапазон значений задается с помощью дельты. Дельта может быть «плавающей»: изменяться на каждом шаге усреднения в зависимости от разности параметров усреднения. Выбранные эксперименты должны добавляться в отдельную таблицу, где можно отменить выбор, очистить выбор и добавить новый эксперимент.

Так же, как и в программе заполнения базы данных, для удобства, представим базу данных в виде таблиц. После того, как пользователь выберет эксперимент, во второй таблице отобразятся параметры этого эксперимента. Для удобства поиска нужного эксперимента добавим фильтр по дате и названию.

Обработанную информацию проще и удобнее хранить в таблице. Заголовки столбцов содержат названия параметров и количество параметров, соответствующих диапазону привязки (сколько значений попало в диапазон изменения). Пример таблицы обработанной информации приведен в табл. 2. В данном примере пользователь выбрал привязку по координате X и усреднил параметр ЭПР. До обработки пользователь задал несколько экспериментов.

Таблица 1

Пример вывода обработанной информации

 

Координата X

ЭПР

Количество экспериментов

1

10

1,1

2

2

11

3,6

2

3

11,5

5,7

3

4

11,9

4,2

1

5

11,4

3,5

3

6

11

0,5

2

7

12

4,8

1

8

13

1,1

1

9

12

2,4

2

10

12

4,1

3

 

Следует предусмотреть сохранение результатов обработки информации. Для этого хорошо подходит CSV – формат, предназначенный для представления табличных данных, который читается широко распространенной программой Excel, разработанной корпорацией Microsoft.

В качестве дополнительной обработки необходимо усреднить выбранный пользователем параметр в выбранных экспериментах по всем объектам. Для этого сначала необходимо выбрать эксперименты и указать параметр. Как и в случае обработки результатов модельных экспериментов, выбранные эксперименты хранятся в таблице, где есть возможность добавить новый, отменить выбор и очистить таблицу. Выходным параметром является число – усреднение заданного параметра.

Пользователь не должен изменять базу данных, следовательно, необходимо не допускать изменения ячеек таблиц. Не обойтись и без обработки ошибок, а также ввода некорректных значений. Пользователь должен выбрать эксперименты, параметры усреднения и привязки, а также указать значение дельты или установить «плавающую» дельту.

В программе требуется предусмотреть построение графиков. Графики должны показывать изменение выбранного параметра от времени, а также изменение параметра усреднения от параметра привязки. Гораздо удобнее предусмотреть вывод сразу нескольких графиков, а также удаление или очистка их. Графики должны быть масштабируемыми, а также подстраиваться под размер главного окна программы. Оси на графиках должны автоматически подбирать масштаб.

В Qt нет стандартных классов или библиотек для работы с графиками. В открытом доступе можно найти средства для построения графиков в Qt, рассмотрим наиболее популярные их них:

·       QCustomPlot – это библиотека для построения графиков предназначена для создания красивых 2D-графиков, графиков и диаграмм. Недостатком QCustomPlot является невозможность работы с типом даты и времени. Его достоинства: простота, удобство и множественные виды графиков и диаграмм [5].

·       Qwt – графическая библиотека, позволяющая значительно упростить процесс визуализации данных в программе. Достоинствами этой библиотеки является то, что нет необходимости вручную прописывать элементы отображения, такие как оси, сетки, кривые данных и т.д. Недостаток Qwt такой же, как и в предыдущей рассмотренной библиотеке [6].

При использовании этих библиотек придется производить конвертацию и настраивать каждую точку на оси на вывод как минимум двух значений (например, часы и минуты), что невозможно. Исходя из этого, необходимо реализовать собственный класс построения графиков

          Процесс разработки

В этой главе представлены методы и алгоритмы, используемые в программах. В первой части данной главы описан процесс создания базы данных в соответствии с её структурой. Вторая и третья часть содержат описания программ заполнения базы данных и обработки результатов модельных экспериментов соответственно.

В Qt реализованы сигналы и слоты. Сигнал вырабатывается, когда происходит какое-либо действие или событие, например, нажатие кнопки. Слот – это метод, который присоединяется к сигналу, он вызывается, когда генерируется связанный с ним сигнал [7]. На основе этого реализуются некоторые алгоритмы.

База данных

Исходя из технического задания, выбранная база данных – SQLite. Как уже было сказано, структура базы данных имеет вид рис. 1. Создадим эти две таблицы.

Таблица экспериментов:

 

CREATE TABLE experiment (

expid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

name VARCHAR(255) NOT NULL,

date DATETIME DEFAULT (DATETIME('now','localtime')),

comm TEXT);

Таблица параметров, связанная с таблицей экспериментов по внешнему ключу – expid:

 

CREATE TABLE param (

paramid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

date DATETIME DEFAULT (DATETIME('now','localtime')),

x DOUBLE NOT NULL,

y DOUBLE NOT NULL,

z DOUBLE NOT NULL,

epr DOUBLE NOT NULL,

number INT CHECK (number>0) NOT NULL,

expid INT NOT NULL,

FOREIGN KEY (expid) REFERENCES experiment(expid));

Таким образом, получилась реляционная база данных, с двумя таблицами, связанными между собой связью «один ко многим».

 

Программа заполнения базы данных

 

Для вывода и редактирования таблиц будет использоваться стандартный класс библиотеки Qt QTableView, за которым закрепляется модель – экземпляр класса QSqlTableModel. Модель связывается с таблицей базы данных путем вызова методов:

– QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()) – конструктор, в который передается открытое соединение с базой данных;

void QSqlTableModel::setTable(const QString &tableName) – метод, который ставит в соответствие модель и таблицу в базе данных. Его аргумент принимает название таблицы;

void QSqlTableModel::setFilter(const QString &filter) – метод, который устанавливает фильтр на модели. В него передается строка, содержащая часть запроса в базу данных после слова «WHERE»;

bool select() – метод выборки таблицы из базы данных.

Модель закрепляется за QTableView посредством вызова метода void QTableView::setModel(QAbstractItemModel *model), в который передается указатель на модель.

Применение изменений осуществляет слот bool QSqlTableModel::submitAll().

После того, как пользователь нажимает на ячейку «эксперимент», номер эксперимента сохраняется в переменной типа QString и на второй модели QSqlTableModel устанавливается фильтр по номеру эксперимента. Таким образом, после нажатия ячейки «эксперимент» в первой таблице, во второй таблице отображаются параметры соответствующего эксперимента. Нажать можно на любую ячейку, программа найдет строку этой ячейки и сохранит номер эксперимента.

Пользовательский интерфейс программы приведен на рис. 4. На этом рисунке видно, что пользователь выбрал эксперимент «Modeling» в первой таблице и параметры этого эксперимента отобразились во второй таблице.

 

Рис. 4. Пользовательский интерфейс программы (Выбран эксперимент “Modeling”)

 

Заполнение базы данных вручную

Алгоритм заполнения базы данных должен производить проверку вводимых пользователем значений (рис. 5). Для этого создан экземпляр класса QSet. Он предоставляет однозначное математическое множество с возможностью быстрого просмотра [8]. В этот экземпляр помещаются индексы измененных ячеек, и по ним производится проверка введенных значений. Алгоритм обращается к данным модели по индексам из множества, и, если находит пустые значения, выдаёт соответствующее сообщение об ошибке.

 

Рис. 5. Схема алгоритма проверки введенных

 

Заполнение таблиц происходит с помощью кнопки «добавить строку» под соответствующей таблицей и введением значений в добавленные строки. При добавлении строк в таблицы «эксперименты» автоматически проставляется дата. Индексы добавленных строк второго столбца помещаются в упомянутые выше множества. Нет смысла добавлять индексы всех столбцов, потому что дата и время автоматически проставляются в таблицу сразу, а первичный ключ генерируется функцией автоинкремента, и столбец первичного ключа скрыт от пользователя. Схема алгоритма добавления строк в первую таблицу представлена на рис. 6.

 

Рис. 6. Схема алгоритма добавления строки в 1-ю таблицу

 

При добавлении строки в таблицу «параметры» автоматически проставляется дата и номер выбранного эксперимента, а также нули в столбцах: координата X, координата Y, высота и ЭПР. Номер объекта по умолчанию равен единице. Внешний ключ таблицы параметров также скрыт от пользователя. Схема алгоритма добавления строк во вторую таблицу представлена на рис. 7.

 

Рис. 7. Алгоритм добавления строки во 2-ю таблицу

 

Реализована функция удаления строк у двух таблиц. В случае, если пользователь захочет удалить строку в таблице экспериментов, то ему откроется диалоговое окно с предупреждением об удалении записей, которые связаны с этим экспериментом в таблице «параметры».

По окончании всех изменений необходимо нажать кнопку «применить».

Заполнение базы данных из файла

          Чтобы добавить новый эксперимент из файла необходимо ввести название эксперимента, комментарий (не обязательно) и дату со временем в соответствующие поля и нажать на кнопку «Ввод из файла». Поле даты и времени автоматически проставляется текущей датой и временем, также это можно сделать, нажав на кнопку «Установить текущее время».

          Далее пользователю откроется диалоговое окно, где необходимо выбрать файл с расширением txt. Если структура файла соответствует структуре, описанной в п. 2.2, то в первой таблице отобразится новый эксперимент. Схема алгоритма заполнения базы данных из файла представлен на рис. 8. Алгоритм построчно читает файл и составляет динамический запрос вставки данных в базу данных. Вначале происходит добавление нового эксперимента, и получение его idexp. Дальше происходит чтение названий столбцов и составление части запроса вставки. После этого в запрос добавляются значения. Если какой-либо запрос не выполнился, или не удалось считать файл или данные, то переменная логического типа success устанавливается в логический ноль. В конце происходит проверка значения этой переменной. Если она равна логическому нулю, то все добавленные данные удаляются, и пользователю выводится сообщение об ошибке.

 

Рис. 8. Схема алгоритма заполнения БД из файла

 

Моделирование траектории полета воздушного объекта

Для моделирования параметров эксперимента потребуется ввести в соответствующие поля следующее: название эксперимента, комментарий, дату и время, проекция векторов начального положения и начальной скорости объекта на оси координат РЛС, шаг времени, количество параметров, тип объекта, подтип объекта, угол локации. Затем необходимо выбрать куда выгружать данные: в базу данных или в txt файл, и нажать на кнопку «Моделирование».

Моделирование производится методом Рунге-Кутты четвёртого порядка по следующим формулам:

 

 

 

 

 

 

 

 

где xn+1, yn+1, zn+1 – значения координат в момент времени n+1;

xn, yn, zn – значения координат в момент времени n;

Vxn+1, Vyn+1, Vzn+1 – значения проекций вектора скорости в момент времени n+1;

Vxn, Vyn, Vzn – значения проекций вектора скорости в момент времени n;

h – величина шага;

tn+1 – время на n+1 шаге;

tn – время на n-ом шаге;

dt – шаг времени.

Для нахождения значений проекций вектора скорости в момент времени n+1 служат функции K1(x,y,z,Vx,Vy,Vz,dt), К2(x,y,z,Vx,Vy,Vz,dt), К3(x,y,z,Vx,Vy,Vz,dt). К1(x,y,z,Vx,Vy,Vz,dt) – функция нахождения коэффициентов k11, k21, k31, k41 для проекции вектора скорости на ось X. К2(x,y,z,Vx,Vy,Vz,dt) – функция нахождения коэффициентов k12, k22, k32, k42 для проекции вектора скорости на ось Y. К3(x,y,z,Vx,Vy,Vz,dt) – функция нахождения коэффициентов k13, k23, k33, k43 для проекции вектора скорости на ось Z. Остальные коэффициенты для xn+1, yn+1 и zn+1 находятся по рассмотренным ранее коэффициентам. Функции K1, K2 и K3 будут описаны ниже.

Рассмотрим нахождение коэффициентов на примере нахождения следующего значения координаты xn+1 и значения проекции вектора скорости в момент времени n+1 на ось X, формулы (8 – 23):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где kx – поправка к текущему значению координаты x;

kvx – поправка к проекции вектора скорости на ось X.

Аналогично находятся остальные значения yn+1, zn+1, Vyn+1 и Vzn+1.

          Рассмотрим функции K1, K2, K3 [9]. Входными параметрами являются значения xn, yn, zn, Vxn, Vyn и Vzn. На выходе получается соответствующий коэффициент для Vxn+1,Vyn+1 или Vzn+1. Функция K1:

 

 

 

 

 

где Wz – угловая скорость вращения Земли, равная 0.7292115*10-4 [c-1];

R – средний радиус Земли, равный 6371000 [м];

r – модуль вектора положения (25);

a1,2 – параметры для учета гравитации (26,27);

J2 – коэффициент 2-ой зональной гармоники, равный 108262.575*10-8;

BigSemiAxis – экваториальный радиус Земли, равный 6378136 [м];

GeocentricalGravityConst – геоцентрическая гравитационная постоянная Земли, равная 39860044.18*10732].

          Функция K2:

 

 

где Wz – угловая скорость вращения Земли, равная 0.7292115*10-4 [c-1];

R – средний радиус Земли, равный 6371000 [м];

r – модуль вектора положения (25);

a1,2 – параметры для учета гравитации (26,27);

J2 – коэффициент 2-ой зональной гармоники, равный 108262.575*10-8;

BigSemiAxis – экваториальный радиус Земли, равный 6378136 [м];

GeocentricalGravityConst – геоцентрическая гравитационная постоянная Земли, равная 39860044.18*10732].

          Функция K3:

 

 

где Wz – угловая скорость вращения Земли, равная 0.7292115*10-4 [c-1];

R – средний радиус Земли, равный 6371000 [м];

r – модуль вектора положения (25);

a1,2 – параметры для учета гравитации (26,27);

J2 – коэффициент 2-ой зональной гармоники, равный 108262.575*10-8;

BigSemiAxis – экваториальный радиус Земли, равный 6378136 [м];

GeocentricalGravityConst – геоцентрическая гравитационная постоянная Земли, равная 39860044.18*10732].

Для моделирования параметров эксперимента создан отдельный класс prognoz. Описание класса приведено в табл. 2.

Таблица 2

Описание класса prognoz.

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

prognoz

public

void*

-

Конструктор

Wz

private

double const

-

Угловая скорость Земли

J2

private

double const

-

Коэффициент 2-ой зональной гармоники

R

private

double const

-

Средний радиус Земли

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

a00

private

double const

-

Параметр для учета гравитации

a20

private

double const

-

Параметр для учета гравитации

cz

private

double const

-

Параметр для учета гравитации

K1

private

double

const double &x, const double &y, const double &z, double &Vx, const double &Vy, const double &Vz, double &dt

функция нахождения коэффициентов k11, k21, k31, k41 для проекции вектора скорости на ось X

K2

private

double

const double &x, const double &y, const double &z, double &Vx, const double &Vy, const double &Vz, double &dt

функция нахождения коэффициентов k12, k22, k32, k42 для проекции вектора скорости на ось Y

K3

private

double

const double &x, const double &y, const double &z, double &Vx, const double &Vy, const double &Vz, double &dt

функция нахождения коэффициентов k13, k23, k33, k43 для проекции вектора скорости на ось Z

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

prop

public

double

double &t, double &x, double &y, double &z, &Vx, double &Vy, double &Vz, double &dt,const double angle,double &epr, int type,int subtype

Моделирование параметров на один шаг

density

private

double[2][35]

-

Массив соответствия высоты и плотности атмосферы

getDensity

private

double

const double &z

Расчет высоты и получение плотности

SRZNACH_TYPE1

private

double[3]

-

Массив средних значение ЭПР для типа 1 (экспоненциальное распределение)

MIN_MAX_TYPE2

private

double[2][2][10]

-

Массив соответствия угла локации и минимального с максимальным значением ЭПР для типа 2 (равномерное распределение)

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

my_uniform

private

double

-

Функция получения случайной величины

my_uniformMINtoMAX

private

double

double min, double max

Функция получения случайной величины с равномерным законом распределения

my_exponential

private

double

double lambda

Функция получения случайной величины с экспоненциальным законом распределения

calcEPR_TYPE1

public

double

int subtype

Функция получения ЭПР для типа 1

calcEPR_TYPE2

public

double

double angle, int subtype

Функция получения ЭПР для типа 2

 

Экземпляр класса prognoz моделирует координаты и вектор скорости на один шаг, поэтому вызов метода prop происходит в цикле от 0 до N, где N – заданное количество параметров. Для расчета начальной ЭПР предназначены методы calcEPR_TYPE1 и calcEPR_TYPE2. Последующий расчет значений ЭПР производятся в методе prop. Схема алгоритма метода prop (рис. 9) высчитывает значения по формулам (1 – 23).

 

Рис. 9. Схема алгоритма метода prop

Реализация программы обработки результатов модельных экспериментов

Обработки результатов модельных экспериментов состоит из нескольких этапов. Для начала нужно выбрать эксперименты, по которым будет производиться обработка. Для удобства нахождения нужного эксперимента предусмотрен фильтр записей. Как и в случае с программой заполнения базы данных, номер эксперимента определяется автоматически и параметры соответствующего эксперимента отображаются во второй таблице QTableView, за которой закрепляется модель QSqlTableModel. Чтобы выбрать эксперимент необходимо сначала нажать на него в таблице экспериментов, после этого нажать на кнопку добавить. Выбранный эксперимент отобразится в QTableView в нижней части экрана. Чтобы отменить выбор нужно выбрать его в QTableView в нижней части экрана и нажать на кнопку «удалить». Эксперимент удалится только из выбранных, изменение базы данных не предусмотрено в этой программе. Чтобы полностью очистить выбранные эксперименты необходимо нажать на кнопку «удалить все». Затем указать какой параметр усреднить и к какому параметру привязаться, а также задать значение дельты или выбрать «плавающую» дельту. После этого нужно нажать на кнопку «обработать». Затем происходит обработка и вывод информации в таблицу. Очистить таблицу можно с помощью кнопки «очистить». Чтобы сохранить таблицу на диске нужно нажать на кнопку «сохранить в файл» и задать расположение на диске в диалоговом окне выбора файлов.

Дополнительно можно построить графики параметров от времени нужного эксперимента или графики по результатам обработки. Графиков можно выводить любое количество. Размер графиков подстраивается под размер интерфейса. Увеличить изображение на графиках можно с помощью колесика мыши. Очистить графики возможно также по кнопке «очистить».

В программе не предусмотрено изменение базы данных, поэтому редактирование QTableView запрещено.

Интерфейс программы представлен на рис. 10 и рис. 11.

 

Рис. 10. Интерфейс программы (обработка результатов)

 

Рис. 11. Интерфейс программы (построение графиков)

 

Обработка результатов

После выбора экспериментов необходимо выбрать параметр усреднения и параметр привязки и задать значение дельты или указать «плавающую» дельту. Параметры выбираются с помощью QRadioButton – переключатель с текстом. Указать «плавающую» дельту можно с помощью QCheckBoxэлемент графического интерфейса, у которого есть два состояния: включено и выключено (установлено и не установлено). При установке QCheckBox блокируется ввод значения дельты.

Для обработки пользователю нужно нажать на кнопку «обработать». После нажатия происходит проверка: выбраны ли минимум два эксперимента. По умолчанию выбран параметр «Координата X» для привязки и усреднения. Если проверка не прошла, то пользователь получает соответствующее сообщение.

Далее происходит создание динамического запроса в базу данных, и вывод информации в QTableView, за которым закреплена модель QStandardItemModel, которая связывается с QTableView посредством вызова методов:

QStandardItemModel::QStandardItemModel(int rows, int columns, QObject *parent = nullptr) – конструктор, в который передается количество строк и столбцов;

– void QTableView::setModel(QAbstractItemModel *model) – метод, в который передается указатель на модель.

Все изменения в модели отображаются на связанном с ней экземпляром класса QTableView.

Алгоритм создания динамического запроса и выдачи результатов представлен на рис. 12 и рис. 13 [10 – 12].

 

 

Рис. 12. Схема алгоритм обработки и выдачи информации

 

Рис. 13. Алгоритм обработки и выдачи информации

 

Для усреднения выбирается основной эксперимент – первый эксперимент в списке выбранных экспериментов. Количество строк таблицы результата обработки равно количеству строк параметров основного эксперимента. Алгоритм проходится по каждой строке параметров основного эксперимента и находит соответствующие значения привязки, в зависимости от дельты, в таблице параметров следующего эксперимента в списке выбранных, затем складывает параметры усреднения и привязки, и увеличивает счетчик совпадений на единицу. После прохода по всем строкам параметров не основного эксперимента, сохраняет параметры в model3 – модель таблицы обработанной информации. В конце, после прохода по всем параметрам всех выбранных экспериментов, происходит усреднение значений в model3 и вывод результатов в табличном виде.

 

Фильтр базы данных

Для удобства нахождения нужного эксперимента в программе предусмотрен фильтр по дате и названию. Фильтр состоит из QCalendarWidget – виджет (виджет - это исходный элемент для создания пользовательского интерфейса в Qt.) , который предоставляет пользователю доступ к календарю, двух QRadioButton, с помощью которых можно задать интервалы даты, двух QDateTimeEdit для задания дат и времени вручную, QLineEdit для задания названия эксперимента и кнопки QPushButton. QDateTimeEdit виджет, предназначенный для редактирования даты и времени.

При нажатии на кнопку «применить» формируется часть запроса в базу данных, которая содержится после слова «WHERE» и на модели таблицы устанавливается фильтр с помощью функции void QSqlTableModel::setFilter(const QString &filter), в которую передается эта строка. После этого обновляется таблица.

 

. Построение графиков

 

Для построения графиков был создан отдельный класс MyGraphicView, унаследованный от QGraphicsView – предоставляет виджет для отображения содержимого QGraphicsScene. QGraphicsScene – предоставляет поверхность для управления большим числом графических 2D элементов. Описание класса приведено в табл. 3.

 

 

Таблица 3

Описание класса MyGraphicView.

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

MyGraphicView

public

QGraphicsView

QWidget*parent

Конструктор

scene

private

QGraphicsScene*

-

Указатель на сцену для рисования элементов

group_1,

group_2

private

QGraphicsItemGroup*

-

Указатель на группы элементов

timer

private

QTimer*

-

Указатель на таймер

data_time

private

QVector<QDateTime>*

-

Динамический массив для хранения дат и времен

data_param

private

QVector<QString> *

-

Динамический массив для хранения значений параметров

data_flag

private

bool

-

Флаг, который устанавливается в логическую единицу при вызове метода SetData

count_data

private

int

-

Содержит количество данных

difDate

private

qint64

-

Разница между самой ранней и поздней датами в секундах

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

zero, zero2

private

int

-

Начальное значение времени

max, max2

private

double

-

Максимальное значение параметров по модулю

param_str, param_str2

private

QString

-

Название параметра

no_time

private

bool

-

Флаг установки данных без зависимости от времени

vect_par1, vect_par2

private

QVector <double>*

-

Динамический массив для хранения значений параметров без зависимости от времени

resizeEvent

private

void

QResizeEvent *event

Перехватывает событие изменение размера виджета

deleteItemsFromGroup

private

void

QGraphicsItemGroup *group

Удаляет группу элементов

eventFilter

protected

bool

QObject * obj , QEvent * event

Перехватывает события от колесика мыши и изменяет масштаб

Метод или свойство

Модификатор доступа

Тип

Аргументы

Описание

no_time_graph

private

void

-

Метод построения графика по значениям, полученным в результате обработки (не зависящим от времени)

setData

public

void

QVector<QDateTime> *datetime,QVector<QString> *param,QString par_str

Устанавливает данные (зависимость параметра от времени)

setData (перегружен)

public

void

QVector<double> *vect_param1, QVector<double> *vect_param2,QString par_str, QString par_str2

Устанавливает данные (зависимость параметра от другого параметра)

slotAlarmTimer

private

void

-

Слот для обработчика переполнения таймера. В нем производится перерисовка графика.

 

Для того, чтобы построить график зависимости параметра от времени привязки пользователю необходимо выбрать параметр(ы), эксперимент и указать номер объекта. Затем нажать на кнопку «построить график».

Для указания параметров используется QCheckBox. При нажатии на QCheckBox заполняется массив логического типа check_graph[4], где: true – параметр выбран, false – параметр не выбран.

Алгоритм построения графиков сначала производит проверку: выбрал ли пользователь эксперимент, указал ли параметр(ы) и номер объекта.

После проверки производится запрос в базу данных «SELECT» выборки столбцов даты и выбранного параметра с фильтром по номеру эксперимента и номеру объекта, упорядоченные по дате. Затем создается новый элемент типа QVector<MyGraphicView*>, в котором содержатся указатели на экземпляры класса MyGraphicView, и заполняются две структуры типа QVector<QVector<QDateTime>*> и QVector<QVector<QString>*>, в них содержатся указатели на динамические массивы QVector<QDateTime> и QVector<QString>, в которых содержатся значения даты и параметров, полученных после выполнения запроса в базу данных. Если нужно построить график по результатам обработки, то заполняются две структуры типа QVector<QVector<double>*>, в них содержатся указатели на динамические массивы QVector< double >. Таким образом реализовано добавление любого количества графиков.

Метод SetData перегружен, это нужно для того, чтобы устанавливать параметры различных типов: первый метод принимает QVector<QDateTime>* и QVector<QString>* – зависимость выбранного параметра от времени, и аргумент типа QString – название параметра, второй принимает два аргумента типа QVector<double> * – зависимость параметра от другого параметра и два аргумента QString – названия параметров.

Алгоритм метода SetData, кроме инициализации данных, определяет интервал времени и записывает его в свойство difDate, а также находит максимальное значение параметров по модулю, и устанавливает свойство data_flag в логическую единицу, а no_time в логический ноль. Если вызван перегруженный SetData, то алгоритм находит два максимальных значения по модулю, устанавливает флаг no_time и data_flag в логическую единицу.

Когда создается экземпляр класса MyGraphicView, начинает отчет таймер, установленный на 50 миллисекунд. После переполнения таймера вызывается слот slotAlarmTimer(), в котором происходит прорисовка графика. Если таймер переполнится раньше, чем установятся данные, то свойство data_flag не позволит произвести прорисовку. Алгоритм прорисовки автоматически подбирает масштаб исходя из временных параметров, и определяет размерность времени: секунды, минуты или часы. Если флаг no_time установлен в логическую единицу, то slotAlarmTimer() вызывает метод no_time_graph(). Метод no_time_graph() аналогичен методу slotAlarmTimer(), с тем отличием, что no_time_graph() не делает поправку на время, и ось ординат находится посередине, так как значения на оси абсцисс могут быть отрицательными. Схема алгоритма метода slotAlarmTimer() представлена на рис. 14, рис. 15 и рис. 16. Вначале алгоритма идет инициализация сцены и делителя сцены. Делитель сцены нужен для упрощения построения графиков. Далее идет построение осей. После этого расчет точек на оси абсцисс и времени для каждой точки, одновременно с этим строятся вертикальные линии сетки. Время выбирается в зависимости от разности самой поздней и самой ранней даты и времени в секундах. Затем алгоритм рассчитывает точки на оси ординат и значения в этих точках. Расчет на оси ординат зависит от количества точек и максимального значения параметров по модулю. В конце проставляются названия осей, на оси абсцисс также в зависимости от разницы дат, на оси ординат в соответствии с принятым параметром [13, 14].

 

Рис. 14. Схема алгоритма метода slotAlarmTimer()

 

Рис. 15. Схема алгоритма метода slotAlarmTimer()

 

Рис. 16. Схема алгоритма метода slotAlarmTimer()

 

Данный класс может строить графики не только с зависимостью параметра от времени, но и с зависимостью параметра от другого параметра, с помощью метода no_time_graph(). Этот метод аналогичен методу slotAlarmTimer(), отличается построением оси абсцисс. Ось ординат находится посередине, так как значения на оси абсцисс могут быть отрицательными. Для того, чтобы установить зависимость параметра от другого параметра необходимо вызвать перегруженный метод SetData ( QVector < double > * vect_param1 , QVector < double >  *vect_param2, QString par_str, QString par_str2). Его аргументы принимают два вектора (динамических массива) типа double, и названия параметров. Перегруженный метод SetData также высчитывает разницу между максимальным и минимальным значением параметров и сохраняет в max и max2 для одного вектора и другого. Этот метод устанавливает no_time в логическую единицу, тем самым блокирует выполнение метода slotAlarmTimer() и вызывает метод no_time_graph().

          Расчет координат точек графика на сцене в методе no_time_graph() происходит следующим формулам:

 

 

 

, где X1,2 – координата X первой и второй точек на сцене;

Y1,2 – координата Y первой и второй точек на сцене;

width – ширина сцены;

height – высота сцены;

n – делитель ширины сцены;

max, max2 – разности между максимальными и минимальными значениями параметров для vect_par1 и vect_par2 соответственно.

x1,2, y1,2 – соседние значения параметров на каждом шаге.

Расчет координат точек графика на сцене в методе slotAlarmTimer() происходит следующим формулам:

 

 

 

, где X1,2 – координата X первой и второй точек на сцене;

Y1,2 – координата Y первой и второй точек на сцене;

width – ширина сцены;

height – высота сцены;

n – делитель ширины сцены;

max – разность между максимальным и минимальным значениями параметров.

difDate_res – разность между самой ранней и самой поздней датой со временем в секундах.

x1,2, y1,2 – соседние значения параметров на каждом шаге.

Здесь x1 и x2 предварительно делятся на коэффициент времени в зависимости от difDate_res:

если difDate_res<60, то x1,2 = x1,2;

если difDate_res/60>60, то x1,2 = x1,2/360;

если difDate_res/60<60, то x1,2 = x1,2/60;

          Таким образом происходит преобразование значений параметров в координаты линии на сцене. Линия графика рисуется красным цветом, линии осей – черным, линии сетки – серым. Результат построения графика представлен на рис. 17.

 

Рис. 17. Результат построения графика (Левый график – график по результатам обработки, правый – зависимость параметра “Координата X” от времени, эксперимент “First”, номер объекта 1)

 

Чтобы построить график по результатам обработки модельных экспериментов нужно сначала провести обработку, затем нажать на кнопку «График по результатам обработки».

Как только происходит изменение размера, то вызывается метод resizeEvent(QResizeEvent *event), который запускает таймер на 10 миллисекунд, и после переполнения происходит повторная прорисовка графика.

Когда происходит событие, введенное колёсиком мыши, то вызывается метод eventFilter(QObject *watched, QEvent *event), который изменяет масштаб сцены QGraphicsScene.

Графики добавляются в QGridLayout – класс, который выравнивает виджеты по сетке. Для удобства чтения информации с графиков в одной строке QGridLayout содержится не более двух графиков.

Чтобы удалить все графики необходимо нажать на кнопку «очистить». Алгоритм обработки нажатия этой кнопки удаляет содержимое структур типов QVector < MyGraphicView *>, QVector< QVector < QDateTime >*>, QVector < QVector < QString > *> и QVector<double>*,  и очищает занятую этими структурами память.

 

Тестирование программ

Для оценки быстродействия программ используется встроенная библиотека QTimer, которая позволяет засечь время моделирования и время обработки параметров. Результат отображается с помощью QDebug – класс, который предоставляет выходной поток для отладочной информации. Время засекается с момента нажатия на кнопку и до мометра выхода программы из слота обработки нажатия кнопки.

Согласно стандарта ГОСТ 19.301-79 испытания проводились по следующей схеме:

1)    Объект испытаний – программа обработки результатов модельных экспериментов и программа заполнения базы данных.

2)    Цель испытаний – выявление ошибок, проверка работоспособности программ, оценка быстродействия.

3)    Средства испытаний.

Состав используемых во время испытаний технических средств:

– Ноутбук Lenovo Y500 с процессором Intel Core i7;

– ОЗУ 16 Гбайт;

– 4 Гбайт видеопамяти;

– наличие свободного места на жестком диске более 200 Мбайт;

4)    Порядок испытаний. Сначала тестируется правильность вывода результатов моделирования, затем корректность введенной информации, и правильность вычислений с «плавающей» и константной (заданной пользователем) дельтой, затем производится оценка быстродействия программ: засекается время моделирования и время обработки результатов модельных экспериментов.

5)    Методы испытаний. Испытания проводятся методом функционального тестирования.

Тесты предназначены для отладки функций программ и выявления следующих ситуаций:

– пользователь не ввел название эксперимента при моделировании параметров;

– пользователь не ввел необходимые данные при ручном заполнении;

– пользователь выбрал меньше двух экспериментов для обработки;

– произведена попытка удалить запись без её выбора;

– произведена попытка построить график по недостаточным данным.

Каждый тест характеризуется своим набором входных данных. Когда происходит одна из вышеперечисленных ситуаций происходит информирование пользователя о соответствующей ошибке с помощью диалогового окна (пример на рис. 18). Все тесты проведены успешно, новых ошибок не обнаружено.

 

Рис. 18. Пример информирования пользователя об ошибке

 

Время моделирования параметров воздушного объекта зависит только от количества записей, поэтому оценка быстродействия моделирования производится на любом наборе начальных параметров, с изменением количества записей. Количество записей меняется от 1 до 10 с шагом 1, от 10 до 100 с шагом 10, от 100 до 1000 с шагом 100, от 1000 до 10000 с шагом 1000. Зависимость времени моделирования от количества записей представлена на рис. 19.

 

 

Рис. 19. Зависимость времени моделирования от количества записей

 

          При моделировании параметров воздушного объекта количество записей обычно не превышает 1000. На основании полученных результатов можно сделать вывод, что моделирование параметров движения воздушного объекта происходит быстро для пользователя (меньше 10 секунд).

          Время обработки результатов модельных экспериментов зависит от нескольких параметров: количество выбранных экспериментов, количество записей в каждом эксперименте, количество записей в основном эксперименте. При обработке результатов модельных экспериментов чаще всего выбирается меньше 10 экспериментов и меньше 1000 записей в каждом эксперименте. Исходя из этого оценим время обработки на следующих входных данных: количество выбранных экспериментов меняется от 2 до 10 с шагом 1, количество записей во всех экспериментах равно 1000, параметр привязки – координата X, параметр усреднения – ЭПР, дельта равна 100. Зависимость времени обработки от количества выбранных экспериментов представлена на рис 20.

 

Рис. 20. Зависимость времени обработки от количества выбранных экспериментов

 

На основании полученных результатов можно сделать вывод, что обработка результатов модельных экспериментов происходит практически мгновенно для пользователя (меньше 1 секунды).

В ходе использования и тестирования программы обработки результатов модельных экспериментов можно выделить часто повторяющийся ряд действий, а именно задание фильтра по экспериментам, выбор экспериментов и обработка информации. Для выполнения этих действий потребуется:

- установить параметры фильтра во вкладке «Фильтр записей» (при запуске программы открыта именно эта вкладка) верхнего окна,

- нажать кнопку «применить» в той же вкладке,

- выбрать эксперимент,

- нажать на кнопку «Добавить» во вкладке «Обработка» нижнего окна (при запуске открыта),

- повторить выбор и нажатие кнопки «Добавить» для выбора остальных экспериментов,

- затем указать параметры обработки и нажать кнопку «Обработать» во вкладке «Обработка» нижнего окна.

Все эти действия не требуют перехода на другие вкладки программы. В случае, если необходимо провести дополнительную обработку, или построить график необходимо переключиться на другие вкладки. В этом случае пользователю станут открытыми именно те блоки данных, с которыми он будет взаимодействовать, и не будет мешать лишняя информация. В программе заполнения базы данных все действия происходят в одном окне, и информация из базы данных всегда доступна пользователю. Таким образом, достигается максимальное удобство использования программ.

Заключение

В ходе исследований решен комплекс задач, позволяющий произвести селекцию движущейся цели по модельным экспериментам.

Для достижения поставленной цели разработана база данных с соответствующей структурой и разработана программа заполнения базы данных. Заполнять базу данных можно, как и вручную, так и посредством моделирования по начальным параметрам векторов положения и скорости воздушного объекта.

Также реализован вывод в файл модельных параметров, и заполнение базы данных из файла. Разработана программа для обработки результатов модельных экспериментов, в которую включена обработка модельных экспериментов – усреднение значений параметров по нескольким экспериментам в заданном диапазоне, дополнительная обработка – усреднение одного параметра по выбранным экспериментам, построение графиков различных зависимостей (параметра от даты и времени и параметра от другого параметра). Для программ разработан интуитивно понятный пользовательский интерфейс. Он предназначен для сотрудников ПАО «НПО «Алмаз».

Интерфейс даёт возможность быстро и с легкостью обработать результаты экспериментов, оценить обработку, произвести моделирование по заданным параметрам, а также произвести дополнительную обработку.

Произведено тестирование разработанных программ, результаты которого показали, что разработанный пользовательский интерфейс отзывчив и корректно обрабатывает данные, вводимые пользователем.

Так как разработанная система использует кроссплатформенное и свободно распространяемое программное обеспечение, то она может быть развернута на различных платформах.

          Таким образом, разработанная программа позволяет быстро и удобно производить селекцию движущейся цели – произвести обработку результатов модельных экспериментов и наглядно представить результат. Следовательно, цель исследований достигнута.

Список использованных источников

1.          ПАО «НПО «Алмаз».: сайт. – URL: www.raspletin.com (дата обращения 01.06. 2021). – Текст: электронный.

2.          Qt (software) – Wikipedia.: сайт – URL: www.wikipedia.org/wiki/Qt_(software) (дата обращения 31.05.2021). – Текст: электронный.

3.          SQLite. сайт: – URL www.younglinux.info/sqlite/sqlite (дата обращения 31.05.2021). – Текст: электронный.

4.          Штофф В.А. Моделирование и философия. – М. Л.: Наука, 1966. 295 с.

5.          Qt Plotting Widget QCustomPlot – Introduction.: сайт. – URL: www.qcustomplot.com (дата обращения: 07.05.2021). – Текст: электронный.

6.          Qwt User's Guide: Qwt – Qt Widgets for Technical Applications.: сайт. – URL: qwt.sourceforge.io (дата обращения 07.05.2021). – Текст: электронный.

7.          Сигналы и слоты в Qt. – URL: www.habr.com/ru/post/50812 (дата обращения 07.05.20210). – Текст: электронный.

8.          Базовые контейнеры. сайт: – URL: www.doc.crossplatform.ru/qt/4.3.2/containers.html (дата обращения 01.06.2021). – Текст: электронный.

9.          Сихарулидзе Ю.Г. Баллистика летательных аппаратов. — М.: Наука, 1982. — 352 с.

10.      Прата С. Язык программирования C++ (C++11). Лекции и упражнения. - 6 изд.  — М.: Вильямс, 2012. — 1248 с.

11.      Страуструп Б. Язык программирования С++. Специальное издание. Пер. с англ. — М.: Издательство Бином, 2011 г. — 1136 с.

12.      Лафоре Р. Объектно-ориентированное программирование в С++. Спб.: Питер, 2018. – 928 с.

13.      Шлее М. Qt 4.8. Профессиональное программирование на C++ . — Спб.: БХВ-Петербург, 2012. — 894 с.

14.      Боровский А.Н. Qt4.7+. Практическое программирование на C++. — СПб.: БХВ-Петербург, 2012. — 496 с.