Engee 文档
Notebook

系统频率响应的确定

在这个例子中,我们将分析使用频谱分析来确定未知离散系统的频率响应。

最简单的方法是
以将平坦频谱信号施加到输入。 在这种情况下,输出信号的频谱将
为系统的频率响应。

有两种方法可以获得平坦频谱信号:使用白噪声或脉冲信号。

在此示例中,使用随机源来产生白噪声。 下面的图片显示了我们的模型。

模型的顶层。
image.png

特性未知的子系统。

image_2.png

接下来,我们将声明一个用于启动模型的辅助函数。

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
    
    Path = (@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    sleep(5)
    return model_output
end
Out[0]:
run_model (generic function with 1 method)

让我们运行模型并分析记录的数据。

In [ ]:
run_model("freqrespLTI") # Запуск модели.

inp = collect(inp);
inp = inp.value;
out = collect(out);
out = out.value;
Building...
Progress 0%
Progress 6%
Progress 11%
Progress 17%
Progress 23%
Progress 35%
Progress 42%
Progress 51%
Progress 67%
Progress 81%
Progress 87%
Progress 95%
Progress 100%
Progress 100%

让我们为输入和输出值构造一个频谱。

In [ ]:
using FFTW
fs = 100
gr()
plot(fftfreq(length(inp[1:2000]), fs), abs.(fft(inp[1:2000])./length(inp[1:2000])), 
        xguide="Frequency  / Hz", yguide="Magnitude")
plot!(fftfreq(length(out[1:2000]), fs), abs.(fft(out[1:2000])./length(out[1:2000])), 
        xguide="Frequency  / Hz", yguide="Magnitude")
Out[0]:

结论

我们已经确保输出信号中有明显的频率区域被我们的系统抑制。 根据这些数据,我们可以详细确定系统的频率响应。