Engee 系统对象
本文介绍了在*Engee*中处理系统对象的一般方法。如需特定系统对象的帮助,请访问命令行 of *Engee*![]() |
系统对象*是*Engee*建模环境中的一个对象,有助于建立动态系统模型。系统对象对信号处理、通信、雷达和控制应用特别有用。在 Engee 中创建动态系统时,系统对象通过提供创建、定制和使用组件的简单方法,提供了模块化和便利性。
系统对象的使用允许使用面向对象编程(OOP)原则对现实世界的对象进行建模。这提供了从工程概念到软件模型的平滑过渡,从而可以按照经典编程方法更有效地组织对象工作。
系统对象的创建和使用分为四个阶段:
-
创建组件 - 第一阶段包括初始化代表所需系统组件的系统对象。这些对象可以模拟信号发生器、发射器、接收器和其他设备。例如,使用 "EngeePhase.RectangularWaveform() "类创建 "波形 "对象,以表示矩形脉冲发生器。在这一阶段,为未来的组件创建了空白,但还没有进行详细的定制;
-
组件配置 - 创建对象后,将对其进行配置,设置决定组件行为的关键参数。这可能包括脉冲重复率、信号功率、采样率和其他重要特性;
-
将组件组装到系统中 - 在这一阶段,配置好的组件被组装到一个单一系统中,在该系统中,这些组件可以相互交互以创建数据流。通过这种组装,您可以组织组件之间的信号传输和处理,反映系统运行时的物理过程;
-
系统启动 - 组件组装完成后,系统就可以开始运行了。在此阶段,将执行所有必要的计算和信号处理。
基于系统对象启动雷达系统的示例(更多详情请参见 ''''')。 基于系统对象创建系统的各个阶段):
# Создание генератора сигнала (первый этап)
waveform = EngeePhased.RectangularWaveform()
# Настройка генератора сигнала (второй этап)
waveform.PulseWidth = 100e-6; # Длительность импульса, 1 микросекунда
waveform.PRF = 1e3; # Частота повторения импульсов, 1 кГц
waveform.SampleRate = 1e6; # Частота дискретизации, 1 МГц
# Создание и настройка передатчика (1 и 2 этапы вместе, альтернативный вариант)
transmitter = EngeePhased.Transmitter(
PeakPower = 50, # Пиковая мощность, 50 Вт
Gain = 40, # Усиление, 40 дБ
);
# Создание и настройка приемника (1 и 2 этапы вместе, альтернативный вариант)
receiver = EngeePhased.ReceiverPreamp(
SampleRate = 1e6, # Частота дискретизации, 1 МГц
NoiseFigure = 5, # Коэффициент шума, 5 дБ
NoiseMethod = "Noise power", # Способ задания шума, мощность
NoisePower = 50000, # Мощность шума
);
# Все предыдущие этапы формируют 3 пункт – сбор компонентов в систему, отражающую реальные физические процессы
# Запуск системы (4 этап)
signal = step!(waveform); # Генерация очередного импульса
transmitted = transmitter(signal); # Передача сигнала
received = receiver(transmitted); # Прием сигнала с добавлением шумов
# (Опционально) Построение графиков сигналов
plot(abs.(signal), title="Переданный сигнал", label = false) |> display
plot(abs.(received), title="Принятый сигнал", label = false)
当系统对象被调用时,将进行数据处理、初始化和状态管理,从而简化复杂动态系统的建模。在这类系统中,输出数据不仅取决于当前的输入值,还取决于系统之前的状态。系统对象会存储之前的状态,以便在下一步计算中使用。
基于系统对象创建系统的各个阶段
在 Engee 中使用系统对象涉及几个基本步骤,这些步骤有助于将代码组织成一个逻辑结构,代表物理过程。让我们以创建一个简单的 TFodeposition 雷达系统为例,说明系统对象是如何创建和使用的。
创建组件
第一步是创建代表系统组件的基本对象。使用内置的 Engee 系统类创建组件,这些类代表各种功能元素,如信号发生器、发射器和接收器。
要查看配置组件的所有可用参数,请创建组件(执行代码)并在变量窗口 将鼠标光标悬停在相应组件上:
创建矩形脉冲发生器的示例:
waveform = EngeePhased.RectangularWaveform()
这里的 EngeePhased.RectangularWaveform
是一个表示矩形脉冲发生器的类。波形 "对象将是生成通过系统发送的信号的基础。在此阶段,只创建对象本身,而不指定参数,以便日后定制。或者,也可以同时创建和配置组件(详见下文)。
自定义组件
创建组件后,需要对其参数进行设置,使其符合模型的要求。自定义有两种方式:创建对象时或创建后更改属性:
-
在创建组件时进行自定义:
waveform = EngeePhased.RectangularWaveform( PulseWidth = 100e-6, PRF = 1e3, SampleRate = 1e6, );
-
创建后通过对象属性进行自定义
waveform = EngeePhased.RectangularWaveform() waveform.PulseWidth = 100e-6; waveform.PRF = 1e3; waveform.SampleRate = 1e6;
此处
-
PulseWidth` 是脉冲宽度。此处设置为 1 微秒。
-
PRF
- 脉冲重复频率,决定脉冲产生的频率。设置为1
kHz。 -
SampleRate
- 采样率,决定系统处理数据的速度。设置为1
MHz。
组装系统所需的其他组件也以类似方式配置:
# Создание и настройка передатчика
transmitter = EngeePhased.Transmitter(
PeakPower = 50, # Пиковая мощность, 50 Вт
Gain = 40 # Усиление, 40 дБ
);
# Создание и настройка приемника
receiver = EngeePhased.ReceiverPreamp(
SampleRate = 1e6, # Частота дискретизации, 1 МГц
NoiseFigure = 5, # Коэффициент шума, 5 дБ
NoiseMethod = "Noise power", # Способ задания шума, мощность
NoisePower = 50000 # Мощность шума
);
将组件组装成系统
在这一阶段,所有必要的组件都已创建和配置完毕,但它们之间的交互作用尚未确定。系统组件包括准备好的对象,这些对象将代表实际信号传输和接收过程中的元素,但它们之间的数据流尚未组织起来。
在上述代码中,创建并配置了系统组件:信号发生器、发射器和接收器。这些对象将成为进一步建模的基础,但目前它们仍是孤立的—组件之间真正的交互和数据传输将在下一阶段实现。
# Создание и настройка генератора сигнала
waveform = EngeePhased.RectangularWaveform()
waveform.PulseWidth = 100e-6 # Длительность импульса, 1 микросекунда
waveform.PRF = 1e3 # Частота повторения импульсов, 1 кГц
waveform.SampleRate = 1e6 # Частота дискретизации, 1 МГц
# Создание и настройка передатчика
transmitter = EngeePhased.Transmitter(
PeakPower = 50, # Пиковая мощность, 50 Вт
Gain = 40 # Усиление, 40 дБ
)
# Создание и настройка приемника
receiver = EngeePhased.ReceiverPreamp(
SampleRate = 1e6, # Частота дискретизации, 1 МГц
NoiseFigure = 5, # Коэффициент шума, 5 дБ
NoiseMethod = "Noise power", # Способ задания шума, мощность
NoisePower = 50000 # Мощность шума
)
因此,在装配阶段,创建一个处理信号的系统所需的所有组件都已准备就绪。
启动系统
在创建和配置好所有组件后,就可以通过组织组件间的数据传输将它们组合成一个系统。在这一步骤中,一个组件的输出变为另一个组件的输入,模拟信号传输和接收的真实过程:
signal = step!(waveform);
transmitted = transmitter(signal);
received = receiver(transmitted);
描述数据传输过程:
-
信号产生 - `波形`对象产生一个矩形脉冲;
-
信号传输 - `发射器`对象放大信号并进行传输。PeakPower "参数设置发射器的峰值功率,"Gain "参数设置增益;
-
接收信号 - `接收器`对象接收信号并使用指定参数添加噪声。NoiseFigure "指定噪声电平,"NoiseMethod "表示使用基于功率的噪声添加方法,"NoisePower "指定噪声功率。
这一步完成了系统构建过程,可以开始建立信号传输和接收模型,并将噪声和其他特性考虑在内。
可视化(可选步骤)
在这一可选阶段,您可以对系统启动后获得的结果进行可视化。该阶段有助于分析系统的行为以及经过噪声和放大后的接收信号质量。在此示例中,绘制了评估发射和接收信号的图表:
plot(abs.(signal), title="Переданный сигнал", label = false) |> display
plot(abs.(received), title="Принятый сигнал", label = false)
在这里,abs.(signal)
和 abs.(received)`对阵列的每个元素应用`abs`函数,以获得信号的振幅。`plot
函数用于绘制图表,直观地比较信号通过发射器和接收器后的变化情况。
根据所提供的图表:
-
上图显示的是发射的矩形信号,开始时振幅约为 "1",然后迅速降至零。这是一个典型的脉冲信号,与发射机指定的矩形波参数相对应。
-
下图显示的是包含噪声成分的接收信号。从图中可以看出,信号开始时(大约 250 个采样点)有一个明显的振幅,然后逐渐减小并变得更加嘈杂。这是接收信号的特征,由于噪声和信号衰减的影响,信号振幅减小,基本信息变得不那么明显。
这些图表表明,基于系统对象的系统在模拟雷达信号方面成功地实现了其功能。系统对象允许在块级实现主要阶段—生成、传输、接收和噪声添加,而无需通过 Engee 库块深入研究建模细节。
系统对象的一般方法
在 Engee 中,系统对象提供了许多常用方法,可简化其行为的管理和配置。下面将逐一介绍。
步骤!
step!"方法运行与系统对象相关的基本逻辑或算法。它用于根据对象的当前状态执行计算或数据处理。例如,在雷达系统中,调用信号发生器的 `step!
# Генерация импульса
signal = step!(waveform)
# Передача и прием сигнала
transmitted = step!(transmitter, signal)
received = step!(receiver, transmitted)
在这里,"step!"方法按顺序启动每个组件:信号发生器(波形)、发射器(发射机)和接收器(接收机),确保信号通过整个系统。每次调用 step!
方法都会执行一次迭代数据处理。
释放!
系统对象配置和使用后,其某些属性可能会被锁定。如果要重新配置对象的参数,可以使用 release!
方法解锁对象并更改其属性。当您需要更改已配置的对象(例如更改发射机功率或振荡器频率)而不创建新对象时,该方法非常有用。使用 "release!"可以释放对象,使其参数有新的值。例如
release!(waveform) # Разрешаем изменения в объекте генератора сигнала
waveform.SampleRate = 2e6 # Изменение частоты дискретизации на 2 МГц
release!(transmitter) # Разрешаем изменения в объекте передатчика
transmitter.Gain = 45 # Изменение усиления на 45 дБ
在本例中,"release!"方法允许您更改现有的 "波形 "和 "发射机 "对象,而无需再次创建它们。如果需要根据不同的运行环境调整系统参数,这种方法非常有用。
设置!
setup!` 方法执行系统对象初始设置所需的一次性操作。它为对象的运行做好准备,例如检查指定参数的正确性并分配必要的资源。
当首次运行 step!
时,会自动调用 setup!
方法,但也可以手动调用该方法来提前检查对象的准备情况,并确保其设置正确无误。
该方法在模型准备阶段非常有用,因为在主要处理开始之前,必须确保所有对象都已正确配置。例如
setup!(waveform)
默认情况下,"setup!"方法不能对 "waveform "对象(上例)执行任何更改。要更改对象的特性,必须先调用 因此,您必须先解锁对象以便进行更改,然后再调用
|