AnyMath 文档

精灵的公共软件管理方法

使用Genie框架创建简单应用程序的示例也在 社区AnyMath

这里介绍了所有公共的项目管理方法。 精灵 使用框架 精灵。 要在Genie应用程序中使用它们,请使用以下命令连接 AnyMath 工具库 使用AnyMath 在你的代码(应用程序。jl)。

方法 精灵

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,然后过滤后它减去标量 optx (默认情况下 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 频率的复数指数 -fc Hz并作为结果得到瞬时频率。

  • "pm" 相位解调。 通过调制希尔伯特变换解调FM信号 y 频率的复数指数 -fc Hz并作为结果得到瞬时相位。

  • "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) -产生具有周期的矩形信号 对于时间数组元素 t. 功能 square 它类似于正弦,但它创建了一个带有值的矩形信号 -11. - 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(app_path::String)

停止正在运行的精灵应用程序。

参数

app_path::String:应用程序目录的路径。 它可以是相对的或绝对的。

例子

# 在绝对路径上停止应用程序
engee.genie.stop("/user/app.jl")

# 按相对路径停止应用程序
engee.genie.stop("app.jl")
engee.genie.list()

显示所有正在运行的精灵应用程序的列表。

例子

engee.genie.list()
engee.genie.eval(code::AbstractString)

在正在运行的Genie应用程序的上下文之外的Engee工作区中执行指定的代码。 它用于运行单个表达式、调试或动态执行代码,而无需重新启动应用程序。

参数

code::AbstractString:将在Engee工作区中执行的带有Julia代码的行。

例子

engee.genie.eval("x = 5")
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(wsVarName::AbstractString, value::Any)

保存值 value 到一个变量 wsVarNameEngee工作区中,当应用程序在Genie上运行时。

如果以前不存在具有此名称的变量,则会自动创建该变量。 该功能便于将中间结果或用户数据从Genie应用程序传输到Engee会话。

参数

  • wsVarName::AbstractString:为其分配值的变量的名称。

  • value::Any:将存储在变量中的值。 它可以是任何类型。

例子

# 将值124赋给变量x
engee.genie.send("x", 124)

# 在消息变量中保存字符串
engee.genie.send("message", "Hello")