Commit b54b417a authored by JRock007's avatar JRock007
Browse files

Merge branch 'master' of gitlab.centralesupelec.fr:garnier_jea/NOMA

parents 9ecc180b 75e948e1
# Principe du projet
L'objectif de ce projet était d'étudier le NOMA et ses performances.<br/>
Nous avons abouti à une modélisation probabiliste du taux d'erreur binaire pour un nombre quelconque d'utilisateurs, puis avons comparé ce résultat à un modèle statistique (Méthode de Monte-Carlo) ainsi qu'à des résultats expérimentaux.
# On the Performance of QPSK Modulationover Dowlink NOMA: From error probability derivation to SDR-based validation
# Organisation du dossier
Les différentes parties du projet ont été regroupées en dossiers, dont voici l'utilité :
This repository is associated to the paper available at [URL].
* [gnuradio](#folder_gnuradio) : Ensemble des flowgraphs utilisés dans GNURadio pour obtenir les résultats expérimentaux
* [gr-NOMA](#folder_gr-NOMA) : Dossier contenant le code pour les blocs, codés en C++, que nous avons réalisés dans le cadre du projet
* [Latex](#folder_Latex) : Dossier avec les sources LaTeX de notre rapport
* [Matlab](#folder_Matlab) : Code Matlab permettant de générer les paramètres d'un canal
* [Python](#folder_Python) : Ensemble des scripts Python réalisés pour le projet
## Description
In this project, we study the performance of QPSK modulation in the context of multi-user downlink NOMA with a successive interference canceller (SIC) at the receiver side.
We derive the analytical formula on its closed-form in the associated paper, and use the code in this repository to verify it, both through simulation and experimental validation.
Numerical simulations are used to not only to corroborate the tightness of our theoretical expressions, but also to analyze the problem of power allocation in the two and three users cases.
Finally, the code for an experimental validation testbed using NOMA with software defined radio is provided.
Des détails sont fournis dans les parties spécifiques à chaque dossier.
## Table of content
* [GNURadio](#folder_gnuradio) : GNURadio flowgraphs used in our experimental setup
* [gr-NOMA](#folder_gr-NOMA) : Custom-made blocks, using C++, used in the flowgraphs
* [LaTeX](#folder_Latex) : LaTeX sources for our report
* [Matlab](#folder_Matlab) : Matlab code used to generate the channel parameters used in simulations
* [Python](#folder_Python) : Python scripts used for the simulations and optimization
## <a name="folder_gnuradio"></a> GNURadio
Pour faire fonctionner ces flowgraphs, il faut installer les blocs dans gr-NOMA.
These flowgraphs rely on the blocs defined in [gr-NOMA](#folder_gr-NOMA), they must be installed first.
##### flowgraph\_NOMA\_2\_users.grc
Flowgraph générant des symboles aléatoires pour 2 utilisateurs en NOMA, les transmettant en passant par 2 antennes, les décodant et calculant le BER de chaque utilisateur.
A flowgraph generating random symbols for 2 users, combining them using NOMA, and transmitting them through 2 antennas.
They are then decoded, and the BER is computer for each user.
La puissance allouée à chaque utilisateur est réglable.
In this setup, the power allocated to each user can be chosen in live transmissions.
##### flowgraph\_NOMA\_3\_users.grc
Flowgraph générant des symboles aléatoires pour 3 utilisateurs en NOMA, les transmettant en passant par 2 antennes, les décodant et calculant le BER de chaque utilisateur.
A flowgraph generating random symbols for 3 users, combining them using NOMA, and transmitting them through 2 antennas.
They are then decoded, and the BER is computer for each user.
La puissance allouée à chaque utilisateur est réglable.
In this setup, the power allocated to each user can be chosen in live transmissions.
##### noise\_generator.grc
Flowgraph générant des symboles complexes aléatoires (selon une loi gaussienne) et les envoyant à une fréquence données, pour simuler un canal gaussien.
This flowgraph generates random complex symbols, following a Gaussian repartition. These symbols are then sent at a given frequency, to generate random noise in our channel.
La puissance allouée d'émission du bruit est réglable.
The noise's power can be modified during the transmission.
##### sync\_test\_flowgraph.grc
Flowgraph permettant de tester la correction apportée par les blocs `sync_frames_sender ` et `sync_frames_receiver `.
This simple flowgraph is used to test the phrase-shift correction for the blocs `sync_frames_sender ` and `sync_frames_receiver `.
## <a name="folder_gr-NOMA"></a> gr-NOMA
On suppose gnuradio installé sur la machine pour la suite de cette partie.
It is assumed that [GNURadio](https://www.gnuradio.org) is installed for the following steps.
This repository should also be cloned or downloaded.
### Installation
Il faut tout d'abord se trouver dans le bon dossier :
First, move to the right folder:
```
cd [...]/gr-NOMA
```
On créé un dossier `build` (s'il n'existe pas déjà) :
Then, create a `build` build folder (if it doesn't already exist) :
```
mkdir build
cd build
```
On compile les blocs :
Then, compile the blocks:
```
cmake .. && make
```
On installe les blocs :
And install them:
```
sudo make install
```
Sur linux uniquement, il faut entrer cette commande à chaque fois qu'on installe les blocs :
For linux, each time new blocks are installed, you must run this command:
```
sudo ldconfig
```
### Description des blocs
### Blocs description
Note : Le code des blocs est situé dans `gr-NOMA/lib`.
**Note:** The blocs' code is located in the `gr-NOMA/lib` subfolder.
##### BERCounter
......@@ -152,51 +158,52 @@ After sending those symbols, it just acts as a passthrough block. No symbol is d
## <a name="folder_Latex"></a> LaTeX
Le fichier `Généralisation N récepteurs.tex` contient le code à compiler permettant de générer le document pdf de notre rapport.
The file `Généralisation N récepteurs.tex` contains the source code to compile in order to generate the PDF version of the paper.
Le fichier `biblio.bib` contient les éléments bibliographiques utilisés dans le rapport, et doit être compilé avec `Généralisation N récepteurs.tex`.
The file `biblio.bib` contains the bibliographic elements used in the paper, and need to be compiled with `Généralisation N récepteurs.tex`.
## <a name="folder_Matlab"></a> Matlab
Pour utiliser le code, il faut modifier les paramètres dans `BaseCodeMS.m` et regarder la valeur de `N` (le bruit dans le canal) et de `g` (l'atténuation pour chaque utilisateur).
In order to use this code, the parameters from `BaseCodeMS.m` must be modified, especially the values of `N` (the noise of the canal) and `g` (the attenuation for each user).
Il faut simplement convertir `N`, la puissance du bruit, en `sigma` (utilisé dans nos algorithmes), l'écart type du bruit gaussien.
The power of the noise, `N`, must be simply converted in `sigma` (used in our algorithms), the standard deviation of the Gaussian noise.
## <a name="folder_Python"></a> Python
On suppose que Python 3 et numpy sont installés sur la machine.
We assume that Python 3 and numpy are installed on the machine.
##### Comparaison\_Experience\_Theorie.py
### Script descriptions
Contient des BER mesurés à 3 utilisateurs et les compare aux résultats théoriques.
##### Comparison\_Experiment\_Theory.py
##### Comparaison\_Modele\_Theorie.py
Contains measured BER (Bit Error Rate) for 3 users, and compares them with theoretical results.
Contient plusieurs fonctions permettant de comparer le BER théorique à un BER statistique calculé avec la méthode de Monte-Carlo.
##### Comparison\_Model\_Theory.py
##### Modele\_N\_recepteurs.py
Contains several functions to compare the theoretical BER with a statistical BER calculated using the Monte Carlo method.
Contient des fonctions pour calculer un taux d'erreur en suivant le modèle du canal parfait avec la méthode de Monte-Carlo.
##### Model\_N\_receivers.py
Des exemples d'utilisation sont donnés dans `Comparaison_Modele_Theorie.py` ainsi qu'en fin de fichier.
Contains functions to calculate an error rate by following the ideal channel model with the Monte-Carlo method.
##### Theorie\_N\_recepteurs.py
Usage examples are given in `Comparison_Model_Theorie.py` and at the end of the file.
Contient des fonctions pour calculer le taux d'erreur théorique à l'aide de la formule développé dans le rapport (et du pseudo-code qui y est donné).
##### Theory\_N\_receivers.py
Des exemples d'utilisation sont donnés dans `Comparaison_Modele_Theorie.py` ainsi qu'en fin de fichier.
Contains functions to calculate the theoretical error rate using the formula developed in the report (and the pseudo code given therein).
##### Recherche\_Optimum.py
Usage examples are given in `Comparaison_Modele_Theorie.py` and at the end of the file.
Contient l'algorithme de recherche d'optimum de répartition de puissance. Une implémentation personnelle est comparée à une solution existante. Il s'appuie sur scipy et sur le fichier `Theorie_N_recepteurs.py`.
##### Find\_Optimum.py
Son fonctionnement est détaillé dans notre rapport, et des explications sur les matrices utilisées dans l'optimisation sont données en début de fichier.
Contains the algorithm for searching for the optimum power distribution. A custom implementation is compared to an existing solution. It is based on scipy and on the file `Theorie_N_receptors.py`.
Its behavior is detailed in our report, and explanations on the matrices used in the optimization are given at the beginning of the file.
# Annexes
## Appendixes
## OFDMA
### OFDMA
Nous avons cherché à reproduire le flowgraph de la publication suivante, mais sans succès : <a name="https://www.researchgate.net/publication/322924686_OFDMA_Simulations_on_GNU_Radio">https://www.researchgate.net/publication/322924686_OFDMA_Simulations_on_GNU_Radio</a>
We tried to reproduce the flowgraph of the following publication, but without success : <a name="https://www.researchgate.net/publication/322924686_OFDMA_Simulations_on_GNU_Radio">https://www.researchgate.net/publication/322924686_OFDMA_Simulations_on_GNU_Radio</a>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment