[linux-dvb] [Proposal] Meaningful reporting of SNR
wmichaels1 at earthlink.net
Wed Apr 12 19:01:33 CEST 2006
On Wednesday 12 April 2006 09:57 am, Robert Schlabbach
> From: "Rusty Scott" <rustys at ieee.org>
> > 1) That it be encouraged to report SNR in dB whenever
> > possible.
> I'm afraid most hardware is incapable of producing such
> measurements. Instead, I'd propose scaling all signal
> measurements to _percentages_.
SNR (Signal to Noise Ratio) and Signal Strength are
different measurements of the RF signal.
Signal Strength is difficult to compute for a particular
card. It is the actual level (quantity) of the signal
appearing on the RF input connector of the tuner for a
particular TV Channel. There are both internal (RF
frontend, AGC design, etc.) and external (antenna gain,
booster amplifiers) that may affect this value. In theory a
weak signal with a lot of noise will have the same strength
as a weak signal with little noise. In the first case the
signal may not be useable whereas it may be acceptable in
the second case.
SNR is probably more useful as it is more indicative of the
quality of the signal received rather than just the
quantity. SNR is a ratio in dB. Increasing positive values
indicate that the signal is stronger than the noise.
Negative values indicate that the noise is stronger than
the signal. SNR is less affected by internal and external
influences because additional amplification/attenuation
usually affect the signal and the noise equally.
I am not familiar with DVB chips. They may provide signal
strength directly. The chips supported by the lgdt330x
driver provide SNR directly. The specification gives the
exact formula to compute SNR in dB for any value read from
SNR is not in the "Video for Linux Two API Specification
Draft 0.13". I have no problem reporting SNR in dB or as a
percentage of full scale. Either way the value returned is
useful for aiming an antenna or indicating cable connection
problems. I propose adding some more details to the "Video
for Linux Two API Specification":
1) Change the "signal" field in struct v4l2_tuner from
unsigned 32bit int to signed 32bit int.
2) Describe each of the different values that may be
returned in the "signal" field in struct v4l2_tuner.
3) Define new "capability" flags for struct v4l2_tuner :
V4L2_TUNER_CAP_SS driver returns signal strength as signal
V4L2_TUNER_CAP_SNR driver returns SNR as signal value.
V4L2_TUNER_CAP_SIG_DB driver returns signal value in dB.
V4L2_TUNER_CAP_SIG_PCT driver returns signal value as a
percent of full scale.
V4L2_TUNER_CAP_SIG_X1 driver returns signal value as an
integer. (-xdB to +xdB or 0% to 100%)
V4L2_TUNER_CAP_SIG_X10 driver returns signal value as
tenths of a unit. (-x.xdB to +x.xdB or 0.0% to 100.0%)
V4L2_TUNER_CAP_SIG_X100 driver returns signal value as
hundredths of a unit. (-x.xxdB to +x.xxdB or 0.00% to
V4L2_TUNER_CAP_SS and V4L2_TUNER_CAP_SNR are mutually
V4L2_TUNER_CAP_SIG_DB and V4L2_TUNER_CAP_SIG_PCT are
V4L2_TUNER_CAP_SIG_X1 and V4L2_TUNER_CAP_SIG_X10 and
V4L2_TUNER_CAP_SIG_X100 are mutually exclusive.
Each driver would set the "capability" according to what
value is returned in "signal" by the driver.
> Robert Schlabbach
> e-mail: robert_s at gmx.net
> Berlin, Germany
More information about the linux-dvb