atsci_equalizer_lms2.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _ATSC_EQUALIZER_LMS2_H_
00024 #define _ATSC_EQUALIZER_LMS2_H_
00025
00026 #include <atsci_equalizer.h>
00027 #include <vector>
00028 #include <stdio.h>
00029
00030 class atsci_equalizer_lms2 : public atsci_equalizer
00031 {
00032 public:
00033 atsci_equalizer_lms2 ();
00034 virtual ~atsci_equalizer_lms2 ();
00035
00036 virtual void reset ();
00037 virtual int ntaps () const;
00038 virtual int npretaps () const;
00039
00040 protected:
00041 FILE *trainingfile;
00042 virtual void filter_normal (const float *input_samples,
00043 float *output_samples,
00044 int nsamples);
00045
00046 virtual void filter_data_seg_sync (const float *input_samples,
00047 float *output_samples,
00048 int nsamples,
00049 int offset);
00050
00051 virtual void filter_field_sync (const float *input_samples,
00052 float *output_samples,
00053 int nsamples,
00054 int offset,
00055 int which_field);
00056
00057 private:
00058 std::vector<double> d_taps_ff;
00059 std::vector<double> d_taps_fb;
00060 std::vector<float> d_old_output;
00061
00062 int d_output_ptr;
00063
00064 void filterN (const float *input_samples,
00065 float *output_samples,
00066 int nsamples);
00067
00068 void adaptN (const float *input_samples,
00069 const float *training_pattern,
00070 float *output_samples,
00071 int nsamples);
00072
00073 float filter1 (const float input[]);
00074 float adapt1 (const float input[], float ideal_output);
00075
00076 };
00077
00078
00079 #endif