diff options
Diffstat (limited to 'dpd')
-rw-r--r-- | dpd/README.md | 40 | ||||
-rw-r--r-- | dpd/environment.yml | 134 |
2 files changed, 20 insertions, 154 deletions
diff --git a/dpd/README.md b/dpd/README.md index 24611d9..1b481c0 100644 --- a/dpd/README.md +++ b/dpd/README.md @@ -81,32 +81,30 @@ essential that there is no nonlinearity in the RX path! Software Setup -------------- -We assume that you already installed *ODR-DabMux* and *ODR-DabMod*. In order to -satisfy dependencies for the predistortion, you can install all required python -modules using *conda*. To obtain the *conda* command line tool, install -[miniconda](https://conda.io/docs/user-guide/install/linux.html) and do the -beginners tutorial. It helps you keep the global python environment clean and -install the exact same package versions as we used for development. - -``` -conda env create -f dpd/environment.yml -source activate dab -``` - -Alternatively you can also install the dependencies from your distribution. -You will need at least scipy, matplotlib and python-zeromq, and maybe more. - +We assume that you already installed *ODR-DabMux* and *ODR-DabMod*. +You should install the required python dependencies for the DPDCE using +distribution packages. You will need at least scipy, matplotlib and +python-zeromq. Use the predistortion ---------------------- -Run the multiplexer and the modulator: +Make sure you have a ODR-DabMux running with a TCP output on port 9200. + +Then run the modulator, with the example dpd configuration file. ``` -ODR-DabMux/src/odr-dabmux ../simple.mux -ODR-DabMod/odr-dabmod dpd/dpd.ini +./odr-dabmod dpd/dpd.ini ``` +This configuration file is different from usual defaults in several respects: + + * logging to /tmp/dabmod.log + * 4x oversampling: 8192000 sample rate + * a very small digital gain, which will be overridden by the DPDCE + * predistorter enabled + * UHD output with a rather low TX gain, which will be overridden by DPDCE + The DPDCE uses automatic gain control for both TX and RX gain to get both a high quantisation quality for the most frequent amplitude regions and a high enough back-off so the peaks are also quantised correctly. This means that the @@ -125,6 +123,7 @@ change. cd dpd python main.py --plot ``` + The DPDCE now does 10 iterations, and tries to improve the predistortion effectiveness. In each step the learning rate is decreased. The learning rate is the factor with which new coefficients are weighted in a weighted mean with the old @@ -137,7 +136,8 @@ time stamp and its label. Following plots are generated chronologically: - ExtractStatistic: Extracted information from one or multiple measurements. - Model\_AM: Fitted function for the amplitudes of the power amplifier against the TX amplitude. - Model\_PM: Fitted function for the phase difference of the power amplifier against the TX amplitude. - - adapt.pkl: Contains the settings for the predistortion. To load them again without further measurements, you can use `apply_adapt_dumps.py`. + - adapt.pkl: Contains all settings for the predistortion. + You can load them again without doing measurements with the `apply_adapt_dumps.py` script. - MER: Constellation diagram used to calculate the modulation error rate. After the run you should be able to observe that the peak-to-shoulder @@ -198,7 +198,7 @@ TODO same. - At the moment we assume that the USRP RX gain has to be larger than 30dB and the received signal should have a median absolute value of 0.05 in order to - have a hight quality quantization. Do measurements to support or improve + have a high quality quantization. Do measurements to support or improve this heuristic. - Check if we need to measure MER differently (average over more symbols?) - Is -45dBm the best RX feedback power level? diff --git a/dpd/environment.yml b/dpd/environment.yml deleted file mode 100644 index 8abedb2..0000000 --- a/dpd/environment.yml +++ /dev/null @@ -1,134 +0,0 @@ -name: dab -channels: -- jochym -- defaults -dependencies: -- _nb_ext_conf=0.4.0=py27_1 -- anaconda-client=1.6.3=py27_0 -- backports=1.0=py27_0 -- backports_abc=0.5=py27_0 -- bleach=1.5.0=py27_0 -- cairo=1.12.18=6 -- clyent=1.2.2=py27_0 -- configparser=3.5.0=py27_0 -- cycler=0.10.0=py27_0 -- dbus=1.10.10=0 -- decorator=4.0.11=py27_0 -- entrypoints=0.2.3=py27_0 -- enum34=1.1.6=py27_0 -- expat=2.1.0=0 -- fontconfig=2.11.1=6 -- freetype=2.5.5=2 -- functools32=3.2.3.2=py27_0 -- get_terminal_size=1.0.0=py27_0 -- glib=2.50.2=1 -- gst-plugins-base=1.8.0=0 -- gstreamer=1.8.0=0 -- harfbuzz=0.9.39=1 -- html5lib=0.9999999=py27_0 -- icu=54.1=0 -- ipykernel=4.6.1=py27_0 -- ipython=5.3.0=py27_0 -- ipython_genutils=0.2.0=py27_0 -- ipywidgets=6.0.0=py27_0 -- jinja2=2.9.6=py27_0 -- jpeg=8d=2 -- jsonschema=2.6.0=py27_0 -- jupyter=1.0.0=py27_3 -- jupyter_client=5.1.0=py27_0 -- jupyter_console=5.1.0=py27_0 -- jupyter_core=4.3.0=py27_0 -- libffi=3.2.1=1 -- libgcc=5.2.0=0 -- libgfortran=3.0.0=1 -- libiconv=1.14=0 -- libpng=1.6.27=0 -- libsodium=1.0.10=0 -- libxcb=1.12=1 -- libxml2=2.9.4=0 -- markupsafe=0.23=py27_2 -- matplotlib=2.0.2=np112py27_0 -- mistune=0.7.4=py27_0 -- mkl=2017.0.1=0 -- natsort=5.0.3=py27_0 -- nb_anacondacloud=1.4.0=py27_0 -- nb_conda=2.2.0=py27_0 -- nb_conda_kernels=2.1.0=py27_0 -- nbconvert=5.2.1=py27_0 -- nbformat=4.3.0=py27_0 -- nbpresent=3.0.2=py27_0 -- notebook=5.0.0=py27_0 -- numpy=1.12.1=py27_0 -- openssl=1.0.2k=2 -- pandas=0.20.1=np112py27_0 -- pandocfilters=1.4.1=py27_0 -- pango=1.39.0=0 -- path.py=10.3.1=py27_0 -- pathlib2=2.3.0=py27_0 -- pcre=8.39=1 -- pexpect=4.2.1=py27_0 -- pickleshare=0.7.4=py27_0 -- pip=9.0.1=py27_1 -- pixman=0.32.6=0 -- plotly=2.0.9=py27_0 -- prompt_toolkit=1.0.14=py27_0 -- ptyprocess=0.5.2=py27_0 -- py2cairo=1.10.0=py27_2 -- pycairo=1.10.0=py27_0 -- pygments=2.2.0=py27_0 -- pyparsing=2.1.4=py27_0 -- pyqt=5.6.0=py27_2 -- python=2.7.13=0 -- python-dateutil=2.6.0=py27_0 -- pytz=2017.2=py27_0 -- pyyaml=3.12=py27_0 -- pyzmq=16.0.2=py27_0 -- qt=5.6.2=0 -- qtconsole=4.3.0=py27_0 -- readline=6.2=2 -- requests=2.14.2=py27_0 -- scandir=1.5=py27_0 -- scikit-learn=0.18.1=np112py27_1 -- scipy=0.19.0=np112py27_0 -- setuptools=27.2.0=py27_0 -- simplegeneric=0.8.1=py27_1 -- singledispatch=3.4.0.3=py27_0 -- sip=4.18=py27_0 -- six=1.10.0=py27_0 -- sqlite=3.13.0=0 -- ssl_match_hostname=3.4.0.2=py27_1 -- subprocess32=3.2.7=py27_0 -- terminado=0.6=py27_0 -- testpath=0.3.1=py27_0 -- tk=8.5.18=0 -- tornado=4.5.1=py27_0 -- tqdm=4.11.2=py27_0 -- traitlets=4.3.2=py27_0 -- wcwidth=0.1.7=py27_0 -- wheel=0.29.0=py27_0 -- widgetsnbextension=2.0.0=py27_0 -- yaml=0.1.6=0 -- zeromq=4.1.5=0 -- zlib=1.2.8=3 -- atk=2.8.0=0 -- gdk-pixbuf=2.28.2=0 -- gtk2=2.24.28=0 -- pygobject2=2.28.6=0 -- pygtk2=2.24.0=0 -- pip: - - backports-abc==0.5 - - backports.shutil-get-terminal-size==1.0.0 - - backports.ssl-match-hostname==3.4.0.2 - - ipython-genutils==0.2.0 - - jupyter-client==5.1.0 - - jupyter-console==5.1.0 - - jupyter-core==4.3.0 - - multiprocessing==2.6.2.1 - - nb-anacondacloud==1.4.0 - - nb-conda==2.2.0 - - nb-conda-kernels==2.1.0 - - prompt-toolkit==1.0.14 - - pynverse==0.1.4.4 - - zmq==0.0.0 -prefix: /home/andreas/miniconda2/envs/dab - |