Публичные методы программного управления Genie
| Пример создания простого приложения с помощью фреймворка Genie также представлен в Сообществе Engee. |
Здесь представлены все публичные методы программного управления genie для работы с фреймворком Genie. Для их использования в приложениях Genie, подключите библиотеку инструментов Engee с помощью команды using Engee внутри вашего кода (app.jl).
Методы genie
#
engee.genie.start — Function
EngeeDSP.modulate(x, fc, fs)
EngeeDSP.modulate(x, fc, fs, method)
EngeeDSP.modulate(x, fc, fs, method, opt)
Модуляция для моделирования систем связи.
Вызов функции
-
(y, t) = modulate(x, fc, fs, method, opt)— модулирует вещественный полезный сигналxс использованием несущей частотыfc, частоты дискретизацииfsи методаmethodс дополнительными параметрами, заданными вopt, и возвращает внутренний вектор времениt. -
(y, t) = modulate(x, fc, fs, method)— модулирует вещественный полезный сигналxс использованием несущей частотыfc, частоты дискретизацииfsи методаmethod. -
(y, t) = modulate(x, fc, fs)— модулирует вещественный полезный сигналxс использованием несущей частотыfcи частоты дискретизацииfs. Еслиxявляется матрицей, то модулированный сигнал вычисляется независимо для каждого столбца и сохраняется в соответствующем столбцеy.
Аргументы
Входные аргументы
-
x::AbstractVector{<:Real} | AbstractMatrix{<:Real}: полезный сигнал (вещественный вектор или матрица). Еслиx— матрица, модуляция выполняется независимо по каждому столбцу. -
fc::Real: несущая частота (вещественный положительный скаляр). -
fs::Real: частота дискретизации (вещественный положительный скаляр). -
method::String: метод модуляции. Возможные значения:"am"(по умолчанию),"amdsb-sc","amdsb-tc","amssb","fm","pm","pwm","ppm","qam".-
"am"или"amdsb-sc": амплитудная модуляция (две боковые полосы, подавленная несущая). Умножаетxна косинус с частотойfc.y = x .* cos(2*pi*fc*t) -
"amdsb-tc": амплитудная модуляция (две боковые полосы, передаваемая несущая). Вычитает скалярoptизxи умножает результат на косинус с частотойfc.y = (x - opt) .* cos(2*pi*fc*t)Если
optне задан, используется значение по умолчаниюmin(min(x)), чтобы(x - opt)был неотрицательным и имел минимальное значение0. -
"amssb": амплитудная модуляция (одиночная боковая полоса). Умножаетxна косинус с частотойfcи добавляет преобразование Гильбертаx, умноженное на синус с частотойfc.y = x .* cos(2*pi*fc*t) + imag(hilbert(x)) .* sin(2*pi*fc*t)Этот метод эффективно устраняет верхнюю боковую полосу частот.
-
"fm": частотная модуляция. Создает косинус с мгновенной частотой, которая изменяется в зависимости отx.y = cos(2*pi*fc*t + opt*cumsum(x))cumsum(x)— прямоугольная аппроксимация интеграла отx.optиспользуется как константа частотной модуляции. Еслиoptне задан, по умолчанию:opt = (fc/fs)*2*pi/(max(max(x))), поэтому максимальное отклонение частоты отfcбудетfcГц. -
"pm": фазовая модуляция. Создает косинус с частотойfc, фаза которого изменяется в зависимости отx.y = cos(2*pi*fc*t + opt*x)optиспользуется как константа фазовой модуляции. Еслиoptне задан, по умолчанию:opt = pi/(max(max(x))), поэтому максимальное отклонение фазы будетπрад. -
"pwm": широтно-импульсная модуляция. Создает ШИМ-сигнал на основе длин импульсов вx. Элементыxдолжны быть в диапазоне[0, 1]и задают длительность каждого импульса в долях периода. Импульсы начинаются в начале каждого периода несущей (выровнены по левому краю). При вызовеmodulate(x, fc, fs, "pwm", "centered")импульсы центрируются в начале каждого периода. Длина(y, t)равнаlength(x)*fs/fc. -
"ppm": позиционно-импульсная модуляция. Создает сигнал с ПИМ из позиций импульсов вx. Элементыxдолжны быть в диапазоне[0, 1]и задают левый край каждого импульса в долях периода.opt— скаляр от0до1, задающий длину каждого импульса в долях периода (по умолчанию0.1). Длина(y, t)равнаlength(x)*fs/fc. -
"qam": квадратурная амплитудная модуляция. Создает сигнал изxиopt.y = x .* cos(2*pi*fc*t) + opt .* sin(2*pi*fc*t)Входной аргумент
optдолжен быть той же размерности, что иx.
-
-
opt: дополнительные параметры для некоторых методов. Подробнее вmethod. Типы данных:Float32,Float64,Char,String. Поддержка комплексных чисел: да.
Выходные аргументы
-
y: модулированный полезный сигнал (вещественный вектор или матрица). Сигналyимеет ту же размерность, что иx, за исключением методовmethod:"pwm"и"ppm". -
t: внутренний вектор времени.
EngeeDSP.demod(y, fc, fs, method)
EngeeDSP.demod(y, fc, fs, method, opt)
Демодуляция для моделирования систем связи.
Вызов функции
-
x = demod(y, fc, fs, method, opt)— демодулирует вещественный полезный сигналyс использованием несущей частотыfc, частоты дискретизацииfsи методаmethodс дополнительными параметрами, заданными вopt. -
x = demod(y, fc, fs, method)— демодулирует вещественный полезный сигналyс использованием несущей частотыfc, частоты дискретизацииfsи методаmethod.
Аргументы
Входные аргументы
-
y::AbstractVector{<:Real} | AbstractMatrix{<:Real}: модулированный сигнал (вещественный вектор или матрица). Сигналyимеет ту же размерность, что иx, за исключением методовmethod:"pwm"и"pmm". -
fc::Real: несущая частота (вещественный положительный скаляр). -
fs::Real: частота дискретизации (вещественный положительный скаляр). -
method::String: метод модуляции. Возможные значения:"am"(по умолчанию),"amdsb-sc","amdsb-tc","amssb","fm","pm","pwm","pmm","qam".-
"am"или"amdsb-sc": амплитудная демодуляция (две боковые полосы, подавленная несущая). Умножаетyна косинус с частотойfcи применяет ФНЧ Баттерворта 5-го порядка с использованиемfiltfilt.x = y .* cos(2*pi*fc*t) b, a = butter(5, fc*2/fs) x = filtfilt(b, a, x) -
"amdsb-tc": амплитудная демодуляция (две боковые полосы, передаваемая несущая). Умножаетyна косинус с частотойfcи применяет ФНЧ Баттерворта 5-го порядка с использованиемfiltfilt. Если указанopt, то после фильтрации вычитает скалярoptизx(по умолчаниюopt = 0).x = y .* cos(2*pi*fc*t) b, a = butter(5, fc*2/fs) x = filtfilt(b, a, x) # при наличии opt: x = x .- opt -
"amssb": амплитудная демодуляция (SSB). Умножаетyна косинус с частотойfcи применяет ФНЧ Баттерворта 5-го порядка с использованиемfiltfilt.x = y .* cos(2*pi*fc*t) b, a = butter(5, fc*2/fs) x = filtfilt(b, a, x) -
"fm": частотная демодуляция. Демодулирует ЧМ-сигнал путём модуляции преобразования Гильбертаyкомплексной экспонентой частоты-fcГц и получает в результате мгновенную частоту. -
"pm": фазовая демодуляция. Демодулирует ФМ-сигнал путём модуляции преобразования Гильбертаyкомплексной экспонентой частоты-fcГц и получает в результате мгновенную фазу. -
"pwm": широтно-импульсная демодуляция. Определяет ширину импульсов ШИМ-сигналаyи возвращает векторx, элементы которого задают длительность каждого импульса в долях периода. Импульсы вyдолжны начинаться с начала каждого периода несущей (выровнены по левому краю). При модуляцииmodulate(x, fc, fs, "pwm", "centered")получаются импульсы, центрированные в начале каждого периода. Длинаyравнаlength(x)*fs/fc. -
"pmm": позиционно-импульсная демодуляция. Определяет положения импульсов в сигналеy. Для правильной демодуляции импульсы не должны перекрываться. Длинаxравнаlength(t)*fc/fs. -
"qam": квадратурная амплитудная демодуляция. Вызовdemod(y, fc, fs, "qam")возвращает два сигнала(x1, x2): умножаетyна косинус и синус с частотойfcи применяет ФНЧ Баттерворта 5-го порядка, используяfiltfilt.x1 = y .* cos(2*pi*fc*t) x2 = y .* sin(2*pi*fc*t) b, a = butter(5, fc*2/fs) x1 = filtfilt(b, a, x1) x2 = filtfilt(b, a, x2)
-
-
opt: дополнительные параметры для некоторых методов. Подробнее вmethod. Типы данных:Float32,Float64,Char,String. Поддержка комплексных чисел: да.
Выходные аргументы
-
x: демодулированный полезный сигнал (вещественный вектор или матрица). Для метода"qam"возвращаются два сигнала:(x1, x2).
EngeeDSP.square(t)
EngeeDSP.square(t, duty)
Прямоугольный сигнал.
Вызов функции
-
x = square(t)— генерирует прямоугольный сигнал с периодом2πдля элементов массива времениt. Функцияsquareпохожа на синус, но создает прямоугольный сигнал со значениями-1и1. -
x = square(t, duty)— генерирует прямоугольный сигнал с заданным коэффициентом заполненияduty. Коэффициент заполнения — это процент от периода сигнала, в течение которого прямоугольный сигнал положителен.
Аргументы
Входные аргументы
-
t::AbstractArray{<:Real}: массив времени (вектор, матрица или N-мерный массив). Функцияsquareработает с первым измерением массиваt, размер которого больше1. Типы данных:Float32,Float64. -
duty::Real: коэффициент заполнения (по умолчанию50). Вещественный скаляр от0до100. Типы данных:Float32,Float64.
Выходные аргументы
-
x: прямоугольный сигнал, возвращаемый в виде вектора, матрицы или N-мерного массива.
engee.genie.start(app_path::String; devel::Bool=false, log_file::String="", open_url::Bool=false)
Запускает приложение Genie по указанному пути.
После запуска функция возвращает GenieApplicationStatus, в котором доступна ссылка на приложение (также выводится в консоль в виде ... at 'https://.../genie/<AppName>/'). Ссылку можно открыть в новой вкладке/окне или скопировать для открытия вручную.
Перед использованием команды engee.genie.start убедитесь, что если приложение представляет собой директорию, то в ней есть файл с кодом приложения и расширением .jl. Также удалите файлы config и *.toml (если они присутствуют).
Аргументы
-
app_path::String: путь до директории приложения. Может быть относительным или абсолютным. -
devel::Bool=false: параметр для включения режима разработки, при котором изменения в коде применяются без перезапуска приложения. -
log_file::String="": параметр для указания пути к файлу логов. Если не задан, то логи не сохраняются отдельно. -
open_url::Bool=false: еслиtrue, то Engee автоматически откроет URL приложения в браузере (ссылка также доступна в возвращаемом статусе).
Примеры
# Запуск Genie через файл приложения app.jl, без режима разработки и сохранения логов
engee.genie.start("/user/app.jl")
# Запуск Genie через файл приложения app.jl, с режимом разработки и сохранением логов
engee.genie.start("/user/app.jl", devel=true, log_file="/user/logs.txt")
# Запуск и автоматическое открытие приложения в браузере
engee.genie.start("RadarCalculate", open_url=true)
#
engee.genie.stop — Function
engee.genie.stop(app_path::String)
Останавливает запущенное приложение Genie.
Аргументы
app_path::String: путь до директории приложения. Может быть относительным или абсолютным.
Примеры
# Остановка приложения по абсолютному пути
engee.genie.stop("/user/app.jl")
# Остановка приложения по относительному пути
engee.genie.stop("app.jl")
#
engee.genie.list — Function
engee.genie.list()
Выводит список всех запущенных приложений Genie.
Примеры
engee.genie.list()
#
engee.genie.eval — Function
engee.genie.eval(code::AbstractString)
Выполняет указанный код в рабочем пространстве Engee вне контекста запущенного приложения Genie. Используется для запуска отдельных выражений, отладки или динамического выполнения кода без необходимости перезапуска приложения.
Аргументы
code::AbstractString: строка с кодом на Julia, который будет выполнен в рабочем пространстве Engee.
Примеры
engee.genie.eval("x = 5")
#
engee.genie.recv — Function
engee.genie.recv(wsVarName::AbstractString; context::Module=GenieAPI )
Возвращает значение переменной из указанного контекста (модуля) в рабочем пространстве Engee во время выполнения приложения Genie.
По умолчанию переменная ищется в модуле GenieAPI, но при необходимости можно явно указать другой модуль через параметр context. Так, если переменная определена в другом модуле, то используется параметр context, указывающий, в каком пространстве имен ее искать.
Аргументы
-
wsVarName::AbstractString: имя переменной, значение которой нужно получить. -
context::Module=GenieAPI: модуль, в котором производится поиск переменной. Указывается явно, если переменная не принадлежит модулюGenieAPI.
Примеры
# Получение значения переменной x из модуля Main
engee.genie.recv("x", Main)
# Получение значения переменной a из модуля по умолчанию
engee.genie.recv("a")
# Получение значения переменной value из пользовательского модуля
engee.genie.recv("value"; context=MyModule)
#
engee.genie.send — Function
engee.genie.send(wsVarName::AbstractString, value::Any)
Сохраняет значение value в переменную wsVarName в рабочем пространстве Engee во время выполнения приложения на Genie.
Если переменная с таким именем ранее не существовала, то она будет создана автоматически. Функция удобна для передачи промежуточных результатов или пользовательских данных из приложения Genie в сессию Engee.
Аргументы
-
wsVarName::AbstractString: имя переменной, которой присваивается значение. -
value::Any: значение, которое будет сохранено в переменной. Может быть любого типа.
Примеры
# Присвоение переменной x значение 124
engee.genie.send("x", 124)
# Сохранение строки в переменной message
engee.genie.send("message", "Hello")