Модуль генератора сигналов
Модуль предназначен для моделирования потоков сигналов, изменяющихся в реальном времени.
Исходный код модуля
Типы данных
Как и в случае с конструктором, конфигурация генератора сигналов определяется форматом представления данных.
Для каждого формата представления данных существует отдельная конфигурация генератора сигналов.
| Формат данных | Конфигурация генератора сигналов |
|---|---|
| Raw (сырые) | ContinuousRawSignalGenerator, ContinuousGeneratorSettingsParser |
| Prepared (подготовленные) | ContinuousPreparedGeneratorSettingsParser, ContinuousPreparedSignalGenerator |
Для каждого формата данных требуется соответсвующий распаковщик:
| Формат данных | Конфигурация распаковщика |
|---|---|
| Raw (сырые) | JagmVisScreenDataParser |
| Prepared (подготовленные) | JagmPreparedVisScreenDataParser |
Установка
Модуль подключается как git submodule. Рекомендуется размещать его в директории src/submodules.
$ git submodule add git@github.com:IncartDev/signal-generator-js.git
Файл конфигурации
Работа генератора настраивается с помощью конфигурационного файла формата .json.
{
"pointBlockSize": 40,
"freq": 1000,
"frames":[
{
"channels":[]
}
]
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
pointBlockSize |
int | ОБЯЗАТЕЛЬНОЕ | Количество точек в блоке, передающихся графическому полотну для отрисовки. Обычно указывается равным 40. |
freq |
int | ОБЯЗАТЕЛЬНОЕ | Частота генерации точек, обычно 1000 Гц. |
frames |
Array<object> | ОБЯЗАТЕЛЬНОЕ | Список кадров, содержащих каналы сигналов. |
Свойство channel
channel задаёт параметры набора сигналов:
{
"channels": [
{
"id": 0,
"name": "ecg",
"freq": 1000,
"currVariant": "12x10",
"variants": [
{
"name": "12x10",
...
}
],
"pointCounterMaxValue": 65535
}
]
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
id |
int | ОБЯЗАТЕЛЬНОЕ | Уникальный идентификатор канала. |
name |
string | ОБЯЗАТЕЛЬНОЕ | Уникальное имя канала. Используется для привязки канала к каналу графического полотна. |
freq |
int | ОБЯЗАТЕЛЬНОЕ | Частота сигнала, обычно 1000 Гц. |
unitsYtoMmConvertKoef |
int | 1 | Коэффициент преобразования значений сигнала по оси Y в миллиметры. Может быть указан для ContinuousPreparedSignalGenerator. |
currVariant |
string | ОБЯЗАТЕЛЬНОЕ | Название активной конфигурации сигнала из списка variants. |
variants |
Array<object> | ОБЯЗАТЕЛЬНОЕ | Список конфигураций сигналов. |
pointCounterMaxValue |
int | 65535 | Максимальное значение счётчика в сгенерированном кадре. Используется для эмуляции работы различных поколений приборов. |
Свойство variants
variants описывает конкретные наборы сигналов внутри канала.
{
"variants": [
{ "name": "3x5", "signals": [] }
]
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
name |
string | ОБЯЗАТЕЛЬНОЕ | Уникальное название конфигурации. |
signals |
Array<object> | ОБЯЗАТЕЛЬНОЕ | Список сигналов в данной конфигурации. |
Свойство signals
signals описывает количестов и параметры генерируемых сигналов внутри канала.
{
"signals": [
{ "id": 0,"type": "sin", "period": 200, "ampl": 500, "shift": 0 },
{ "id": 1, "type": "rect", "period": 200, "ampl": 500, "shift": 0 }
]
}
| Название | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
id |
int | ОБЯЗАТЕЛЬНОЕ | Уникальный идентификатор сигнала. |
type |
string | ОБЯЗАТЕЛЬНОЕ | Тип сигнала: sin (синусоида) или rect (меандр). |
perion |
int | ОБЯЗАТЕЛЬНОЕ | Период сигнала в миллисекундах. |
ampl |
int | ОБЯЗАТЕЛЬНОЕ | Амплитуда сигнала в единицах АЦП. |
shift |
int | ОБЯЗАТЕЛЬНОЕ | Cмещение по оси y. |
signalShift |
boolean | true | Фазовый сдвиг. Для каждого сигнала рассчитывается относительно его порядкового номера. |
Пример полной конфигурации
Подключение генератора сигналов
Инициализацию генератора рекомендуется выполнять в файле инициализации графического полотна:
import { JagmRawVisScreenDataParser } from "@incartdev/jagm-chart";
import { ContinuousGeneratorSettingsParser, ContinuousRawSignalGenerator } from "@incartdev/signal-generator-js";
import signalGeneratorSettings from "./SignalGeneratorSettings.json";
// Создание экземпляра класса генератора сигналов
const generator = new ContinuousRawSignalGenerator();
// Преобразование настроек
const generatorSettings = ContinuousGeneratorSettingsParser.parse(signalGeneratorSettings);
if (generatorSettings === undefined) {
return;
}
// Инициализациия генератора сигналов
generator.init(generatorSettings);
// Подписка на поступление данных сигналов
generator.addListener(async message => {
// Преобразование сгенерированных данных
const typedMessage = JagmRawVisScreenDataParser.parse(message);
if (typedMessage === undefined) {
return;
}
// Отрисовка данных сигнаов на графике
await chartProvider.pushVisMessage(typedMessage);
});
// Запуск генератора сигнала
generator.start();
API
| Свойство | Тип | Описание |
|---|---|---|
getChannelPointCounter(frameIndex: int, channelIndex: int) |
Функция | Возаращает количесто сгенерировнных точек опр. канала, где frameIndex — индекс кадра, а channelIndex — индекс канала в кадре. |
start() |
Функция | Запуск генерации сигналов. |
stop() |
Функция | Завершение генерации сигналов. |
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс