Hi Ryan, On each pass signal candidates are sorted in order of decreasing signal-to-noise ratio (SNR) and then wsprd sequentially attempts to decode each candidate. If a decoding attempt is successful, then a reconstructed version of the signal is subtracted from the data vector and the algorithm moves on to try to decode the next candidate.
Even on the last pass, subtraction of high-SNR signal “A” may remove enough interference from low-SNR signal “B” so as to render signal “B” decodable when signal “B” would not have been decodable otherwise. You stated that “The updated I/Q data isn’t used as the loop doesn’t execute again.”. This isn’t true. On each pass the [idat,qdat] vector is updated in subtract_signal2 after each successful decode and the updated [idat,qdat] vector is then used to find the bit metrics for subsequent candidates in routine noncoherent_sequence_detection. 73 Steve k9an > On May 8, 2023, at 7:05 PM, Tolboom, Ryan via wsjt-devel > <wsjt-devel@lists.sourceforge.net> wrote: > > Hello, > > When wsprd runs multiple passes, it still calls subtract_signal2() as > well as get_wspr_channel_signals() on the last pass. > The updated I/Q data isn't used as the loop doesn't execute again. > > When I modified wsprd.c to skip subtraction on the last pass I noticed > better timing numbers (since subtract_signal2() is called one less > time) and no detriment to my decodes. > This was my change on line 1430 of wsprd.c > > if( subtraction && !noprint && (ipass != (npasses - 1))) { > > Please let me know if there's something I'm not thinking of. > > 73, > > Ryan Tolboom N2BP > > > _______________________________________________ > 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