AnyMath 文档
Notebook

使用精灵应用程序建模Lissajous数字

导言

Lissajous数字表示当两个相互垂直的谐波加在一起时发生的闭合轨迹。 法国物理学家Jules Antoine Lissajous于1855年在波过程实验中首次描述了它们。

在数学上,这些曲线由参数方程描述:

哪里 -频率, -相移, -振幅。 在我们的例子中 .

形状配置由频率比决定 和相位差 . 在合理的频率比下,轨迹被证明是闭合的,呈现出一种特征形状—从直线段和椭圆到复杂的多瓣结构。 该特性用于测量技术,以比较电信号的频率和相移。

所提出的应用程序实现了连接到两个谐波信号发生器的双通道示波器的计算模型。 通过交互式滑块改变参数a,b和φ,您可以实时观察所得曲线的变换,这使您可以跟踪轨迹形状对信号输入参数的分析依赖性。

应用程序脚本

考虑应用程序脚本lissajous。jl.

using GenieFramework, Stipple, PlotlyBase
@genietools
@app begin
    @in a = 1.0
    @in b = 1.0
    @in φ = 0.0
    @out график = PlotlyBase.Plot(PlotlyBase.scatter(x=[0], y=[0], line=PlotlyBase.attr(color="blue")))
    @out layout = PlotlyBase.Layout(
        title = "Фигуры Лиссажу",
        xaxis = PlotlyBase.attr(title="x", showgrid=true),
        yaxis = PlotlyBase.attr(title="y", showgrid=true),
        width = 800, 
        height = 550)
    @onchange a, b, φ begin
        t = collect(-100.0:0.01:100.0)
        new_plot = PlotlyBase.Plot(PlotlyBase.scatter(
            x = sin.(a[] * t .+ φ[]), 
            y = sin.(b[] * t),
            line = PlotlyBase.attr(color="blue", width=2),
            mode = "lines",
            name = "Фигуры Лиссажу"))
        график = new_plot
    end
end

function ui()
    row([
        column([
            h6("x = sin({{a}}t + {{φ}})", style="margin-bottom: -10px"),
            slider(0.0:0.1:9, :a, color="purple", style="margin-bottom: 20px; width: 100%;"),
            h6("y = sin({{b}}t)", style="margin-bottom: -10px"), 
            slider(0.0:0.1:9, :b, color="orange", style="margin-bottom: 20px; width: 100%;"),
            h6("φ = {{φ}}", style="margin-bottom: -10px"),  
            slider(-2π:0.01:2π, :φ, color="green", style="margin-bottom: 20px; width: 100%;"),
        ], style="width: 30%; padding: 20px;"),
        column([
            plotly(:график, layout=:layout)
        ], style="width: 70%; padding: 20px; background-color: #f9f9f9; border-radius: 10px;")
    ])
end
@page("/", ui)

启动应用程序

让我们在这个交互式脚本中启动应用程序。

In [ ]:
genie_app = engee.genie.start("$(@__DIR__)/lissajous.jl")
display(MIME("text/html"), """<iframe src="$(string(genie_app.url))" width="1280" height="800" style="border: none;"></iframe>""";)
image.png

此应用程序是两个信号发生器和示波器的数字模型。 通过移动滑块,您可以控制输入信号的参数。:

*应用于输入X(水平扫描)的信号的频率。
*应用于输入Y(垂直扫描)的信号的频率。
*这些信号之间的相移。

观看频率和相位差比的变化瞬间转换屏幕上的图像-从简单的线和圆到复杂的闭合曲线。

为方便起见,您可以在新选项卡中打开应用程序。

In [ ]:
display("text/html", """<a href="$(string(genie_app.url))" target="_blank">在新标签页中打开</a>""")

完成应用程序的工作后,我们将关闭它。

In [ ]:
engee.genie.stop("$(@__DIR__)/lissajous.jl");

结论

这个应用程序是一个数字孪生实验室设置与两个信号发生器和一个示波器。 这种类型的虚拟实验室工作可以从世界任何地方访问,不需要物理设备,并提供结果的即时可视化。 通过模拟频率和相移,用户通过实验研究Lissajous数字形状对信号参数的依赖性。 该应用程序可以作为放射性物理学和电气工程的教科书,它也将有助于研究频率比较方法,Engee和Genie的结合为创建补充传统实验室基础的交互式教育材