Модуль генератора сигналов

Модуль предназначен для моделирования потоков сигналов, изменяющихся в реальном времени.

Исходный код модуля

Типы данных

Как и в случае с конструктором, конфигурация генератора сигналов определяется форматом представления данных.

Для каждого формата представления данных существует отдельная конфигурация генератора сигналов.

Формат данных Конфигурация генератора сигналов
Raw (сырые) ContinuousRawSignalGenerator, ContinuousGeneratorSettingsParser
Prepared (подготовленные) ContinuousPreparedGeneratorSettingsParser, ContinuousPreparedSignalGenerator

Для каждого формата данных требуется соответсвующий распаковщик:

Формат данных Конфигурация распаковщика
Raw (сырые) JagmVisScreenDataParser
Prepared (подготовленные) JagmPreparedVisScreenDataParser
  1. Пример генератора сигналов сырых данных
  2. Пример генератора сигналов подготовленных данных

Установка

Модуль подключается как 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
Ссылка на ресурс