低通和高通滤波器的实现
此演示演示了由以下差分方程定义的两个滤波器的实现:
- 低通滤波器:y(n)=0.5x(n)+0.5x(n-1)(平均)
- 高通滤波器:y(n)=0.5x(n)-0.5x(n-1)(有限差分)
下图显示了一个模型,从中我们可以看到为滤波器给出了公共系数,并且它们的主要差异包含在最后一个加法器中。
接下来,我们将使用一个辅助函数来运行模型。
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
run_model("hipass_lopass") # Запуск модели.
Out[0]:
让我们通过绘制时域和频域中的信号来分析记录的结果。
In [ ]:
hipass = collect(simout["hipass_lopass/hipass"]);
lopass = collect(simout["hipass_lopass/lopass"]);
plot(hipass.time[1:500], [hipass.value[1:500], lopass.value[1:500]],label=["Фильтр нижних частот" "Фильтр верхних частот"])
Out[0]:
根据时域数据,我们可以看到,高通滤波器和低通滤波器输出端的数据之间的主要差异是信号幅度的差异和振荡脉冲的不均匀性,我们在使用高通滤波器时观察到这一点。
In [ ]:
using FFTW
Comp_hipass = ComplexF64.(hipass.value);
Comp_lopass = ComplexF64.(lopass.value);
spec_hipass = fftshift(fft(Comp_hipass));
spec_lopass = fftshift(fft(Comp_lopass));
x = [10log10.(abs.((spec_hipass/3e6))),10log10.(abs.((spec_lopass/3e6)))];
plot(x, label =["Фильтр нижних частот" "Фильтр верхних частот"])
ylabel!("Мощность дБВт")
xlabel!("Частота МГц")
Out[0]:
根据信号谱,我们可以看到滤波器工作正常。
结论
在这个例子中,我们已经分析了两种情况下使用相同系数的高通滤波器和低通滤波器之间的差异,从而表明这些滤波器在实现方面存在相当少的差异。