Hi Joe and all, I’ve done some preliminary work on signal subtraction for jt65. The routine subtract65 is intended to be called in jt65a within the “icand” loop. I have commented out the call for now - but I have done enough tests to convince myself that the math is basically correct and that the routine does what we expect it to do. The channel symbols are passed to the subtract65 routine from extract() using a new common block that I called “chansyms65”.
Here are links to two screenshots obtained using the Baudline analysis tool: https://dl.dropboxusercontent.com/u/33211132/jt65_before_subtraction.tiff https://dl.dropboxusercontent.com/u/33211132/jt65_after.tiff The first is the spectrogram of a .wav file that contains three strong signals. The second screenshot shows three successive spectrograms obtained after subtracting each of the signals, in succession. Thus, the top section shows the spectrum after subtracting the first signal, the middle is after subtracting the second, and so on. There are a couple of things that need to be looked at in more detail — I had to add a mysterious 1s offset to the “dt” parameter, and I don’t understand why this was necessary. Also, I’m not happy with the relatively large glitches that occur at each symbol transition. It may be that the time synchronization is in WSJT-X coarser than I am used to from the wspr subtraction exercise - or perhaps I don't have the dt offset set correctly. Since the subtraction is done on the 12000 samp/s dd array, it is relatively slow. That’s one reason why the complex-amplitude smoothing filter is so short at present. If we decide that a longer filter is necessary, then it’ll probably be worthwhile to do this filter using the fft. My current thinking is that we’ll probably reap most of the available benefit by doing two passes. The first with a high sync threshold (I used 5.5 for my intitial tests) to subtract out a few strong signals. Then the second pass would run with the usual, lower threshold, and might not use subtraction at all. To implement this cleanly, it looks like we would add the sync threshold to the arguments passed from jt65a down through decode65a->decode65b->extract so that the threshold can be varied from within the two-pass subtraction loop in jt65a — or I guess we could add another common block. As always, comments and suggestions welcome! Steve ------------------------------------------------------------------------------ _______________________________________________ wsjt-devel mailing list wsjt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wsjt-devel