- Introduction
- Example Scenario
- Parameters
- Matlab Solution
- CPP Solution and Simulation Output
- Building and Integrating
In the age of rapid digital transformation, reliable wireless communication is essential for connecting people, communities, and critical services worldwide. Cellular on Wheels (COW) 🐄 technology, also known as mobile base stations, plays a vital role in extending cellular coverage in areas where traditional, fixed base stations are insufficient, or infrastructure is lacking. This project leverages a linear phased array for enhancing the functionality and efficiency of COW units, enabling robust and flexible coverage solutions.
COWs bring essential mobile connectivity in situations where permanent installations are impractical. Here’s why they make a meaningful difference:
-
- COWs provide rapid, temporary cellular coverage in disaster-stricken areas, supporting emergency responders, enabling critical communications, and reconnecting displaced populations.
- Example: After natural disasters like hurricanes, earthquakes, or wildfires, COWs can be deployed within hours to restore cellular connectivity, allowing for immediate coordination and life-saving operations.
-
- Large events, such as concerts, sports such as the Olympics, or festivals, experience significant surges in cellular demand, often exceeding local infrastructure capacity.
- COWs augment the network in these high-demand situations, improving connection reliability and data speeds for thousands of attendees.
-
- COWs can provide temporary coverage in hard-to-reach or underserved areas, allowing for cellular service where permanent towers may be cost-prohibitive.
- They are also essential for extending services during infrastructure projects or for seasonal agricultural activities.
-
- Dynamic Coverage: Phased array technology enables COWs to dynamically steer beams, maximizing signal strength and efficiently targeting areas of demand.
- Enhanced Data Rates: By focusing beams precisely, phased arrays reduce interference and improve data throughput, especially in high-density settings.
- Faster Deployment & Adaptability: Lightweight and modular, COWs with phased arrays can be deployed within hours and adjusted to provide optimal coverage as needed.
- Improved Energy Efficiency: Phased arrays in COW systems can direct energy precisely where needed, lowering power consumption compared to traditional omnidirectional antennas.
- Increased Connectivity: Studies show that even a temporary COW deployment can enhance network performance by up to 50% in high-traffic scenarios.
- Operational Efficiency: Phased array COWs provide up to 30% better spectrum efficiency by reducing signal interference, crucial for rural areas with limited bandwidth.
Following this, you’ll find a specific example that demonstrates how a phased array setup can enhance the flexibility and effectiveness of COW technology, providing tangible improvements in coverage and capacity for real-world applications.
There are 3 "Cellular on Wheels (COWs)" portable base stations, each equipped to drive a linear scan antenna array with up to 8 elements. The layout consists of 12 non-VIP spectator zones and 3 VIP spectator zones. The goal 🎯 is to ensure all clients in the simulation receive at least 24 dB of SINR ("SNR") signal quality or at least 3 VIP zones are above the cut off if there exists no solution to the specific scenario. 📶
More details on the linear scan antenna array as follows.
In this project, the scan angles vary between -90° and +90°, with each COW placed at an orientation of 0° (theta) (facing East). The theta-C angle is used to represent the scan angle, as shown in the image.
Frequency Channel: 20 MHz wide, f-center = 1900 MHz.
- Each COW can mount and linearly scan up to 8 antennas driven by a common downlink modulator signal. 🛰️
- Antenna Dimensions: Each antenna has hx = 20cm and hy = 40cm. 📏
- Array Width Limit: The overall width of the array cannot exceed 240cm.
- Power Control: Each modulated downlink stream can be driven with power ranging from -30 dBm to +30 dBm, in 1 dB steps between timeslots.
Initial proposal and source code along with optimizations have been made. Some of the visual effects of using linear scan antenna array can be found below:
Overall antenna antenna patterns from using Linear Phase Array, 5 panels each of size 20 cm x 40 cm, scan-angle +40 degrees, frequency 1.9 GHz. CPP implementation using ImGUI and SFML using the following parameters in the init.json
file
Parameter | Value |
---|---|
signal frequency | 1.9 GHz |
signal bandwidth | 20 MHz |
symbolrate | 3.84 Mega symbols |
blockpersymbol | 768 blocks/symbol |
antenna-height | 200 meters |
Grx of each client | -2 dB |
system-noise | 5 dB |
rx count in the simulation | 15 |
tx count in the simulation | 3 |
SINR/SNR failure cutoff | 24 dB |
tx theta-C direction | 75, 90, 105 degrees |
antenna-counts for each tx | 5, 3, 5 |
base_station_power_range | -30 to +30 dBm |
base_station_scan_angle_range | -90 to +90 degrees |
panel-spacing for each tx | 30 cm, 40 cm, 30 cm |
antenna_dims | 20 cm x 40 cm |
arguments as follows:
-----------------------
-o,--output_dir : C:\Users\User\Downloads\projects\Linear-Phased-Array
-f,--file :
--timeslot : 3
--frequency : 1900000000.0
--bandwidth : 20000000.0
--symbolrate : 3840000.0
--blockpersymbol : 768
--height : 200
--ms_grx : -2
--system_noise : 5
--base_stations : 3
--mobile_stations : 15
--timeslots : 1
--slimit : 24.0
--area : unknown
--base_station_theta_c : 75.0,90.0,105.0
--base_station_location : 250,200 500,180 750,200
--mobile_station_location : 250,500 350,500 450,500 550,500 650,500 750,500 250,600 350,600 450,600 550,600 650,600 750,600 450,325 500,325 550,325
--base_station_antenna_counts : 5,3,5
--base_station_power_range_dBm : -30,30
--base_station_scan_angle_range_deg : -90,90
--antenna_spacing : 0.3,0.4,0.3
--antenna_dims : 0.2,0.4
--antenna_txpower : 30.0,29.0,28.0
--scan_angle : 40.0,65.0,-40.0
--ms_selection : 7,4,10
-g : false
-q,--quiet : true
-?,--help : false
timeslot: 3 power: 28.00 alpha: -40.00 placement: 650,600 cow_id: 2 sta_id: 10 sinr: 9.96
timeslot: 3 power: 28.00 alpha: -40.00 placement: 650,600 cow_id: 2 sta_id: 10 sinr: 9.96
timeslot: 3 power: 28.00 alpha: -40.00 placement: 650,500 cow_id: 2 sta_id: 4 sinr: 7.68
timeslot: 3 power: 28.00 alpha: -40.00 placement: 650,500 cow_id: 2 sta_id: 4 sinr: 7.68
timeslot: 3 power: 29.00 alpha: 65.00 placement: 350,600 cow_id: 1 sta_id: 7 sinr: 1.66
timeslot: 3 power: 29.00 alpha: 65.00 placement: 350,600 cow_id: 1 sta_id: 7 sinr: 1.66
timeslot: 3 power: 30.00 alpha: 40.00 placement: 350,600 cow_id: 0 sta_id: 7 sinr: -1.99
timeslot: 3 power: 30.00 alpha: 40.00 placement: 350,600 cow_id: 0 sta_id: 7 sinr: -1.99
timeslot: 3 power: 29.00 alpha: 65.00 placement: 650,500 cow_id: 1 sta_id: 4 sinr: -8.56
timeslot: 3 power: 29.00 alpha: 65.00 placement: 650,500 cow_id: 1 sta_id: 4 sinr: -8.56
timeslot: 3 power: 30.00 alpha: 40.00 placement: 650,600 cow_id: 0 sta_id: 10 sinr: -11.87
timeslot: 3 power: 30.00 alpha: 40.00 placement: 650,600 cow_id: 0 sta_id: 10 sinr: -11.87
timeslot: 3 power: 30.00 alpha: 40.00 placement: 650,500 cow_id: 0 sta_id: 4 sinr: -16.61
timeslot: 3 power: 30.00 alpha: 40.00 placement: 650,500 cow_id: 0 sta_id: 4 sinr: -16.61
timeslot: 3 power: 28.00 alpha: -40.00 placement: 350,600 cow_id: 2 sta_id: 7 sinr: -19.80
timeslot: 3 power: 28.00 alpha: -40.00 placement: 350,600 cow_id: 2 sta_id: 7 sinr: -19.80
timeslot: 3 power: 29.00 alpha: 65.00 placement: 650,600 cow_id: 1 sta_id: 10 sinr: -31.49
timeslot: 3 power: 29.00 alpha: 65.00 placement: 650,600 cow_id: 1 sta_id: 10 sinr: -31.49
Since there are 3 transmitters and 15 stations, using single frequency and no MIMO at any given timeslot, we split the exchange over 5 timeslots (15 stations ÷ 3 transmitters = 5 timeslots).
At any timeslot:
- Each transmitter produces 1 line of output due to the binding info from the
init.json
test file. - In a specific timeslot (for example,
--timeslot: 3
), we should see 3 lines of output—one for each transmitter.
However, you may notice more than 3 lines of output (e.g., 18 lines)! This happens because:
- I use permutations of various bindings between TX (transmitters) and RX (receivers) stations.
- Additionally, I permute the unique TX powers. Instead of fixed power levels (e.g., 30, 30, 30 dBm), I vary the power slightly (e.g., 30, 29, 28 dBm) for different combinations.
This approach generates more permutations of signal-to-noise ratio (SNR) data, using parameters that may not have been considered in the original driving script acting as a wrapper.
These extra lines are due to the additional permutations and variations in TX power and bindings. In essence, we are exploring more combinations of potential scenarios between TX and RX stations to provide more comprehensive SNR data.
This output can now be integrated into Deep Q-Learning Networks (DQN) or Reinforcement Learning (RL) models. For those interested, check out the relevant scripts inside the src
directory. 📂
src/
: Contains Reinforcement Learning scripts for machine learning applications using this dataset. 🤖
- 3 transmitters ↔ 15 stations divided across 5 timeslots.
- Unique TX power variations create more SNR permutations.
- Output is ready for DQN and RL applications.
Default is release build with -O3 optimization
mkdir build
cd build
cmake ..
cmake --build .
Change cmake ..
to cmake -DCMAKE_BUILD_TYPE=Debug ..