Urban Channel Link Analysis and Visualization using Ray Tracing

This example shows how to use ray tracing to analyze a communication link in an urban environment. Buildings data is imported into Site Viewer from an OpenStreetMap file corresponding to Hong Kong. Transmitter and receiver sites are placed in the city, and ray tracing is used to plot multiple propagation paths. The ray tracing results are used to define a channel model for filtering a signal.

Import and Visualize Buildings Data

Import an OpenStreetMap (.osm) file corresponding to Hong Kong. The file was downloaded from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world. The buildings information contained within the OpenStreetMap file is imported and visualized in Site Viewer.

viewer = siteviewer("Buildings","hongkong.osm");

Zoom and rotate the map to view the buildings and terrain.

Define Transmitter and Receiver Sites

Define transmitter and receiver sites to model a small cell scenario in a dense urban environment. The transmitter site represents a base station that is placed on a pole near a road, and the receiver site is placed along a road. The transmitter operates at a carrier frequency of 28 GHz with 5 W of power. The transmitter and receiver sites use a default isotropic antenna, which radiates uniformly in all directions.

tx = txsite("Name","Small cell transmitter", ...
    "Latitude",22.2789, ...
    "Longitude",114.1625, ...
    "AntennaHeight",10, ...
    "TransmitterPower",5, ...
    "TransmitterFrequency",28e9);

rx = rxsite("Name","Small cell receiver", ...
    "Latitude",22.2799, ...
    "Longitude",114.1617, ...
    "AntennaHeight",1);

Plot Propagation Paths using Ray Tracing

Plot propagation paths between the transmitter and receiver sites, including paths with up to two reflections. The propagation paths are computed using ray tracing analysis, which considers the buildings and terrain geometry around the sites to determine line-of-sight or reflected paths. The materials for buildings and terrain are both concrete by default. Each path may be selected to view the corresponding propagation characteristics, including received power, phase change, distance, and angles of departure and arrival.

pm = propagationModel("raytracing-image-method", ...
    "MaxNumReflections", 2);
raytrace(tx,rx,pm);

Analyze Effect of Materials

Create a ray tracing propagation model with materials set to perfect reflectors. Plot the propagation paths and compare to the previous plot to visualize the effects of material reflection loss.

pmPerfect = propagationModel("raytracing-image-method", ...
    'MaxNumReflections', 2, ...
    "BuildingsMaterial","perfect-reflector", ...
    "TerrainMaterial","perfect-reflector");
raytrace(tx,rx,pmPerfect);

Compute total received power using both propagation models. The total received power is the sum of received power from all propagation paths.

ssPerfect = sigstrength(rx,tx,pmPerfect);
ssConcrete = sigstrength(rx,tx,pm);
disp("Received power using perfect reflection: " + ssPerfect + " dBm")
Received power using perfect reflection: -62.5545 dBm
disp("Received power using concrete materials: " + ssConcrete + " dBm")
Received power using concrete materials: -65.1106 dBm

Define Multipath Channel Model using Ray Tracing

The ray tracing results can be saved to ray objects that contain path loss and delay information for each ray. There are seven rays from the transmitter to the receiver, resulting in a multipath channel. Create a ray tracing based channel model object using the rays, transmitter site and receiver site information. To model the effects of a receiver in motion, define an instantaneous velocity, which results in a Doppler frequency shift for each ray. The channel impulse response (CIR) plot from the channel model object shows that the seven rays arrive in four clusters.

rays = raytrace(tx,rx,pm);
RTChan = RayTracingChannel(rays{1}, tx, rx);
RTChan.SampleRate = 122.88e6; 
RTChan.ReceiveArrayVelocity = [2; 2; 2];

% Plot CIR
RTChan.plotCIR;

Randomly generate a frame of 64-QAM signals, pass it through the channel and plot the output in a constellation diagram. The received signal is highly distorted due to the significant intersymbol interference (ISI) caused by the multipath channel on a wideband signal.

M = 64; 
frmLen = 30720;
constDiagram = comm.ConstellationDiagram( ...
    "XLimits", [-15 15], ...
    "YLimits", [-15 15], ...
    "ReferenceConstellation", qammod(0:M-1, M));

% Observe the channel-impaired signal in the constellation diagram
txSig = qammod(randi([0 M-1], frmLen, 1), M);
rxSig = RTChan(txSig);
constDiagram(rxSig);