Is there a way to stop raytracing with parallel Toolbox from ignoring Buildings

9 visualizzazioni (ultimi 30 giorni)
Background:
I'm searching for a way to speed up raytracing to multiple receivers (about 500-2000) so I tried to run it with the parallel Toolbox.
Bug/Problem:
The result is what you see in the Image below, there are no rays to the first site (that is worked on by the first core).
But for every site is following (here site 2 in the middle) matlab keeps ignoring the buildings and the terrain (if there is one).
I'm Aware that this happens because the site viewer with the buildings is only loaded on the first instance and the other
instances of matlab are calculation without any site information.
Question:
Is there any way to avoid this bug or to speed up the raytrcaing process?
Thank you in advance for your help
Marcel
Example:
clear
clc
close all
%Model constants
f=500e6;%in Hz
%% Load Map
%for the map I chose a Part of Munich
%(48.139105,48.135141,11.571326,11.578850) downloaded from https://www.openstreetmap.org/export#map=17/48.137203/11.576350
viewer = siteviewer("Buildings","map.osm","Basemap","topographic");
%% Creating TX sites
site1 = txsite("Name","TX_1", ...
"Latitude",48.139, ...
"Longitude", 11.5715, ...
"AntennaHeight",1, ... %in m
"TransmitterPower", 5, ... %in W
"TransmitterFrequency",f);
site2 = txsite("Name","TX_2", ...
"Latitude",48.138, ...
"Longitude", 11.5715, ...
"AntennaHeight",1, ... %in m
"TransmitterPower", 5, ... %in W
"TransmitterFrequency",f);
show(site1);
show(site2);
tx=[site1 site2]
%% Creatin RX sites
rx = cell(1,2);
rx{1,1} = rxsite("Name","rx1", ...
"Latitude",48.1352,...
"Longitude",11.578, ...
"AntennaHeight",1.5, ...
"Antenna",'isotropic', ...
'ReceiverSensitivity',-103);
rx{1,2} = rxsite("Name","rx2", ...
"Latitude",48.137,...
"Longitude",11.575, ...
"AntennaHeight",1.5, ...
"Antenna",'isotropic', ...
'ReceiverSensitivity',-103);
show(rx{1,1})
show(rx{1,2})
% propagation model
rtpm = propagationModel("raytracing", ...
"Method","sbr", ...
"MaxNumReflections",2, ...
"BuildingsMaterial","concrete", ...
"TerrainMaterial","vegetation");
%% raytracing
size(rx,2)
%%
rays= cell(size(tx,2),size(rx,2));
lenght= size(tx,2);
parfor i=1:size(rx,2);
ray = raytrace(tx,rx{1,i},rtpm);
for j=1:lenght
rays{j,i} = ray{j,1};
end
end
%% plot existing rays
disp("plotting rays")
for i=1:size(rays,1)
for j=1:size(rays,2)
if (~isempty(rays{i,j}))
plot(rays{i,j});
end
end
end

Risposta accettata

Madheswaran
Madheswaran il 28 Ago 2024
Hello Marcel,
As you mentioned the problem is with the parallel workers not being able to access the building information from the ‘siteviewer’. To work around this issue, you could try to create a ‘siteviewer’ inside each iteration of the ‘parfor’ loop using ‘Hidden’ parameter, so that each worker has its own ‘siteviewer’ object. The following answer discusses the use of ‘hidden’ parameter inside the ‘siteviewer’ function: https://mathworks.com/matlabcentral/answers/2118951
You can modify your code as follows:
f = 500e6;
tx(1) = txsite( %...existing code
tx(2) = txsite( %...existing code
rx(1) = rxsite( %...existing code
rx(2) = rxsite( %...existing code
rtpm = propagationModel( %...existing code
rx_size = 2;
tx_size = 2;
rays = cell(tx_size, rx_size);
parfor i = 1:rx_size
siteviewer("Buildings","map.osm","Basemap","topographic", "Hidden", true);
ray = raytrace(tx, rx(i));
for j=1:tx_size
rays{j,i} = ray{j,1};
end
end
The above method would not offer any graphic visuals but you can notice that ‘rays’ is calculated as expected.
Hope this helps!
  2 Commenti
Marcel
Marcel il 4 Set 2024
Hello Madheswaran,
thank you for this interesting idea, it indeed works but as i have to reload the sideviewer everytime i calculate a new reciever its slower than without the parfor. I thought about switching the for loops so the outer loop will count the transmitters but that way I could only use 2-3 of 24 possible workers as I only have a little amount of transmitters.
Do you know if there is any way, that I can leave the siteviewers open, so I dont have to reload them every time i loop?
Madheswaran
Madheswaran il 9 Set 2024
@Marcel, Each iteration of the `parfor` loop runs in differnt processes with its own memory space and `siteviewer` is not shared across those parallel processes. So, leaving the `siteviewer` open might not help since each parallel process requires its own `siteviewer` in the memory concurrently.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Propagation and Channel Models in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by