[linux-dvb] [RFC] [PATCH] Make S/N values to appear at cx24123
frontend
Trent Piepho
xyzzy at speakeasy.org
Mon Apr 17 04:15:40 CEST 2006
On Sat, 15 Apr 2006, Mauro Carvalho Chehab wrote:
> Em Sex, 2006-04-14 =E0s 19:40 -0700, Trent Piepho escreveu:
> > oN fRI, 14 Apr 2006, Mauro Carvalho Chehab wrote:
> > > I've decided to use u64, instead of all those shifts. This way, we ca=
n
> > > improve the precision for lower BER rates. Here, it worked like a cha=
rm:
> >
> > It was only a single shift. Anyway, the 64 bit math isn't being done
> > correctly. Here is a graph were you can see the problem clearly:
> > http://www.speakeasy.org/~xyzzy/ber-error.png
> Hmmm... I forgot the (s64) at the calculus :) I'll fix it. I think it is
> better to make calculus with 64 bits to preserve precision, especially
> for low BER rates.
If you adjusted the table to eliminate the the last line, which can't be
reached with a 22-bit value, and added an extra line for 50%, you could get
the scale factor up to 13 or 14 bits without overflow in 32-bit math. Is
64-bit math worth it for an extra 2 or 3 bits?
Really, the loss of smoothness comes from trying to scale BER from 0..5380
into just 1% of the range.
I was researching how to find SNR from BER, and think I have a better
understanding of how this works now. If anyone understands this better, ma=
ybe
they can correct me if I'm wrong.
Normally BER is though of as a probability, that is a number between 0 and =
1,
of a bit being in error, and named Pb. It's normal to want this probably t=
o
be very small, on the order of 10^-6. Usually when you see a graph of BER =
aka
Pb, it will be log scaled.
The relationship between Pb and something called Eb/N0 is defined by the
modulation used. Eb is the energy per bit, and N0 is the noise spectral
energy density. Here is some good information:
http://www.sss-mag.com/ebn0.html
According to wikipedia, the formula for QPSK, used by DVB-S, is:
Pb =3D Q(sqrt(2*Eb/N0))
Where Q(x) is the tail area under the unit normal distribution from x to
positive infinity. You can think of is the probability that a random numbe=
r
with a Gaussian (aka normal) distribution is greater than x. At least that
the definition on wikipedia, I think that might be wrong and it's more comp=
lex
than that.
If I graph this, I get a plot that matches the one for PSK on the sss-mag
article.
I think that Eb =3D S/fb, where S is the signal power and fb is the bitrate=
in
bits/sec, and that N0 =3D N/BW, where N is the noise power and BW is the no=
ise
bandwidth in MHz. This gives Eb/N0 =3D (S/N) * (BW/fb), giving us Eb/N0, a=
nd
thus Pb, in terms of SNR. For QPSK, the bitrate is twice the bandwidth, so
(BW/fb) =3D 1/2. Convert SNR in deciBels to S/N with S/N =3D 10^(SNR/10). =
Plug
all that in, and graph the result:
Pb =3D Q(sqrt(10^(SNR/10)))
http://www.speakeasy.org/~xyzzy/snr-ber-qpsk.png
So I think THIS is the curve you should be trying to use to convert BER to
SNR. The question I have it, what are the units of the 22-bit value read f=
rom
the chip? How do you convert this to the fraction of the bits in error?
Divide by the gross bitrate (bandwidth in MHz times two)?
More information about the linux-dvb
mailing list