I am trying to write an OFDM modem. I've already written a QAM modem, which I'm using as a basis for this project. The way I'm doing this currently is by spinning up several QAM modulators, each with a carrier frequency corresponding to a different DFT bin, and adding the waves together. On the decode side, I'm spinning up a QAM demodulator for each frequency and feeding the samples into each one.

For instance, I'm trying to use 52 carriers. My DFT has a bin size of 46.875 Hz. I use a symbol rate of 31.25 Hz, because I only process 2/3 of each symbol. My subcarriers are on the following frequencies: 1242.1875 Hz, 1289.0625 Hz, 1335.9375 Hz, etc.

Even though the QAM modem works fine on a clear channel, multiple QAM modems spaced apart as mentioned seems to cause problems. Here is a constellation from one of the demodulators:

QAM constellation

Also, here is the output audio file from the OFDM modulator.

I am reasonably confident that the QAM modem is not the issue, as I have tested that it behaves properly with regards to synchronization and noisy channels.

  • $\begingroup$ Have you made sure that the subcarriers are orthogonal? $\endgroup$
    – MBaz
    Apr 8, 2022 at 0:08

1 Answer 1


To emulate OFDM with QAM modems with each carrier spaced by $1/T$ where $T$ is the QAM symbol duration, it will be critical that the QAM transmitter does not use any pulse shaping (meaning that it must send rectangular pulses without any tight filtering) and the receiver also has no tight filtering and either demodulates continuously or on even symbol boundaries. Under this condition, the individual QAM waveforms will have a spectral envelope as given by the Fourier Transform of the rectangular pulse (a Sinc function, or as a power spectral density, a Sinc-squared), with (importantly!) nulls spaced by $1/T$ in frequency, and thus required to ensure orthogonality of the subcarriers. With pulse shaping (as would typically be done in any QAM modem operating independently due to bandwidth efficiency requirements), the spectrum will be inevitably wider and thus will cause inter-carrier interference.

Any other subsequent filtering if not done carefully can also degrade the orthogonality for the same reason. Frequency (and time as Marcus mentions in the comments) offsets can also be a factor, but I am assuming the QAM modem has no issue with determining accurate carrier and time recovery-- however we must be certain that the transmitter modems and receiver modems are tightly synchronized in frequency and time (the tx components share a common clock, and the rx components share a common, possibly different than tx clock).

  • 1
    $\begingroup$ Note that for something to be OFDM, and the orthogonal carrier frequency, the rectangular (non-)pulse of the same length as number of subcarriers are not fully sufficient: The symbols also need to be time-aligned. Any thing that implements that is inherently the IDFT. $\endgroup$ Apr 8, 2022 at 21:16
  • 1
    $\begingroup$ @MarcusMüller yes very good point! I edited second paragraph to include “time” and not just frequency. $\endgroup$ Apr 8, 2022 at 21:48
  • $\begingroup$ If I could only double-upvote... $\endgroup$ Apr 8, 2022 at 21:49
  • 1
    $\begingroup$ Thanks, this was a big help. I ended up substantially rewriting my code - the source of my problem was the timing recovery, as any slight offset would cause the demodulator to return garbage, which was unable to be corrected. $\endgroup$
    – Stephen D.
    Apr 10, 2022 at 23:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.