Steve, Thank you very much for taking the time to answer my question in detail. I will dig out the papers you reference and take a read.
Re the Gray map, that all makes perfect sense now with the hindsight of your explanation! There are clearly a lot of things to learn in the source code of WSJT-X. James (VK3JPK) > On 30 Jul 2019, at 1:37 am, Steven Franke via wsjt-devel > <wsjt-devel@lists.sourceforge.net> wrote: > > Hi James, > >> The source code in question is lines 168 through 215 of lib/ft8/ft8b.f90 >> (Git tag wsjtx-x 2.1). This source code appears to implement a “soft >> demapper” that takes groups of 1, 2 or 3 successive symbol observations and >> turns these into groups of 3, 6 or 9 log likelihood ratios that are >> subsequently consumed by one of the LDPC decoders. As part of the demapping >> process, the Gray code permutation applied to symbols at the transmitter is >> removed. >> >> Is there a textbook or specific journal/conference papers that describe how >> this demapper works? I can figure out the algorithm being used, but I am >> looking for an explanation as to why that algorithm generates a good >> approximation to the LLR for FT8’s 8-GFSK modulation, and what specific >> channel impairments it is trying to deal with. > > The code that you referenced implements noncoherent sequence estimation for > groups of symbols of length, N, for N = 1, 2, 3. When the channel happens to > be coherent over times that span several symbols this technique can > significantly improve sensitivity. > > A reference that discusses this technique is: > > Simon, M.K., and D. Divsalar, “Maximum-Likelihood Block Detection of > Noncoherent Continuous Phase Modulation,” IEEE Trans. on Communications, Vol. > 41, No. 1, January 1993, p.90. > > As you might expect, there are dozens of articles on the topic — but this one > is a good overview. > > After sequence estimation has determined a soft metric for each of the 2^N > possible symbol sequences, the next step is to derive soft bit metrics (“log > likelihoods”) for each of the 3*N bits that are conveyed by the sequence of > length N. > > There are many ways to do this and no one way is best for all possible > channels. We use a max-log approximation to the numerator and denominator of > the metric given in equation (17) of this reference: > > Souryal, M. R., E. G. Larsson, B. Peric and B. R. Vojcic, “Soft-Decision > Metrics for Coded Orthogonal Signaling in Symmetric Alpha-Stable Noise,” IEEE > Transactions on Signal Processing, Vol. 56, No. 1, January 2008, p. 266. > >> I was also wondering how the specific Gray code mapping in FT8 was chosen? >> It is clearly not the “reflected binary code” that normally passes for a >> Gray code, so clearly it is something else that I don’t yet understand. > > The Gray mapping is defined such that the bit sequences associated with > neighboring tones differ in only one position. > > With reference to subroutine genft8.f90, note that the 8 successive entries > in the graymap vector are indexed by indices formed from 3 successive bits, > and each graymap vector element represents a tone. > > The graymap vector is defined like this: > > integer graymap(0:7) > data graymap/0,1,3,2,5,6,4,7/ > > For example, graymap(6)=4. This means that the bit sequence 110 (6) is mapped > to tone 4. > > Here’s the correspondence between tones and bits that results from the > graymap definition given above: > > tone bits > 0 000 > 1 001 > 2 011 > 3 010 > 4 110 > 5 100 > 6 101 > 7 111 > > I hope that this addresses your questions. > > Steve k9an > >> >> James (VK3JPK) >> >> >> >> _______________________________________________ >> wsjt-devel mailing list >> wsjt-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/wsjt-devel > > > > _______________________________________________ > wsjt-devel mailing list > wsjt-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wsjt-devel _______________________________________________ wsjt-devel mailing list wsjt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wsjt-devel