This detection method is proposed in Expectation Propagation Detection for High-Order High-Dimensional MIMO Systems by Javier CĂ©spedes. It has three process: cavity distribution, Bayesian estimation and iterative update. Also, the initial version of this code is from Alva Kosasih
.
Cespedes, J., Olmos, P. M., Sánchez-Fernández, M., & Perez-Cruz, F. (2014). Expectation propagation detection for high-order high-dimensional MIMO systems. IEEE Transactions on Communications, 62(8), 2840-2849.
The graph neural network aided version is also included as in Graph Neural Network Aided MU-MIMO Detectors and Graph Neural Network Aided Expectation Propagation Detector for MU-MIMO Systems. In this detector, a GNN is implemented after cavity distribution to calculate the probability of all possible x values. Then, the estimation is able to update the new mean and variance similar to the Bayesian estimation.
A. Kosasih, V. Onasis, V. Miloslavskaya, W. Hardjawana, V. Andrean and B. Vucetic, "Graph Neural Network Aided MU-MIMO Detectors," in IEEE Journal on Selected Areas in Communications, vol. 40, no. 9, pp. 2540-2555, Sept. 2022, doi: 10.1109/JSAC.2022.3191344.
Kosasih, A., Onasis, V., Hardjawana, W., Miloslavskaya, V., Andrean, V., Leu, J. S., & Vucetic, B. (2022, April). Graph neural network aided expectation propagation detector for MU-MIMO systems. In 2022 IEEE Wireless Communications and Networking Conference (WCNC) (pp. 1212-1217). IEEE.
Currently, we offer three options to install this tool.
-
Install through
Matlab Add-Ons
Go to releases to download the file
whatshow_phy_detect_ep.mltbx
in the latest release to install.
The classEP
will be automatically added in Matlab. (Don't forget to restart Matlab after installation). -
Install through
pip
pip install whatshow-phy-detect-ep
- import this module
from whatshow_phy_detect_ep import EP
- import this module
-
Install through
git
under another local repositiorygit submodule add git@github.com:whatshow/Phy_Detect_EP.git Modules/Phy_Detect_EP
- import this module
- Matlab
addpath("Modules/Phy_Detect_EP");
- Python
if '.' not in __name__ : from Modules.Phy_Detect_EP.EP import EP else: from .Modules.Phy_Detect_EP.EP import EP
- Matlab
- import this module
All EP codes are uniform in matlab and python as a class of EP
. This class contains the whole process. This section will illustrate the methods of this class following the process of detection.
- EP(the parameter names follow the notations in Expectation Propagation Detection for High-Order High-Dimensional MIMO Systems)
@constellation
: the constellation, a vector
@beta
: the percentage for taking values from the previous iteration
@epsilon
: the default minimal variance
@l
: the maximal iteration
@early_stop
: whether stop early
@early_stop_min_diff
: the elemental minimal (element-wise) difference in mean and variance
@batch_size
(optional) : the batch size (only used in python).
% matlab M = 16; constellation = qammod([0: M - 1], M, "UnitAveragePower", true); ep = EP(constellation, "beta", 0.1, "epsilon", 1e-13, "early_stop_min_diff", 1e-4);
# python ep = EP(constellation, beta=0.1, epsilon=1e-13, early_stop_min_diff=1e-4); # no batch ep = EP(constellation, beta=0.1, epsilon=1e-13, early_stop_min_diff=1e-4, batch_size=10); # using batch
- detect
@y
: the received signal, a vector of [(batch_size), rx_num], [(batch_size), rx_num, 1] or [(batch_size), 1, rx_num]
@H
: the channel matrix, a matrix of [(batch_size), rx_num, tx_num]
@No
: the noise (linear) power
@sym_map
: false by default. If true, the output will be mapped to the constellation
# matlab syms = ep.detect(y, H, No); # no hard mapping syms = ep.detect(y, H, No, sym_map=True); # hard mapping
# python syms = ep.detect(y, H, No); # no hard mapping syms = ep.detect(y, H, No, sym_map=True); # hard mapping
Before running any sample code, please make sure you are at the root path of this repository. Also, Matlab codes require running init
in the command window first to load directories.
Alva
: this is the original code fromAlva Kosasih
.Tests
Tests/test_case_01
: test the difference between the mature code from and newly proposedEP
object (no early stop).Tests/test_case_02
: draw the SER vs SNR between the mature code from and newly proposedEP
object (early stop).
Now we set and we are going to calculate X
to see the distribution
Therefore, we can conclude that the the new mean and new variance is given as below (ignoring the constant part because this is just the likelihood of two Xs
are same).
Now we are going to use the 2 Gaussian Distribution Division
knowledge to calculate
Now, we follow the Math symbols in the paper, suppose ( is the diagonal of the matrix ) and
Here, we need pay attention that the mean of p(x)
is instead of . The proof is give below where we follow the exponential family.
Here, we can see that the mean is
Now, we are going to find out in Lth
iteration
From the step computing the mean and the variance of prediction , we can use those 2 results to calculate ; that is, for (L+1)th
iteration,
Using 2 Gaussian Distribution Division
knowledge, for the variance,