Распространение радиоволн в помещении
Автор
Соавторы
using Plots
using Statistics
Nx = 240
Ny = 180
ez24 = zeros(Float64, Nx, Ny)
hx24 = zeros(Float64, Nx, Ny)
hy24 = zeros(Float64, Nx, Ny)
ez5 = zeros(Float64, Nx, Ny)
hx5 = zeros(Float64, Nx, Ny)
hy5 = zeros(Float64, Nx, Ny)
sigma24 = zeros(Float64, Nx, Ny)
sigma5 = zeros(Float64, Nx, Ny)
sigma24[5:8, 5:175] .= 0.95
sigma5[5:8, 5:175] .= 0.98
sigma24[232:235, 5:175] .= 0.95
sigma5[232:235, 5:175] .= 0.98
sigma24[5:235, 5:8] .= 0.95
sigma5[5:235, 5:8] .= 0.98
sigma24[5:235, 172:175] .= 0.95
sigma5[5:235, 172:175] .= 0.98
sigma24[35:90, 25:55] .= 0.08
sigma5[35:90, 25:55] .= 0.12
sigma24[100:135, 70:100] .= 0.04
sigma5[100:135, 70:100] .= 0.07
sigma24[180:205, 35:120] .= 0.18
sigma5[180:205, 35:120] .= 0.30
sigma24[160:195, 128:142] .= 0.10
sigma5[160:195, 128:142] .= 0.16
sigma24[188:193, 143:160] .= 0.98
sigma5[188:193, 143:160] .= 0.995
sigma24[120:125, 40:150] .= 0.20
sigma5[120:125, 40:150] .= 0.35
router_x = 170
router_y = 150
steps = 850
c = 0.5
power24 = zeros(Float64, Nx, Ny)
power5 = zeros(Float64, Nx, Ny)
for t in 1:steps
for j in 1:Ny-1, i in 1:Nx-1
hx24[i,j] -= c * (ez24[i,j+1] - ez24[i,j])
hy24[i,j] += c * (ez24[i+1,j] - ez24[i,j])
end
for j in 2:Ny-1, i in 2:Nx-1
ez24[i,j] += c * (
hy24[i,j]
- hy24[i-1,j]
- hx24[i,j]
+ hx24[i,j-1]
)
ez24[i,j] *= (1.0 - sigma24[i,j])
end
for j in 1:Ny-1, i in 1:Nx-1
hx5[i,j] -= c * (ez5[i,j+1] - ez5[i,j])
hy5[i,j] += c * (ez5[i+1,j] - ez5[i,j])
end
for j in 2:Ny-1, i in 2:Nx-1
ez5[i,j] += c * (
hy5[i,j]
- hy5[i-1,j]
- hx5[i,j]
+ hx5[i,j-1]
)
ez5[i,j] *= (1.0 - sigma5[i,j])
end
ez24[router_x, router_y] +=
sin(0.18 * t) *
exp(-0.0006 * (t - 80)^2)
ez5[router_x, router_y] +=
sin(0.32 * t) *
exp(-0.0009 * (t - 80)^2)
if t > 120
power24 .+= ez24.^2
power5 .+= ez5.^2
end
end
rssi24 = 10 .* log10.(power24 .+ 1e-9)
rssi5 = 10 .* log10.(power5 .+ 1e-9)
p1 = heatmap(
ez24',
title = "Поле 2.4 GHz",
color = :RdBu,
aspect_ratio = 1,
size = (500,400)
)
scatter!(
p1,
[router_x],
[router_y],
markersize = 6,
label = "Роутер"
)
p2 = heatmap(
ez5',
title = "Поле 5 GHz",
color = :RdBu,
aspect_ratio = 1,
size = (500,400)
)
scatter!(
p2,
[router_x],
[router_y],
markersize = 6,
label = "Роутер"
)
p3 = heatmap(
rssi24',
title = "RSSI 2.4 GHz",
color = :turbo,
aspect_ratio = 1,
clims = (-90, 0)
)
scatter!(
p3,
[router_x],
[router_y],
markersize = 6,
label = "Роутер"
)
p4 = heatmap(
rssi5',
title = "RSSI 5 GHz",
color = :inferno,
aspect_ratio = 1,
clims = (-90, 0)
)
scatter!(
p4,
[router_x],
[router_y],
markersize = 6,
label = "Роутер"
)
slice24 = rssi24[20:220, 150]
slice5 = rssi5[20:220, 150]
p5 = plot(
slice24,
linewidth = 3,
label = "2.4 GHz",
xlabel = "Расстояние",
ylabel = "RSSI (dB)",
title = "Сравнение затухания"
)
plot!(
p5,
slice5,
linewidth = 3,
label = "5 GHz"
)
plot(
p1,
p2,
p3,
p4,
p5,
layout = (2,3),
size = (1700,900)
)