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

Mac Michaels wmichaels1 at earthlink.net
Wed Apr 12 08:09:52 CEST 2006

On Tuesday 11 April 2006 09:25 pm, Rusty Scott wrote:
> It seems that a good number of digital receiver chips are
> capable of reporting a meaningful SNR number, but the
> current drivers don't have a standard for providing this
> meaningful data.  The current concept is a bigger value
> is better than a smaller value, but the values have no
> meaning and can't be used to compare performance between
> cards. To this end, I think that the SNR reporting as it
> currently stands generates more confusion that it solves.

I agree with you on the confusion factor.

>  I would like to propose the following:
> 1)  That it be encouraged to report SNR in dB whenever
> possible. 


> 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".

> 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.

> 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.

If it is a percentage of full scale is returned, what is the 
range of the returned value for a range of 0% to 100%? 0 to 
100? 0 to 10,000? 0 to 0x7FFF? something else?

> I have seen several frontends make attempts at this:
> lgdt330x has some #if 0 code that attepts the SNR
> calculation or51211 and or51132 have some "broken" code
> that attempts this as well.
> If it is agreed upon, I would like to do the following:

0) Update the v4l2 API to spell out exactly what value will 
be returned in the struct v4l2_tuner for the signal 

Add new capability flags:
  V4L2_TUNER_CAP_SS_DB driver returns signal strength in dB.
  V4L2_TUNER_CAP_SS_PCT driver returns signal strength as a 
percent of full scale.

I did not find any reference to SNR in the "Video for Linux 
Two API Specification Draft 0.13". Is this ever returned?

> 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 

> Comments?
> Rusty

More information about the linux-dvb mailing list