Hello C++-fans Berlin,
at our November Meetup Heiko Bloch will talk about Quadrature Amplitude Modulation (QAM) in C++.
As usual we'll meet at 19:00h for socializing and the talk starts at 20:00h.
Quadrature Amplitude Modulation (QAM) is used for wireless and cable data transmissions. While QAM is notoriously straightforward mathematically, it is in permanent need of amendments and trade-offs to work properly in the physical world.
We discuss the C++ part of a transmitter/receiver (TX/RX) pair that is fed with binary data from a pipe, encodes into a QAM signal, performs DA and AD conversions on microcontrollers, and recovers the original data. It can be used with different analog channels, including fiber optic and long wave radio.
The implementation goes a long way to cope with distortions, discretization artifacts, out-of-band noise (literally), in-band noise, out-of sync clocks, varying signal strength, and blocking input. It is vital to control error propagation during signal processing and apply forward error correction.
Electromagnetic compatibility requirements restrain signal generation in software and call for low pass filters in hardware. As timing and speed are critical, timed Direct Memory Access (DMA) is mandatory for data transport to and from the Digital to Analog Conversion (DAC) and ADC units.
Indeed, timing is so critical that when you put a finger on one of the quartz crystals that drive the DMA channels, observable program behavior changes. Cope with it in software!