I've observed that signal quality doesn't belong to range [0..100] as it should be. For example when signal is very weak I see -215 and even smaller values. However for good signals all looks fine (near 100).
Signal quality is calculated in met_to_data.pas with the following statement:
Internally vit_get_percent_BER() do the following:
result:=(100*v.BER)/frame_bits;
while Viterbi decoder calculates BER with:
v.BER:=0;
for i:=0 to frame_bits*2-1 do v.BER:=v.BER+hard_correlate(input[i],$FF xor corrected[i]);
So something is definitely wrong because our final signal quality is not in the range [0..100] - seems like vit_get_percent_BER() gives us wrong output.
I've tried to eliminate factor 10 and got value approx 67 for very weak signal. Also I've tried to divide by frame_bits*2 and not frame_bits and still got negative values for weak signals.
Actually it looks like a factor of 10.0 is erroneous. For Gaussian random noise source we should get about 50% of BER and in this case of 67% signal quality we're getting just 33% of BER.
I've observed that signal quality doesn't belong to range [0..100] as it should be. For example when signal is very weak I see -215 and even smaller values. However for good signals all looks fine (near 100).
Signal quality is calculated in
met_to_data.pas
with the following statement:Internally
vit_get_percent_BER()
do the following:while Viterbi decoder calculates BER with:
So something is definitely wrong because our final signal quality is not in the range [0..100] - seems like
vit_get_percent_BER()
gives us wrong output.I've tried to eliminate factor 10 and got value approx 67 for very weak signal. Also I've tried to divide by
frame_bits*2
and notframe_bits
and still got negative values for weak signals.