Declaring model parameters
In [ ]:
using Images
In [ ]:
path_img = "$(@__DIR__)/img.jpg"
inp_img = imrotate(Gray.(load(path_img)), π*-90/180)
S = size(inp_img)
println("Размер входного изображения: $(S))")
println()
num = 400 # Количество групп
println("Количество групп: $num")
println("Количество значений в группе: $((S[1]*S[2])/num)")
println()
bit_mask = 0b01010101 # max 8 bit
println("bit_mask: $bit_mask")
println()
fs = 100e3 # Hz
println("Несущая частота: $fs Гц")
deviation_fs = fs * 0.05 # 5% от fs
println("Частота девиации: $deviation_fs Гц")
println()
snr = 10;
println("SNR: $snr дБ")
snr_linear = 10^(snr / 10)
signal_power = 1
noise_power = 1 / snr_linear
println("Мощность шума: $noise_power")
println()
st = 1/fs*S[1]*S[2] # Sample time
println("Время одного отсчёта: $st")
step = st/S[1]/S[2]
println("Шаг решателя: $step")
time_stop = st*2.1
println("Шаг моделирования: $st")
Running the model
In [ ]:
name_model = "SSTV"
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)
Model results
In [ ]:
println("SNR: $snr дБ")
println()
ber = ((collect(BER)).value)[end]
println("Всего бит: $(Int(ber[3]))")
println("Кол-во ошибок: $(Int(ber[2]))")
println("BER: $(round(ber[1], digits=2))")
inp = plot(framestyle=:none, grid=false, title = "Вход")
heatmap!( 1:S[2], 1:S[1], permutedims(inp_img, (2, 1)), colorbar=false)
sim_img = imrotate(colorview(Gray, ((collect(img_FM))[3,:].value)), π*-90/180)
sim = plot(framestyle=:none, grid=false, title = "Выход")
heatmap!( 1:size(sim_img, 2), 1:size(sim_img, 1), permutedims(sim_img, (2, 1)), colorbar=false)
sim_error = (collect(error_sim)).value
Average_error = round(sum(abs.(sim_error))/length(sim_error)*100, digits=2)
err = plot(sim_error, title = "Cредняя ошибка равна $Average_error % ")
plot(plot(inp, sim), err, layout = grid(2, 1, heights=[0.7, 0.3]), legend=false)
Out[0]: