Lonestar
MATLAB scripts for LoneSTAR: analog beamforming codebooks for full-duplex mmWave communication systems.
Install / Use
/learn @iproberts/LonestarREADME
About
This repository contains code related to the following paper on LoneSTAR, an analog beamforming codebook design methodology for full-duplex millimeter wave (mmWave) wireless communication systems.
[1] I. P. Roberts, S. Vishwanath, and J. G. Andrews, "LoneSTAR: Analog Beamforming Codebooks for Full-Duplex Millimeter Wave Systems," IEEE Trans. Wireless Commun., 2023, PDF.
Using the code in this repo, which is based on the work presented in [1], users can create LoneSTAR beamforming codebooks in order to conduct research on full-duplex mmWave communication systems.
If you use this code or our paper in your work, please cite [1] with the following BibTeX.
@ARTICLE{roberts_lonestar_2023,
author={I. P. Roberts and S. Vishwanath and J. G. Andrews},
title={\textsc{LoneSTAR}: Analog Beamforming Codebooks for Full-Duplex Millimeter Wave Systems},
journal={IEEE Trans. Wireless Commun.},
year=2023,
note={(early access)},
}
Codebook-Based Beam Alignment
Today's mmWave systems---which have operated in a half-duplex fashion thus far---rely on beam alignment to identify beams that deliver high beamforming gain when serving a particular user. This is typically done by sweeping a set of candidate beams (called a codebook) and measuring the reference signal received power (RSRP) for each beam candidate in order to select which is used to close a link. This procedure allows a mmWave system to reliably deliver high beamforming gain without the need for downlink/uplink MIMO channel knowledge, which is expensive to obtain in practice.
<p align="center"> <img src="https://user-images.githubusercontent.com/52005199/222982499-dd6d1b01-1d13-4f55-8e89-1c1d631ab9b1.svg"/> </p>What is Self-Interference?
When a transceiver (a wireless device) attempts to transmit and receive at the same time using the same frequency spectrum, some of its transmitted signal will leak into its receiver, corrupting reception of a desired signal. This undesired leakage (or coupling) is called "self-interference". Transmit and receiving at the same time using the same frequency spectrum is called "full-duplex" operation.
This work is particularly focused on self-interference in full-duplex systems operating at mmWave frequencies (roughly 30 GHz to 100 GHz). In mmWave systems, dense antenna arrays containing dozens or even hundreds of individual antennas are used to overcome high path loss at these high carrier frequencies. They do this by forming very directional beams, focusing energy in a particular direction to increase received signal power.
Suppose a mmWave system employs separate transmit and receive arrays and attempts to operate in a full-duplex fashion. Codebook-based beam alignment will presumably be conducted on its downlink and its uplink. In other words, it will select a transmit beam from some transmit codebook and a receive beam from some receive codebook. The degree of self-interference coupled depends on the selected beams and the underlying self-interference channel manifesting between the transmit and receive arrays.
<p align="center"> <img src="https://user-images.githubusercontent.com/52005199/222982526-5be5c14f-915b-48c6-a14f-156515d7f816.svg"/> </p>What is LoneSTAR?
In this work [2], we construct the first beam codebooks for full-duplex mmWave systems, called LoneSTAR codebooks. LoneSTAR codebooks deliver high beamforming gain and broad coverage while significantly reducing the self-interference coupled between the transmit and receive beams of a full-duplex mmWave system. An example of a transmit codebook designed with LoneSTAR is shown below.
<p align="center"> <img src="https://user-images.githubusercontent.com/52005199/222982332-bd648e5d-db44-4ca1-b207-47f34ae550ef.svg"/> </p>To design codebooks for full-duplex mmWave systems, we formulated an optimization problem that aims to minimize self-interference between all possible beams within the codebooks while constraining the coverage quality the codebooks provide over some pre-defined coverage regions.
A full-duplex mmWave transceiver can independently select any transmit beam and any receive beam from LoneSTAR codebooks and, with reasonable confidence, can expect low self-interference. LoneSTAR codebooks are designed at the full-duplex transceiver following estimation of the self-interference MIMO channel (which need not be perfect), do not require downlink/uplink MIMO channel knowledge, and do not demand any over-the-air feedback to/from users.
After their construction, LoneSTAR codebooks can be used to conduct beam alignment and serve any downlink-uplink user pair in a full-duplex fashion thereafter with reduced self-interference. Importantly, LoneSTAR accounts for limited phase and amplitude control present in practical analog beamforming networks.
Contents
This repo contains the following MATLAB code:
- a main script
main.millustrating example usage - an
array.mobject that can be used to construct and interface with antenna arrays - a function
quantize_codebook.mthat quantizes a codebook to some phase and amplitude resolution - a function
generate_spherical_wave_channel.mthat produces a realization of the self-interference channel matrix based on some relative transmit-receive array geometry channel.mandchannel_spherical_wave.mobjects that are used bygenerate_spherical_wave_channel.m
The array.m, channel.m, and channel_spherical_wave.m objects are all from MIMO for MATLAB.
Preliminaries
Before running main.m, you must have CVX installed. CVX is a MATLAB toolbox for solving convex optimization problems.
Example Usage
We will now walk through main.m to summarize its usage.
Suppose a full-duplex mmWave base station employs a codebook of transmit beams that it uses to conduct downlink beam alignment and a codebook of receive beams that it uses to conduct uplink beam alignment. This script will design these transmit and receive codebooks based on LoneSTAR.
When running LoneSTAR, there are five design parameters:
- transmit coverage region
- receive coverage region
- transmit coverage variance
- receive coverage variance
- self-interference channel estimation error variance
Construct Transmit and Receive Arrays
The transmit and receive arrays are assumed to be identical in this example, but this can be generalized straightforwardly. As shown below, the arrays can be created by simply specifying the number of rows and columns in the planar arrays. Below, we have assumed 8x8 uniform planar arrays for the transmitter and receiver.
% planar array size
M = 8; % number of rows
N = 8; % number of columns
% create transmit and receive arrays (custom array object)
atx = array.create(M,N); % transmit array
arx = array.create(M,N); % receive array
% number of transmit and receive antennas
Nt = M * N;
Nr = M * N;
Phase and Amplitude Control
Practically, analog beamforming networks use digitally-controlled phase shifters and attenuators to form beams. Given this, each phase shifter and attenuator has limited resolution, which must be accounted for. The phase shifter resolution and attenuator resolution (in bits) can be specified using the following.
bits_phase = 6; % phase shifter resolution (Inf for infinite resolution)
bits_amp = 6; % attenuator resolution (Inf for infinite resolution)
dB_step = 0.5; % attenuation (in dB) per LSB (log-stepped attenuators)
Along with its resolution, the attenuator's step size is specified using dB_step, which is the attenuation (in dB) per least-significant bit.
The phase shifters have uniform phase quantization.
Define Transmit and Receive Coverage Regions
Before running LoneSTAR, the transmit and receive codebooks used for conventional beam alignment at the full-duplex base station must be defined. This can be done by defining the steering directions of the codebooks' beams. The steering direction of each beam contains a component in azimuth and elevation, as illustrated below.
<p align="center"> <img src="https://user-images.githubusercontent.com/52005199/222922576-377d2020-43aa-4f13-9db8-b9ada9246846.svg"/> </p>In the example below, the transmit and receive coverage regions are identical. Each coverage region spans in azimuth from -56 deg. to 56 deg. in 8 deg. steps and in elevation from -8 deg. to 8 deg. in 8 deg. steps. This amounts to a total of 45 directions in each coverage region. The codebooks we will design will steer in these specified directions, meaning each codebook will have 45 beams.
% coverage regions span azimuth and elevation
az_deg = [-56:8:56].';
el_deg = [-8:8:8].';
% assume TX and RX coverage regions to be the same
tx_az = az_deg;
tx_el = el_deg;
rx_az = az_deg;
rx_el = el_deg;
The azimuth-elevation of each transmit and receive coverage direction can then be populated as follows.
% full TX coverage region in az-el
num_tx_az = length(tx_az);
num_tx_el = length(tx_el);
tx_azel = [repmat(tx_az,num_tx_el,1) repelem(tx_el,num_tx_az,1)];
% full RX coverage region in az-el
num_rx_az = length(rx_az);
num_rx_el = length(rx_el);
rx_azel = [repmat(rx_az,num_rx_el,1) repelem(rx_el,num_rx_az,1)];
Baseline Codebooks: Conjugate Beamforming Codebooks
A simple way to serve the coverage regions we have defined is using conjugate beamforming (CBF) codeboks. These can be formed as follows by simply fetching the array response vectors in each direction of our coverage regions.
% get array response vectors
Atx = atx.get_array_response(tx_azel(:,1)*pi/180,tx_azel(:,2)*pi/180);
Arx = arx.get_array_response(rx_azel(:,1)*pi/180,rx_azel(:,2)*pi/180);
% conjugate beamforming codebooks
F_cbf = Atx;
W_cbf = Arx;
We must quantize the beamforming weights in each codebook to ensure they are physically realizable based on our phase shifter and attenuator resoluti
Related Skills
node-connect
341.6kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.6kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
