GNU Radio 3.3.0 C++ API
atsci_equalizer_lms Class Reference

#include <atsci_equalizer_lms.h>

Inheritance diagram for atsci_equalizer_lms:

List of all members.

Public Member Functions

 atsci_equalizer_lms ()
virtual ~atsci_equalizer_lms ()
virtual void reset ()
 reset state (e.g., on channel change)
virtual int ntaps () const
 how much history the input data stream requires.
virtual int npretaps () const
 how many taps are "in the future".

Protected Member Functions

virtual void filter_normal (const float *input_samples, float *output_samples, int nsamples)
virtual void filter_data_seg_sync (const float *input_samples, float *output_samples, int nsamples, int offset)
virtual void filter_field_sync (const float *input_samples, float *output_samples, int nsamples, int offset, int which_field)

Protected Attributes

FILE * trainingfile

Constructor & Destructor Documentation

atsci_equalizer_lms::atsci_equalizer_lms ( )
virtual atsci_equalizer_lms::~atsci_equalizer_lms ( ) [virtual]

Member Function Documentation

virtual void atsci_equalizer_lms::filter_data_seg_sync ( const float *  input_samples,
float *  output_samples,
int  nsamples,
int  offset 
) [protected, virtual]

Input range is known to consist of only a data segment sync or a portion of a data segment sync. nsamples will be in [1,4]. offset will be in [0,3]. offset is the offset of the input from the beginning of the data segment sync pattern.

input_samples has (nsamples + ntaps() - 1) valid entries. input_samples[0] .. input_samples[nsamples - 1 + ntaps() - 1] may be referenced to compute the output values.

Implements atsci_equalizer.

virtual void atsci_equalizer_lms::filter_field_sync ( const float *  input_samples,
float *  output_samples,
int  nsamples,
int  offset,
int  which_field 
) [protected, virtual]

Input range is known to consist of only a field sync segment or a portion of a field sync segment. nsamples will be in [1,832]. offset will be in [0,831]. offset is the offset of the input from the beginning of the data segment sync pattern. We consider the 4 symbols of the immediately preceding data segment sync to be the first symbols of the field sync segment. which_field is in [0,1] and specifies which field (duh).

input_samples has (nsamples + ntaps() - 1) valid entries. input_samples[0] .. input_samples[nsamples - 1 + ntaps() - 1] may be referenced to compute the output values.

Implements atsci_equalizer.

virtual void atsci_equalizer_lms::filter_normal ( const float *  input_samples,
float *  output_samples,
int  nsamples 
) [protected, virtual]

Input range is known NOT TO CONTAIN data segment syncs or field syncs. This should be the fast path. In the non decicion directed case, this just runs the input through the filter without adapting it.

input_samples has (nsamples + ntaps() - 1) valid entries. input_samples[0] .. input_samples[nsamples - 1 + ntaps() - 1] may be referenced to compute the output values.

Implements atsci_equalizer.

virtual int atsci_equalizer_lms::npretaps ( ) const [virtual]

how many taps are "in the future".

This allows us to handle what the ATSC folks call "pre-ghosts". What it really does is allow the caller to jack with the offset between the tags and the data so that everything magically works out.

npretaps () must return a value between 0 and ntaps() - 1.

If npretaps () returns 0, this means that the equalizer will only handle multipath "in the past." I suspect that a good value would be something like 15% - 20% of ntaps ().

Implements atsci_equalizer.

virtual int atsci_equalizer_lms::ntaps ( ) const [virtual]

how much history the input data stream requires.

This must return a value >= 1. Think of this as the number of samples you need to look at to compute a single output sample.

Implements atsci_equalizer.

virtual void atsci_equalizer_lms::reset ( ) [virtual]

reset state (e.g., on channel change)

Note, subclasses must invoke the superclass's method too!

Reimplemented from atsci_equalizer.


Member Data Documentation


The documentation for this class was generated from the following file: