Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

atsc_equalizer Class Reference

abstract base class for ATSC equalizer More...

#include <atsc_equalizer.h>

Inheritance diagram for atsc_equalizer:

atsc_equalizer_lms atsc_equalizer_lms2 atsc_equalizer_nop List of all members.

Public Member Functions

 atsc_equalizer ()
virtual ~atsc_equalizer ()
virtual void reset ()
 reset state (e.g., on channel change)
virtual void filter (const float *input_samples, const atsc::syminfo *input_tags, float *output_samples, int nsamples)
 produce nsamples of output from given inputs and tags
virtual int ntaps () const =0
 how much history the input data stream requires.
virtual int npretaps () const =0
 how many taps are "in the future".

Protected Member Functions

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

Private Attributes

bool d_locked_p
int d_offset_from_last_field_sync
int d_current_field

Detailed Description

abstract base class for ATSC equalizer


Constructor & Destructor Documentation

atsc_equalizer::atsc_equalizer  ) 
 

atsc_equalizer::~atsc_equalizer  )  [virtual]
 


Member Function Documentation

void atsc_equalizer::filter const float *  input_samples,
const atsc::syminfo input_tags,
float *  output_samples,
int  nsamples
[virtual]
 

produce nsamples of output from given inputs and tags

This is the main entry point. It examines the input_tags and local state and invokes the appropriate virtual function to handle each sub-segment of the input data.

input_samples must have (nsamples + ntaps() - 1) valid entries. input_samples[0] .. input_samples[nsamples - 1 + ntaps() - 1] are referenced to compute the output values.

input_tags must have nsamples valid entries. input_tags[0] .. input_tags[nsamples - 1] are referenced to compute the output values.

virtual void atsc_equalizer::filter_data_seg_sync const float *  input_samples,
float *  output_samples,
int  nsamples,
int  offset
[protected, pure 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.

Implemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.

virtual void atsc_equalizer::filter_field_sync const float *  input_samples,
float *  output_samples,
int  nsamples,
int  offset,
int  which_field
[protected, pure 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.

Implemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.

virtual void atsc_equalizer::filter_normal const float *  input_samples,
float *  output_samples,
int  nsamples
[protected, pure 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.

Implemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.

virtual int atsc_equalizer::npretaps  )  const [pure 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 ().

Implemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.

virtual int atsc_equalizer::ntaps  )  const [pure 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.

Implemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.

void atsc_equalizer::reset  )  [virtual]
 

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

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

Reimplemented in atsc_equalizer_lms, atsc_equalizer_lms2, and atsc_equalizer_nop.


Member Data Documentation

int atsc_equalizer::d_current_field [private]
 

bool atsc_equalizer::d_locked_p [private]
 

int atsc_equalizer::d_offset_from_last_field_sync [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Aug 4 02:22:08 2004 for GNU Radio by doxygen 1.3.8