# \[ANN\] DigitalComm.jl - Tools and utilities for digital communication

**URL:** <https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595>\
**Category:** Package Announcements\
**Created:** [June 24, 2019, 8:29am UTC](https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595 "2019-06-24T08:29:21Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![RGerzaguet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rgerzaguet/32/45492_2.png) [@RGerzaguet](https://discourse.julialang.org/u/RGerzaguet)\
**Post date:** [June 24, 2019, 8:29am UTC](https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595/1 "2019-06-24T08:29:21Z")

</div>

Hello everyone,

It is my pleasure to announce [DigitalComm.jl](https://github.com/RGerzaguet/DigitalComm.jl) a simple package that proposes some tools and functions associated to digital communications simulations.  
The package will be extended later on and currently proposes tools to

- Create binary//byte sequences
- Propose symbol modulation (Quadrature amplitude Modulation)
- … and demodulation (also a max-log symbol demapper)
- and many state of the art multicarrier waveforms (OFDM, FBMC, GFDM, BF-OFDM …)

Some simple examples (Bit Error Rate (BER) computation, power spectral density calculation) are also proposed.

## Objectives

The purpose is to propose a common framework (similar to what numpy can propose) written in Julia. There are in my opinion some advantages to propose a Julia ecosystem

- Speed for monte carlo simulation (typically BER calculation)
- Open source code (compared to alternative like Matlab)
- Possibility to use the tools on ARM devices. In my research I work quite a lot on Zynq architecture (i.e ARM cortex A9) which support Julia.
- Easy C integration (for low level call).

## Some very minimal results

Minimal Transmitter receiver link with additive white Gaussian noise

```
			# ---------------------------------------------------- 
			# --- Transmitter
			# ---------------------------------------------------- 
			# --- Parameters 
			snr = 20;
			mcs = 16;
			nbBits = 1024* Int(log2(mcs));
			# --- Binary sequence generation 
			bitSeq = genBitSequence(nbBits);
			# --- QPSK mapping
			qamSeq = bitMappingQAM(mcs,bitSeq);
			# ---------------------------------------------------- 
			# --- Channel  
			# ---------------------------------------------------- 
			# --- AWGN
			# Theoretical power is 1 (normalized constellation)
			qamNoise, = addNoise(qamSeq,snr,1);
			# ----------------------------------------------------
			# --- Rx Stage: SRRC
			# ----------------------------------------------------
			# --- Binary demapper
			bitDec	= bitDemappingQAM(mcs,qamNoise);
			# --- BER measure
			ber = sum(xor.(bitDec,bitSeq)) /length(bitSeq);

```

which leads to a classic noisy constellation

 ![constellation](https://global.discourse-cdn.com/julialang/original/3X/4/5/45ed09df63384c874a62844d94f3e8b6f769a0cd.jpeg)

Other examples are provided in the documentation.

## Perspectives

Any comment feedback or demand is welcome. Please note that I am (absolutely) not a Julia expert (mostly done some C and Matlab) so feel free to propose enhancement/ modifications and advices.  
Any PR, support, suggestion is really welcome ! 🙂

In the near future, it is expected to have some tools associated to

- MIMO support (Alamouti and so fort)
- Multipath channel models (correlated Rayleigh channel)
- Other modulation support (FSK …)  
And any other point suggested.

---

<div class="post-metadata">

**Author:** ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)\
**Post date:** [June 24, 2019, 9:12am UTC](https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595/2 "2019-06-24T09:12:05Z")

</div>

Excellent start, I hope this will soon supersede MATLAB’s **Communications System Toolbox** which is still the _defacto standard_ in my field, unfortunately. This may be a good chance to try out this package with my students the coming semester, we’re already having licensing issues with MATLAB currently. Thanks for sharing this work.

---

<div class="post-metadata">

**Author:** ![mbaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbaz/32/17295_2.png) [@mbaz](https://discourse.julialang.org/u/mbaz)\
**Post date:** [June 24, 2019, 2:19pm UTC](https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595/3 "2019-06-24T14:19:52Z")

</div>

Thanks for sharing this. I have developed my own code for my research, but it’s not ready for a public package, so I’m glad you’ve been able to get something out there. I’ll take a look later and see if I can contribute.

---

<div class="post-metadata">

**Author:** ![MA\_Laforge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ma_laforge/32/385_2.png) [@MA\_Laforge](https://discourse.julialang.org/u/MA_Laforge)\
**Post date:** [July 29, 2019, 3:18pm UTC](https://discourse.julialang.org/t/ann-digitalcomm-jl-tools-and-utilities-for-digital-communication/25595/4 "2019-07-29T15:18:06Z")

</div>

This is unfortunate: I had searched as much as I could to find a package like this one in the package registry and on Julia Observer.

I _ **just** _ registered a package called `PhysicalCommunications.jl` a few days ago:  
 → [https://github.com/ma-laforge/PhysicalCommunications.jl](https://github.com/ma-laforge/PhysicalCommunications.jl)

`DigitalComm.jl` might have been a good home for my eye-diagram & Maximum LFSR algorithms.

_ **Note:** _ I called my module “PhysicalCommunications” simply because I was providing “Analog” tools (eye-diagram) for observing channel quality  
… but really that is meant to observe _ **digital signalling** _ - so `DigitalComm.jl` _ **is** _ a better name.

I would normally have just called it “Communications”, but in the Julia context, I did not want it confused with socket communications, or something similar.

_ **Also note:** _ I have recently asked a question on the “Signal Processing” forum about creating a “JuliaTelecom” group:  
 → [Would it be worth creating a "JuliaTelecom" Julia group?](https://discourse.julialang.org/t/would-a-juliatelecom-julia-group-worth-creating/26798)
