精灵的公共软件管理方法
方法 精灵
#
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: внутренний вектор времени.
工程师。demod(y,fc,fs,方法)
工程师。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(2pifct) b,a=黄油(5,fc*2/fs) x=filtfilt(b,a,x)
` -
"amdsb-tc"幅度解调(两个边带,发射载波)。 乘数y每余弦与频率fc并应用5阶的巴特沃斯低通滤波器使用filtfilt. 如果指定opt,然后过滤后它减去标量opt从x(默认情况下opt = 0).
"'朱莉娅 x=y。cos(2pifct)
-
b,a=黄油(5,fc*2/fs) x=filtfilt(b,a,x)
如果有选择:x=x。-选择
- `"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":频率解调。 通过调制希尔伯特变换解调FM信号y频率的复数指数-fcHz并作为结果得到瞬时频率。 -
"pm"相位解调。 通过调制希尔伯特变换解调FM信号y频率的复数指数-fcHz并作为结果得到瞬时相位。 -
"pwm"脉宽解调。 确定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).
julia 工程师。正方形(t) 工程师。广场(t,职责)
个矩形信号。
# 函数调用
- 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维数组返回的矩形信号。
julia 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. 也删除配置和*。toml文件(如果有的话)。
# 参数
- app_path::String:应用程序目录的路径。 它可以是相对的或绝对的。
- devel::Bool=false:用于启用开发模式的参数,其中应用对代码的更改而不重新启动应用程序。
- log_file::String="":用于指定日志文件路径的参数。 如果未指定,则不会单独保存日志。
- open_url::Bool=false:如果 true 然后Engee将自动在浏览器中打开应用程序URL(链接在返回的状态中也可用)。
# 例子
julia-repl
*通过应用程序启动精灵。jl应用程序文件,没有开发模式和保存日志*
engee.genie.start("/user/app.jl")
*通过应用程序文件启动精灵。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)
停止正在运行的精灵应用程序。
参数
app_path::String:应用程序目录的路径。 它可以是相对的或绝对的。
例子
# 在绝对路径上停止应用程序
engee.genie.stop("/user/app.jl")
# 按相对路径停止应用程序
engee.genie.stop("app.jl")
#
engee.genie.eval — Function
engee.genie.eval(code::AbstractString)
在正在运行的Genie应用程序的上下文之外的Engee工作区中执行指定的代码。 它用于运行单个表达式、调试或动态执行代码,而无需重新启动应用程序。
参数
code::AbstractString:将在Engee工作区中执行的带有Julia代码的行。
例子
engee.genie.eval("x = 5")
#
engee.genie.recv — Function
engee.genie.recv(wsVarName::AbstractString; context::Module=GenieAPI )
在Genie应用程序执行期间,从Engee工作区中的指定上下文(模块)返回变量的值。
默认情况下,在模块中搜索变量 GenieAPI,但如果需要,您可以通过参数显式指定另一个模块 context. 因此,如果变量在另一个模块中定义,则使用该参数。 context,指示在哪个命名空间中搜索它。
参数
-
wsVarName::AbstractString:要获取其值的变量的名称。 -
context::Module=GenieAPI:在其中搜索变量的模块。 如果变量不属于模块,则显式指定。GenieAPI.
例子
# 从主模块获取变量x的值
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:将存储在变量中的值。 它可以是任何类型。
例子
# 将值124赋给变量x
engee.genie.send("x", 124)
# 在消息变量中保存字符串
engee.genie.send("message", "Hello")