On 13/09/2015 13:03, Bill Somerville wrote:
> On 13/09/2015 12:55, Michael Black wrote:
>
> Hi Mike,
>> JT9 is multithreaded.  Printf() is thread-safe but it is not atomic.  So you 
>> need to use a mutex to access it safely from multiple threads.
> I don't think that is relevant in this case. KVASD is only executed for
> JT65 decodes and each decoder is single threaded. The JT65 and JT9
> decoders do run concurrently in separate threads.
>
> Also KVASD is executed by a Fortran SYSTEM() intrinsic function so it is
> run in a separate process. If there is any contention for a common log
> file then some sort of interprocess synchronization would be required. I
> doubt that is necessary in this case, maybe there is some overlap of
> process exit and flushing buffers but that seems unlikely too. Making
> sure file handles are closed before exit in sfrsd should sort that out
> if it is happening.
The most likely reason for incomplete output from a process is that it 
did not terminate cleanly and properly. The jt9 program does check the 
exit status of the KVASD process and prints a:

'Error in KV decoder, or no KV decoder present.'

message if it is non-zero. If you are seeing that message in the band 
activity window then that is a sign that the KVASD process did not run 
properly. In that case any log output saved by sfrsd (KVASD) may well be 
truncated.
>> Mike W9MDB
> 73
> Bill
> G4WJS.
73
Bill
G4WJS.
>> -----Original Message-----
>> From: Steven Franke [mailto:s.j.fra...@icloud.com]
>> Sent: Saturday, September 12, 2015 11:59 PM
>> To: WSJT software development
>> Subject: Re: [wsjt-devel] update on sfrsd
>>
>> Joe and Bill,
>>
>> I am running wsjt-x (wsjtx_exp branch) using my decoder program (sfrsd) 
>> renamed to kvasd. It seemed to work OK at first, although the decodes that 
>> wsjt-x displays are shown in a different order than they are when I use the 
>> “real” kvasd.
>>
>> Now, in addition to the results coming out in a different order, I have 
>> started to get segmentation faults and strange errors. This started after I 
>> significantly increased the amount of data that I am writing to a log file 
>> (/tmp/sfrsd.log) using fprintf statements from within sfrsd. I notice that 
>> the contents of the log file are garbled - as if more than one instance of 
>> the program was trying to write to it at the same time. Are you spawning 
>> multiple instances of kvasd? Is there anything that I need to do to my 
>> program to make it safe to run when called from wsjt-x?
>>
>> Steve k9an
>>
>>> On Sep 12, 2015, at 4:02 PM, Steven Franke <s.j.fra...@icloud.com> wrote:
>>>
>>> Joe,
>>>
>>> FYI, examining the results a bit more, I notice that sfrsd decoded cases 
>>> containing as many as 38 bad symbols (out of 63). I haven’t done the same 
>>> study for kvasd - it doesn’t return the total number of errors, 
>>> unfortunately.
>>>
>>> More important, I also notice that the vast majority of the successful 
>>> decodes take less than 100 trials (that’s the number of erasure locator 
>>> vectors that we have to try before we get lucky and hit one that will 
>>> decode) - whereas the cutoff is set to 10000 at the moment. This points the 
>>> way toward achieving a very significant speedup. Note the following:
>>>
>>> Total number of calls to sfrsd: 1408
>>> Total number of successful decodes: 104
>>>
>>> Of the 1304 unsuccessful decodes, a large fraction (probably 90%) consist 
>>> of long strings of nearly identical rx vectors. I am using your suggestion 
>>> to rename sfrsd to kvasd for the purpose of running these tests, so your 
>>> birdie removal should be operative. I have seen as many as 15 un-decodable 
>>> and identical rx vectors from one file. Since most of the successful 
>>> decodes finish after fewer than 100 trials, whereas every single 
>>> un-decodable one will run out the full 10000 trials, much less than 1% of 
>>> the execution time is actually spent on decodable vectors. So there’s a lot 
>>> to gain if we can figure out a way to reduce the number of un-necessary 
>>> calls to the decoder.
>>>
>>> As I noted in the last message, I have a long list of things that I can do 
>>> to speed up the execution time, but none of them promise the huge 
>>> improvement available if we can cut out a bunch of those bad rx vectors. I 
>>> can certainly look at this --- I don’t mean to throw it in your lap --- but 
>>> I’m guessing that you may already have some insight into what’s going on.
>>>
>>> Steve k9an
>>>
>>>> On Sep 12, 2015, at 1:04 PM, Steven Franke <s.j.fra...@icloud.com> wrote:
>>>>
>>>> Hi Joe -
>>>> Since you asked about where the sfrsd routine stands with respect to 
>>>> kvasd, I did a quick test this morning. Before I ran the test, I found and 
>>>> fixed a fundamental flaw in the sfrsd routine that significantly improved 
>>>> its performance. Then I did a run with the number of trials set to 10000, 
>>>> which makes it very slow (it takes a long time to time out) but I wanted 
>>>> to see where we stand in terms of decoding probability, irrespective of 
>>>> decoding time. The results are encouraging. Here’s a brief summary of the 
>>>> results from my set of 212 .wav files:
>>>>
>>>> baseline (BM HDD only): 618 decodes
>>>> kvasd: 104 decodes (this is above and beyond the 618 BM decodes)
>>>> sfrsd: 104 decodes (2 bad decodes)
>>>>
>>>> kvasd decoded 14 cases that were not decoded by sfrsd.
>>>> sfrsd decoded 12 cases (not counting 2 bad ones) that were not
>>>> decoded by kvasd
>>>>
>>>> This result is obtained using a very simple-minded algorithm, which can be 
>>>> described in just a few lines:
>>>>
>>>> 1. sort the symbol probabilities
>>>> 2. among the 51 smallest symbol probabilities, randomly select a subset 
>>>> and set them as “erasures”
>>>> 3. try to decode with BM
>>>> 4. if decode succeeds, quit. Otherwise go to 2.
>>>>
>>>> This algorithm only makes use of the symbol probabilities to identify the 
>>>> 51 symbols that are erasure candidates. Obviously, one can do a better job 
>>>> by using the symbol quality to determine the probability of setting that 
>>>> symbol as an erasure. That’s the next step.
>>>>
>>>> I am not too worried about the bad decodes at this stage. The algorithm 
>>>> should be enhanced such that it saves a list of all of the codewords 
>>>> produced by the BM algorithm. It should then select the codeword with the 
>>>> best metric (e.g. some measure of distance from the received symbol 
>>>> vector). It should also apply a threshold to reject codewords that are too 
>>>> “far” away from the received codeword. I have not implemented any of that 
>>>> yet.
>>>> Steve k9an
>>>>
>>>>> On Sep 11, 2015, at 12:11 PM, Steven Franke <s.j.fra...@icloud.com> wrote:
>>>>>
>>>>> Hi Joe,
>>>>>
>>>>> Re the sfrsd program. Please regard this as merely a framework for future 
>>>>> development. Nothing in the current code is optimized and I am almost 
>>>>> certain that I can do better. I think that it is premature to do any 
>>>>> quantitative performance comparisons with KV.  I will say that it was 
>>>>> very encouraging to see how easy it is to come up with something that 
>>>>> provides useful gains via very simple use of soft-symbol information.
>>>>>
>>>>> Regarding the prospects for improving on KV - long story short - I am 
>>>>> convinced that the class of algorithms that I am playing with can be 
>>>>> tuned to be competitive with KV if we are willing to wait long enough for 
>>>>> the algorithm to run to completion. What I don’t know yet is if it will 
>>>>> be possible to come up with something that runs fast enough to be useful.
>>>>>
>>>>> My next step will be to pick apart the existing KA9Q Berlekamp Massey 
>>>>> code so that we can eliminate some redundant calculations. In particular, 
>>>>> I recently realized that the syndromes only have to be calculated once 
>>>>> for each received symbol vector, whereas I am now re-calculating them 
>>>>> thousands of times in the main loop.  I plan to implement the current 
>>>>> sfrsd algorithm with this improvement and then move on to improving 
>>>>> algorithm. I’ll let you know when I’ve got it to a point where I think 
>>>>> that it’s worth comparing to KV.
>>>>>
>>>>> By the way, one thing that I’ve already noticed is that some files 
>>>>> produce lots of identical un-decodable received symbol vectors. Since I 
>>>>> have to try a whole bunch of virtual received signal vectors before I can 
>>>>> decide that these are un-decodable, my decoder bogs down on these whereas 
>>>>> KV seems to be able to blow right past them. I’m guessing that these 
>>>>> events result from interference, or birdies - I can’t think of anything 
>>>>> else that would produce a slew of identical vectors. It may eventually be 
>>>>> necessary to figure out a way to identify these events before they are 
>>>>> sent to the decoder.
>>>>>
>>>>> Re JTMSK - I am very interested in it, but I haven’t had time to look at 
>>>>> what you are doing there. If you have carefully read the relevant 
>>>>> sections of Proakis, then you certainly know more about CPFSK techniques 
>>>>> than I do. I am aware of the fact that it should be possible, in 
>>>>> principle, to do some form of block demodulation, perhaps using the 
>>>>> Viterbi algorithm, as opposed to symbol-by-symbol demodulation. While 
>>>>> this could produce significant gains - it would seem that this approach 
>>>>> will require the channel to be reasonably well behaved (i.e. no 
>>>>> significant frequency offset or random phase walks), no?  Off-list I’ll 
>>>>> send you a manuscript that does some comparisons of different 
>>>>> demodulation schemes. I haven’t yet had time to distill it down to any 
>>>>> simple wisdom - maybe you’ll get something useful out of it.
>>>>>
>>>>> 73, Steve k9an
>>>>>
>>>>>
>>>>>
>>>>> On Sep 11, 2015, at 8:54 AM, Joe Taylor <j...@princeton.edu> wrote:
>>>>>> Hi Steve,
>>>>>>
>>>>>> I finally found time for a quick look at "sfrsd", your drop-in
>>>>>> replacement for kvasd that uses the stochastic Chase algorith.
>>>>>>
>>>>>> I compiled and ran it on a few test cases this morning, and (as
>>>>>> will be no surprise to you) found that it works, and it succeeds in
>>>>>> some cases where the hard-decision Berlekamp-Massey algorithm
>>>>>> fails.  Just like kvasd... and no patents, non-disclosure
>>>>>> agreements, or non-open source code to worry about!  Very impressive!!
>>>>>>
>>>>>> I have not yet done any thorough tests of sensitivity relative to
>>>>>> the Koetter-Vardy algorithm.  Have you?  Are there any theoretical
>>>>>> reasons to expect that it should be (or not be) as good as K-V?
>>>>>>
>>>>>> I will do further tests, as time permits.
>>>>>>
>>>>>>
>>>>>> On another matter, somewhat along the same lines:
>>>>>>
>>>>>> Have you looked at all at the way I am presently decoding the MSK
>>>>>> signals in JTMSK?  Especially since about r5848, I think the
>>>>>> decoder is pretty good; but since the demodulation process does not
>>>>>> yet take full advantage of signal coherency or the inherent 
>>>>>> symbol-to-symbol "memory"
>>>>>> in MSK modulation, I think a still better decoder is possible.
>>>>>>
>>>>>>   From reading Proakis I'm aware that (quite apart from the Viterbi
>>>>>> algorithm used to decode the K=13, r=1/2 convolutional code of
>>>>>> JTMSK) a Viterbi algorithm could also be used as an optimum
>>>>>> receiver for these continuous-phase signals.  I also understand
>>>>>> that using modulation index
>>>>>> h=0.715 (rather than the h=0.5 of MSK) might have advantages while
>>>>>> still requiring bandwith no more than 2 kHz.
>>>>>>
>>>>>> Do you have any opinions here?  Any interest in looking into these
>>>>>> questions further?
>>>>>>
>>>>>>  -- 73, Joe, K1JT


------------------------------------------------------------------------------
_______________________________________________
wsjt-devel mailing list
wsjt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to