Работа с файлами CSV: экспорт и импорт результатов моделирования#
При моделировании часто возникает необходимость сохранить результаты расчёта для последующего анализа в других программах (Exel, Python) или, наоборот, подать в модель внешние данные - например, реальные сигналы с датчиков, табличные зависимости, полученные ранее результаты расчета модели. Для этого в REPEAT VISION предусмотрены блоки Экспорт CSV и Импорт CSV.
CSV (Comma‑Separated Values) – простой текстовый формат, в котором значения разделены запятыми или точкой с запятой, а первая строка обычно содержит заголовки столбцов.
CSV-файлы часто используются для:
• обмена данными между моделями;
• загрузки экспериментальных измерений;
• подготовки тестовых воздействий;
• постобработки результатов в Python, Excel.
В данном уроке мы построим модель с двумя периодическими сигналами (синусоида и прямоугольные импульсы), экспортируем их в CSV‑файл, а затем импортируем этот файл обратно в модель, изменяя настройки интерполяции и экстраполяции. Это позволит понять:
• как задавать количество записываемых данных;
• как управлять дискретизацией;
• как влияют разные типы интерполяции и экстраполяции при импорте.
Пример графика импортированного при помощи CSV блока, рис. 1:
Рис. 1 Пример графика, импортированного при помощи CSV блока#
1. Постановка задачи#
Создать модель с двумя источниками периодических сигналов:
синусоидальный: амплитуда 1, частота 1 [Гц];
прямоугольные импульсы: амплитуда 1, частота 1 [Гц], скважность 50%.
Время расчёта – 1.25 [с], шаг интегрирования – 0.001 [с].
Эти сигналы подаются на блок Экспорт CSV, который сохраняет их в файл с заданными заголовками и выбранной дискретизацией.
Затем устанавливается блок Импорт CSV, читающий ранее полученный файл. Выходные сигналы импорта должны совпасть с исходными. После этого демонстрируется влияние различных настроек интерполяции и экстраполяции.
2. Создание и настройка проекта#
Создайте новый проект, назовите его, например, CSV_пример.
Установите следующие настройки для проекта (см. рис. 2 ниже):
Отключите параметр
Синхронизация с реальным временем;Установите
Время моделирования- 1.25 [c];Установите
Шаг интегрирования- 1 [мс];Установите
Шаг дискретизации- 1 [мс].
Важно
В REPEAT VISION десятичные числа задаются через точку.
Рис. 2 Настройка проекта#
3. Создание источников сигналов#
Из библиотеки Автоматика раздела Источники добавьте два генератора и установите им следующие значения свойств:
Генератор синусоидального сигнала (см. рис. 3 ниже):
Амплитуда синусоиды- 1;Сдвиг синусоиды по оси Y- 0.
Рис. 3 Добавление и настройка генератора синусоиды#
Генератор прямоугольных импульсов (см. рис. 4 ниже):
Период сигнала
a- 1000 [мс];Длительность сигнала
b- 500 [мс];Амплитуда сигнала
c- 1.
Рис. 4 Добавление и настройка генератора импульсов#
4. Построение графиков#
Для построения графиков источников сигналов при помощи Визуализации, а также последующего запуска модели на пробный расчет необходимо (см. рис. 5 и рис. 6 ниже):
Открыть вкладку
Визуализация, расположенную на нижней панели слева;Нажать ЛКМ на кнопку Добавить;
В выпадающем списке для построения первого графика выбрать
Генератор синусоидального сигнала [1];
Рис. 5 Добавление первого графика#
Нажать ЛКМ на кнопку Добавить, расположенную в правом нижнем углу;
В выпадающем списке для построения второго графика выбрать
Генератор прямоугольных импульсов [2].
Рис. 6 Добавление второго графика#
Затем необходимо запустить расчёт для получения следующих графиков, рис. 7:
Рис. 7 Графики созданных сигналов#
Модель готова для работы с блоками CSV.
5. Добавление и подключение блока «Экспорт CSV»#
Из раздела Внешние модели добавьте блок Экспорт CSV (см. рис. 8 ниже).
Затем подключим блок Экспорт CSV согласно рис. 8:
Рис. 8 Добавление и подключение блока Экспорт CSV#
6. Настройка блока «Экспорт CSV»#
6.1. Настройка дискретизации#
В свойствах блока найдите Тип задания дискретизации. Возможны три варианта свойства:
Тип |
Принцип работы |
Пример |
|---|---|---|
Записывает каждую N-ю точку |
Если шаг расчёта = 0.001 [с], а децимация N = 100, то в файл попадёт точка каждые 0.1 [с] |
|
Период дискретизации |
Запись происходит строго через указанный промежуток времени. Это самый простой и понятный способ. |
При периоде = 0.05 [с] запись точки производится каждые 50 [мс] |
Частота дискретизации |
Работает, как и период, но через формулу |
Частота = 20 [Гц] → запись каждые 0.05 [с] |
Оставляем стандартные настройки, когда выбрана Децимация фундаментальной частоты дискретизации проекта и установлен Коэффициент децимации = 1 (в .csv файл запишутся все точки).
6.2. Настройка заголовков столбцов#
Свойство Тип задания заголовков имеет следующие значения:
Автоматическое- блок сам создаст заголовки;Пользовательское- позволяет ввести собственные имена столбцов (через точку с запятой).
Выберите значение Пользовательское и в свойстве Заголовки введите строку: sin; square.
В итоге блок Экспорт CSV будет настроен аналогично рис. 9:
Рис. 9 Настройка блока Экспорт CSV#
7. Запуск расчёта и проверка#
Запустите модель на расчет. После завершения расчета в блоке Экспорт CSV нажмите кнопку Скачать - .csv файл сформируется и загрузится в вашу папку загрузок браузера, рис. 10:
Рис. 10 Скачивание результатов расчета#
При открытии скаченного файла .csv вы должны увидеть три столбца: t(время), sin(значения синуса), square(значения прямоугольного сигнала), рис. 11:
Рис. 11 Полученный .csv файл#
Для удобства чтения имени файла переименуем полученный CSV в resultsDecim1, рис. 12:
Рис. 12 Переименованный файл#
8. Блок «Импорт CSV» - чтение и воспроизведение сигналов#
Теперь загрузим сохранённые данные обратно в модель. Для этого из библиотеки Внешние модели добавим блок Импорт CSV. Автоматически откроется окно загрузки .csv файла (см. рис. 13 ниже), в которое необходимо загрузить последний экспортированный CSV.
Рис. 13 Импорт файла#
После успешной загрузки и инициализации нажимаем кнопку Добавить (см. рис. 14 ниже), чтобы блок появился на холсте, (см. рис. 15 ниже).
Рис. 14 Успешная загрузка .csv файла#
Рис. 15 Блок добавлен на схему#
9. Свойства блока «Импорт CSV»#
9.1. Настройка интерполяции#
Параметр Тип интерполяции определяет, как восстанавливаются значения между точками, сохранёнными в CSV:
Линейная- значения соединяются прямыми линиями. Используется по умолчанию. При достаточно малом шаге записи линейная интерполяция позволяет с высокой точностью восстановить исходный сигнал.Кривая(кубическая сплайн-интерполяция) - строит плавную кривую через все точки.
Примечание
Оставляем значение по умолчанию
9.2. Настройка экстраполяции#
Параметр Тип экстраполяции определяет поведение выхода, когда время моделирования выходит за пределы временного диапазона, указанного в CSV-файле (например, файл содержит данные до 1.25 [с], а расчёт идёт до 2 [с]):
Ближайшее значение- выход сохраняет последнее значение файла;Линейная- продолжает линию, построенную по последним двум точкам;Установить в ноль- за пределами файла выход становится равным 0;Без экстраполяции- блок создает ошибку, когда происходит расчет “дальше” последнего значения файла.
Примечание
Оставляем значение по умолчанию
10. Подключение и запуск#
Выберите выходные сигналы блока Импорт CSV для построения графиков во вкладке Визуализация. Запустите расчёт.
На графике (см. рис. 16 ниже) должны в точности повториться исходные сигналы: синусоида и прямоугольный импульс (если экспорт был с децимацией 1 и импорт с линейной интерполяцией).
Рис. 16 Значения сигналов блока#
Импортированные сигналы практически совпадают с исходными, рис. 17:
Рис. 17 Совмещенные графики#
11. Эксперименты с настройками#
Исследуем варианты настроек блока Импорт CSV на основе построенного синусоидального сигнала.
11.1. Влияние децимации при экспорте#
Повторно создадим .csv файл с другим коэффициентом децимации. Изменим в блоке Экспорт CSV коэффициент децимации на 100 (см. рис. 18 ниже), остальные свойства оставим по умолчанию. Запустим расчёт заново (источники должны быть подключены).
Рис. 18 Увеличение коэффициента децимации#
Скачайте и переименуйте CSV файл в resultsDecim100, рис. 19:
Рис. 19 Переименованный файл с увеличенным коэффициентом#
Далее загрузите в проект полученный .csv файл при помощи блока Импорт CSV. Добавьте метку для блока Децимация = 100 (см. рис. 20 ниже). Предыдущий блок Импорт CSV с Децимацией = 1 нам не понадобится для последующих опытов.
Рис. 20 Добавление метки блока#
Запустите на расчет и постройте график, совмещающий оригинальную синусоиду и импортированную .csv синусоиду (см. рис. 21 ниже).
Вы увидите ломаную линию, которая лишь приближённо повторяет синус, в частности в области амплитуды синусоиды.
Рис. 21 Сравнение графиков#
Вывод: увеличение коэффициента децимации уменьшает количество сохраняемых точек и снижает размер CSV-файла, однако приводит к потере точности восстановления сигнала. Для плавных сигналов это проявляется в виде ломаной формы графика, а для быстро меняющихся сигналов возможна существенная потеря информации.
11.2. Сравнение интерполяций#
В том же загруженном файле изменим Тип интерполяции на Кривая (см. рис. 22 ниже). Запустите расчёт.
Рис. 22 Изменение типа интерполяции#
Синусоида становится более гладкой, однако на прямоугольном сигнале появляются колебания возле разрывов сигнала, что искажает фронт сигнала, рис. 23:
Рис. 23 Результаты расчета при типе интерполяции Кривая#
Вывод: линейная интерполяция лучше подходит для сигналов с резкими изменениями и разрывами, поскольку не создаёт дополнительных колебаний между точками. Интерполяция типа Кривая обеспечивает более гладкое восстановление плавных сигналов, однако возле резких фронтов может вызывать выбросы и волнообразные искажения.
11.3. Экстраполяция#
Измените Время моделирования с 1.25 до 2 [с]. Установите тип интерполяции обратно Линейная. Далее последовательно выбирайте разные Типы экстраполяции:
Рис. 24 Результаты расчета при типе экстраполяции Ближайшее значение#
Рис. 25 Результаты расчета при типе экстраполяции Линейная#
Рис. 26 Результаты расчета при типе экстраполяции Установить в ноль#
Без экстраполяции– расчёт завершится ошибкой, поскольку блок не может вычислить значения за пределами диапазона данных, рис. 27:
Рис. 27 Результаты расчета при типе Без экстраполяции#
Вывод: тип экстраполяции определяет поведение блока Импорт CSV за пределами временного диапазона исходного файла. Выбор режима зависит от физического смысла сигнала: сохранение последнего значения удобно для стационарных процессов, линейная экстраполяция подходит для более “стабильных” сигналов, а режим без экстраполяции позволяет выявлять выход модели за допустимый диапазон данных.
12. Заключение#
В данном уроке рассмотрены:
Cохранение одного или нескольких сигналов в CSV с помощью блока Экспорт CSV;
Управление дискретизацией (децимация, период) и заголовками;
Загрузка данных из CSV через блок Импорт CSV;
Влияние интерполяции (линейная, кривая) на восстановленный сигнал;
Поведение экстраполяции за пределами временного диапазона.