[pskmail] Re: Robust psk-modes on raspberry pi

  • From: John Douyere <vk2eta@xxxxxxxxx>
  • To: pskmail@xxxxxxxxxxxxx
  • Date: Wed, 20 Nov 2013 01:05:52 +1100

As I posted in the fldigi group, I have found that I get the best results
with the code below, and I have proposed it to Dave for inclusion.

I find that using the impact of the amplitude improves the decoding.

Regards,

John

// Soft decode section below
averageamp = decayavg(averageamp, sigamp, SQLDECAY);
if (sigamp > 0 && averageamp > 0) {
if (sigamp > averageamp) {
softamp = clamp( sqrt(sigamp / averageamp), 1.0, 1e6);
} else {
softamp = clamp( sqrt(averageamp / sigamp), 1.0, 1e6);
}
} else {
softamp = 2; // arbritary number (50% impact)
}
// Compute values between -128 and +127 for phase value only
if (phase > M_PI) {
softangle = (127 - (((2 * M_PI - phase) / M_PI) * (double) 255));
} else {
softangle = (127 - ((phase / M_PI) * (double) 255));
}
// Then apply impact of amplitude. Finally, re-centre on 127-128
// as the decoder needs values between 0-255
softbit = (unsigned char) ((softangle / ( 0.5 + softamp / 2 )) + 128);
n = 2;
}



On Tue, Nov 19, 2013 at 11:02 PM, Franco Spinelli <frspin@xxxxxxxxx> wrote:

>
>
>
> 2013/11/19 John Douyere <vk2eta@xxxxxxxxx>
>
>> Tarmo,
>>
>> The following patch fixes the bug. It exists also in X86 architectures
>> but it resolves differently and works regardless!
>>
>> In psk.cxx, in the subroutine rx_symbol(...), replace the line:
>>
>>                softbit = (unsigned char) ((softangle / (1 + softamp)) -
>> 127);
>> by:
>>
>>                softbit = (unsigned char) ((softangle / (1 + softamp)) +
>> 127);
>>
>> It has worked for others.
>>
>>
>>
> Is this the correction to apply to source of Fldigi or is as indicated by
> David and committed to git:
>
> softbit = round(softangle / softamp + 128);
>
> Are both working? And which of proposed patch is better?
>
> Regards
>
> Franco Spinelli
> IW2DHW
>

Other related posts: