I've implemented a burst protocol vaguely inspired to 802.11, with 1024-subcarriers FFTs, short training symbols that use ZC sequences, and minimum length sequences-based LT symbols.
I've implemented an approach for integer and fractional CFO correction inspired by what is done in DVB-T and -- surprise -- it doesn't work that well.
In particular, I have that the minor numerical errors in the estimations of coarse & fine correction (things in the order of 10^-5) sum up over a frame (I have no residual correction, since I haven't put any pilots in the data symbols) and then at the end I have huge errors and the system does not work as expected: in simulations with AWGN, I see that the difference between using this correction (which is supposed to do nothing, since I have no CFO) and not using it is in the order of 8 dB... Even worse, the whole system is expected to be implemented on an FPGA, where numerical issues will be even greater.
I have tried looking around, but got a bit lost.... what are the newest "trends" in OFDM frequency (and possibly timing, though I have hoped that my oscillators will be so good as to be able to ignore it over a frame) synchronization? Based on recommendations found in this forum I've just ordered the Schwarzinger's book, but is there any silver bullet in the field? I've skimmed through the wikipedia page of Costas loops and it mentions that it works well for OFDM, but would it work in my case?
(sorry, embedded engineer here, many times I think I've truly understood something but then I get baffled by tiny footnotes... and many times I've spent time studying an approach only to found out hours later that it is something that works on paper and has been tested just in simulation :S)
Thanks a lot in advance for any suggestion!
Now you know why the 802.11 uses pilots. The initial estimate of frequency offset made with the preamble will always (repeat always) have a residual error. You can estimate the error by the phase rotation of the pilot between successive ofdm symbols. The reason that 802.11 has a low frequency and a high frequency pilot is that sample clock errors also contribute to pilot rotation... you need two pilots to solve for the two unknowns...residual frequency offset (both pilots spin at same rate) and clock error, (high frequency pilot spins faster than low frequency pilot).
Thanks for your answer! Yes, I've tried to be smarter than the guys who created 802.11 (well, in the end, what do they know about protocols, right?? :-|) and -- unexpectedly -- it didn't turn out well :S :D
I'm now integrating in the protocol the pilots as you've suggested (plus, since I've included a full LT symbol every N data symbols for equalization purposes, I'll exploit it too for improving even further the correction).
Thanks again and have a nice day!
If you do not use interlevers can you use the data symbols decoded and find the channel estimate.If you refine channel estimate from symbol to symbol the channel estimate should take care of any residual CFO rotation.You may do it on decision directed symbols and use them as pilot symbols.
You can use this for AWGN channel also.The channel estimate will take care of CFO rotation.
I do have interleavers in between, that could add a bit more on the complexity side, but I'll keep your suggestion in mind, thanks!
When you say 'implemented' you mean in hardware or software?
Given what you are seeing in AWGN, it seems to me that you may be getting your symbol synchronization wrong. If this happens, the FFT window slides and you get inter-symbol interference. You can improve your symbol sync using the preambles that I guess occur at the start of each frame - use a sliding correlator or a matched filter.
When you have sorted out your symbol sync, you can then engage with frequency sync which you can also do with a sliding correlator or matched filter of the preamble in the frequency domain.
I hope this helps.
Thanks for your suggestions!
I have a full GNU Radio/C++ simulation tested on a B210 board, plus the encoding chain already in VHDL -- even though what I am looking at right now are just C++ and octave simulations.
To get the integer offset I do correlate the two LT symbols with different offset and get the peak -- although this does not look to be very robust, since the peak of the correlation result is not that higher than the surrounding, and sometimes I've obtained the wrong offset (with the expected disastrous results).
As I've mentioned in the message above, I'll now try to add the pilots to improve the estimates...
Have a nice day!
You can correlate the CP with then of the OFDM symbol... same signal except for cannel distortion and phase offset due to residual frequency error... not a good SNR because not much data in CP. You have to average over multiple correlation intervals..... cleans right up!
Oups, yes, I've totally "forgot" that I also have the CP that I can exploit :S
Thanks again! :)
I have worked implementing OFDM-based optical communication systems using FPGAs. My system is also inspired by the 802.11. Below I copy a few paragraphs from an article we have written about this implementation which refers to the problems and solutions of the SCFO. Give you the references that we have cited and I hope it will be of help to you.
The SCFO has been thoroughly analyzed in the literature (for example see  and references therein), where it is shown that can cause three main problems: subcarrier phase rotation, inter-symbol interference (ISI) and inter-carrier interference (ICI). The ISI comes from the fact that the different sampling periods between transmitter and receiver causes a time drift of the optimum sample from which the FFT window should begin, this effect takes several OFDM symbols to become problematic and can be estimated to move the window one sample forward or backward when the accumulated time drift is significative .
On the other hand, subcarrier phase rotation and ICI are seen at the frequency domain after the FFT. The first one is a common rotation factor in each OFDM symbol that grows linearly with the subcarrier index k and with the OFDM symbol index m :
Pkm = S k m with S = 2 pi Nt Delta / N
Where N is the FFT size, Nt = N + Ncp and Delta = (ft - fr)/fr is the normalized frequency difference between oscillators (ft and fr are the frequencies of transmitter and receiver, respectively). This phase rotation can be estimated using the training preamble and/or pilots embedded in the OFDM symbols . Once estimated, it can be compensated rotating the channel frequency equalizer coefficients by e-jSkm. In our system, we only need to rotate a quarter of the equalizer coefficients as the rest can be obtained using the linear interpolator proposed above, this approach is similar to . The second distortion in the frequency domain is the presence of ICI due to the loss of orthogonality between subcarriers , it is dependent on the data carried at each subcarrier and can be seen as a random interference. Moreover, it grows with the subcarrier index, so it is higher for OFDM systems with large FFT sizes.
 Z. Zhang, Q. Zhang, Y. Li, Y. Song, J. Zhang, and J. Chen, “A Single Pilot Subcarrier-Based Sampling Frequency Offset Estimation and Compensation Algorithm for Optical IMDD OFDM Systems,” IEEE Photonics J. 8, 1–9 (2016).
 M. Chen, J. He, J. Tang, and L. Chen, “Pilot-aided sampling frequency offset estimation and compensation using DSP technique in DD-OOFDM systems,” Opt. Fiber Technol. 20, 268 – 273 (2014).
 T. Pollet, P. Spruyt, and M. Moeneclaey, “The BER performance of OFDM systems using non-synchronized sampling,” in 1994 IEEE GLOBECOM. Communications: The Global Bridge, (1994), pp. 253–257 vol.1.
Thanks for your suggestions! :)
I'll have a look at your paper and the papers you've linked in.
Have a nice day!