Hi Joe - Thanks for the new results! Getting ready for class here - so just a quick note. Your results, though more extensive than mine, point in the same direction. As it stands, sfrsd seems to be around 0.5 dB shy of kvasd. I have a long list of ideas to try to do better - but it will take time to sort through them.
To answer your question on optimizing metrics - the short answer is that they haven’t been optimized at all. Feel free to play with them. Intuitively, I like the one that I was using - but last night I played with yours and see that it’s not bad either. One task that I have on my list is to collect statistics on the probability of the second-best-symbol estimate being the correct symbol, as a function of the two probability metrics. I expect there to be a sweet spot where p2/p1 is near 0.5 and p1 is not too small and not too large where mr2sym is going to be useful. Collecting these statistics would help us decide which symbol metrics (yours or mine) are “better” for this purpose. This would also point the way toward a true Chase-type algorithm where we actually use the second-most-reliable symbols. At the moment, the only metric that is used is the probability associated with mrsym - and that is used in a crude way, as you pointed out. The idea would be to have some finite probability of replacing a symbol with mr2sym instead of marking it as an erasure - but only for symbols where mr2sym is reasonably likely to be the correct symbol. If/when we replace a symbol with mr2sym instead of marking it as an erasure, we’ll need to tell BM to re-calculate the syndromes - which is done using the last argument that I added to KA9Q’s routine. Last night, I found a potentially powerful metric to use as a stopping criterion. Note that the algorithm runs all ntrials before stopping at present. Hence, it is dog-slow, as you found out. I found that a good stopping criterion can be created by calculating nhard-n2ndbest where nhard is the number of symbols where the received symbol vector differs from the decoded codeword (the number of “hard” errors) and n2ndbest is the number of places where the second most reliable symbol is the *same* as the symbol in the decoded codeword. I found that a bad codeword rarely has n2ndbest larger than 2. I also found that a threshold like nhard-n2ndbest<45 (I’m not sure if 45 is the best - but you get the idea) works well. With this in mind - the average running time can be dramatically reduced if we simply stop (break out of the ntrials loop) when we find a codeword that meets this type of criterion. BTW, as currently configured, the ntrial loop breaks out after it finds 5000 codewords. This limits the effectiveness of increasing ntrials to large number (like 100000). To get the full benefit of large ntrials, you would probably need to increase that threshold to 20k or more - or just eliminate the threshold and implement something like the stopping criterion that I mentioned above. It is instructive to watch the results in sfrsd.log scroll by - you can see how sensitive the number of “found” codewords is to the selected erasure probabilities and the metrics… If you have time to play, feel free to mess around with sfrsd - or create an jtrsd and we can merge them later. Steve k9an > On Sep 25, 2015, at 8:11 AM, Joe Taylor <j...@princeton.edu> wrote: > > Hi Steve and all, > > I've added more lines to the table summarizing my tests of decoding > weak, isolated JT65A signals. As before, the final number on each line > is the number of valid decodes from a thousand files at > S/N=-24 dB. > > 1. WSJT-X (BM only) 2 > 2. WSJT (BM only) 5 > 3. WSJT-X + kvasd 189 > 4. WSJT-X + kvasd (thresh0=1, ntest>0) 207 > 5. WSJT-X + sfrsd (Linux) 302 > 6. WSJT-X + sfrsd (Win32) 309 > 7. WSJT-X + sfrsd (Linux, thresh0=1) 348 > 8. WSJT-X + sfrsd (Win32, thresh0=1) 350 > 9. WSJT + kvasd (Linux) 809 > 10.WSJT + kvasd (Win32) 809 > > 11.WSJT + sfrsd (10000) 464 > 12.WSJT + sfrsd (SFM no ntest 10000) 519 > 13.WSJT + sfrsd (SFM no ntest 20000) 543 > 14.WSJT + sfrsd (SFM no ntest 1000) 342 > 15.WSJT + sfrsd (SFM no ntest 100000) 706 > 16.WSJT + sfrsd (SFM no ntest 1000000) 786 (took 11 hours!) > > 17.WSJT + kvasd (SFM no ntest) 897 > > Test 11 simply replaced kvasd with sfrsd, with no other changes. Tests > 12-16 used Steve's metrics for the symbol probabilities in demod64a.f90 > and commented out the following lines in extract.F90: > > ! if(ntest.lt.50 .or. nlow.gt.20) then > ! ncount=-999 !Flag bad data > ! go to 900 > ! endif > > The number of random erasure vectors is specified for each of these > runs. Test 17 is a final run using kvasd. > > With "reasonable" numbers of random erasure trials, sfrsd seems to be > something like 0.5 dB shy of the sensitivity of kvasd. Steve, I know > you have already done some parameter-tuning for sfrsd, but possibly > there's still room for improvement? How did you choose the values 0.5 > 0.6 0.6 0.6 0.8 and the step locations 32 128 196 256, lines 197-207 in > sfrsd.c ? Have you thought about other possible ways to speed up the > search by eliminating some candidate erasure vectors? > > -- Joe, K1JT > > ------------------------------------------------------------------------------ > _______________________________________________ > 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