[linux-dvb] [Proposal] Meaningful reporting of SNR
rustys at ieee.org
Wed Apr 12 17:47:29 CEST 2006
On Wed, 2006-04-12 at 01:09 -0500, Mac Michaels wrote:
> > 2) That the format of the report be an integer
> > value representing the SNR
> SNR is not in the "Video for Linux Two API Specification
> Draft 0.13".
No, SNR is mostly a concern to the digital receivers. So it is in the
DVB API. Hence my discussion of "frontends"; and the post to the DVB
list. The digital receivers I've dealt with recently don't give a way
to read signal strength. They give a formula for calculating the SNR
from the performance of the decoder. Hence an SNR value can have
meaning, but a signal level derived from an SNR value needs to be
assigned meaning because we would need to know N to get a meaningful S
> > to two significant digits.
> > i.e. 32.15dB would be reported as 3215.
> I assume that "integer" means signed integer as the dB value
> reported by some cards can have a negative value for SNR
> when the signal is less than the noise.
> Is it really important to compute SNR to 0.01 precision?
> This makes the logarithm lookup table much larger. Floating
> point calculations are not permitted in kernel code so you
> must use some sort of lookup.
Please look at the "broken" code in the or51* frontends. This appears
to be a good compromise between table size and computational overhead
and produces dB calculations to 2 sig figs. (It just doesn't produce the
right calculations right now) This granularity is useful especially
when making a signal strength estimate based off it.
> > 3) For cards that don't provide signal strength directly
> > (read from a register), the strength be calculated from
> > the SNR by mapping 30dB SNR to full scale signal.
> I am confused by this part of the proposal. Is the value
> signal strength in dB x 100 or is it a percentage of full
> scale? How do you tell the application that the signal
> strength is in dB or percentage? It can vary by driver
> according to this proposal.
Signal strength as currently defined (DVB) is a % of a full scale
unsigned integer. so 0x0000 is 0% and 0xffff is 100% but many cards just
read a noise value (often the same value for SNR) and invert the bits
indicating small noise => better signal; big noise=>crappy signal.
A logarithmic scale is needed to make these numbers useful in antenna
alignment and tuning optimization.
> I did not find any reference to SNR in the "Video for Linux
> Two API Specification Draft 0.13". Is this ever returned?
Because SNR is a DVB API call.
> > 1) Move the integer log functions from the or51* modules
> > into a module called ilog10
> > 2) Fix the functions to work properly
> > 3) Change the lgdt330x, or51211, and or51132 modules to
> > report SNR in this manner
> > 4) Change the above modules to report signal level based
> > on the SNR with 30dB SNR = full scale in the report.
> Full scale is not a fixed number here. It depends upon the
> maximum value of SNR that the chip can return. This value
> is also a function of the decoding mode (VSB or QAM) for
> the lgdt330x family, The driver author can determine the
> maximum SNR value and then normalize the result to full
Which is why the proposal "fixed" full scale at 30dB SNR. This
allows for comparison between cards that report SNR and signal
strength in this manner. There is an SNR above which your
reception performance will not noticeably improve so it is
possible to be close to the transmitter and have a good number
of your stations pegged at 100% signal strength. Without a
standard, cards that can accept a wider range of signals will
appear to perform worse than cards with much less headroom. If
100% for one card is 40dB (max SNR) and 100% for another card is
20dB (max SNR) with both card's 0% at 0dB - FTSOA, then when the
received signal is at 19dB SNR the card with less headroom will
report that the signal strength is 95% while the other card will
report less than 50%. (Appears to have poorer reception.)
Granted the 30dB number comes from imperical testing of several cards
using OTA ATSC in the US. But that definition is at least a starting
More information about the linux-dvb