HF Messaging with OFDM_c


In previous posts I examined the possible use of OFDM for HF messaging (Ref.1/2) and for voice (Ref.3). I introduced several channel models using Scicos: an 8 channel discrete model and a 64 channel model using IFFT/FFT. In the last post I concentrated on the IFFT transmitter. In this post I will focus on the FFT receiver.

Scicos OFDM IFFT 64Ch Transmitter

Fig.1 OFDM IFFT/FFT Modem Block Diagram
Fig.4 xn_Real IFFT & xn_Q Imag IFFT
Fig.5 OFDM 64Ch 16QAM IFFT Transmitter
Fig.6 OFDM 64CH 16QAM IFFT Tx Opt & Spectrum

As discussed in previous posts, data enters the modem at 9600bps and is converted into 64 parallel streams at 150bps. For 16QAM modulation, this is equivalent to I & Q streams at 37.5bd. Figure 1 shows the block diagram of the OFDM transmitter/receiver. Figure 2 shows the ScicosLab code used to generate the data. The “rand” function is used to generate a random matrix (64,40) consisting of 40 columns of 64channels. The interval is divided into 4 regions to give a random matrix with possible values of (-3,-1,1,3) as before for 16QAM. One column of 64 values for I & Q is fed into the IFFT function which generates 64 samples as shown in Figures 3 & 4. These are shifted out at 37.5*64=2400sps. Each IFFT value is over sampled 10x to effectively create a DAC. The samples create structures A1(real_xn) and A2(imag_xn) which feed the I & Q transmitter shown in Figure 5. To show the transmit spectrum without any pulse shaping the carrier is set at 10KHz (vs. voiceband 1500Hz.). Note the sinx/x shape with nulls at fc +/- 2400Hz.

Scicos OFDM FFT 64Ch Receiver

Fig.7 OFDM 64Ch 16QAM FFT Receiver
Fig.8 OFDM 64CH 16QAM FFT Rx Opt & Spectrum
Fig.9 ScicosLab Rx FFT Code
Fig.10 Transmit xn & X, vs Receive xn
Fig.11 Rx 16QAM Constellation

Figure 7 shows the OFDM 64Ch 16QAM FFT receiver. The received signal A3 is multiplied by coswct and sinwct to recover the xn_real and xn_imag IFFT samples that were sent from the transmitter. The receive equations are:

tx(t) = [xn_re(t)*coswct + xn_img(t)*sinwct] = Transmit Signal
rx(t) = tx(t)*coswct + tx(t)*sinwct = Receive Signal
re_rx(t) = xn_re(t)*cos^2wct + xn_img(t)*sinwct*coswct
re_rx(t) =[xn_re(t)/2 + xn_re(t)*cos2wct/2] + xn_img(t)*sin2wxt/2
After Low Pass Filtering to remove the double carrier component:
re_rx(t) = xn_re(t)/2
img_rx(t) = xn_img(t)/2
After integration over 1 sample time:
re_rx(t) =( xn_re(t)/2) * Tb
img_rx(t) =(xn_img(t)/2) * Tb

Figure 8 shows the received xn_real & xn_imag samples which are identical to the transmitted ones. Note the receive spectrum showing the baseband spectrum of xn and LPF reduced 2xwc carrier component. Figure 9 shows the ScicosLab code required to calculate the FFT. The received xn_real and xn_imag samples form structures A4 & A5 and these are input to the FFT. Figure 10 shows one column of the original 64xn samples and what was received, next to the recovered iFFT samples. Figure 11 shows the clean transmit constellation, with the receive constellation with slight displacement of points. This can be cleaned up by the round command.

Fig.13 HF Messaging with OFDM_c

Please send your comments, questions and suggestions to:

YouTube Channel
YouTube Channel


#1. “HF Messaging with OFDM_b”,

#2. – “HF Messaging with OFDM_a”,

#3. – “OFDM for SSB_USB”

By Jeremy Clark

Jeremy Clark is a Senior Telecommunications Engineer and Advanced Amateur Radio Operator VE3PKC. He is the author of E-Books on Telecommunications, Navigation & Electronics.