I'm working on a modem system using a 16-QAM scheme. The transmitter runs an IFFT to modulate the signal, and has a 12-bit DAC. The receiver runs an FFT to demodulate the signal, and has a 12-bit ADC.

Here are the general parameters:

  • Sample rate is 512,000 SPS
  • FFT size is 64 samples
  • 4 bits per bin/frequency with a total of 10 bins/frequencies.
  • Frequencies are in the range 32KHz to 104KHz. Frequency spacing is 8KHz.
  • The rectangular 16-QAM constellation diagram is similar to this: http://en.wikipedia.org/wiki/File:QAM16_Demonstration.gif

The IFFT on the transmitter produces two 64 element arrays, real and imaginary. The transmitter has a 12-bit DAC available to transmit the signal.

I'm having trouble understanding exactly how to transmit this output of the IFFT? I've read in theory that I need to combine the two arrays (imaginary and real parts) via sine and cosine, but am having trouble understanding how this concept practically gets done in terms of programming.

Can anyone outline briefly (maybe a snippet of code or something?) how I combine the two 64 element arrays of real and imaginary data to feed into the DAC to transmit the signal on the wire?


If you want to transmit a complex signal, you need two independent channels: one for the real part of the signal and another for the imaginary part. This makes sense, as the complex plane is two-dimensional. The question is, how can those channels be realized? It depends on what equipment you have available.

  • If you have multiple wires/DACs that can be used to convey the signal, then you can just use baseband transmission. Route the real part of your signal to one DAC and the imaginary part to the other. These would then feed separate transmission lines to carry the signals to the receiver. This method isn't often used, though. Why use multiple wires when you can just...

  • If you have a single wire/DAC that can be used to transmit the signal, then you can use carrier modulation. Basically, you would modulate the real and imaginary parts of the signal onto separate sinusoidal carriers (this is done by multiplication by the desired carrier), which are then observed at the receiver and reassembled into the composite complex signal that you started with.

    A common technique for modulating complex signals is called I/Q modulation. This scheme uses a pair of sinusoids at the same frequency that have a phase offset of 90 degrees. This particular phase offset results in carrier signals that are orthogonal to one another, which allows the receiver to (in a perfect world) losslessly recover the two modulated signals. In practice, there will always be some "crosstalk" between the I and Q channels (which you could think of as carrying the real and imaginary parts of your modulating signal, respectively).

In your question, you suggested that you have a single DAC, so I would go the carrier modulation route. You'll need to select a carrier frequency appropriate for your application, taking the following things into account:

  • The bandwidth of your modulating signal.

  • The propagation medium to the receiver. If this is a wire, then you can often get by with as low of a carrier frequency as your signal bandwidth will allow (barring any limitations imposed by the path to the receiver, such as transformer coupling or other details). Wireless links often have quite high carrier frequencies (in the tens, hundreds, or thousands of MHz), depending upon characteristics such as desired range, transmit power, licensing, propagation environment, etc.

  • Hardware limitations in your transmitter/receiver. You need to generate the carrier-modulated signal somehow! If you don't have analog hardware to do that for you (i.e. you output a pair of baseband signals and an analog transmitter upconverts it to an I/Q carrier-modulated output), then you'll need to synthesize the carrier-modulated signal digitally. That may or may not be possible given your system's constraints on DAC sample rate, processing throughput, and so on.

FYI, the design that you described for your system sounds a lot like orthogonal frequency-division multiplexing (OFDM), albeit with a lot of unused carriers. You might find some useful information if you study up on how those systems are usually implemented.

|improve this answer|||||
  • $\begingroup$ Thanks for your detailed response! ... its much appreciated. In terms of the carrier medium, its a 10km long cable with available bandwidth of only approx 30KHz to 110KHz. As you suggest I will look into implementing I/Q carrier modulated output digitally. Its a requirement of the system that as little amount of analog hardware be used by both the transmitter and receiver. Regarding hardware the system will likely be a microcontroller+FPGA+ADC for the receiver and microcontroller+FPGA+DAC for the transmitter. Planning to put the FFT/IFFT function onto the FPGAs. $\endgroup$ – dodgy_coder May 22 '14 at 12:10

You can also use conjugate sequence that results in real valued IFFT only eliminating the need of additional channel for imaginary part.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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