Forum Discussion
I also developed an OFDM modem using the DE2-115 and terasic THDB board. I found that the most fool proof method was to look very closely at the pin assignments in the example projects provided with the THDB card, then replicate it perfectly in your project. Once you get the DAC and ADC up and running, it should be fairly straightforward to develop an OFDM module. You must simulate first though. You have almost no hope without simulating first. Do it in a modular fashion. An OFDM MODEM starts with the IFFT. Say you use a 128 subcarrier system, you need to pass to the IFFT 128 real and 128 imaginary samples, one by one. Say you use Binary Phase Shift Keying, each real and imaginary input represents a point on the constellation diagram. For BPSK, each complex point can encode only 1 bit because you set the imaginary input to zero. So you pass in the real input as, say, 1000 or -1000 (in decimal), and the imag input as zero. The IFFT then creates a real and imaginary 128 point time domain waveform which you must multiply by the cosine (for real) and sine (for imaginary) of the carrier frequency. The carrier is easy to generate using a Numerically Controlled Oscillator. Add the two waveforms, filter and send to the DAC.
Then, do the reverse process at the receiver (quadrature multiplication etc), input to FFT. You should get out the same as you put in to the IFFT at the transmitter. For coherent OFDM, the information is in the absolute positioning of the received constellation points, but for a number of reasons, you'll get variations in their positioning. To use coherent OFDM, you must try to get perfect timing and correct for rotations in the channel. If you are developing this system alone with little experience, I would recommend using DIFFERENTIAL encoding, where the information resides not in the absolute position of the received points, but in the difference between neighbouring subcarriers. To offer you hope, however, all the tools for building an OFDM MODEM are in Quartus, but you need to take it step by step, simulate every step of the way and try to overcome problems one by one (at the transmitter: cyc pre insertion, at the receiver: timing (look at Schmidl Cox), demapping (look at Cordic algorithms). It's not an easy task for one person but it *is* possible.