[linux-dvb] [Proposal] Meaningful reporting of SNR

Mac Michaels 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 
the chip.

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 

mutually exclusive.

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.

> Regards,
> --
> Robert Schlabbach
> e-mail: robert_s at gmx.net
> Berlin, Germany

More information about the linux-dvb mailing list