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

Hello everyone,

It is my pleasure to announce 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

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 ! :slight_smile:

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.
8 Likes

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.

1 Like

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.

1 Like

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

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 a "JuliaTelecom" Julia group worth creating?