diff options
Diffstat (limited to 'gr-atsc/src')
192 files changed, 0 insertions, 42373 deletions
diff --git a/gr-atsc/src/lib/CMakeLists.txt b/gr-atsc/src/lib/CMakeLists.txt deleted file mode 100644 index 3d2b84a03..000000000 --- a/gr-atsc/src/lib/CMakeLists.txt +++ /dev/null @@ -1,236 +0,0 @@ -# Copyright 2011-212 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -######################################################################## -# Setup the include and linker paths -######################################################################## -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${GR_ATSC_INCLUDE_DIRS} - ${GNURADIO_CORE_INCLUDE_DIRS} - ${GRUEL_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} -) - -link_directories(${Boost_LIBRARY_DIRS}) - -######################################################################## -# Generate viterbi mux source -# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build -######################################################################## -if(NOT CMAKE_CROSSCOMPILING) - add_executable(atsci_viterbi_gen atsci_viterbi_gen.cc) - export(TARGETS atsci_viterbi_gen APPEND FILE ${EXPORT_FILE}) -endif() - - -set(atsci_viterbi_mux_cc ${CMAKE_CURRENT_BINARY_DIR}/atsci_viterbi_mux.cc) - -add_custom_command( - OUTPUT ${atsci_viterbi_mux_cc} - DEPENDS atsci_viterbi_gen - COMMAND atsci_viterbi_gen -o ${atsci_viterbi_mux_cc} -) - -######################################################################## -# Setup library -######################################################################## -list(APPEND gr_atsc_sources - ${atsci_viterbi_mux_cc} - atsc_derandomizer.cc - atsc_randomizer.cc - atsc_rs_decoder.cc - atsc_rs_encoder.cc - atsc_interleaver.cc - atsc_deinterleaver.cc - atsc_trellis_encoder.cc - atsc_viterbi_decoder.cc - atsc_ds_to_softds.cc - atsc_field_sync_mux.cc - atsc_field_sync_demux.cc - atsc_equalizer.cc - atsc_fs_checker.cc - atsc_bit_timing_loop.cc - atsc_fpll.cc - atsc_depad.cc - atsc_pad.cc - atsci_basic_trellis_encoder.cc - atsci_data_interleaver.cc - atsci_equalizer.cc - atsci_equalizer_lms.cc - atsci_equalizer_lms2.cc - atsci_equalizer_nop.cc - atsci_fake_single_viterbi.cc - atsci_fs_checker.cc - atsci_fs_checker_naive.cc - atsci_fs_correlator.cc - atsci_fs_correlator_naive.cc - atsci_single_viterbi.cc - atsci_sssr.cc - atsci_pnXXX.cc - atsci_randomizer.cc - atsci_reed_solomon.cc - atsci_sliding_correlator.cc - atsci_trellis_encoder.cc - atsci_viterbi_decoder.cc - create_atsci_equalizer.cc - create_atsci_fs_checker.cc - create_atsci_fs_correlator.cc - plinfo.cc -) - -list(APPEND atsc_libs - gnuradio-core - ${Boost_LIBRARIES} -) - -add_library(gnuradio-atsc SHARED ${gr_atsc_sources}) -target_link_libraries(gnuradio-atsc ${atsc_libs}) -GR_LIBRARY_FOO(gnuradio-atsc RUNTIME_COMPONENT "atsc_runtime" DEVEL_COMPONENT "atsc_devel") - -######################################################################## -# Build and register unit test -######################################################################## -if(ENABLE_TESTING) - -include_directories(${CPPUNIT_INCLUDE_DIRS}) -link_directories(${CPPUNIT_LIBRARY_DIRS}) - -list(APPEND test_atsci_sources - qa_atsci_basic_trellis_encoder.cc - qa_atsci_data_interleaver.cc - qa_atsci_equalizer_nop.cc - qa_atsci_fake_single_viterbi.cc - qa_atsci_fs_correlator.cc - qa_atsci_single_viterbi.cc - qa_atsci_randomizer.cc - qa_atsci_reed_solomon.cc - qa_atsci_sliding_correlator.cc - qa_atsci_trellis_encoder.cc - qa_atsci_viterbi_decoder.cc - qa_convolutional_interleaver.cc - qa_atsci.cc - qa_interleaver_fifo.cc -) - -include(GrTest) -list(APPEND GR_TEST_TARGET_DEPS gnuradio-atsc) -add_executable(test_atsci ${test_atsci_sources} test_atsci.cc) -target_link_libraries(test_atsci gnuradio-atsc gnuradio-core ${CPPUNIT_LIBRARIES}) -GR_ADD_TEST(atsci-test test_atsci) - -endif(ENABLE_TESTING) - -######################################################################## -# Install public header files -######################################################################## -install(FILES - atsc_api.h - atsc_consts.h - atsc_derandomizer.h - atsc_randomizer.h - atsc_rs_decoder.h - atsc_rs_encoder.h - atsc_interleaver.h - atsc_deinterleaver.h - atsc_trellis_encoder.h - atsc_viterbi_decoder.h - atsc_ds_to_softds.h - atsc_field_sync_mux.h - atsc_field_sync_demux.h - atsc_equalizer.h - atsc_fs_checker.h - atsc_bit_timing_loop.h - atsc_fpll.h - atsc_depad.h - atsc_pad.h - atsc_types.h - atsci_basic_trellis_encoder.h - atsci_data_interleaver.h - atsci_diag_output.h - atsci_equalizer.h - atsci_equalizer_lms.h - atsci_equalizer_lms2.h - atsci_equalizer_nop.h - atsci_exp2_lp.h - atsci_fake_single_viterbi.h - atsci_fs_checker.h - atsci_fs_checker_naive.h - atsci_fs_correlator.h - atsci_fs_correlator_naive.h - atsci_pnXXX.h - atsci_randomizer.h - atsci_reed_solomon.h - atsci_root_raised_cosine.h - atsci_root_raised_cosine_bandpass.h - atsci_single_viterbi.h - atsci_slicer_agc.h - atsci_sliding_correlator.h - atsci_sssr.h - atsci_syminfo.h - atsci_sync_tag.h - atsci_trellis_encoder.h - atsci_viterbi_decoder.h - atsci_vsbtx_lp.h - convolutional_interleaver.h - create_atsci_equalizer.h - create_atsci_fs_checker.h - create_atsci_fs_correlator.h - fpll_btloop_coupling.h - interleaver_fifo.h - DESTINATION ${GR_INCLUDE_DIR}/gnuradio - COMPONENT "atsc_devel" -) - -######################################################################## -# Setup swig generation -######################################################################## -if(ENABLE_PYTHON) -include(GrPython) -include(GrSwig) - -set(GR_SWIG_INCLUDE_DIRS - ${GR_ATSC_INCLUDE_DIRS} - ${GNURADIO_CORE_SWIG_INCLUDE_DIRS} - ${GRUEL_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} -) - -# add Doxygen docs to python -set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/atsc_swig_doc.i) -set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) - -set(GR_SWIG_LIBRARIES gnuradio-atsc) - -GR_SWIG_MAKE(atsc atsc.i) - -GR_SWIG_INSTALL( - TARGETS atsc - DESTINATION ${GR_PYTHON_DIR}/gnuradio - COMPONENT "atsc_python" -) - -install( - FILES atsc.i - ${CMAKE_CURRENT_BINARY_DIR}/atsc_swig_doc.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "atsc_swig" -) - -endif(ENABLE_PYTHON) diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop.cc b/gr-atsc/src/lib/GrAtscBitTimingLoop.cc deleted file mode 100644 index 8053736ee..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop.cc +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cmath> -#include <GrAtscBitTimingLoop.h> -#include "fpll_btloop_coupling.h" -#include <algorithm> -#include <atsc_consts.h> -#include <stdio.h> -#include <assert.h> - -using std::abs; - -static const int DEC = 2; // nominal decimation factor - -/* - * I strongly suggest that you not mess with these... - */ -static const double DEFAULT_TIMING_RATE = 2.19e-4 / FPLL_BTLOOP_COUPLING_CONST; -static const double DEFAULT_LOOP_TAP = 0.05; - - -GrAtscBitTimingLoop::GrAtscBitTimingLoop () - : VrDecimatingSigProc<float,float> (1, DEC), - next_input(0), w (1.0), mu (0.5), last_right(0), - debug_no_update (false) -{ - d_timing_rate = DEFAULT_TIMING_RATE; - loop.set_taps (DEFAULT_LOOP_TAP); - - history = 1500; // spare input samples in case we need them. - -#ifdef _BT_DIAG_OUTPUT_ - fp_loop = fopen ("loop.out", "w"); - if (fp_loop == 0){ - perror ("loop.out"); - exit (1); - } - - fp_ps = fopen ("ps.out", "w"); - if (fp_ps == 0){ - perror ("ps.out"); - exit (1); - } -#endif -} - -// -// We are nominally a 2x decimator, but our actual rate varies slightly -// depending on the difference between the transmitter and receiver -// sampling clocks. Hence, we need to compute our input ranges -// explictly. - -int -GrAtscBitTimingLoop::forecast(VrSampleRange output, - VrSampleRange inputs[]) { - /* dec:1 ratio with history */ - for(unsigned int i=0;i<numberInputs;i++) { - inputs[i].index=next_input; - inputs[i].size=output.size*decimation + history-1; - } - return 0; -} - -inline double -GrAtscBitTimingLoop::filter_error (double e) -{ - static const double limit = 50 * FPLL_BTLOOP_COUPLING_CONST; - - // first limit - - if (e > limit) - e = limit; - else if (e < -limit) - e = -limit; - - return loop.filter (e); -} - -int -GrAtscBitTimingLoop::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - iType *in = ((iType **)ai)[0]; - oType *out = ((oType **)ao)[0]; - - // Force in-order computation of output stream. - // This is required because of our slightly variable decimation factor - sync (output.index); - - - // We are tasked with producing output.size output samples. - // We will consume approximately 2 * output.size input samples. - - - unsigned int ii = 0; // input index - unsigned int k; // output index - - // We look at a window of 3 samples that we call left (oldest), - // middle, right (newest). Each time through the loop, the previous - // right becomes the new left, and the new samples are middle and - // right. - // - // The basic game plan is to drive the average difference between - // right and left to zero. Given that all transitions are - // equiprobable (the data is white) and that the composite matched - // filter is symmetric (raised cosine) it turns out that in the - // average, if we drive that difference to zero, (implying that the - // average slope at the middle point is zero), we'll be sampling - // middle at the maximum or minimum point in the pulse. - - iType left; - iType middle; - iType right = last_right; - - for (k = 0; k < output.size; k++){ - - left = right; - middle = produce_sample (in, ii); - right = produce_sample (in, ii); - - // assert (ii < inputs[0].size); - if (!(ii < inputs[0].size)){ - fprintf (stderr, "ii < inputs[0].size\n"); - fprintf (stderr, "ii = %d, inputs[0].size = %lu, k = %d, output.size = %lu\n", - ii, inputs[0].size, k, output.size); - assert (0); - } - - - out[k] = middle; // produce our output - - double timing_error = -middle * ((double) right - left); - - // update_timing_control_word - - double filtered_timing_error = filter_error (timing_error); - - if (!debug_no_update){ - mu += filtered_timing_error * d_timing_rate; - } - -#ifdef _BT_DIAG_OUTPUT_ - float iodata[8]; - iodata[0] = left; - iodata[1] = middle; - iodata[2] = right; - iodata[3] = timing_error; - iodata[4] = filtered_timing_error; - iodata[5] = mu; - iodata[6] = w; - iodata[7] = 0; - if (fwrite (iodata, sizeof (iodata), 1, fp_loop) != 1){ - perror ("fwrite: loop"); - exit (1); - } -#endif - - } - - last_right = right; - next_input += ii; // update next_input so forecast can get us what we need - return output.size; -} - -/*! - * Produce samples equally spaced in time that are referenced - * to the transmitter's sample clock, not ours. - * - * See pp 523-527 of "Digital Communication Receivers", Meyr, - * Moeneclaey and Fechtel, Wiley, 1998. - */ - -GrAtscBitTimingLoop::iType -GrAtscBitTimingLoop::produce_sample (const iType *in, unsigned int &index) -{ - // update mu and index as function of control word, w - - double sum = mu + w; - double f = floor (sum); - int incr = (int) f; // mostly 1, rarely 0 or 2 - mu = sum - f; - - assert (0 <= incr && incr <= 2); - assert (0.0 <= mu && mu <= 1.0); - - index += incr; - - iType n = intr.interpolate (&in[index], mu); - -#if defined(_BT_DIAG_OUTPUT_) && 0 - float iodata[4]; - iodata[0] = incr; - iodata[1] = mu; - iodata[2] = w; - iodata[3] = 0; - if (fwrite (iodata, sizeof (iodata), 1, fp_ps) != 1){ - perror ("fwrite: ps"); - exit (1); - } -#endif - - return n; -} diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop.h b/gr-atsc/src/lib/GrAtscBitTimingLoop.h deleted file mode 100644 index fa64f4d37..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCBITTIMINGLOOP_H_ -#define _GRATSCBITTIMINGLOOP_H_ - -#include <gr_nco.h> -#include <VrSigProc.h> -#include <VrHistoryProc.h> -#include <VrDecimatingSigProc.h> -#include <interleaver_fifo.h> -#include <gr_single_pole_iir.h> -#include <gr_mmse_fir_interpolator.h> -#include <atsci_slicer_agc.h> -#include <stdio.h> -#include <atsci_diag_output.h> - - -/*! - * \brief ATSC BitTimingLoop - * - * This class accepts a single real input and produces a single real output - */ - -class GrAtscBitTimingLoop : public VrDecimatingSigProc<float,float> { - - public: - - GrAtscBitTimingLoop (); - virtual ~GrAtscBitTimingLoop () { }; - - virtual const char *name () { return "GrAtscBitTimingLoop"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - // debug - void set_mu (double a_mu) { mu = a_mu; } - void set_no_update (bool a_no_update) { debug_no_update = a_no_update; } - void set_loop_filter_tap (double tap) { loop.set_taps (tap); } - void set_timing_rate (double rate) { d_timing_rate = rate; } - - protected: - - typedef float iType; - typedef float oType; - - iType produce_sample (const iType *in, unsigned int &index); - double filter_error (double e); - - VrSampleIndex next_input; - gr_mmse_fir_interpolator intr; - double w; // timing control word - double mu; // fractional delay - iType last_right; // last right hand sample - gr_single_pole_iir<double,double,double> loop; - bool debug_no_update;// debug - - double d_loop_filter_tap; - double d_timing_rate; - -#ifdef _BT_DIAG_OUTPUT_ - FILE *fp_loop; - FILE *fp_ps; -#endif -}; - -#endif // _GRATSCBITTIMINGLOOP_H_ diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop2.cc b/gr-atsc/src/lib/GrAtscBitTimingLoop2.cc deleted file mode 100644 index c741a5bb2..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop2.cc +++ /dev/null @@ -1,173 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscBitTimingLoop2.h> -#include <algorithm> -#include <atsc_consts.h> -#include <stdio.h> -#include <assert.h> - - -static const int DEC = 2; // nominal decimation factor - -static const unsigned AVG_WINDOW_LEN = 256; -static const float TIMING_RATE_CONST = 1e-5; // FIXME document interaction with AGC - - -GrAtscBitTimingLoop2::GrAtscBitTimingLoop2 () - : VrDecimatingSigProc<float,float> (1, DEC), - next_input(0), dc (0.0002), mu (0.0), last_right(0), use_right_p (true) -{ - history = 100; // spare input samples in case we need them. - -#ifdef _BT_DIAG_OUTPUT_ - fp_loop = fopen ("loop.out", "w"); - if (fp_loop == 0){ - perror ("loop.out"); - exit (1); - } - - fp_ps = fopen ("ps.out", "w"); - if (fp_ps == 0){ - perror ("ps.out"); - exit (1); - } -#endif - -} - -// -// We are nominally a 2x decimator, but our actual rate varies slightly -// depending on the difference between the transmitter and receiver -// sampling clocks. Hence, we need to compute our input ranges -// explictly. - -int -GrAtscBitTimingLoop2::forecast(VrSampleRange output, - VrSampleRange inputs[]) { - /* dec:1 ratio with history */ - for(unsigned int i=0;i<numberInputs;i++) { - inputs[i].index=next_input; - inputs[i].size=output.size*decimation + history-1; - } - return 0; -} - -inline float -GrAtscBitTimingLoop2::filter_error (float e) -{ - return e; // identity function -} - -int -GrAtscBitTimingLoop2::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - iType *in = ((iType **)ai)[0]; - oType *out = ((oType **)ao)[0]; - - // Force in-order computation of output stream. - // This is required because of our slightly variable decimation factor - sync (output.index); - - - // We are tasked with producing output.size output samples. - // We will consume approximately 2 * output.size input samples. - - - unsigned int ii = 0; // input index - unsigned int k; // output index - - // We look at a window of 3 samples that we call left (oldest), - // middle, right (newest). Each time through the loop, the previous - // right becomes the new left, and the new samples are middle and - // right. - // - // The basic game plan is to drive the average difference between - // right and left to zero. Given that all transitions are - // equiprobable (the data is white) and that the composite matched - // filter is symmetric (raised cosine) it turns out that in the - // average, if we drive that difference to zero, (implying that the - // average slope at the middle point is zero), we'll be sampling - // middle at the maximum or minimum point in the pulse. - - iType left; - iType middle; - iType right = last_right; - - for (k = 0; k < output.size; k++){ - - left = right; - - iType middle_raw = produce_sample (in, ii); - iType middle_dc = dc.filter (middle_raw); - middle = middle_raw - middle_dc; - - iType right_raw = produce_sample (in, ii); - iType right_dc = dc.filter (right_raw); - right = right_raw - right_dc; - - if (use_right_p) // produce our output - out[k] = right; - else - out[k] = middle; - } - -#ifdef _BT_DIAG_OUTPUT_ - float iodata[8]; - iodata[0] = 0; - iodata[1] = out[k]; - iodata[2] = 0; - iodata[3] = 0; - iodata[4] = 0; - iodata[5] = mu; - iodata[6] = 0; - iodata[7] = 0; // spare - if (fwrite (iodata, sizeof (iodata), 1, fp_loop) != 1){ - perror ("fwrite: loop"); - exit (1); - } -#endif - - - last_right = right; - next_input += ii; // update next_input so forecast can get us what we need - return output.size; -} - -/*! - * Produce samples equally spaced in time that are referenced - * to the transmitter's sample clock, not ours. - * - * See pp 523-527 of "Digital Communication Receivers", Meyr, - * Moeneclaey and Fechtel, Wiley, 1998. - */ - -GrAtscBitTimingLoop2::iType -GrAtscBitTimingLoop2::produce_sample (const iType *in, unsigned int &index) -{ - iType n = intr.interpolate (&in[index], mu); - - index++; - return n; -} - diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop2.h b/gr-atsc/src/lib/GrAtscBitTimingLoop2.h deleted file mode 100644 index 4f36c902e..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop2.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCBITTIMINGLOOP2_H_ -#define _GRATSCBITTIMINGLOOP2_H_ - -#include <gr_nco.h> -#include <VrSigProc.h> -#include <VrHistoryProc.h> -#include <VrDecimatingSigProc.h> -#include <interleaver_fifo.h> -#include <gr_single_pole_iir.h> -#include <gr_mmse_fir_interpolator.h> - -/*! - * \brief ATSC BitTimingLoop - * - * This class accepts a single real input and produces a single real output - */ - -class GrAtscBitTimingLoop2 : public VrDecimatingSigProc<float,float> { - - public: - - GrAtscBitTimingLoop2 (); - virtual ~GrAtscBitTimingLoop2 () { }; - - virtual const char *name () { return "GrAtscBitTimingLoop2"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - // debug - void set_mu (float a_mu) { - assert (0 <= a_mu && a_mu <= 1.9); - use_right_p = a_mu < 1.0; - mu = a_mu - floor (a_mu); - cerr << "BTL2: mu: " << mu << " use_right_p: " << use_right_p << endl; - } - - protected: - - typedef float iType; - typedef float oType; - - iType produce_sample (const iType *in, unsigned int &index); - float filter_error (float e); - - VrSampleIndex next_input; - gr_single_pole_iir<float,float,float> dc; // used to estimate DC component - gr_mmse_fir_interpolator intr; - float mu; // fractional delay - iType last_right; // last right hand sample - - bool use_right_p; // ...else middle -}; - -#endif // _GRATSCBITTIMINGLOOP2_H_ diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop3.cc b/gr-atsc/src/lib/GrAtscBitTimingLoop3.cc deleted file mode 100644 index f9c1eb02e..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop3.cc +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscBitTimingLoop3.h> -#include <cmath> -#include <cstdio> -#include <assert.h> - -using std::abs; - - -static const int NOUTPUTS = 2; - -GrAtscBitTimingLoop3::GrAtscBitTimingLoop3 (double ratio_of_rx_clock_to_symbol_freq) - : VrDecimatingSigProc<float,float> (NOUTPUTS, (int) rint (ratio_of_rx_clock_to_symbol_freq)), - d_interp (ratio_of_rx_clock_to_symbol_freq), d_next_input(0), - d_rx_clock_to_symbol_freq (ratio_of_rx_clock_to_symbol_freq) - -{ - assert (ratio_of_rx_clock_to_symbol_freq >= 1.8); // sanity check - - history = 1500; // spare input samples in case we need them. -} - -// -// We are nominally a 2x decimator, but our actual rate varies slightly -// depending on the difference between the transmitter and receiver -// sampling clocks. Hence, we need to compute our input ranges -// explictly. - -int -GrAtscBitTimingLoop3::forecast(VrSampleRange output, - VrSampleRange inputs[]) { - assert (numberInputs == 1); - - /* dec:1 ratio with history */ - inputs[0].index = d_next_input; - inputs[0].size = - ((unsigned long) (output.size * d_rx_clock_to_symbol_freq) + history - 1); - - return 0; -} - - -int -GrAtscBitTimingLoop3::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - iType *in = ((iType **)ai)[0]; - oDataType *out_sample = ((oDataType **)ao)[0]; - oTagType *out_tag = ((oTagType **) ao)[1]; - - // Force in-order computation of output stream. - // This is required because of our slightly variable decimation factor - sync (output.index); - - // We are tasked with producing output.size output samples. - // We will consume approximately 2 * output.size input samples. - - int si = 0; // source index - unsigned int k; // output index - - float interp_sample; - int symbol_index; - double timing_adjustment = 0; - bool seg_locked; - oTagType tag; - - memset (&tag, 0, sizeof (tag)); - - for (k = 0; k < output.size; k++){ - - if (!d_interp.update (in, inputs[0].size, &si, timing_adjustment, &interp_sample)){ - fprintf (stderr, "GrAtscBitTimingLoop3: ran short on data...\n"); - break; - } - - d_sssr.update (interp_sample, &seg_locked, &symbol_index, &timing_adjustment); - out_sample[k] = interp_sample; - tag.valid = seg_locked; - tag.symbol_num = symbol_index; - out_tag[k] = tag; - } - - d_next_input += si; // update next_input so forecast can get us what we need - return k; -} diff --git a/gr-atsc/src/lib/GrAtscBitTimingLoop3.h b/gr-atsc/src/lib/GrAtscBitTimingLoop3.h deleted file mode 100644 index 7e019e49c..000000000 --- a/gr-atsc/src/lib/GrAtscBitTimingLoop3.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCBITTIMINGLOOP3_H_ -#define _GRATSCBITTIMINGLOOP3_H_ - -#include <cstdio> -#include <VrDecimatingSigProc.h> -#include <atsci_diag_output.h> -#include <atsci_sssr.h> -#include <atsci_syminfo.h> - -/*! - * \brief ATSC BitTimingLoop3 - * - * This class accepts a single real input and produces two outputs, - * the raw symbol (float) and the tag (atsc_syminfo) - */ - -class GrAtscBitTimingLoop3 : public VrDecimatingSigProc<float,float> { - - public: - - GrAtscBitTimingLoop3 (double ratio_of_rx_clock_to_symbol_freq); - virtual ~GrAtscBitTimingLoop3 () { }; - - virtual const char *name () { return "GrAtscBitTimingLoop3"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - // debug (NOPs) - void set_mu (double a_mu) { } - void set_no_update (bool a_no_update) { } - void set_loop_filter_tap (double tap) { } - void set_timing_rate (double rate) { } - - protected: - - typedef float iType; - typedef float oDataType; - typedef atsc::syminfo oTagType; - - atsci_sssr d_sssr; - atsci_interpolator d_interp; - VrSampleIndex d_next_input; - double d_rx_clock_to_symbol_freq; -}; - -#endif // _GRATSCBITTIMINGLOOP3_H_ diff --git a/gr-atsc/src/lib/GrAtscConvert2xTo20.cc b/gr-atsc/src/lib/GrAtscConvert2xTo20.cc deleted file mode 100644 index 1f540464d..000000000 --- a/gr-atsc/src/lib/GrAtscConvert2xTo20.cc +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscConvert2xTo20.h> -#include <atsc_consts.h> -#include <cmath> -#include <cstdio> - -static const int N_OUTPUTS = 1; -static const double DEC_RATIO = (2.0 * ATSC_SYMBOL_RATE) / 20e6; // ~ 1.076 - -GrAtscConvert2xTo20::GrAtscConvert2xTo20 () - : VrDecimatingSigProc<float,float> (N_OUTPUTS, (int) rint (DEC_RATIO)) -{ - d_next_input = 0; - d_frac_part = 0; - history = 2 * d_interp.ntaps (); // some slack -} - -GrAtscConvert2xTo20::~GrAtscConvert2xTo20 () -{ - // Nop -} - -void -GrAtscConvert2xTo20::pre_initialize () -{ - fprintf (stderr, - "GrAtscConvert2xTo20: input freq = %g\n", getInputSamplingFrequencyN(0)); - fprintf (stderr, - "GrAtscConvert2xTo20: DEC_RATIO = %g\n", DEC_RATIO); - fprintf (stderr, - "GrAtscConvert2xTo20: argument to setSamplingFrequency = %g\n", - getInputSamplingFrequencyN(0) / DEC_RATIO); - - int r; - r = setSamplingFrequency (getInputSamplingFrequencyN (0) / DEC_RATIO); - - fprintf (stderr, "GrAtscConvert2xTo20: result = %d\n", r); - - fprintf (stderr, "GrAtscConvert2xTo20: getSamplingFrequency = %g\n", - getSamplingFrequency ()); -} - - -int -GrAtscConvert2xTo20::forecast (VrSampleRange output, - VrSampleRange inputs[]) -{ - assert (numberInputs == 1); // I hate these free references to - // superclass's instance variables... - - inputs[0].index = d_next_input; - inputs[0].size = - ((long unsigned int) (output.size * DEC_RATIO) + history - 1); - - return 0; -} - -int -GrAtscConvert2xTo20::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - float *in = ((float **) ai)[0]; - float *out = ((float **) ao)[0]; - - sync (output.index); - - unsigned long si = 0; // source index - unsigned long oi = 0; // output index - double frac_part = d_frac_part; - - for (oi = 0; oi < output.size; oi++){ - assert (si + d_interp.ntaps () < inputs[0].size); - out[oi] = d_interp.interpolate (&in[si], (1. - frac_part)); - - double s = frac_part + DEC_RATIO; - double float_incr = floor (s); - frac_part = s - float_incr; - int incr = (int) float_incr; - si += incr; - } - - d_next_input += si; - d_frac_part = frac_part; - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscConvert2xTo20.h b/gr-atsc/src/lib/GrAtscConvert2xTo20.h deleted file mode 100644 index 05b1023e5..000000000 --- a/gr-atsc/src/lib/GrAtscConvert2xTo20.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _GRATSCCONVERT2XTO20_H_ -#define _GRATSCCONVERT2XTO20_H_ - -#include <VrDecimatingSigProc.h> -#include <gr_mmse_fir_interpolator.h> - -class GrAtscConvert2xTo20 : public VrDecimatingSigProc<float,float> { - gr_mmse_fir_interpolator d_interp; - double d_frac_part; - VrSampleIndex d_next_input; - -public: - GrAtscConvert2xTo20 (); - ~GrAtscConvert2xTo20 (); - - virtual const char *name () { return "GrAtscConvert2xTo20"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - void pre_initialize (); - int checkOutputSamplingFrequency(float) { return 0; } // bogus, but required - -}; - -#endif /* _GRATSCCONVERT2XTO20_H_ */ diff --git a/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.cc b/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.cc deleted file mode 100644 index 09c3db4e0..000000000 --- a/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscDataSegToSoftDataSeg.h> - -// typedefs for fundamental i/o types - -typedef atsc_data_segment iType; -typedef atsc_soft_data_segment oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - -static void -map_to_soft_symbols (atsc_soft_data_segment &out, - const atsc_data_segment &in) -{ - for (unsigned int i = 0; i < NELEM (in.data); i++){ - out.data[i] = in.data[i] * 2 - 7; - } -} - - -GrAtscDataSegToSoftDataSeg::GrAtscDataSegToSoftDataSeg () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscDataSegToSoftDataSeg::~GrAtscDataSegToSoftDataSeg () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscDataSegToSoftDataSeg::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - map_to_soft_symbols (out[i], in[i]); - out[i].pli = in[i].pli; - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.h b/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.h deleted file mode 100644 index 207324d55..000000000 --- a/gr-atsc/src/lib/GrAtscDataSegToSoftDataSeg.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCDATASEGTOSOFTDATASEG_H_ -#define _GRATSCDATASEGTOSOFTDATASEG_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> - -/*! - * \brief Debug glue routine (atsc_data_segment --> atsc_soft_data_segment) - */ - -class GrAtscDataSegToSoftDataSeg : public VrHistoryProc<atsc_data_segment, - atsc_soft_data_segment> -{ - -public: - - GrAtscDataSegToSoftDataSeg (); - ~GrAtscDataSegToSoftDataSeg (); - - const char *name () { return "GrAtscDataSegToSoftDataSeg"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: -}; - -#endif /* _GRATSCDATASEGTOSOFTDATASEG_H_ */ diff --git a/gr-atsc/src/lib/GrAtscDeinterleaver.cc b/gr-atsc/src/lib/GrAtscDeinterleaver.cc deleted file mode 100644 index fd67d7a20..000000000 --- a/gr-atsc/src/lib/GrAtscDeinterleaver.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscDeinterleaver.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_rs_encoded iType; -typedef atsc_mpeg_packet_rs_encoded oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscDeinterleaver::GrAtscDeinterleaver () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscDeinterleaver::~GrAtscDeinterleaver () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscDeinterleaver::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current contents of the LFSR in the randomizer, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - // pipeline info is handled in the primitive - deinterleaver.deinterleave (out[i], in[i]); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscDeinterleaver.h b/gr-atsc/src/lib/GrAtscDeinterleaver.h deleted file mode 100644 index f0f9830b6..000000000 --- a/gr-atsc/src/lib/GrAtscDeinterleaver.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCDEINTERLEAVER_H_ -#define _GRATSCDEINTERLEAVER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_data_interleaver.h> - -/*! - * \brief Deinterleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded) - */ - -class GrAtscDeinterleaver : public VrHistoryProc<atsc_mpeg_packet_rs_encoded, atsc_mpeg_packet_rs_encoded> -{ - -public: - - GrAtscDeinterleaver (); - ~GrAtscDeinterleaver (); - - const char *name () { return "GrAtscDeinterleaver"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_data_deinterleaver deinterleaver; -}; - -#endif /* _GRATSCDEINTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscDerandomizer.cc b/gr-atsc/src/lib/GrAtscDerandomizer.cc deleted file mode 100644 index db3583a62..000000000 --- a/gr-atsc/src/lib/GrAtscDerandomizer.cc +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscDerandomizer.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_no_sync iType; -typedef atsc_mpeg_packet oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscDerandomizer::GrAtscDerandomizer () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscDerandomizer::~GrAtscDerandomizer () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscDerandomizer::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current contents of the LFSR in the randomizer, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - - assert (in[i].pli.regular_seg_p ()); - - if (in[i].pli.first_regular_seg_p ()) - rand.reset (); - - rand.derandomize (out[i], in[i]); - - // take a look at the transport error bit in the pipeline info - // and set bit as required - - if (in[i].pli.transport_error_p ()) - out[i].data[1] |= MPEG_TRANSPORT_ERROR_BIT; - else - out[i].data[1] &= ~MPEG_TRANSPORT_ERROR_BIT; - - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscDerandomizer.h b/gr-atsc/src/lib/GrAtscDerandomizer.h deleted file mode 100644 index bd0d70d94..000000000 --- a/gr-atsc/src/lib/GrAtscDerandomizer.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCDERANDOMIZER_H_ -#define _GRATSCDERANDOMIZER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_randomizer.h> - -/*! - * \brief Derandomize ATSC data (atsc_mpeg_packet_no_sync --> atsc_mpeg_packet) - */ - -class GrAtscDerandomizer : public VrHistoryProc<atsc_mpeg_packet_no_sync, atsc_mpeg_packet> -{ - -public: - - GrAtscDerandomizer (); - ~GrAtscDerandomizer (); - - const char *name () { return "GrAtscDerandomizer"; } - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_randomizer rand; -}; - -#endif /* _GRATSCDERANDOMIZER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscEqualizer.cc b/gr-atsc/src/lib/GrAtscEqualizer.cc deleted file mode 100644 index 27f64c2b7..000000000 --- a/gr-atsc/src/lib/GrAtscEqualizer.cc +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscEqualizer.h> -#include <atsci_equalizer.h> - -// typedefs for fundamental i/o types - -typedef float dataType; -typedef atsc::syminfo tagType; - -static const int NUMBER_OF_OUTPUTS = 2; // # of output streams - - -GrAtscEqualizer::GrAtscEqualizer (atsci_equalizer *equalizer) - : VrHistoryProc<dataType,dataType> (NUMBER_OF_OUTPUTS) -{ - // due to limitation of runtime, all inputs must be the same size - assert (sizeof (dataType) == sizeof (tagType)); - - d_equalizer = equalizer; - - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // - // Set this to the answer returned by the equalizer primitive we were passed. - history = d_equalizer->ntaps (); -} - -GrAtscEqualizer::~GrAtscEqualizer () -{ - // Anything that isn't automatically cleaned up... - - delete d_equalizer; -} - - -/* - * non-standard forecast routine that handles getting the correct amount of - * history for the data input as well as ensuring correct alignment of - * the data and tags. - */ - -int -GrAtscEqualizer::forecast (VrSampleRange output, - VrSampleRange inputs[]) -{ - assert (numberInputs == 2); - - int ntaps = d_equalizer->ntaps (); - int npretaps = d_equalizer->npretaps (); - - assert (ntaps >= 1); - assert (npretaps >= 0 && npretaps < ntaps); - - inputs[0].index = output.index; // the equalizer data - inputs[0].size = output.size + ntaps - 1; // history on data - - // FIXME if there's a problem, it's probably on the next line... - int offset = ntaps - npretaps - 1; - - assert (offset >= 0 && offset < ntaps); - - inputs[1].index = output.index + offset; // align equalizer tags - inputs[1].size = output.size; // N.B., no extra history on tags - - return 0; -} - -/* - * This is the real work horse. We consume 2 input streams - * and produce 2 output streams. - */ - -int -GrAtscEqualizer::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // assert (numberInputs == 2); - - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, hence we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - dataType *input_samples = ((dataType **) ai)[0]; - tagType *input_tags = ((tagType **) ai)[1]; - dataType *output_samples = ((dataType **) ao)[0]; - tagType *output_tags = ((tagType **) ao)[1]; - - - // peform the actual equalization - - d_equalizer->filter (input_samples, input_tags, - output_samples, output.size); - - // write the output tags - - for (unsigned int i = 0; i < output.size; i++) - output_tags[i] = input_tags[i]; - - // Return the number of units we produced. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscEqualizer.h b/gr-atsc/src/lib/GrAtscEqualizer.h deleted file mode 100644 index ff944deb7..000000000 --- a/gr-atsc/src/lib/GrAtscEqualizer.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCEQUALIZER_H_ -#define _GRATSCEQUALIZER_H_ - -#include <VrHistoryProc.h> - -class atsci_equalizer; - -/*! - * \brief ATSC equalizer (float,syminfo --> float,syminfo) - * - * first inputs are data samples, second inputs are tags. - * first outputs are equalized data samples, second outputs are tags. - * - * tag values are defined in atsci_syminfo.h - */ - -class GrAtscEqualizer : public VrHistoryProc<float,float> -{ - -public: - - GrAtscEqualizer (atsci_equalizer *equalizer); - ~GrAtscEqualizer (); - - const char *name () { return "GrAtscEqualizer"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - // we've got a non-standard forecast routine - int forecast (VrSampleRange output, VrSampleRange inputs[]); - -protected: - atsci_equalizer *d_equalizer; -}; - -#endif /* _GRATSCEQUALIZER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscFPLL.cc b/gr-atsc/src/lib/GrAtscFPLL.cc deleted file mode 100644 index df7d6b8c0..000000000 --- a/gr-atsc/src/lib/GrAtscFPLL.cc +++ /dev/null @@ -1,150 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscFPLL.h> -#include <algorithm> -#include "fpll_btloop_coupling.h" - -/* - * I strongly suggest that you not mess with these... - * - * They are strongly coupled into the symbol timing code and - * their value also sets the level of the symbols going - * into the equalizer and viterbi decoder. - */ -static const float FPLL_AGC_REFERENCE = 2.5 * FPLL_BTLOOP_COUPLING_CONST; -static const float FPLL_AGC_RATE = 0.25e-6; - - -GrAtscFPLL::GrAtscFPLL (double a_initial_freq) - : VrSigProc (1, sizeof (iType), sizeof (oType)), - initial_phase(0), debug_no_update(false) -{ - initial_freq = a_initial_freq; - agc.set_rate (FPLL_AGC_RATE); - agc.set_reference (FPLL_AGC_REFERENCE); - - if (_FPLL_DIAG_OUTPUT_){ - fp = fopen ("fpll.out", "w"); - if (fp == 0){ - perror ("fpll.out"); - exit (1); - } - } - -} - -void -GrAtscFPLL::initialize () -{ - float Fs = getInputSamplingFrequencyN (0); - - float alpha = 1 - exp(-1.0 / Fs / 5e-6); - - afci.set_taps (alpha); - afcq.set_taps (alpha); - - nco.set_freq (initial_freq / Fs * 2 * M_PI); - nco.set_phase (initial_phase); -} - -int -GrAtscFPLL::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - iType *in = ((iType **)ai)[0]; - oType *out = ((oType **)ao)[0]; - - unsigned int k; - - for (k = 0; k < output.size; k++){ - - float a_cos, a_sin; - - float input = agc.scale (in[k]); - - nco.step (); // increment phase - nco.sincos (a_sin, a_cos); // compute cos and sin - - float I = input * a_sin; - float Q = input * a_cos; - - out[k] = I; - - float filtered_I = afci.filter (I); - float filtered_Q = afcq.filter (Q); - - // phase detector - - float x = atan2 (filtered_Q, filtered_I); - - // avoid slamming filter with big transitions - - static const float limit = M_PI / 2; - - if (x > limit) - x = limit; - else if (x < -limit) - x = -limit; - - // static const float alpha = 0.037; // Max value - // static const float alpha = 0.005; // takes about 5k samples to pull in, stddev = 323 - // static const float alpha = 0.002; // takes about 15k samples to pull in, stddev = 69 - // or about 120k samples on noisy data, - static const float alpha = 0.001; - static const float beta = alpha * alpha / 4; - - - if (!debug_no_update){ - nco.adjust_phase (alpha * x); - nco.adjust_freq (beta * x); - } - - if (_FPLL_DIAG_OUTPUT_){ -#if 0 // lots of data... - float iodata[8]; - iodata[0] = nco.get_freq () * getSamplingFrequency () * (1.0 / (2 * M_PI)); - iodata[1] = in[k]; - iodata[2] = input; - iodata[3] = I; - iodata[4] = Q; - iodata[5] = filtered_I; - iodata[6] = filtered_Q; - iodata[7] = x; - if (fwrite (iodata, sizeof (iodata), 1, fp) != 1){ - perror ("fwrite: fpll"); - exit (1); - } -#else // just the frequency - float iodata[1]; - iodata[0] = nco.get_freq () * getSamplingFrequency () * (1.0 / (2 * M_PI)); - if (fwrite (iodata, sizeof (iodata), 1, fp) != 1){ - perror ("fwrite: fpll"); - exit (1); - } -#endif - } - } - - return output.size; -} - diff --git a/gr-atsc/src/lib/GrAtscFPLL.h b/gr-atsc/src/lib/GrAtscFPLL.h deleted file mode 100644 index 597a4a891..000000000 --- a/gr-atsc/src/lib/GrAtscFPLL.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - - -#ifndef _GRATSCFPLL_H_ -#define _GRATSCFPLL_H_ - -#include <gr_nco.h> -#include <gr_iir.h> -#include <gr_single_pole_iir.h> -#include <gr_agc.h> -#include <VrSigProc.h> -#include <stdio.h> -#include <atsci_diag_output.h> - -/*! - * \brief ATSC FPLL (2nd Version) - * - * Used as follows: - * float float - * A/D --> GrFIRfilterFFF ----> GrAtscFPLL ----> - * - * We use GrFIRfilterFFF to bandpass filter the signal of interest. - * - * This class accepts a single real input and produces a single real output - */ - -class GrAtscFPLL : public VrSigProc { - protected: - - typedef float iType; - typedef float oType; - - public: - - GrAtscFPLL (double a_initial_freq); - virtual ~GrAtscFPLL () {} - - virtual const char *name () { return "GrAtscFPLL"; } - - virtual void initialize (); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - - // diagnostic routines - void set_initial_phase (double phase) { initial_phase = phase; } // radians - void set_no_update (bool a_no_update) { debug_no_update = a_no_update; } - - - protected: - - double initial_freq; - double initial_phase; - bool debug_no_update; - gr_nco<float,float> nco; - gr_agc agc; // automatic gain control - gr_single_pole_iir<float,float,float> afci; - gr_single_pole_iir<float,float,float> afcq; - -#ifdef _FPLL_DIAG_OUTPUT_ - FILE *fp; -#endif - -}; - - -#endif // _GRATSCFPLL_H_ diff --git a/gr-atsc/src/lib/GrAtscFieldSyncChecker.cc b/gr-atsc/src/lib/GrAtscFieldSyncChecker.cc deleted file mode 100644 index d2c82d6d4..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncChecker.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscFieldSyncChecker.h> -#include <create_atsci_fs_checker.h> -#include <atsci_fs_checker.h> - -// typedefs for fundamental i/o types - -typedef float iDataType; -typedef atsc::syminfo iTagType; -typedef float oDataType; -typedef atsc::syminfo oTagType; - -static const int NUMBER_OF_OUTPUTS = 2; // # of output streams - - -GrAtscFieldSyncChecker::GrAtscFieldSyncChecker () - : VrHistoryProc<iDataType,oDataType> (NUMBER_OF_OUTPUTS) -{ - // tags and data must be same size due to limitation of runtime - assert (sizeof (iDataType) == sizeof (iTagType)); - assert (sizeof (oDataType) == sizeof (oTagType)); - - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - d_fsc = create_atsci_fs_checker (); -} - -GrAtscFieldSyncChecker::~GrAtscFieldSyncChecker () -{ - // Anything that isn't automatically cleaned up... - - delete d_fsc; -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscFieldSyncChecker::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, hence we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iDataType *sample_in = ((iDataType **) ai)[0]; - iTagType *tag_in = ((iTagType **) ai)[1]; - oDataType *sample_out = ((oDataType **) ao)[0]; - oTagType *tag_out = ((oTagType **) ao)[1]; - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - d_fsc->filter (sample_in[i], tag_in[i], &sample_out[i], &tag_out[i]); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscFieldSyncChecker.h b/gr-atsc/src/lib/GrAtscFieldSyncChecker.h deleted file mode 100644 index 28458a19b..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncChecker.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCFIELDSYNCCHECKER_H_ -#define _GRATSCFIELDSYNCCHECKER_H_ - -#include <VrHistoryProc.h> - -class atsci_fs_checker; - -/*! - * \brief ATSC field sync checker (float,syminfo --> float,syminfo) - * - * first output is delayed version of input. - * second output is set of tags, one-for-one with first output. - */ - -class GrAtscFieldSyncChecker : public VrHistoryProc<float,float> -{ - -public: - - GrAtscFieldSyncChecker (); - ~GrAtscFieldSyncChecker (); - - const char *name () { return "GrAtscFieldSyncChecker"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_fs_checker *d_fsc; -}; - -#endif /* _GRATSCFIELDSYNCCHECKER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.cc b/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.cc deleted file mode 100644 index 42f93aa8c..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.cc +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscFieldSyncCorrelator.h> -#include <create_atsci_fs_correlator.h> -#include <atsci_fs_correlator.h> - -// typedefs for fundamental i/o types - -typedef float iType; -typedef float oType; - -static const int NUMBER_OF_OUTPUTS = 2; // # of output streams - - -GrAtscFieldSyncCorrelator::GrAtscFieldSyncCorrelator () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - d_fsc = create_atsci_fs_correlator (); -} - -GrAtscFieldSyncCorrelator::~GrAtscFieldSyncCorrelator () -{ - // Anything that isn't automatically cleaned up... - - delete d_fsc; -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscFieldSyncCorrelator::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, hence we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *sample_out = ((oType **) ao)[0]; - oType *tag_out = ((oType **) ao)[1]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - d_fsc->filter (in[i], &sample_out[i], &tag_out[i]); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.h b/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.h deleted file mode 100644 index 1a16048b2..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncCorrelator.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCFIELDSYNCCORRELATOR_H_ -#define _GRATSCFIELDSYNCCORRELATOR_H_ - -#include <VrHistoryProc.h> - -class atsci_fs_correlator; - -/*! - * \brief ATSC field sync correlator (float --> float,float) - * - * first output is delayed version of input. - * second output is set of tags, one-for-one with first output. - * - * tag values are defined in atsci_sync_tag.h - */ - -class GrAtscFieldSyncCorrelator : public VrHistoryProc<float,float> -{ - -public: - - GrAtscFieldSyncCorrelator (); - ~GrAtscFieldSyncCorrelator (); - - const char *name () { return "GrAtscFieldSyncCorrelator"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_fs_correlator *d_fsc; -}; - -#endif /* _GRATSCFIELDSYNCCORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/GrAtscFieldSyncDemux.cc b/gr-atsc/src/lib/GrAtscFieldSyncDemux.cc deleted file mode 100644 index e311acc8a..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncDemux.cc +++ /dev/null @@ -1,173 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cmath> -#include <GrAtscFieldSyncDemux.h> -#include <atsc_consts.h> -#include <atsc_types.h> -#include <atsci_syminfo.h> -#include <stdio.h> -#include <assert.h> - -using std::abs; - -static const int DEC = ATSC_DATA_SEGMENT_LENGTH; // nominal decimation factor - -GrAtscFieldSyncDemux::GrAtscFieldSyncDemux () - : VrDecimatingSigProc<float,atsc_soft_data_segment> (1, DEC), - d_locked (false), d_in_field2(true), d_segment_number(0), d_next_input(0), - d_lost_index (0) -{ - history = 2 * ATSC_DATA_SEGMENT_LENGTH; // spare input samples in case we need them. -} - -GrAtscFieldSyncDemux::~GrAtscFieldSyncDemux () -{ -} - -int -GrAtscFieldSyncDemux::forecast (VrSampleRange output, - VrSampleRange inputs[]) { - /* dec:1 ratio with history */ - - assert (numberInputs == 2); - - for (unsigned int i = 0; i < numberInputs; i++) { - inputs[i].index = d_next_input; - inputs[i].size = output.size * decimation + history - 1; - } - return 0; -} - -inline static bool -tag_is_seg_sync_or_field_sync (atsc::syminfo tag) -{ - return tag.symbol_num == 0 && tag.valid; -} - -int -GrAtscFieldSyncDemux::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - float *input_samples = (float *) ai[0]; - atsc::syminfo *input_tags = (atsc::syminfo *) ai[1]; - atsc_soft_data_segment *out = ((atsc_soft_data_segment **)ao)[0]; - - sync (output.index); - - unsigned int ii = 0; // input index - - // Are we in sync? - if (!tag_is_seg_sync_or_field_sync (input_tags[0])){ // No ... - - if (d_locked){ - d_locked = false; - d_lost_index = inputs[0].index + ii; - cerr << "GrAtscFieldSyncDemux: lost sync at " - << d_lost_index << endl; - } - - // ... search for beginning of a field sync - - // cerr << "GrAtscFieldSyncDemux: searching for sync at " - // << inputs[0].index + ii << endl; - - for (ii = 1; ii < inputs[0].size; ii++){ - if (atsc::tag_is_start_field_sync (input_tags[ii])){ - // found one - d_locked = true; - - const char *str; - if (atsc::tag_is_start_field_sync_1 (input_tags[ii])) - str = "FIELD-1"; - else if (atsc::tag_is_start_field_sync_2 (input_tags[ii])) - str = "FIELD-2"; - else - str = "SEGMENT"; - - cerr << "GrAtscFieldSyncDemux: synced (" << str << ") at " - << inputs[0].index + ii - << " [delta = " << inputs[0].index + ii - d_lost_index - << "]\n"; - - d_next_input += ii; // update for forecast - return 0; // no work completed so far - } - } - // no non-NORMAL tag found - d_next_input += ii; // update for forecast - return 0; // no work completed so far - } - - // We are in sync. Produce output... - - unsigned int k = 0; // output index - - while (k < output.size){ - - if (inputs[0].size - ii < (unsigned) ATSC_DATA_SEGMENT_LENGTH){ - // We're out of input data. - cerr << "GrAtscFieldSyncDemux: ran out of input data\n"; - d_next_input += ii; // update for forecast - return k; // return amount of work completed so far - } - - if (!tag_is_seg_sync_or_field_sync (input_tags[ii])){ - // lost sync... - // cerr << "GrAtscFieldSyncDemux: lost sync at " - // << inputs[0].index + ii << endl; - - d_next_input += ii; // update for forecast - return k; // return amount of work completed so far - } - - if (atsc::tag_is_start_field_sync_1 (input_tags[ii])){ - d_in_field2 = false; - d_segment_number = 0; - ii += ATSC_DATA_SEGMENT_LENGTH; // skip over field sync - continue; - } - - if (atsc::tag_is_start_field_sync_2 (input_tags[ii])){ - d_in_field2 = true; - d_segment_number = 0; - ii += ATSC_DATA_SEGMENT_LENGTH; // skip over field sync - continue; - } - - if (d_segment_number >= ATSC_DSEGS_PER_FIELD){ - // something's wrong... - cerr << "GrAtscFieldSyncDemux: segment number overflow\n"; - d_segment_number = 0; - } - - out[k].pli.set_regular_seg (d_in_field2, d_segment_number++); - for (int jj = 0; jj < ATSC_DATA_SEGMENT_LENGTH; jj++) - out[k].data[jj] = input_samples[ii + jj]; - ii += ATSC_DATA_SEGMENT_LENGTH; - k++; - } - - d_next_input += ii; // update for forecast - return k; // return amount of work completed -} - diff --git a/gr-atsc/src/lib/GrAtscFieldSyncDemux.h b/gr-atsc/src/lib/GrAtscFieldSyncDemux.h deleted file mode 100644 index f5bab9b87..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncDemux.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCFIELDSYNCDEMUX_H_ -#define _GRATSCFIELDSYNCDEMUX_H_ - -#include <VrDecimatingSigProc.h> -#include <atsc_types.h> - -/*! - * \brief ATSC Field Sync Demux - * - * This class accepts 1 stream of floats (data), and 1 stream of tags (syminfo). - * It outputs one stream of atsc_soft_data_segment packets - */ - -class GrAtscFieldSyncDemux : public VrDecimatingSigProc<float,atsc_soft_data_segment> { - - public: - - GrAtscFieldSyncDemux (); - virtual ~GrAtscFieldSyncDemux (); - - virtual const char *name () { return "GrAtscFieldSyncDemux"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - protected: - - bool d_locked; - bool d_in_field2; - int d_segment_number; - VrSampleIndex d_next_input; - VrSampleIndex d_lost_index; // diagnostic fluff -}; - -#endif // _GRATSCFIELDSYNCDEMUX_H_ diff --git a/gr-atsc/src/lib/GrAtscFieldSyncMux.cc b/gr-atsc/src/lib/GrAtscFieldSyncMux.cc deleted file mode 100644 index 7ebab72ad..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncMux.cc +++ /dev/null @@ -1,246 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscFieldSyncMux.h> -#include <atsci_pnXXX.h> - - -// typedefs for fundamental i/o types - -typedef atsc_data_segment iType; -typedef atsc_data_segment oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - -static const int N_SAVED_SYMBOLS = GrAtscFieldSyncMux::N_SAVED_SYMBOLS; - -static void -init_field_sync_common (unsigned char *p, int mask, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) -{ - static const unsigned char bin_map[2] = { 1, 6 }; // map binary values to 1 of 8 levels - - int i = 0; - - p[i++] = bin_map[1]; // data segment sync pulse - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map[atsc_pn511[j]]; - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map[atsc_pn63[j]]; - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map[atsc_pn63[j] ^ mask]; - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map[atsc_pn63[j]]; - - p[i++] = bin_map[0]; // 24 bits of VSB8 mode identifiera - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - - - for (int j = 0; j < 92; j++) // 92 more bits - p[i++] = bin_map[atsc_pn63[j % 63]]; - - // now copy the last 12 symbols of the previous segment - - for (int j = 0; j < N_SAVED_SYMBOLS; j++) - p[i++] = saved_symbols[j]; - - assert (i == ATSC_DATA_SEGMENT_LENGTH); -} - -inline static void -init_field_sync_1 (atsc_data_segment *s, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) -{ - init_field_sync_common (&s->data[0], 0, saved_symbols); -} - -inline static void -init_field_sync_2 (atsc_data_segment *s, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) - -{ - init_field_sync_common (&s->data[0], 1, saved_symbols); -} - -static void -save_last_symbols (unsigned char saved_symbols[N_SAVED_SYMBOLS], - const atsc_data_segment &seg) -{ - for (int i = 0; i < N_SAVED_SYMBOLS; i++) - saved_symbols[i] = seg.data[i + ATSC_DATA_SEGMENT_LENGTH - N_SAVED_SYMBOLS]; -} - - -inline static bool -last_regular_seg_p (const plinfo &pli) -{ - return pli.regular_seg_p () && (pli.segno () == ATSC_DSEGS_PER_FIELD - 1); -} - - -GrAtscFieldSyncMux::GrAtscFieldSyncMux () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS), - d_current_index (0), d_already_output_field_sync (false) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - history = 1; - - // any other init here. -} - -GrAtscFieldSyncMux::~GrAtscFieldSyncMux () -{ - // Anything that isn't automatically cleaned up... -} - -void -GrAtscFieldSyncMux::pre_initialize () -{ - // we jack our output sampling frequency up to account for inserted field syncs - setSamplingFrequency (getInputSamplingFrequencyN (0) * 313./312.); -} - -/* - * we need a non-standard version of forecast because our output isn't - * exactly 1:1 with our input. - */ - -int -GrAtscFieldSyncMux::forecast (VrSampleRange output, VrSampleRange inputs[]) -{ - for(unsigned int i = 0; i < numberInputs; i++) { - inputs[i].index = d_current_index; - inputs[i].size = output.size; - } - return 0; -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ -int -GrAtscFieldSyncMux::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, hence we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - unsigned int index = 0; - for (unsigned int outdex = 0; outdex < output.size; outdex++){ - - assert (in[index].pli.regular_seg_p ()); - - if (!in[index].pli.first_regular_seg_p ()){ - out[outdex] = in[index]; // just copy in to out - - if (last_regular_seg_p (in[index].pli)) - save_last_symbols (d_saved_symbols, in[index]); - - index++; - } - else { // first_regular_seg_p - if (!d_already_output_field_sync){ - // write out field sync... - atsc_data_segment field_sync; - - if (in[index].pli.in_field1_p ()) - init_field_sync_1 (&field_sync, d_saved_symbols); - else - init_field_sync_2 (&field_sync, d_saved_symbols); - - // note that index doesn't advance in this branch - out[outdex] = field_sync; - d_already_output_field_sync = true; - } - else { - // already output field sync, now output first regular segment - out[outdex] = in[index]; - index++; - d_already_output_field_sync = false; - } - } - } - - d_current_index += index; - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscFieldSyncMux.h b/gr-atsc/src/lib/GrAtscFieldSyncMux.h deleted file mode 100644 index ae52b8e5c..000000000 --- a/gr-atsc/src/lib/GrAtscFieldSyncMux.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCFIELDSYNCMUX_H_ -#define _GRATSCFIELDSYNCMUX_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> - -/*! - * \brief Insert ATSC Field Syncs as required (atsc_data_segment --> atsc_data_segment) - */ - -class GrAtscFieldSyncMux : public VrHistoryProc<atsc_data_segment, atsc_data_segment> -{ - -public: - - GrAtscFieldSyncMux (); - ~GrAtscFieldSyncMux (); - - const char *name () { return "GrAtscFieldSyncMux"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - int forecast (VrSampleRange output, VrSampleRange inputs[]); - - void pre_initialize (); - - static const int N_SAVED_SYMBOLS = 12; - -protected: - VrSampleIndex d_current_index; - bool d_already_output_field_sync; - unsigned char d_saved_symbols[N_SAVED_SYMBOLS]; -}; - -#endif /* _GRATSCFIELDSYNCMUX_H_ */ diff --git a/gr-atsc/src/lib/GrAtscInterleaver.cc b/gr-atsc/src/lib/GrAtscInterleaver.cc deleted file mode 100644 index 2c8f0c7e8..000000000 --- a/gr-atsc/src/lib/GrAtscInterleaver.cc +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscInterleaver.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_rs_encoded iType; -typedef atsc_mpeg_packet_rs_encoded oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscInterleaver::GrAtscInterleaver () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscInterleaver::~GrAtscInterleaver () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscInterleaver::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current contents of the FIFOs, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - -#if 0 - cerr << "@@@ GrAtscInterleaver: output.index = " << output.index - << " output.size = " << output.size - << " sum = " << output.index + output.size - << " \t[out = " << out << "]" - << endl; -#endif - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - // pipeline info is handled in the primitive - interleaver.interleave (out[i], in[i]); - } - - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscInterleaver.h b/gr-atsc/src/lib/GrAtscInterleaver.h deleted file mode 100644 index 76be38a21..000000000 --- a/gr-atsc/src/lib/GrAtscInterleaver.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCINTERLEAVER_H_ -#define _GRATSCINTERLEAVER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_data_interleaver.h> - -/*! - * \brief Interleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded) - */ - -class GrAtscInterleaver : public VrHistoryProc<atsc_mpeg_packet_rs_encoded, atsc_mpeg_packet_rs_encoded> -{ - -public: - - GrAtscInterleaver (); - ~GrAtscInterleaver (); - - const char *name () { return "GrAtscInterleaver"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_data_interleaver interleaver; -}; - -#endif /* _GRATSCINTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscRSDecoder.cc b/gr-atsc/src/lib/GrAtscRSDecoder.cc deleted file mode 100644 index fd0122ad2..000000000 --- a/gr-atsc/src/lib/GrAtscRSDecoder.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscRSDecoder.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_rs_encoded iType; -typedef atsc_mpeg_packet_no_sync oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscRSDecoder::GrAtscRSDecoder () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscRSDecoder::~GrAtscRSDecoder () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscRSDecoder::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - assert (in[i].pli.regular_seg_p ()); - out[i].pli = in[i].pli; // copy pipeline info - - int nerrors_not_corrected = rs_decoder.decode (out[i], in[i]); - out[i].pli.set_transport_error (nerrors_not_corrected == -1); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscRSDecoder.h b/gr-atsc/src/lib/GrAtscRSDecoder.h deleted file mode 100644 index d64102d10..000000000 --- a/gr-atsc/src/lib/GrAtscRSDecoder.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCRSDECODER_H_ -#define _GRATSCRSDECODER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_reed_solomon.h> - -/*! - * \brief Pass ATSC data Reed-Solomon decoder( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_rs_no_sync) - */ - -class GrAtscRSDecoder : public VrHistoryProc<atsc_mpeg_packet_rs_encoded, atsc_mpeg_packet_no_sync> -{ - -public: - - GrAtscRSDecoder (); - ~GrAtscRSDecoder (); - - const char *name () { return "GrAtscRSDecoder"; } - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_reed_solomon rs_decoder; -}; - -#endif /* _GRATSCRSDECODER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscRSEncoder.cc b/gr-atsc/src/lib/GrAtscRSEncoder.cc deleted file mode 100644 index 249678427..000000000 --- a/gr-atsc/src/lib/GrAtscRSEncoder.cc +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscRSEncoder.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_no_sync iType; -typedef atsc_mpeg_packet_rs_encoded oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscRSEncoder::GrAtscRSEncoder () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscRSEncoder::~GrAtscRSEncoder () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscRSEncoder::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - - // ensure that on the way in, the error bit is clear - // [assertion is not valid, because the randomizer has already scrambled the bits] - // assert ((in[i].data[0] & MPEG_TRANSPORT_ERROR_BIT) == 0); - - assert (in[i].pli.regular_seg_p ()); - out[i].pli = in[i].pli; // copy pipeline info... - rs_encoder.encode (out[i], in[i]); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscRSEncoder.h b/gr-atsc/src/lib/GrAtscRSEncoder.h deleted file mode 100644 index 29921d8b3..000000000 --- a/gr-atsc/src/lib/GrAtscRSEncoder.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCRSENCODER_H_ -#define _GRATSCRSENCODER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_reed_solomon.h> - -/*! - * \brief Encode using Reed Solomon ATSC data (atsc_mpeg_packet_no_sync --> atsc_mpeg_packet_rs_encoded) - */ - -class GrAtscRSEncoder : public VrHistoryProc<atsc_mpeg_packet_no_sync, atsc_mpeg_packet_rs_encoded> -{ - -public: - - GrAtscRSEncoder (); - ~GrAtscRSEncoder (); - - const char *name () { return "GrAtscRSEncoder"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_reed_solomon rs_encoder; -}; - -#endif /* _GRATSCRSENCODER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscRandomizer.cc b/gr-atsc/src/lib/GrAtscRandomizer.cc deleted file mode 100644 index c5172699c..000000000 --- a/gr-atsc/src/lib/GrAtscRandomizer.cc +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscRandomizer.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet iType; -typedef atsc_mpeg_packet_no_sync oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscRandomizer::GrAtscRandomizer () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS), - field2 (false), segno (0) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // We're one-to-one input-to-output so set it to 1. - history = 1; - - // any other init here. -} - -GrAtscRandomizer::~GrAtscRandomizer () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscRandomizer::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current contents of the LFSR in the randomizer, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i++){ - - // initialize plinfo for downstream - // - // We do this here because the randomizer is effectively - // the head of the tx processing chain - // - out[i].pli.set_regular_seg (field2, segno); - segno++; - if (segno == 312){ - segno = 0; - field2 = !field2; - } - - assert ((in[i].data[1] & MPEG_TRANSPORT_ERROR_BIT) == 0); - - if (out[i].pli.first_regular_seg_p ()) - rand.reset (); - - rand.randomize (out[i], in[i]); - } - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscRandomizer.h b/gr-atsc/src/lib/GrAtscRandomizer.h deleted file mode 100644 index f56f7178e..000000000 --- a/gr-atsc/src/lib/GrAtscRandomizer.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCRANDOMIZER_H_ -#define _GRATSCRANDOMIZER_H_ - -#include <VrHistoryProc.h> -#include <atsc_types.h> -#include <atsci_randomizer.h> - -/*! - * \brief Randomize ATSC data (atsc_mpeg_packet --> atsc_mpeg_packet_no_sync) - */ - -class GrAtscRandomizer : public VrHistoryProc<atsc_mpeg_packet, atsc_mpeg_packet_no_sync> -{ - -public: - - GrAtscRandomizer (); - ~GrAtscRandomizer (); - - const char *name () { return "GrAtscRandomizer"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_randomizer rand; - - // used to initialize plinfo in output - bool field2; - int segno; -}; - -#endif /* _GRATSCRANDOMIZER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscSegSymSync.cc b/gr-atsc/src/lib/GrAtscSegSymSync.cc deleted file mode 100644 index 2d9419c25..000000000 --- a/gr-atsc/src/lib/GrAtscSegSymSync.cc +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscSegSymSync.h> -#include <GrAtscSegSymSyncImpl_export.h> -#include <iostream> -#include <assert.h> - -static const int DECIMATION = 2; // close enough for super class's use -static const int N_OUTPUTS = 2; - -GrAtscSegSymSync::GrAtscSegSymSync () - : VrDecimatingSigProc<float,float> (N_OUTPUTS, DECIMATION) -{ - if (sizeof (float) != sizeof (atsc::syminfo)){ - cerr << "GrAtscSegSymSync: sizeof (float) != sizeof (atsc::syminfo)\n"; - assert (0); - } -} - -GrAtscSegSymSync::~GrAtscSegSymSync () -{ - // Nop -} - - -GrAtscSegSymSync * -GrAtscSegSymSync::create (double nominal_ratio_of_rx_clock_to_symbol_freq) -{ - return create_GrAtscSegSymSyncImpl (nominal_ratio_of_rx_clock_to_symbol_freq); -} diff --git a/gr-atsc/src/lib/GrAtscSegSymSync.h b/gr-atsc/src/lib/GrAtscSegSymSync.h deleted file mode 100644 index 750483f54..000000000 --- a/gr-atsc/src/lib/GrAtscSegSymSync.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCSEGSYMSYNC_H_ -#define _GRATSCSEGSYMSYNC_H_ - -#include <VrDecimatingSigProc.h> - -/*! - * \brief ATSC SegSymSync - * - * Abstract class that establishes symbol timing and synchronizes - * with data segment boundaries. - * - * Takes a single stream of floats as the input and - * produces two streams as output. The first stream is the data samples - * and is of type float. The second stream is the tags, and is of type syminfo. - * - * The current GNU Radio interface doesn't currently support different - * types on the input ports (or output ports for that matter), but - * since they are the same size, it works. - */ - -#include <atsci_syminfo.h> - -class GrAtscSegSymSync : public VrDecimatingSigProc<float,float> { - -public: - - GrAtscSegSymSync (); - ~GrAtscSegSymSync (); - - /*! - * \brief reset bit timing loop on channel change - */ - virtual void reset () = 0; - - /*! - * \brief create an instance of GrAtscSegSymSync - */ - static GrAtscSegSymSync *create (double nominal_ratio_of_rx_clock_to_symbol_freq); - -}; - -#endif // _GRATSCSEGSYMSYNC_H_ diff --git a/gr-atsc/src/lib/GrAtscSegSymSyncImpl.cc b/gr-atsc/src/lib/GrAtscSegSymSyncImpl.cc deleted file mode 100644 index 8e2cfc208..000000000 --- a/gr-atsc/src/lib/GrAtscSegSymSyncImpl.cc +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscSegSymSyncImpl.h> -#include <GrAtscSegSymSyncImpl_export.h> -#include <cmath> -#include <assert.h> - -GrAtscSegSymSyncImpl::GrAtscSegSymSyncImpl ( - double nominal_ratio_of_rx_clock_to_symbol_freq) - : d_interp (nominal_ratio_of_rx_clock_to_symbol_freq) -{ - // set approximate decimation rate for superclass's benefit - decimation = (int) rint (nominal_ratio_of_rx_clock_to_symbol_freq); - - history = 1500; // spare input samples in case we need them. - - d_sssr.reset (); - d_interp.reset (); - d_next_input = 0; - d_rx_clock_to_symbol_freq = nominal_ratio_of_rx_clock_to_symbol_freq; -} - -GrAtscSegSymSyncImpl::~GrAtscSegSymSyncImpl () -{ - // Nop -} - -void -GrAtscSegSymSyncImpl::pre_initialize () -{ - setSamplingFrequency ( - getInputSamplingFrequencyN (0) / d_rx_clock_to_symbol_freq); -} - -int -GrAtscSegSymSyncImpl::forecast (VrSampleRange output, - VrSampleRange inputs[]) -{ - assert (numberInputs == 1); // I hate these free references to - // superclass's instance variables... - - inputs[0].index = d_next_input; - inputs[0].size = - ((long unsigned int) (output.size * d_rx_clock_to_symbol_freq) - + history - 1); - - return 0; -} - -int -GrAtscSegSymSyncImpl::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ -#if 0 - float *input_samples = ((float **) ai)[0]; - float *output_samples = ((float **) ao)[0]; - atsc::syminfo *output_info = ((atsc::syminfo **) ao)[1]; - - // FIXME finish... -#endif - assert (0); - - return output.size; -} - -void -GrAtscSegSymSyncImpl::reset () -{ - d_sssr.reset (); - d_interp.reset (); -} - - -/* - * Exported constructor. - * Doesn't expose any of the internals or our compile time dependencies. - */ - -GrAtscSegSymSync * -create_GrAtscSegSymSyncImpl (double nominal_ratio_of_rx_clock_to_symbol_freq) -{ - return new GrAtscSegSymSyncImpl (nominal_ratio_of_rx_clock_to_symbol_freq); -} diff --git a/gr-atsc/src/lib/GrAtscSegSymSyncImpl.h b/gr-atsc/src/lib/GrAtscSegSymSyncImpl.h deleted file mode 100644 index 650dab569..000000000 --- a/gr-atsc/src/lib/GrAtscSegSymSyncImpl.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _GRATSCSEGSYMSYNCIMPL_H_ -#define _GRATSCSEGSYMSYNCIMPL_H_ - -#include <GrAtscSegSymSync.h> -#include <atsci_sssr.h> - - -/*! - * \brief concrete implementation of GrAtscSegSymSync - * - * This class implements data segment sync tracking and symbol timing - * using a variation of the method described in - * "ATSC/VSB Tutorial - Receiver Technology" by Wayne E. Bretl of - * Zenith, pgs 41-45. - */ - -class GrAtscSegSymSyncImpl : public GrAtscSegSymSync { - - atsci_sssr d_sssr; - atsci_interpolator d_interp; - VrSampleIndex d_next_input; - double d_rx_clock_to_symbol_freq; // nominal ratio - -public: - - // the standard methods... - - GrAtscSegSymSyncImpl (double nominal_ratio_of_rx_clock_to_symbol_freq); - virtual ~GrAtscSegSymSyncImpl (); - - virtual const char *name () { return "GrAtscSegSymSyncImpl"; } - - virtual int forecast (VrSampleRange output, - VrSampleRange inputs[]); - - virtual int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - - void pre_initialize (); - - - // reset on channel change - - virtual void reset (); - -}; - -#endif /* _GRATSCSEGSYMSYNCIMPL_H_ */ diff --git a/gr-atsc/src/lib/GrAtscSegSymSyncImpl_export.h b/gr-atsc/src/lib/GrAtscSegSymSyncImpl_export.h deleted file mode 100644 index 187f1a039..000000000 --- a/gr-atsc/src/lib/GrAtscSegSymSyncImpl_export.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -class GrAtscSegSymSync; - -GrAtscSegSymSync *create_GrAtscSegSymSyncImpl ( - double nominal_ratio_of_rx_clock_to_symbol_freq); diff --git a/gr-atsc/src/lib/GrAtscSymbolMapper.h b/gr-atsc/src/lib/GrAtscSymbolMapper.h deleted file mode 100644 index a37703f1f..000000000 --- a/gr-atsc/src/lib/GrAtscSymbolMapper.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCSYMBOLMAPPER_H_ -#define _GRATSCSYMBOLMAPPER_H_ - - -#include <VrInterpolatingSigProcNoWork.h> -#include <atsc_types.h> -#include <gr_nco.h> - -/*! - * \brief take atsc_data_segments and map them to symbols. - * - * Input is a stream of atsc_data_segments. - * Output is a stream of symbols at 1x the symbol rate - * - * This module performs the signal mapping & pilot addition. - */ - -template<class oType> -class GrAtscSymbolMapper - : public VrInterpolatingSigProcNoWork<atsc_data_segment, oType> { - -public: - GrAtscSymbolMapper () - : VrInterpolatingSigProcNoWork<atsc_data_segment, oType>(1, INTERP_FACTOR) {}; - - ~GrAtscSymbolMapper () {}; - - const char *name () { return "GrAtscSymbolMapper"; } - - int work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]); - -protected: - static const int INTERP_FACTOR = ATSC_DATA_SEGMENT_LENGTH; -}; - - -template<class oType> -int -GrAtscSymbolMapper<oType>::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - atsc_data_segment *in = ((atsc_data_segment **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - assert ((output.size % INTERP_FACTOR) == 0); - - static const float pilot_add = 1.25; - static const float map[8] = { - -7 + pilot_add, - -5 + pilot_add, - -3 + pilot_add, - -1 + pilot_add, - 1 + pilot_add, - 3 + pilot_add, - 5 + pilot_add, - 7 + pilot_add - }; - - unsigned int oo = 0; - unsigned int nsegs = output.size / INTERP_FACTOR; - - for (unsigned int n = 0; n < nsegs; n++){ - unsigned char *symbol = in[n].data; - - for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++){ - out[oo++] = (oType) map[symbol[i] & 0x7]; - } - } - - assert (oo == output.size); - return output.size; -} - -#endif /* _GRATSCSYMBOLMAPPER_H_ */ diff --git a/gr-atsc/src/lib/GrAtscTrellisEncoder.cc b/gr-atsc/src/lib/GrAtscTrellisEncoder.cc deleted file mode 100644 index a0df3e9a7..000000000 --- a/gr-atsc/src/lib/GrAtscTrellisEncoder.cc +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscTrellisEncoder.h> - -// typedefs for fundamental i/o types - -typedef atsc_mpeg_packet_rs_encoded iType; -typedef atsc_data_segment oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscTrellisEncoder::GrAtscTrellisEncoder () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS), last_start(-1) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // - // We need our input to be aligned on a 12-segment boundary, - // to ensure satisfaction, ask for 11 more - history = 1 + (atsci_trellis_encoder::NCODERS - 1); - - // any other init here. - - // Let the bottom end know we must produce output in multiples of 12 segments. - setOutputSize (atsci_trellis_encoder::NCODERS); -} - -GrAtscTrellisEncoder::~GrAtscTrellisEncoder () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscTrellisEncoder::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current state of the encoders, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - -#if 0 - cerr << "@@@ GrAtscTrellisEncoder: output.index = " << output.index - << " output.size = " << output.size - << " sum = " << output.index + output.size - << " \t[in = " << in << "]" - << endl; -#endif - - assert (output.size % atsci_trellis_encoder::NCODERS == 0); - - - // find the first mod 12 boundary to begin decoding - int start; - for (start = 0; start < atsci_trellis_encoder::NCODERS; start++){ - plinfo::sanity_check (in[start].pli); - assert (in[start].pli.regular_seg_p ()); - if ((in[start].pli.segno () % atsci_trellis_encoder::NCODERS) == 0) - break; - } - - if (start == atsci_trellis_encoder::NCODERS){ - // we didn't find a mod 12 boundary. There's some kind of problem - // upstream of us (not yet sync'd??) - cerr << "!!!GrAtscTrellisEncoder: no mod-12 boundary found\7\n"; - start = 0; - } - else if (start != last_start){ - cerr << "GrAtscTrellisEncoder: new starting offset = " << start - << " output.index = " << output.index << endl; - last_start = start; - } - - - // FIXME paranoid check for problem - for (unsigned int i = 0; i < output.size; i++){ - plinfo::sanity_check (in[i + start].pli); - } - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i += atsci_trellis_encoder::NCODERS){ - // primitive does 12 segments at a time. - // pipeline info is handled in the primitive. - encoder.encode (&out[i], &in[i + start]); - } - -#if 0 - // FIXME paranoid check for problem - for (unsigned int i = 0; i < output.size; i++){ - plinfo::sanity_check (out[i].pli); - assert (out[i].pli.regular_seg_p ()); - } -#endif - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscTrellisEncoder.h b/gr-atsc/src/lib/GrAtscTrellisEncoder.h deleted file mode 100644 index e4de388ae..000000000 --- a/gr-atsc/src/lib/GrAtscTrellisEncoder.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCTRELLISENCODER_H_ - -#include <VrHistoryProc.h> -#include <atsci_trellis_encoder.h> - -/*! - * \brief ATSC 12-way interleaved trellis encoder (atsc_mpeg_packet_rs_encoded --> atsc_data_segment) - */ - -class GrAtscTrellisEncoder : public VrHistoryProc<atsc_mpeg_packet_rs_encoded,atsc_data_segment> -{ - -public: - - GrAtscTrellisEncoder (); - ~GrAtscTrellisEncoder (); - - const char *name () { return "GrAtscTrellisEncoder"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_trellis_encoder encoder; - int last_start; -}; - -#endif diff --git a/gr-atsc/src/lib/GrAtscViterbiDecoder.cc b/gr-atsc/src/lib/GrAtscViterbiDecoder.cc deleted file mode 100644 index c89b3556b..000000000 --- a/gr-atsc/src/lib/GrAtscViterbiDecoder.cc +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <GrAtscViterbiDecoder.h> -#include <iostream> - -// typedefs for fundamental i/o types - -typedef atsc_soft_data_segment iType; -typedef atsc_mpeg_packet_rs_encoded oType; - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - - -GrAtscViterbiDecoder::GrAtscViterbiDecoder () - : VrHistoryProc<iType,oType> (NUMBER_OF_OUTPUTS), last_start(-1) -{ - // 1 + number of extra input elements at which we look. This is - // used by the superclass's forecast routine to get us the correct - // range on our inputs. - // - // We need our input to be aligned on a 12-segment boundary, - // to ensure satisfaction, ask for 11 more - history = 1 + (atsci_viterbi_decoder::NCODERS - 1); - - // any other init here. - - // Let the bottom end know we must produce output in multiples of 12 segments. - setOutputSize (atsci_viterbi_decoder::NCODERS); -} - -GrAtscViterbiDecoder::~GrAtscViterbiDecoder () -{ - // Anything that isn't automatically cleaned up... -} - -/* - * This is the real work horse. In general this interface can handle - * multiple streams of input and output, but we almost always - * use a single input and output stream. - */ - -int -GrAtscViterbiDecoder::work (VrSampleRange output, void *ao[], - VrSampleRange inputs[], void *ai[]) -{ - // If we have state that persists across invocations (e.g., we have - // instance variables that we modify), we must use the sync method - // to indicate to the scheduler that our output must be computed in - // order. This doesn't keep other things from being run in - // parallel, it just means that at any given time, there is only a - // single thread working this code, and that the scheduler will - // ensure that we are asked to produce output that is contiguous and - // that will be presented to us in order of increasing time. - - // We have state, the current state of the decoder, hence - // we must use sync. - - sync (output.index); - - // construct some nicer i/o pointers to work with. - - iType *in = ((iType **) ai)[0]; - oType *out = ((oType **) ao)[0]; - - - assert (output.size % atsci_viterbi_decoder::NCODERS == 0); - - // find the first mod 12 boundary to begin decoding - int start; - for (start = 0; start < atsci_viterbi_decoder::NCODERS; start++){ - assert (in[start].pli.regular_seg_p ()); - if ((in[start].pli.segno () % atsci_viterbi_decoder::NCODERS) == 0) - break; - } - - if (start == atsci_viterbi_decoder::NCODERS){ - // we didn't find a mod 12 boundary. There's some kind of problem - // upstream of us (not yet sync'd??) - cerr << "!!!GrAtscViterbiDecoder: no mod-12 boundary found\7\n"; - start = 0; - } - else if (start != last_start){ - cerr << "GrAtscViterbiDecoder: new starting offset = " << start - << " output.index = " << output.index << endl; - last_start = start; - } - - // We must produce output.size units of output. - - for (unsigned int i = 0; i < output.size; i += atsci_viterbi_decoder::NCODERS){ - // primitive does 12 segments at a time. - // pipeline info is handled in the primitive. - decoder.decode (&out[i], &in[i + start]); - } - -#if 0 - // FIXME paranoid check... - for (unsigned int i = 0; i < output.size; i++){ - plinfo::sanity_check (out[i].pli); - assert (out[i].pli.regular_seg_p ()); - } -#endif - -#if 0 - cerr << "@@@ GrAtscViterbiDecoder: output.index = " << output.index - << " output.size = " << output.size - << " sum = " << output.index + output.size << endl; -#endif - - // Return the number of units we produced. - // Note that for all intents and purposes, it is an error to - // produce less than you are asked for. - - return output.size; -} diff --git a/gr-atsc/src/lib/GrAtscViterbiDecoder.h b/gr-atsc/src/lib/GrAtscViterbiDecoder.h deleted file mode 100644 index 1b3bdd84a..000000000 --- a/gr-atsc/src/lib/GrAtscViterbiDecoder.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GRATSCVITERBIDECODER_H_ - -#include <VrHistoryProc.h> -#include <atsci_viterbi_decoder.h> - -/*! - * \brief ATSC 12-way interleaved viterbi decoder (atsc_soft_data_segment --> atsc_mpeg_packet_rs_encoded) - */ - -class GrAtscViterbiDecoder : public VrHistoryProc<atsc_soft_data_segment, - atsc_mpeg_packet_rs_encoded> -{ - -public: - - GrAtscViterbiDecoder (); - ~GrAtscViterbiDecoder (); - - const char *name () { return "GrAtscViterbiDecoder"; } - - int work (VrSampleRange output, void *o[], - VrSampleRange inputs[], void *i[]); - -protected: - atsci_viterbi_decoder decoder; - int last_start; -}; - -#endif diff --git a/gr-atsc/src/lib/atsc.i b/gr-atsc/src/lib/atsc.i deleted file mode 100644 index 6b83a2315..000000000 --- a/gr-atsc/src/lib/atsc.i +++ /dev/null @@ -1,305 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2009 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -%include "gnuradio.i" // the common stuff - -//load generated python docstrings -%include "atsc_swig_doc.i" - -%{ -#include <atsc_randomizer.h> -#include <atsc_derandomizer.h> -#include <atsc_rs_encoder.h> -#include <atsc_rs_decoder.h> -#include <atsc_interleaver.h> -#include <atsc_deinterleaver.h> -#include <atsc_trellis_encoder.h> -#include <atsc_viterbi_decoder.h> -#include <atsc_ds_to_softds.h> -#include <atsc_field_sync_mux.h> -#include <atsc_field_sync_demux.h> -#include <atsc_equalizer.h> -#include <atsc_fs_checker.h> -#include <atsc_bit_timing_loop.h> -#include <atsc_fpll.h> -#include <atsc_depad.h> -#include <atsc_pad.h> -%} - -%include "atsc_consts.h" - -%constant int sizeof_atsc_mpeg_packet = sizeof(atsc_mpeg_packet); -%constant int sizeof_atsc_mpeg_packet_no_sync = sizeof(atsc_mpeg_packet_no_sync); -%constant int sizeof_atsc_mpeg_packet_rs_encoded = sizeof(atsc_mpeg_packet_rs_encoded); -%constant int sizeof_atsc_data_segment = sizeof(atsc_data_segment); -%constant int sizeof_atsc_soft_data_segment = sizeof(atsc_soft_data_segment); - -%constant int sizeof_atsc_mpeg_packet_pad = atsc_mpeg_packet::NPAD; -%constant int sizeof_atsc_mpeg_packet_no_sync_pad = atsc_mpeg_packet_no_sync::NPAD; -%constant int sizeof_atsc_mpeg_packet_rs_encoded_pad = atsc_mpeg_packet_rs_encoded::NPAD; -%constant int sizeof_atsc_data_segment_pad = atsc_data_segment::NPAD; -%constant int sizeof_atsc_soft_data_segment_pad = atsc_soft_data_segment::NPAD; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,randomizer); - -atsc_randomizer_sptr atsc_make_randomizer(); - -class atsc_randomizer : public gr_sync_block -{ - atsc_randomizer(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,derandomizer); - -atsc_derandomizer_sptr atsc_make_derandomizer(); - -class atsc_derandomizer : public gr_sync_block -{ - atsc_derandomizer(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,rs_encoder); - -atsc_rs_encoder_sptr atsc_make_rs_encoder(); - -class atsc_rs_encoder : public gr_sync_block -{ - atsc_rs_encoder(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,rs_decoder); - -atsc_rs_decoder_sptr atsc_make_rs_decoder(); - -class atsc_rs_decoder : public gr_sync_block -{ - atsc_rs_decoder(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,interleaver); - -atsc_interleaver_sptr atsc_make_interleaver(); - -class atsc_interleaver : public gr_sync_block -{ - atsc_interleaver(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,deinterleaver); - -atsc_deinterleaver_sptr atsc_make_deinterleaver(); - -class atsc_deinterleaver : public gr_sync_block -{ - atsc_deinterleaver(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,trellis_encoder); - -atsc_trellis_encoder_sptr atsc_make_trellis_encoder(); - -class atsc_trellis_encoder : public gr_sync_block -{ - atsc_trellis_encoder(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,viterbi_decoder); - -atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder(); - -class atsc_viterbi_decoder : public gr_sync_block -{ - atsc_viterbi_decoder(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,ds_to_softds); - -atsc_ds_to_softds_sptr atsc_make_ds_to_softds(); - -class atsc_ds_to_softds : public gr_sync_block -{ - atsc_ds_to_softds(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,field_sync_mux); - -atsc_field_sync_mux_sptr atsc_make_field_sync_mux(); - -class atsc_field_sync_mux : public gr_sync_block -{ - atsc_field_sync_mux(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,field_sync_demux); - -atsc_field_sync_demux_sptr atsc_make_field_sync_demux(); - -class atsc_field_sync_demux : public gr_block -{ - atsc_field_sync_demux(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,equalizer); - -atsc_equalizer_sptr atsc_make_equalizer(); - -class atsc_equalizer : public gr_sync_block -{ - atsc_equalizer(); - -public: - void reset(); - std::vector<double> taps(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,fs_checker); - -atsc_fs_checker_sptr atsc_make_fs_checker(); - -class atsc_fs_checker : public gr_sync_block -{ - atsc_fs_checker(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,bit_timing_loop); - -atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop(); - -class atsc_bit_timing_loop : public gr_block -{ - atsc_bit_timing_loop(); - -public: - void reset(); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,fpll); - -atsc_fpll_sptr atsc_make_fpll(); - -class atsc_fpll : public gr_sync_block -{ - atsc_fpll(); - -public: - void reset(); - -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,depad); - -atsc_depad_sptr atsc_make_depad(); - -class atsc_depad : public gr_sync_interpolator -{ - atsc_depad(); - -public: - void reset(); - -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(atsc,pad); - -atsc_pad_sptr atsc_make_pad(); - -class atsc_pad : public gr_sync_decimator -{ - atsc_pad(); - -public: - void reset(); - -}; - -// ---------------------------------------------------------------- - diff --git a/gr-atsc/src/lib/atsc_api.h b/gr-atsc/src/lib/atsc_api.h deleted file mode 100644 index 5add37762..000000000 --- a/gr-atsc/src/lib/atsc_api.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_ATSC_API_H -#define INCLUDED_ATSC_API_H - -#include <gruel/attributes.h> - -#ifdef gnuradio_atsc_EXPORTS -# define ATSC_API __GR_ATTR_EXPORT -#else -# define ATSC_API __GR_ATTR_IMPORT -#endif - -#endif /* INCLUDED_ATSC_API_H */ diff --git a/gr-atsc/src/lib/atsc_bit_timing_loop.cc b/gr-atsc/src/lib/atsc_bit_timing_loop.cc deleted file mode 100644 index dc43d28bc..000000000 --- a/gr-atsc/src/lib/atsc_bit_timing_loop.cc +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_bit_timing_loop.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <string.h> - -// Input rate changed from 20MHz to 19.2 to support usrp at 3 * 6.4MHz -float input_rate = 19.2e6; -double ratio_of_rx_clock_to_symbol_freq = input_rate / ATSC_SYMBOL_RATE; - - -atsc_bit_timing_loop_sptr -atsc_make_bit_timing_loop() -{ - return gnuradio::get_initial_sptr(new atsc_bit_timing_loop()); -} - - -atsc_bit_timing_loop::atsc_bit_timing_loop() - : gr_block("atsc_bit_timing_loop", - gr_make_io_signature(1, 1, sizeof(float)), - gr_make_io_signature3(2, 3, sizeof(float), sizeof(float), sizeof(float))), - d_interp(ratio_of_rx_clock_to_symbol_freq), d_next_input(0), - d_rx_clock_to_symbol_freq (ratio_of_rx_clock_to_symbol_freq), - d_si(0) -{ - reset(); -} - -void -atsc_bit_timing_loop::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = static_cast<int>(noutput_items * d_rx_clock_to_symbol_freq) + 1500 - 1; - -} - -int -atsc_bit_timing_loop::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - if (r > 0) - consume_each (d_si); - return r; -} - - -int -atsc_bit_timing_loop::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out_sample = (float *) output_items[0]; - atsc::syminfo *out_tag = (atsc::syminfo *) output_items[1]; - float *out_timing_error = (float *) output_items[2]; - - assert(sizeof(float) == sizeof(atsc::syminfo)); - - // We are tasked with producing output.size output samples. - // We will consume approximately 2 * output.size input samples. - - int k; // output index - - float interp_sample; - int symbol_index; - double timing_adjustment = 0; - bool seg_locked; - atsc::syminfo tag; - // ammount requested in forecast - unsigned long input_size = noutput_items * d_rx_clock_to_symbol_freq + 1500 -1; - - memset (&tag, 0, sizeof (tag)); - - // ammount actually consumed - d_si = 0; - - for (k = 0; k < noutput_items; k++){ - if (!d_interp.update (in, input_size, &d_si, timing_adjustment, &interp_sample)){ - fprintf (stderr, "GrAtscBitTimingLoop3: ran short on data...\n"); - break; - } - - d_sssr.update (interp_sample, &seg_locked, &symbol_index, &timing_adjustment); - if (output_items.size() == 3) { - out_timing_error[k] = timing_adjustment; - } - out_sample[k] = interp_sample; - tag.valid = seg_locked; - tag.symbol_num = symbol_index; - out_tag[k] = tag; - - } - - return k; -} diff --git a/gr-atsc/src/lib/atsc_bit_timing_loop.h b/gr-atsc/src/lib/atsc_bit_timing_loop.h deleted file mode 100644 index 8b352f7eb..000000000 --- a/gr-atsc/src/lib/atsc_bit_timing_loop.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_BIT_TIMING_LOOP_H -#define INCLUDED_ATSC_BIT_TIMING_LOOP_H - -#include <atsc_api.h> -#include <cstdio> -#include <gr_block.h> -#include <atsci_diag_output.h> -#include <atsci_sssr.h> -#include <atsci_syminfo.h> - -class atsc_bit_timing_loop; -typedef boost::shared_ptr<atsc_bit_timing_loop> atsc_bit_timing_loop_sptr; - -ATSC_API atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop(); - -/*! - * \brief ATSC BitTimingLoop3 - * \ingroup atsc - * - * This class accepts a single real input and produces two outputs, - * the raw symbol (float) and the tag (atsc_syminfo) - */ -class ATSC_API atsc_bit_timing_loop : public gr_block -{ - friend ATSC_API atsc_bit_timing_loop_sptr atsc_make_bit_timing_loop(); - - atsc_bit_timing_loop(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - - ~atsc_bit_timing_loop () { }; - - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - - // debug (NOPs) - void set_mu (double a_mu) { } - void set_no_update (bool a_no_update) { } - void set_loop_filter_tap (double tap) { } - void set_timing_rate (double rate) { } - - - protected: - - atsci_sssr d_sssr; - atsci_interpolator d_interp; - unsigned long long d_next_input; - double d_rx_clock_to_symbol_freq; - int d_si; - - -}; - -#endif /* INCLUDED_ATSC_BIT_TIMING_LOOP_H */ - - - diff --git a/gr-atsc/src/lib/atsc_consts.h b/gr-atsc/src/lib/atsc_consts.h deleted file mode 100644 index bbe2ec69a..000000000 --- a/gr-atsc/src/lib/atsc_consts.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_CONSTS_H_ -#define _ATSC_CONSTS_H_ - -static const double ATSC_SYMBOL_RATE = 4.5e6 / 286 * 684; // ~10.76 MHz -static const double ATSC_DATA_SEGMENT_RATE = ATSC_SYMBOL_RATE / 832; // ~12.935 kHz - - -static const int ATSC_MPEG_DATA_LENGTH = 187; -static const int ATSC_MPEG_PKT_LENGTH = 188; // sync + data -static const int ATSC_MPEG_RS_ENCODED_LENGTH = 207; -static const int ATSC_DATA_SEGMENT_LENGTH = 832; // includes 4 sync symbols at beginning -static const int ATSC_DSEGS_PER_FIELD = 312; // regular data segs / field - - -static const int MPEG_SYNC_BYTE = 0x47; - -static const int MPEG_TRANSPORT_ERROR_BIT = 0x80; // top bit of byte after SYNC - - -#endif // _ATSC_CONSTS_H_ diff --git a/gr-atsc/src/lib/atsc_deinterleaver.cc b/gr-atsc/src/lib/atsc_deinterleaver.cc deleted file mode 100644 index f251c7f4e..000000000 --- a/gr-atsc/src/lib/atsc_deinterleaver.cc +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_deinterleaver.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_deinterleaver_sptr -atsc_make_deinterleaver() -{ - return gnuradio::get_initial_sptr(new atsc_deinterleaver()); -} - -atsc_deinterleaver::atsc_deinterleaver() - : gr_sync_block("atsc_deinterleaver", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))) -{ - reset(); -} - -int -atsc_deinterleaver::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *) input_items[0]; - atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - d_deinterleaver.deinterleave (out[i], in[i]); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_deinterleaver.h b/gr-atsc/src/lib/atsc_deinterleaver.h deleted file mode 100644 index e398dfcc7..000000000 --- a/gr-atsc/src/lib/atsc_deinterleaver.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_DEINTERLEAVER_H -#define INCLUDED_ATSC_DEINTERLEAVER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_data_interleaver.h> - -class atsc_deinterleaver; -typedef boost::shared_ptr<atsc_deinterleaver> atsc_deinterleaver_sptr; - -ATSC_API atsc_deinterleaver_sptr atsc_make_deinterleaver(); - -/*! - * \brief Deinterleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded) - * \ingroup atsc - * - * input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_rs_encoded - */ -class ATSC_API atsc_deinterleaver : public gr_sync_block -{ - friend ATSC_API atsc_deinterleaver_sptr atsc_make_deinterleaver(); - - atsci_data_deinterleaver d_deinterleaver; - - atsc_deinterleaver(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_DEINTERLEAVER_H */ diff --git a/gr-atsc/src/lib/atsc_depad.cc b/gr-atsc/src/lib/atsc_depad.cc deleted file mode 100644 index 9792a4e6a..000000000 --- a/gr-atsc/src/lib/atsc_depad.cc +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2008,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_depad.h> -#include <gr_io_signature.h> -#include <atsc_types.h> - -atsc_depad_sptr -atsc_make_depad() -{ - return gnuradio::get_initial_sptr(new atsc_depad()); -} - -atsc_depad::atsc_depad() - : gr_sync_interpolator("atsc_depad", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet)), - gr_make_io_signature(1, 1, sizeof(unsigned char)), - ATSC_MPEG_PKT_LENGTH) -{ - reset(); -} - -int -atsc_depad::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet *in = (const atsc_mpeg_packet *) input_items[0]; - unsigned char *out = (unsigned char *) output_items[0]; - - int i; - - for (i = 0; i < noutput_items/ATSC_MPEG_PKT_LENGTH; i++){ - memcpy(&out[i * ATSC_MPEG_PKT_LENGTH], in[i].data, ATSC_MPEG_PKT_LENGTH); - } - - return i * ATSC_MPEG_PKT_LENGTH; -} diff --git a/gr-atsc/src/lib/atsc_depad.h b/gr-atsc/src/lib/atsc_depad.h deleted file mode 100644 index 9d1a381bf..000000000 --- a/gr-atsc/src/lib/atsc_depad.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_DEPAD_H -#define INCLUDED_ATSC_DEPAD_H - -#include <atsc_api.h> -#include <gr_sync_interpolator.h> - -class atsc_depad; -typedef boost::shared_ptr<atsc_depad> atsc_depad_sptr; - -ATSC_API atsc_depad_sptr atsc_make_depad(); - -/*! - * \brief depad mpeg ts packets from 256 byte atsc_mpeg_packet to 188 byte char - * \ingroup atsc - * - * input: atsc_mpeg_packet; output: unsigned char - */ -class ATSC_API atsc_depad : public gr_sync_interpolator -{ - friend ATSC_API atsc_depad_sptr atsc_make_depad(); - - atsc_depad(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_DEPAD_H */ diff --git a/gr-atsc/src/lib/atsc_derandomizer.cc b/gr-atsc/src/lib/atsc_derandomizer.cc deleted file mode 100644 index 6642adb25..000000000 --- a/gr-atsc/src/lib/atsc_derandomizer.cc +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_derandomizer.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_derandomizer_sptr -atsc_make_derandomizer() -{ - return gnuradio::get_initial_sptr(new atsc_derandomizer()); -} - -atsc_derandomizer::atsc_derandomizer() - : gr_sync_block("atsc_derandomizer", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_no_sync)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet))) -{ - reset(); -} - -void -atsc_derandomizer::reset() -{ - d_rand.reset(); -} - -int -atsc_derandomizer::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_no_sync *in = (const atsc_mpeg_packet_no_sync *) input_items[0]; - atsc_mpeg_packet *out = (atsc_mpeg_packet *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - - assert(in[i].pli.regular_seg_p()); - - if (in[i].pli.first_regular_seg_p()) - d_rand.reset(); - - d_rand.derandomize(out[i], in[i]); - - // Check the pipeline info for error status and and set the - // corresponding bit in transport packet header. - - if (in[i].pli.transport_error_p()) - out[i].data[1] |= MPEG_TRANSPORT_ERROR_BIT; - else - out[i].data[1] &= ~MPEG_TRANSPORT_ERROR_BIT; - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_derandomizer.h b/gr-atsc/src/lib/atsc_derandomizer.h deleted file mode 100644 index 1881a69a3..000000000 --- a/gr-atsc/src/lib/atsc_derandomizer.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_DERANDOMIZER_H -#define INCLUDED_ATSC_DERANDOMIZER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_randomizer.h> - -class atsc_derandomizer; -typedef boost::shared_ptr<atsc_derandomizer> atsc_derandomizer_sptr; - -ATSC_API atsc_derandomizer_sptr atsc_make_derandomizer(); - -/*! - * \brief "dewhiten" incoming mpeg transport stream packets - * \ingroup atsc - * - * input: atsc_mpeg_packet_no_sync; output: atsc_mpeg_packet; - */ -class ATSC_API atsc_derandomizer : public gr_sync_block -{ - friend ATSC_API atsc_derandomizer_sptr atsc_make_derandomizer(); - - atsci_randomizer d_rand; - - atsc_derandomizer(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset(); -}; - - -#endif /* INCLUDED_ATSC_DERANDOMIZER_H */ diff --git a/gr-atsc/src/lib/atsc_ds_to_softds.cc b/gr-atsc/src/lib/atsc_ds_to_softds.cc deleted file mode 100644 index a8f93bde4..000000000 --- a/gr-atsc/src/lib/atsc_ds_to_softds.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_ds_to_softds.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_ds_to_softds_sptr -atsc_make_ds_to_softds() -{ - return gnuradio::get_initial_sptr(new atsc_ds_to_softds()); -} - -atsc_ds_to_softds::atsc_ds_to_softds() - : gr_sync_block("atsc_ds_to_softds", - gr_make_io_signature(1, 1, sizeof(atsc_data_segment)), - gr_make_io_signature(1, 1, sizeof(atsc_soft_data_segment))) -{ - reset(); -} - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - -void -atsc_ds_to_softds::map_to_soft_symbols (atsc_soft_data_segment &out, - const atsc_data_segment &in) -{ - for (unsigned int i = 0; i < NELEM (in.data); i++){ - out.data[i] = in.data[i] * 2 - 7; - } -} - - -int -atsc_ds_to_softds::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_data_segment *in = (const atsc_data_segment *) input_items[0]; - atsc_soft_data_segment *out = (atsc_soft_data_segment *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - - out[i].pli = in[i].pli; // copy pipeline info... - map_to_soft_symbols(out[i], in[i]); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_ds_to_softds.h b/gr-atsc/src/lib/atsc_ds_to_softds.h deleted file mode 100644 index 0ba61c7d6..000000000 --- a/gr-atsc/src/lib/atsc_ds_to_softds.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_DS_TO_SOFTDS_H -#define INCLUDED_ATSC_DS_TO_SOFTDS_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsc_types.h> - -class atsc_ds_to_softds; -typedef boost::shared_ptr<atsc_ds_to_softds> atsc_ds_to_softds_sptr; - -ATSC_API atsc_ds_to_softds_sptr atsc_make_ds_to_softds(); - -/*! - * \brief Debug glue routine (atsc_data_segment --> atsc_soft_data_segment) - * \ingroup atsc - * - * input: atsc_data_segment; output: atsc_soft_data_segment - */ -class ATSC_API atsc_ds_to_softds : public gr_sync_block -{ - friend ATSC_API atsc_ds_to_softds_sptr atsc_make_ds_to_softds(); - - atsc_ds_to_softds(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void map_to_soft_symbols (atsc_soft_data_segment &out, - const atsc_data_segment &in); - - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_DS_TO_SOFTDS_H */ diff --git a/gr-atsc/src/lib/atsc_equalizer.cc b/gr-atsc/src/lib/atsc_equalizer.cc deleted file mode 100644 index b8f31aeb4..000000000 --- a/gr-atsc/src/lib/atsc_equalizer.cc +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_equalizer.h> -#include <create_atsci_equalizer.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <atsci_syminfo.h> - - -atsc_equalizer_sptr -atsc_make_equalizer() -{ - return gnuradio::get_initial_sptr(new atsc_equalizer()); -} - -// had atsc_equalizer(atsci_equalizer *equalizer) -atsc_equalizer::atsc_equalizer() - : gr_sync_block("atsc_equalizer", - gr_make_io_signature(2, 2, sizeof(float)), - gr_make_io_signature(2, 2, sizeof(float))) -{ - d_equalizer = create_atsci_equalizer_lms(); -} - -atsc_equalizer::~atsc_equalizer () -{ - // Anything that isn't automatically cleaned up... - - delete d_equalizer; -} - - -void -atsc_equalizer::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - - int ntaps = d_equalizer->ntaps (); - - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput (noutput_items + ntaps); - - -} - - - -int -atsc_equalizer::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - const atsc::syminfo *in_tags = (const atsc::syminfo *) input_items[1]; - float *out = (float *) output_items[0]; - atsc::syminfo *out_tags = (atsc::syminfo *) output_items[1]; - - assert(sizeof(float) == sizeof(atsc::syminfo)); - - int ntaps = d_equalizer->ntaps (); - int npretaps = d_equalizer->npretaps (); - - assert (ntaps >= 1); - assert (npretaps >= 0 && npretaps < ntaps); - - int offset = ntaps - npretaps - 1; - assert (offset >= 0 && offset < ntaps); - - - // peform the actual equalization - - d_equalizer->filter (in, in_tags + offset, - out, noutput_items); - - // write the output tags - - for (int i = 0; i < noutput_items; i++) - out_tags[i] = in_tags[i + offset]; - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_equalizer.h b/gr-atsc/src/lib/atsc_equalizer.h deleted file mode 100644 index aca5e63b4..000000000 --- a/gr-atsc/src/lib/atsc_equalizer.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_EQUALIZER_H -#define INCLUDED_ATSC_EQUALIZER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_equalizer.h> -#include <vector> - -class atsc_equalizer; -typedef boost::shared_ptr<atsc_equalizer> atsc_equalizer_sptr; - -atsc_equalizer_sptr ATSC_API atsc_make_equalizer(); - -/*! - * \brief ATSC equalizer (float,syminfo --> float,syminfo) - * \ingroup atsc - * - * first inputs are data samples, second inputs are tags. - * first outputs are equalized data samples, second outputs are tags. - */ -class ATSC_API atsc_equalizer : public gr_sync_block -{ - friend ATSC_API atsc_equalizer_sptr atsc_make_equalizer(); - - atsc_equalizer(); - -public: - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - - std::vector<double> taps() { - return d_equalizer->taps(); - } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - - ~atsc_equalizer (); - - -protected: - atsci_equalizer *d_equalizer; - -}; - - -#endif /* INCLUDED_ATSC_EQUALIZER_H */ diff --git a/gr-atsc/src/lib/atsc_field_sync_demux.cc b/gr-atsc/src/lib/atsc_field_sync_demux.cc deleted file mode 100644 index 2783e4a90..000000000 --- a/gr-atsc/src/lib/atsc_field_sync_demux.cc +++ /dev/null @@ -1,209 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cmath> -#include <atsc_field_sync_demux.h> -#include <gr_io_signature.h> -#include <atsc_types.h> -#include <atsc_consts.h> -#include <atsci_syminfo.h> -#include <stdio.h> -#include <assert.h> -#include <iostream> - -using std::cerr; -using std::endl; - - -static const int DEC = ATSC_DATA_SEGMENT_LENGTH; // nominal decimation factor - - -atsc_field_sync_demux_sptr -atsc_make_field_sync_demux() -{ - return gnuradio::get_initial_sptr(new atsc_field_sync_demux()); -} - -atsc_field_sync_demux::atsc_field_sync_demux() - : gr_block("atsc_field_sync_demux", - gr_make_io_signature(2, 2, sizeof(float)), - gr_make_io_signature(1, 1, sizeof(atsc_soft_data_segment))), - d_locked(false), d_in_field2(true), d_segment_number(0), - d_next_input(0), d_lost_index(0), d_inputs0_index(0), - d_inputs0_size(0), d_consume(0) -{ - reset(); -} - -inline static bool -tag_is_seg_sync_or_field_sync (atsc::syminfo tag) -{ - return tag.symbol_num == 0 && tag.valid; -} - -void -atsc_field_sync_demux::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) { - ninput_items_required[i] = noutput_items * DEC + 2 * DEC ; - - d_inputs0_index = d_next_input; - d_inputs0_size = noutput_items * DEC + 2 * DEC ; - } -} - -int -atsc_field_sync_demux::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - consume_each (d_consume); - // printf("Consumed: %d, produced: %d\n",d_consume,r); - // we consume input even if no output is produced - // while looking for sync - return r; -} - - -int -atsc_field_sync_demux::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *in = (float *) input_items[0]; - atsc::syminfo *input_tags = (atsc::syminfo *) input_items[1]; - atsc_soft_data_segment *out = (atsc_soft_data_segment *) output_items[0]; - - assert(sizeof(float) == sizeof(atsc::syminfo)); - - unsigned int ii = 0; // input index - - // Are we in sync? - if (!tag_is_seg_sync_or_field_sync (input_tags[0])){ // No ... - - if (d_locked){ - d_locked = false; - d_lost_index = d_inputs0_index + ii; - cerr << "atsc_field_sync_demux: lost sync at " - << d_lost_index << endl; - } - - // ... search for beginning of a field sync - - // cerr << "atsc_field_sync_demux: searching for sync at " - // << d_inputs0_index + ii << endl; - - for (ii = 1; ii < d_inputs0_size; ii++){ - if (atsc::tag_is_start_field_sync (input_tags[ii])){ - // found one - d_locked = true; - - const char *str; - if (atsc::tag_is_start_field_sync_1 (input_tags[ii])) - str = "FIELD-1"; - else if (atsc::tag_is_start_field_sync_2 (input_tags[ii])) - str = "FIELD-2"; - else - str = "SEGMENT"; - - cerr << "atsc_field_sync_demux: synced (" << str << ") at " - << d_inputs0_index + ii - << " [delta = " << d_inputs0_index + ii - d_lost_index - << "]\n"; - - d_next_input += ii; // update for forecast - d_consume = ii; - return 0; // no work completed so far - } - } - // no non-NORMAL tag found - d_next_input += ii; // update for forecast - d_consume = ii; - // printf("ii: %d, d_next_input: %d\n",ii,d_next_input); - return 0; // no work completed so far - } - - // We are in sync. Produce output... - - int k = 0; // output index - - while (k < noutput_items){ - - if (d_inputs0_size - ii < static_cast<unsigned int>(ATSC_DATA_SEGMENT_LENGTH)){ - // We're out of input data. - cerr << "atsc_field_sync_demux: ran out of input data\n"; - d_next_input += ii; // update for forecast - return k; // return amount of work completed so far - } - - if (!tag_is_seg_sync_or_field_sync (input_tags[ii])){ - // lost sync... - cerr << "atsc_field_sync_demux: lost sync at " - << d_inputs0_index + ii << endl; - - d_next_input += ii; // update for forecast - return k; // return amount of work completed so far - } - - if (atsc::tag_is_start_field_sync_1 (input_tags[ii])){ - d_in_field2 = false; - d_segment_number = 0; - ii += ATSC_DATA_SEGMENT_LENGTH; // skip over field sync - continue; - } - - if (atsc::tag_is_start_field_sync_2 (input_tags[ii])){ - d_in_field2 = true; - d_segment_number = 0; - ii += ATSC_DATA_SEGMENT_LENGTH; // skip over field sync - continue; - } - - if (d_segment_number >= ATSC_DSEGS_PER_FIELD){ - // something's wrong... - cerr << "atsc_field_sync_demux: segment number overflow\n"; - d_segment_number = 0; - } - - out[k].pli.set_regular_seg (d_in_field2, d_segment_number++); - for (int jj = 0; jj < ATSC_DATA_SEGMENT_LENGTH; jj++) - out[k].data[jj] = in[ii + jj]; - ii += ATSC_DATA_SEGMENT_LENGTH; - k++; - } - - d_next_input += ii; // update for forecast - d_consume = ii; - return k; // return amount of work completed - -} - - - - diff --git a/gr-atsc/src/lib/atsc_field_sync_demux.h b/gr-atsc/src/lib/atsc_field_sync_demux.h deleted file mode 100644 index ea9a5d1ac..000000000 --- a/gr-atsc/src/lib/atsc_field_sync_demux.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_FIELD_SYNC_DEMUX_H -#define INCLUDED_ATSC_FIELD_SYNC_DEMUX_H - -#include <atsc_api.h> -#include <gr_block.h> -#include <atsc_types.h> - -class atsc_field_sync_demux; -typedef boost::shared_ptr<atsc_field_sync_demux> atsc_field_sync_demux_sptr; - -ATSC_API atsc_field_sync_demux_sptr atsc_make_field_sync_demux(); - -/*! - * \brief ATSC Field Sync Demux - * - * This class accepts 1 stream of floats (data), and 1 stream of tags (syminfo). * It outputs one stream of atsc_soft_data_segment packets - * \ingroup atsc - * - */ -class ATSC_API atsc_field_sync_demux : public gr_block -{ - friend ATSC_API atsc_field_sync_demux_sptr atsc_make_field_sync_demux(); - - atsc_field_sync_demux(); - -public: - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - -protected: - bool d_locked; - bool d_in_field2; - int d_segment_number; - gr_uint64 d_next_input; - gr_uint64 d_lost_index; // diagnostic fluff - - unsigned long long d_inputs0_index; // for inputs[0].index - unsigned long d_inputs0_size; // for inputs[0].size - int d_consume; - -}; - - -#endif /* INCLUDED_ATSC_FIELD_SYNC_DEMUX_H */ diff --git a/gr-atsc/src/lib/atsc_field_sync_mux.cc b/gr-atsc/src/lib/atsc_field_sync_mux.cc deleted file mode 100644 index 99fa5bff3..000000000 --- a/gr-atsc/src/lib/atsc_field_sync_mux.cc +++ /dev/null @@ -1,203 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_field_sync_mux.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <atsci_pnXXX.h> - - -atsc_field_sync_mux_sptr -atsc_make_field_sync_mux() -{ - return gnuradio::get_initial_sptr(new atsc_field_sync_mux()); -} - -atsc_field_sync_mux::atsc_field_sync_mux() - : gr_sync_block("atsc_field_sync_mux", - gr_make_io_signature(1, 1, sizeof(atsc_data_segment)), - gr_make_io_signature(1, 1, sizeof(atsc_data_segment))) -{ - reset(); -} - -static const int NUMBER_OF_OUTPUTS = 1; // # of output streams (almost always one) - -static const int N_SAVED_SYMBOLS = atsc_field_sync_mux::N_SAVED_SYMBOLS; - -static void -init_field_sync_common (unsigned char *p, int mask, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) -{ - static const unsigned char bin_map[2] = { 1, 6 }; // map binary values to 1 of 8 levels - - int i = 0; - - p[i++] = bin_map[1]; // data segment sync pulse - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map[atsc_pn511[j]]; - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map[atsc_pn63[j]]; - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map[atsc_pn63[j] ^ mask]; - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map[atsc_pn63[j]]; - - p[i++] = bin_map[0]; // 24 bits of VSB8 mode identifiera - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - p[i++] = bin_map[0]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - p[i++] = bin_map[1]; - p[i++] = bin_map[0]; - - - for (int j = 0; j < 92; j++) // 92 more bits - p[i++] = bin_map[atsc_pn63[j % 63]]; - - // now copy the last 12 symbols of the previous segment - - for (int j = 0; j < N_SAVED_SYMBOLS; j++) - p[i++] = saved_symbols[j]; - - assert (i == ATSC_DATA_SEGMENT_LENGTH); -} -inline static void -init_field_sync_1 (atsc_data_segment *s, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) -{ - init_field_sync_common (&s->data[0], 0, saved_symbols); -} - -inline static void -init_field_sync_2 (atsc_data_segment *s, - const unsigned char saved_symbols[N_SAVED_SYMBOLS]) - -{ - init_field_sync_common (&s->data[0], 1, saved_symbols); -} - -static void -save_last_symbols (unsigned char saved_symbols[N_SAVED_SYMBOLS], - const atsc_data_segment &seg) -{ - for (int i = 0; i < N_SAVED_SYMBOLS; i++) - saved_symbols[i] = seg.data[i + ATSC_DATA_SEGMENT_LENGTH - N_SAVED_SYMBOLS];} - - -inline static bool -last_regular_seg_p (const plinfo &pli) -{ - return pli.regular_seg_p () && (pli.segno () == ATSC_DSEGS_PER_FIELD - 1); -} - -void -atsc_field_sync_mux::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput (noutput_items); - -} - - -int -atsc_field_sync_mux::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_data_segment *in = (const atsc_data_segment *) input_items[0]; - atsc_data_segment *out = (atsc_data_segment *) output_items[0]; - - unsigned int index = 0; - for (int outdex = 0; outdex < noutput_items; outdex++){ - - assert (in[index].pli.regular_seg_p ()); - - if (!in[index].pli.first_regular_seg_p ()){ - out[outdex] = in[index]; // just copy in to out - - if (last_regular_seg_p (in[index].pli)) - save_last_symbols (d_saved_symbols, in[index]); - - index++; - } - else { // first_regular_seg_p - if (!d_already_output_field_sync){ - // write out field sync... - atsc_data_segment field_sync; - - if (in[index].pli.in_field1_p ()) - init_field_sync_1 (&field_sync, d_saved_symbols); - else - init_field_sync_2 (&field_sync, d_saved_symbols); - - // note that index doesn't advance in this branch - out[outdex] = field_sync; - d_already_output_field_sync = true; - } - else { - // already output field sync, now output first regular segment - out[outdex] = in[index]; - index++; - d_already_output_field_sync = false; - } - } - } - - d_current_index += index; - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_field_sync_mux.h b/gr-atsc/src/lib/atsc_field_sync_mux.h deleted file mode 100644 index ce4514e9c..000000000 --- a/gr-atsc/src/lib/atsc_field_sync_mux.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_FIELD_SYNC_MUX_H -#define INCLUDED_ATSC_FIELD_SYNC_MUX_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsc_types.h> - -class atsc_field_sync_mux; -typedef boost::shared_ptr<atsc_field_sync_mux> atsc_field_sync_mux_sptr; - -ATSC_API atsc_field_sync_mux_sptr atsc_make_field_sync_mux(); - -/*! - * \brief Insert ATSC Field Syncs as required (atsc_data_segment --> atsc_data_segment) - * \ingroup atsc - * - * input: atsc_data_segment; output: atsc_data_segment - */ -class ATSC_API atsc_field_sync_mux : public gr_sync_block -{ - friend ATSC_API atsc_field_sync_mux_sptr atsc_make_field_sync_mux(); - - atsc_field_sync_mux(); - -public: - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - - static const int N_SAVED_SYMBOLS = 12; - - void reset() { /* nop */ } - -protected: - gr_uint64 d_current_index; - bool d_already_output_field_sync; - unsigned char d_saved_symbols[N_SAVED_SYMBOLS]; -}; - - -#endif /* INCLUDED_ATSC_FIELD_SYNC_MUX_H */ diff --git a/gr-atsc/src/lib/atsc_fpll.cc b/gr-atsc/src/lib/atsc_fpll.cc deleted file mode 100644 index c8d62c415..000000000 --- a/gr-atsc/src/lib/atsc_fpll.cc +++ /dev/null @@ -1,137 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_fpll.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <algorithm> -#include "fpll_btloop_coupling.h" -#include <gr_math.h> - -atsc_fpll_sptr -atsc_make_fpll() -{ - return gnuradio::get_initial_sptr(new atsc_fpll()); -} - - -/* - * I strongly suggest that you not mess with these... - * - * They are strongly coupled into the symbol timing code and - * their value also sets the level of the symbols going - * into the equalizer and viterbi decoder. - */ -static const float FPLL_AGC_REFERENCE = 2.5 * FPLL_BTLOOP_COUPLING_CONST; -static const float FPLL_AGC_RATE = 0.25e-6; - - - -atsc_fpll::atsc_fpll() - : gr_sync_block("atsc_fpll", - gr_make_io_signature(1, 1, sizeof(float)), - gr_make_io_signature(1, 1, sizeof(float))), - initial_phase(0) -{ - initial_freq = 5.75e6 - 3e6 + 0.31e6 + 5e3; // a_initial_freq; - agc.set_rate (FPLL_AGC_RATE); - agc.set_reference (FPLL_AGC_REFERENCE); - initialize(); -} - - -void -atsc_fpll::initialize () -{ - float Fs = 19.2e6; - - float alpha = 1 - exp(-1.0 / Fs / 5e-6); - - afci.set_taps (alpha); - afcq.set_taps (alpha); - - printf("Setting initial_freq: %f\n",initial_freq); - nco.set_freq (initial_freq / Fs * 2 * M_PI); - nco.set_phase (initial_phase); -} - - -int -atsc_fpll::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - - for (int k = 0; k < noutput_items; k++){ - - float a_cos, a_sin; - - float input = agc.scale (in[k]); - - nco.step (); // increment phase - nco.sincos (&a_sin, &a_cos); // compute cos and sin - - float I = input * a_sin; - float Q = input * a_cos; - - out[k] = I; - - float filtered_I = afci.filter (I); - float filtered_Q = afcq.filter (Q); - - // phase detector - - // float x = atan2 (filtered_Q, filtered_I); - float x = gr_fast_atan2f(filtered_Q, filtered_I); - - // avoid slamming filter with big transitions - - static const float limit = M_PI / 2; - - if (x > limit) - x = limit; - else if (x < -limit) - x = -limit; - - // static const float alpha = 0.037; // Max value - // static const float alpha = 0.005; // takes about 5k samples to pull in, stddev = 323 - // static const float alpha = 0.002; // takes about 15k samples to pull in, stddev = 69 - // or about 120k samples on noisy data, - static const float alpha = 0.001; - static const float beta = alpha * alpha / 4; - - nco.adjust_phase (alpha * x); - nco.adjust_freq (beta * x); - - } - - return noutput_items; -} - - - diff --git a/gr-atsc/src/lib/atsc_fpll.h b/gr-atsc/src/lib/atsc_fpll.h deleted file mode 100644 index 0474b8f76..000000000 --- a/gr-atsc/src/lib/atsc_fpll.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_FPLL_H -#define INCLUDED_ATSC_FPLL_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <gr_nco.h> -#include <gr_single_pole_iir.h> -#include <gri_agc_ff.h> -#include <stdio.h> -#include <atsci_diag_output.h> - -class atsc_fpll; -typedef boost::shared_ptr<atsc_fpll> atsc_fpll_sptr; - -ATSC_API atsc_fpll_sptr atsc_make_fpll(); - -/*! - * \brief ATSC FPLL (2nd Version) - * \ingroup atsc - * - * A/D --> GrFIRfilterFFF ----> GrAtscFPLL ----> - * - * We use GrFIRfilterFFF to bandpass filter the signal of interest. - * - * This class accepts a single real input and produces a single real output - */ - -class ATSC_API atsc_fpll : public gr_sync_block -{ - friend ATSC_API atsc_fpll_sptr atsc_make_fpll(); - - atsc_fpll(); - -public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - - void initialize () ; - - protected: - - double initial_freq; - double initial_phase; - bool debug_no_update; - gr_nco<float,float> nco; - gri_agc_ff agc; // automatic gain control - gr_single_pole_iir<float,float,float> afci; - gr_single_pole_iir<float,float,float> afcq; - - -}; - - -#endif /* INCLUDED_ATSC_FPLL_H */ diff --git a/gr-atsc/src/lib/atsc_fs_checker.cc b/gr-atsc/src/lib/atsc_fs_checker.cc deleted file mode 100644 index f8c4e43d5..000000000 --- a/gr-atsc/src/lib/atsc_fs_checker.cc +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_fs_checker.h> -#include <create_atsci_fs_checker.h> -#include <atsci_fs_checker.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <atsci_syminfo.h> - - -atsc_fs_checker_sptr -atsc_make_fs_checker() -{ - return gnuradio::get_initial_sptr(new atsc_fs_checker()); -} - -atsc_fs_checker::atsc_fs_checker() - : gr_sync_block("atsc_fs_checker", - gr_make_io_signature(2, 2, sizeof(float)), - gr_make_io_signature(2, 2, sizeof(float))) -{ - d_fsc = create_atsci_fs_checker(); -} - - -atsc_fs_checker::~atsc_fs_checker () -{ - // Anything that isn't automatically cleaned up... - - delete d_fsc; -} - - -int -atsc_fs_checker::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - const atsc::syminfo *tag_in = (const atsc::syminfo *) input_items[1]; - float *out = (float *) output_items[0]; - atsc::syminfo *tag_out = (atsc::syminfo *) output_items[1]; - - assert(sizeof(float) == sizeof(atsc::syminfo)); - - - for (int i = 0; i < noutput_items; i++) - d_fsc->filter (in[i], tag_in[i], &out[i], &tag_out[i]); - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_fs_checker.h b/gr-atsc/src/lib/atsc_fs_checker.h deleted file mode 100644 index d034fdd28..000000000 --- a/gr-atsc/src/lib/atsc_fs_checker.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_FS_CHECKER_H -#define INCLUDED_ATSC_FS_CHECKER_H - -#include <atsc_api.h> -#include <atsci_fs_checker.h> -#include <gr_sync_block.h> - -class atsc_fs_checker; -typedef boost::shared_ptr<atsc_fs_checker> atsc_fs_checker_sptr; - -ATSC_API atsc_fs_checker_sptr atsc_make_fs_checker(); - -/*! - * \brief ATSC field sync checker (float,syminfo --> float,syminfo) - * \ingroup atsc - * - * first output is delayed version of input. - * second output is set of tags, one-for-one with first output. - */ - -class ATSC_API atsc_fs_checker : public gr_sync_block -{ - friend ATSC_API atsc_fs_checker_sptr atsc_make_fs_checker(); - - atsc_fs_checker(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - - ~atsc_fs_checker (); - -protected: - atsci_fs_checker *d_fsc; - -}; - - -#endif /* INCLUDED_ATSC_FS_CHECKER_H */ diff --git a/gr-atsc/src/lib/atsc_interleaver.cc b/gr-atsc/src/lib/atsc_interleaver.cc deleted file mode 100644 index fff5b2fa6..000000000 --- a/gr-atsc/src/lib/atsc_interleaver.cc +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_interleaver.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_interleaver_sptr -atsc_make_interleaver() -{ - return gnuradio::get_initial_sptr(new atsc_interleaver()); -} - -atsc_interleaver::atsc_interleaver() - : gr_sync_block("atsc_interleaver", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))) -{ - reset(); -} - -int -atsc_interleaver::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *) input_items[0]; - atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - d_interleaver.interleave (out[i], in[i]); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_interleaver.h b/gr-atsc/src/lib/atsc_interleaver.h deleted file mode 100644 index 3090d49de..000000000 --- a/gr-atsc/src/lib/atsc_interleaver.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_INTERLEAVER_H -#define INCLUDED_ATSC_INTERLEAVER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_data_interleaver.h> - -class atsc_interleaver; -typedef boost::shared_ptr<atsc_interleaver> atsc_interleaver_sptr; - -ATSC_API atsc_interleaver_sptr atsc_make_interleaver(); - -/*! \brief Interleave RS encoded ATSC data ( atsc_mpeg_packet_rs_encoded --> atsc_mpeg_packet_rs_encoded)* - * \ingroup atsc - * - * input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_rs_encoded - */ -class ATSC_API atsc_interleaver : public gr_sync_block -{ - friend ATSC_API atsc_interleaver_sptr atsc_make_interleaver(); - - atsci_data_interleaver d_interleaver; - - atsc_interleaver(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_INTERLEAVER_H */ diff --git a/gr-atsc/src/lib/atsc_pad.cc b/gr-atsc/src/lib/atsc_pad.cc deleted file mode 100644 index 317b16aca..000000000 --- a/gr-atsc/src/lib/atsc_pad.cc +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_pad.h> -#include <gr_io_signature.h> -#include <atsc_types.h> - -static const int INTR = ATSC_MPEG_PKT_LENGTH; - -atsc_pad_sptr -atsc_make_pad() -{ - return gnuradio::get_initial_sptr(new atsc_pad()); -} - -atsc_pad::atsc_pad() - : gr_sync_decimator("atsc_pad", - gr_make_io_signature(1, 1, sizeof(unsigned char)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet)), - INTR) -{ - reset(); -} - -void -atsc_pad::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = noutput_items * ATSC_MPEG_PKT_LENGTH; -} - - -int -atsc_pad::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const unsigned char *in = (const unsigned char *) input_items[0]; - atsc_mpeg_packet *out = (atsc_mpeg_packet *) output_items[0]; - - int i; - - for (i = 0; i < noutput_items; i++){ - for (int j = 0; j < ATSC_MPEG_PKT_LENGTH; j++) - out[i].data[j] = in[i * ATSC_MPEG_PKT_LENGTH + j]; - - } - - return noutput_items; -} - - - - diff --git a/gr-atsc/src/lib/atsc_pad.h b/gr-atsc/src/lib/atsc_pad.h deleted file mode 100644 index 139d951a6..000000000 --- a/gr-atsc/src/lib/atsc_pad.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_PAD_H -#define INCLUDED_ATSC_PAD_H - -#include <atsc_api.h> -#include <gr_sync_decimator.h> - -class atsc_pad; -typedef boost::shared_ptr<atsc_pad> atsc_pad_sptr; - -ATSC_API atsc_pad_sptr atsc_make_pad(); - -/*! - * \brief pad mpeg ts packets from 188 byte char to - * to 256 byte atsc_mpeg_packet - * \ingroup atsc - * - * input: unsigned char; output: atsc_mpeg_packet - */ -class ATSC_API atsc_pad : public gr_sync_decimator -{ - friend ATSC_API atsc_pad_sptr atsc_make_pad(); - - atsc_pad(); - -public: - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_PAD_H */ diff --git a/gr-atsc/src/lib/atsc_randomizer.cc b/gr-atsc/src/lib/atsc_randomizer.cc deleted file mode 100644 index 73375e84c..000000000 --- a/gr-atsc/src/lib/atsc_randomizer.cc +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_randomizer.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_randomizer_sptr -atsc_make_randomizer() -{ - return gnuradio::get_initial_sptr(new atsc_randomizer()); -} - -atsc_randomizer::atsc_randomizer() - : gr_sync_block("atsc_randomizer", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_no_sync))) -{ - reset(); -} - -void -atsc_randomizer::reset() -{ - d_rand.reset(); - d_field2 = false; - d_segno = 0; -} - -int -atsc_randomizer::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet *in = (const atsc_mpeg_packet *) input_items[0]; - atsc_mpeg_packet_no_sync *out = (atsc_mpeg_packet_no_sync *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - - // sanity check incoming data. - assert((in[i].data[0] == MPEG_SYNC_BYTE)); - assert((in[i].data[1] & MPEG_TRANSPORT_ERROR_BIT) == 0); - - // initialize plinfo for downstream - // - // We do this here because the randomizer is effectively - // the head of the tx processing chain - // - out[i].pli.set_regular_seg(d_field2, d_segno); - d_segno++; - if (d_segno == 312){ - d_segno = 0; - d_field2 = !d_field2; - } - - if (out[i].pli.first_regular_seg_p()) - d_rand.reset(); - - d_rand.randomize(out[i], in[i]); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_randomizer.h b/gr-atsc/src/lib/atsc_randomizer.h deleted file mode 100644 index 7d00efcf9..000000000 --- a/gr-atsc/src/lib/atsc_randomizer.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_RANDOMIZER_H -#define INCLUDED_ATSC_RANDOMIZER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_randomizer.h> - -class atsc_randomizer; -typedef boost::shared_ptr<atsc_randomizer> atsc_randomizer_sptr; - -ATSC_API atsc_randomizer_sptr atsc_make_randomizer(); - -/*! - * \brief "Whiten" incoming mpeg transport stream packets - * \ingroup atsc - * - * input: atsc_mpeg_packet; output: atsc_mpeg_packet_no_sync - */ -class ATSC_API atsc_randomizer : public gr_sync_block -{ - friend ATSC_API atsc_randomizer_sptr atsc_make_randomizer(); - - atsci_randomizer d_rand; - bool d_field2; // user to init plinfo in output - int d_segno; // likewise - - atsc_randomizer(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset(); -}; - - -#endif /* INCLUDED_ATSC_RANDOMIZER_H */ diff --git a/gr-atsc/src/lib/atsc_rs_decoder.cc b/gr-atsc/src/lib/atsc_rs_decoder.cc deleted file mode 100644 index e4bb6e57a..000000000 --- a/gr-atsc/src/lib/atsc_rs_decoder.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_rs_decoder.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_rs_decoder_sptr -atsc_make_rs_decoder() -{ - return gnuradio::get_initial_sptr(new atsc_rs_decoder()); -} - -atsc_rs_decoder::atsc_rs_decoder() - : gr_sync_block("atsc_rs_decoder", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_no_sync))) -{ - reset(); -} - -int -atsc_rs_decoder::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *) input_items[0]; - atsc_mpeg_packet_no_sync *out = (atsc_mpeg_packet_no_sync *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - assert(in[i].pli.regular_seg_p()); - out[i].pli = in[i].pli; // copy pipeline info... - - int nerrors_corrrected = d_rs_decoder.decode(out[i], in[i]); - out[i].pli.set_transport_error(nerrors_corrrected == -1); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_rs_decoder.h b/gr-atsc/src/lib/atsc_rs_decoder.h deleted file mode 100644 index 9e4bf8d44..000000000 --- a/gr-atsc/src/lib/atsc_rs_decoder.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_RS_DECODER_H -#define INCLUDED_ATSC_RS_DECODER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_reed_solomon.h> - -class atsc_rs_decoder; -typedef boost::shared_ptr<atsc_rs_decoder> atsc_rs_decoder_sptr; - -ATSC_API atsc_rs_decoder_sptr atsc_make_rs_decoder(); - -/*! - * \brief Reed-Solomon decoder for ATSC - * \ingroup atsc - * - * input: atsc_mpeg_packet_rs_encoded; output: atsc_mpeg_packet_no_sync - */ -class ATSC_API atsc_rs_decoder : public gr_sync_block -{ - friend ATSC_API atsc_rs_decoder_sptr atsc_make_rs_decoder(); - - atsci_reed_solomon d_rs_decoder; - - atsc_rs_decoder(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_RS_DECODER_H */ diff --git a/gr-atsc/src/lib/atsc_rs_encoder.cc b/gr-atsc/src/lib/atsc_rs_encoder.cc deleted file mode 100644 index 7c4ec293b..000000000 --- a/gr-atsc/src/lib/atsc_rs_encoder.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_rs_encoder.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_rs_encoder_sptr -atsc_make_rs_encoder() -{ - return gnuradio::get_initial_sptr(new atsc_rs_encoder()); -} - -atsc_rs_encoder::atsc_rs_encoder() - : gr_sync_block("atsc_rs_encoder", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_no_sync)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))) -{ - reset(); -} - -int -atsc_rs_encoder::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_no_sync *in = (const atsc_mpeg_packet_no_sync *) input_items[0]; - atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *) output_items[0]; - - for (int i = 0; i < noutput_items; i++){ - - assert(in[i].pli.regular_seg_p()); - out[i].pli = in[i].pli; // copy pipeline info... - d_rs_encoder.encode(out[i], in[i]); - } - - return noutput_items; -} diff --git a/gr-atsc/src/lib/atsc_rs_encoder.h b/gr-atsc/src/lib/atsc_rs_encoder.h deleted file mode 100644 index b0d69d95d..000000000 --- a/gr-atsc/src/lib/atsc_rs_encoder.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_RS_ENCODER_H -#define INCLUDED_ATSC_RS_ENCODER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_reed_solomon.h> - -class atsc_rs_encoder; -typedef boost::shared_ptr<atsc_rs_encoder> atsc_rs_encoder_sptr; - -ATSC_API atsc_rs_encoder_sptr atsc_make_rs_encoder(); - -/*! - * \brief Reed-Solomon encoder for ATSC - * \ingroup atsc - * - * input: atsc_mpeg_packet_no_sync; output: atsc_mpeg_packet_rs_encoded - */ -class ATSC_API atsc_rs_encoder : public gr_sync_block -{ - friend ATSC_API atsc_rs_encoder_sptr atsc_make_rs_encoder(); - - atsci_reed_solomon d_rs_encoder; - - atsc_rs_encoder(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_RS_ENCODER_H */ diff --git a/gr-atsc/src/lib/atsc_trellis_encoder.cc b/gr-atsc/src/lib/atsc_trellis_encoder.cc deleted file mode 100644 index fa0a889aa..000000000 --- a/gr-atsc/src/lib/atsc_trellis_encoder.cc +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_trellis_encoder.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> - - -atsc_trellis_encoder_sptr -atsc_make_trellis_encoder() -{ - return gnuradio::get_initial_sptr(new atsc_trellis_encoder()); -} - -atsc_trellis_encoder::atsc_trellis_encoder() - : gr_sync_block("atsc_trellis_encoder", - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded)), - gr_make_io_signature(1, 1, sizeof(atsc_data_segment))) -{ - set_output_multiple(atsci_trellis_encoder::NCODERS); - reset(); -} - -int -atsc_trellis_encoder::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_mpeg_packet_rs_encoded *in = (const atsc_mpeg_packet_rs_encoded *) input_items[0]; - atsc_data_segment *out = (atsc_data_segment *) output_items[0]; - - for (int i = 0; i < atsci_trellis_encoder::NCODERS; i += atsci_trellis_encoder::NCODERS){ - d_trellis_encoder.encode(&out[i], &in[i]); - } - return atsci_trellis_encoder::NCODERS; -} - diff --git a/gr-atsc/src/lib/atsc_trellis_encoder.h b/gr-atsc/src/lib/atsc_trellis_encoder.h deleted file mode 100644 index da51f633d..000000000 --- a/gr-atsc/src/lib/atsc_trellis_encoder.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_TRELLIS_ENCODER_H -#define INCLUDED_ATSC_TRELLIS_ENCODER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_trellis_encoder.h> - -class atsc_trellis_encoder; -typedef boost::shared_ptr<atsc_trellis_encoder> atsc_trellis_encoder_sptr; - -ATSC_API atsc_trellis_encoder_sptr atsc_make_trellis_encoder(); - -/*! - * \brief ATSC 12-way interleaved trellis encoder (atsc_mpeg_packet_rs_encoded --> atsc_data_segment) - * \ingroup atsc - * - * input: atsc_mpeg_packet_rs_encoded; output: atsc_data_segment - */ -class ATSC_API atsc_trellis_encoder : public gr_sync_block -{ - friend ATSC_API atsc_trellis_encoder_sptr atsc_make_trellis_encoder(); - - atsci_trellis_encoder d_trellis_encoder; - - atsc_trellis_encoder(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } -}; - - -#endif /* INCLUDED_ATSC_TRELLIS_ENCODER_H */ diff --git a/gr-atsc/src/lib/atsc_types.h b/gr-atsc/src/lib/atsc_types.h deleted file mode 100644 index ed4dedace..000000000 --- a/gr-atsc/src/lib/atsc_types.h +++ /dev/null @@ -1,238 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2001,2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_TYPES_H_ -#define _ATSC_TYPES_H_ - -#include <atsc_consts.h> -#include <cstring> -#include <cassert> - - -/*! - * \brief pipeline info that flows with data - * - * Not all modules need all the info - */ -class plinfo { -public: - plinfo () : _flags (0), _segno (0) { } - - // accessors - - bool field_sync1_p () const { return (_flags & fl_field_sync1) != 0; } - bool field_sync2_p () const { return (_flags & fl_field_sync2) != 0; } - bool field_sync_p () const { return field_sync1_p () || field_sync2_p (); } - - bool regular_seg_p () const { return (_flags & fl_regular_seg) != 0; } - - bool in_field1_p () const { return (_flags & fl_field2) == 0; } - bool in_field2_p () const { return (_flags & fl_field2) != 0; } - - bool first_regular_seg_p () const { return (_flags & fl_first_regular_seg) != 0; } - - bool transport_error_p () const { return (_flags & fl_transport_error) != 0; } - - unsigned int segno () const { return _segno; } - unsigned int flags () const { return _flags; } - - // setters - - void set_field_sync1 () - { - _segno = 0; - _flags = fl_field_sync1; - } - - void set_field_sync2 () - { - _segno = 0; - _flags = fl_field_sync2 | fl_field2; - } - - void set_regular_seg (bool field2, int segno) - { - assert (0 <= segno && segno < ATSC_DSEGS_PER_FIELD); - _segno = segno; - _flags = fl_regular_seg; - if (segno == 0) - _flags |= fl_first_regular_seg; - if (segno >= ATSC_DSEGS_PER_FIELD) - _flags |= fl_transport_error; - if (field2) - _flags |= fl_field2; - } - - void set_transport_error (bool error){ - if (error) - _flags |= fl_transport_error; - else - _flags &= ~fl_transport_error; - } - - // overload equality operator - bool operator== (const plinfo &other) const { - return (_flags == other._flags && _segno == other._segno); - } - - bool operator!= (const plinfo &other) const { - return !(_flags == other._flags && _segno == other._segno); - } - - /*! - * Set \p OUT such that it reflects a \p NSEGS_OF_DELAY - * pipeline delay from \p IN. - */ - static void delay (plinfo &out, const plinfo &in, int nsegs_of_delay); - - /*! - * confirm that \p X is plausible - */ - static void sanity_check (const plinfo &in); - - -protected: - unsigned short _flags; // bitmask - unsigned short _segno; // segment number [0,311] - - // these three are mutually exclusive - // This is a regular data segment. - static const int fl_regular_seg = 0x0001; - // This is a field sync segment, for 1st half of a field. - static const int fl_field_sync1 = 0x0002; - // This is a field sync segment, for 2nd half of a field. - static const int fl_field_sync2 = 0x0004; - - // This bit is on ONLY when fl_regular_seg is set AND when this is - // the first regular data segment AFTER a field sync segment. This - // segment causes various processing modules to reset. - static const int fl_first_regular_seg = 0x0008; - - // which field are we in? - static const int fl_field2 = 0x0010; // else field 1 - - // This bit is set when Reed-Solomon decoding detects an error that it - // can't correct. Note that other error detection (e.g. Viterbi) do not - // set it, since Reed-Solomon will correct many of those. This bit is - // then copied into the final Transport Stream packet so that MPEG - // software can see that the 188-byte data segment has been corrupted. - static const int fl_transport_error = 0x0020; -}; - - - - -class atsc_mpeg_packet { - public: - static const int NPAD = 68; - unsigned char data[ATSC_MPEG_DATA_LENGTH + 1]; // first byte is sync - unsigned char _pad_[NPAD]; // pad to power of 2 (256) - - // overload equality operator - bool operator== (const atsc_mpeg_packet &other) const { - return std::memcmp (data, other.data, sizeof (data)) == 0; - }; - - bool operator!= (const atsc_mpeg_packet &other) const { - return !(std::memcmp (data, other.data, sizeof (data)) == 0); - }; -}; - -class atsc_mpeg_packet_no_sync { - public: - static const int NPAD = 65; - plinfo pli; - unsigned char data[ATSC_MPEG_DATA_LENGTH]; - unsigned char _pad_[NPAD]; // pad to power of 2 (256) - - // overload equality operator - bool operator== (const atsc_mpeg_packet_no_sync &other) const { - return std::memcmp (data, other.data, sizeof (data)) == 0; - } - - bool operator!= (const atsc_mpeg_packet_no_sync &other) const { - return !(std::memcmp (data, other.data, sizeof (data)) == 0); - } -}; - -class atsc_mpeg_packet_rs_encoded { - public: - static const int NPAD = 45; - plinfo pli; - unsigned char data[ATSC_MPEG_RS_ENCODED_LENGTH]; - unsigned char _pad_[NPAD]; // pad to power of 2 (256) - - // overload equality operator - bool operator== (const atsc_mpeg_packet_rs_encoded &other) const { - return std::memcmp (data, other.data, sizeof (data)) == 0; - } - - bool operator!= (const atsc_mpeg_packet_rs_encoded &other) const { - return !(std::memcmp (data, other.data, sizeof (data)) == 0); - } -}; - - -//! contains 832 3 bit symbols. The low 3 bits in the byte hold the symbol. - -class atsc_data_segment { - public: - static const int NPAD = 188; - plinfo pli; - unsigned char data[ATSC_DATA_SEGMENT_LENGTH]; - unsigned char _pad_[NPAD]; // pad to power of 2 (1024) - - // overload equality operator - bool operator== (const atsc_data_segment &other) const { - return std::memcmp (data, other.data, sizeof (data)) == 0; - } - - bool operator!= (const atsc_data_segment &other) const { - return !(std::memcmp (data, other.data, sizeof (data)) == 0); - } -}; - -/*! - * Contains 832 bipolar floating point symbols. - * Nominal values are +/- {1, 3, 5, 7}. - * This data type represents the input to the viterbi decoder. - */ - -class atsc_soft_data_segment { - public: - static const int NPAD = 764; - plinfo pli; - float data[ATSC_DATA_SEGMENT_LENGTH]; - unsigned char _pad_[NPAD]; // pad to power of 2 (4096) - - // overload equality operator - bool operator== (const atsc_data_segment &other) const { - return std::memcmp (data, other.data, sizeof (data)) == 0; - } - - bool operator!= (const atsc_data_segment &other) const { - return !(std::memcmp (data, other.data, sizeof (data)) == 0); - } -}; - - -#endif /* _ATSC_TYPES_H_ */ diff --git a/gr-atsc/src/lib/atsc_viterbi_decoder.cc b/gr-atsc/src/lib/atsc_viterbi_decoder.cc deleted file mode 100644 index 72b9a965b..000000000 --- a/gr-atsc/src/lib/atsc_viterbi_decoder.cc +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <atsc_viterbi_decoder.h> -#include <gr_io_signature.h> -#include <atsc_consts.h> -#include <iostream> - -using std::cerr; -using std::endl; - -atsc_viterbi_decoder_sptr -atsc_make_viterbi_decoder() -{ - return gnuradio::get_initial_sptr(new atsc_viterbi_decoder()); -} - -atsc_viterbi_decoder::atsc_viterbi_decoder() - : gr_sync_block("atsc_viterbi_decoder", - gr_make_io_signature(1, 1, sizeof(atsc_soft_data_segment)), - gr_make_io_signature(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))), - last_start(-1) -{ - set_output_multiple(atsci_viterbi_decoder::NCODERS); - reset(); -} - -int -atsc_viterbi_decoder::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const atsc_soft_data_segment *in = (const atsc_soft_data_segment *) input_items[0]; - atsc_mpeg_packet_rs_encoded *out = (atsc_mpeg_packet_rs_encoded *) output_items[0]; - - assert (noutput_items % atsci_viterbi_decoder::NCODERS == 0); - - // find the first mod 12 boundary to begin decoding - int start; - for (start = 0; start < atsci_viterbi_decoder::NCODERS; start++){ - assert (in[start].pli.regular_seg_p ()); - if ((in[start].pli.segno () % atsci_viterbi_decoder::NCODERS) == 0) - break; - } - - if (start == atsci_viterbi_decoder::NCODERS){ - // we didn't find a mod 12 boundary. There's some kind of problem - // upstream of us (not yet sync'd??) - cerr << "!!!atsc_viterbi_decoder: no mod-12 boundary found\7\n"; - start = 0; - } - else if (start != last_start){ - cerr << "atsc_viterbi_decoder: new starting offset = " << start - << endl; - last_start = start; - } - - for (int i = 0; i < atsci_viterbi_decoder::NCODERS; i += atsci_viterbi_decoder::NCODERS){ - d_viterbi_decoder.decode(&out[i], &in[i + start]); - } - return atsci_viterbi_decoder::NCODERS; -} - diff --git a/gr-atsc/src/lib/atsc_viterbi_decoder.h b/gr-atsc/src/lib/atsc_viterbi_decoder.h deleted file mode 100644 index de571db33..000000000 --- a/gr-atsc/src/lib/atsc_viterbi_decoder.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_ATSC_VITERBI_DECODER_H -#define INCLUDED_ATSC_VITERBI_DECODER_H - -#include <atsc_api.h> -#include <gr_sync_block.h> -#include <atsci_viterbi_decoder.h> - -class atsc_viterbi_decoder; -typedef boost::shared_ptr<atsc_viterbi_decoder> atsc_viterbi_decoder_sptr; - -ATSC_API atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder(); - -/*! - * \brief ATSC 12-way interleaved viterbi decoder (atsc_soft_data_segment --> atsc_mpeg_packet_rs_encoded) - * \ingroup atsc - * - * input: atsc_soft_data_segment; output: atsc_mpeg_packet_rs_encoded - */ -class ATSC_API atsc_viterbi_decoder : public gr_sync_block -{ - friend ATSC_API atsc_viterbi_decoder_sptr atsc_make_viterbi_decoder(); - - atsci_viterbi_decoder d_viterbi_decoder; - - atsc_viterbi_decoder(); - -public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - void reset() { /* nop */ } - -protected: - int last_start; - -}; - - -#endif /* INCLUDED_ATSC_VITERBI_DECODER_H */ diff --git a/gr-atsc/src/lib/atsci_basic_trellis_encoder.cc b/gr-atsc/src/lib/atsci_basic_trellis_encoder.cc deleted file mode 100644 index 2ae481cbc..000000000 --- a/gr-atsc/src/lib/atsci_basic_trellis_encoder.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_basic_trellis_encoder.h> -#include <assert.h> - -const unsigned char atsci_basic_trellis_encoder::next_state[32] = { - 0,1,4,5, - 2,3,6,7, - 1,0,5,4, - 3,2,7,6, - 4,5,0,1, - 6,7,2,3, - 5,4,1,0, - 7,6,3,2 -}; - -const unsigned char atsci_basic_trellis_encoder::out_symbol[32] = { - 0,2,4,6, - 1,3,5,7, - 0,2,4,6, - 1,3,5,7, - 4,6,0,2, - 5,7,1,3, - 4,6,0,2, - 5,7,1,3 -}; - - -/*! - * Encode two bit INPUT into 3 bit return value. Domain is [0,3], - * Range is [0,7]. The mapping to bipolar levels is not done. - */ - -int -atsci_basic_trellis_encoder::encode (unsigned int input) -{ - assert (input < 4); - int index = (state << 2) + input; - state = next_state[index]; - return out_symbol[index]; -} - diff --git a/gr-atsc/src/lib/atsci_basic_trellis_encoder.h b/gr-atsc/src/lib/atsci_basic_trellis_encoder.h deleted file mode 100644 index a1bbbf5a0..000000000 --- a/gr-atsc/src/lib/atsci_basic_trellis_encoder.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_BASIC_TRELLIS_ENCODER_H_ -#define _ATSC_BASIC_TRELLIS_ENCODER_H_ - -#include <atsc_api.h> -#include <assert.h> - -/*! - * \brief ATSC trellis encoder building block. - * - * Note this is NOT the 12x interleaved interface. - * - * This implements a single instance of the ATSC trellis encoder. - * This is a rate 2/3 encoder (really a constraint length 3, rate 1/2 - * encoder with the top bit passed through unencoded. This does not - * implement the "precoding" of the top bit, because the NTSC rejection - * filter is not supported. - */ - -class ATSC_API atsci_basic_trellis_encoder { - -private: - int state; // two bit state; - -public: - atsci_basic_trellis_encoder () : state (0) {} - - /*! - * Encode two bit INPUT into 3 bit return value. Domain is [0,3], - * Range is [0,7]. The mapping to bipolar levels is not done. - */ - int encode (unsigned int input); - - //! reset encoder state - void reset () { state = 0; } - - static const unsigned char next_state[32]; - static const unsigned char out_symbol[32]; -}; - -#endif /* _ATSC_BASIC_TRELLIS_ENCODER_H_ */ diff --git a/gr-atsc/src/lib/atsci_data_interleaver.cc b/gr-atsc/src/lib/atsci_data_interleaver.cc deleted file mode 100644 index a2eef0fea..000000000 --- a/gr-atsc/src/lib/atsci_data_interleaver.cc +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_data_interleaver.h> - -void -atsci_data_interleaver::interleave (atsc_mpeg_packet_rs_encoded &out, - const atsc_mpeg_packet_rs_encoded &in) -{ - assert (in.pli.regular_seg_p ()); - plinfo::sanity_check (in.pli); - - out.pli = in.pli; // copy pipeline info - if (in.pli.first_regular_seg_p ()) // reset commutator if required - sync (); - - transform (out.data, in.data, sizeof (in.data)); -} - - -void -atsci_data_deinterleaver::deinterleave (atsc_mpeg_packet_rs_encoded &out, - const atsc_mpeg_packet_rs_encoded &in) -{ - assert (in.pli.regular_seg_p ()); - plinfo::sanity_check (in.pli); - - // reset commutator if required using INPUT pipeline info - if (in.pli.first_regular_seg_p ()) - sync (); - - // remap OUTPUT pipeline info to reflect 52 data segment end-to-end delay - - plinfo::delay (out.pli, in.pli, 52); - - // now do the actual deinterleaving - - for (unsigned int i = 0; i < sizeof (in.data); i++){ - out.data[i] = alignment_fifo.stuff (transform (in.data[i])); - } -} - diff --git a/gr-atsc/src/lib/atsci_data_interleaver.h b/gr-atsc/src/lib/atsci_data_interleaver.h deleted file mode 100644 index 290607ea3..000000000 --- a/gr-atsc/src/lib/atsci_data_interleaver.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_DATA_INTERLEAVER_H_ -#define _ATSC_DATA_INTERLEAVER_H_ - -#include <atsc_api.h> -#include <atsc_types.h> -#include <convolutional_interleaver.h> - -/*! - * \brief atsc convolutional data interleaver - */ -class ATSC_API atsci_data_interleaver : public convolutional_interleaver<unsigned char> { - public: - atsci_data_interleaver () : convolutional_interleaver<unsigned char>(true, 52, 4) {} - - void interleave (atsc_mpeg_packet_rs_encoded &out, - const atsc_mpeg_packet_rs_encoded &in); -}; - -/*! - * \brief atsc convolutional data deinterleaver - */ -class ATSC_API atsci_data_deinterleaver : public convolutional_interleaver<unsigned char> { - public: - atsci_data_deinterleaver () : - convolutional_interleaver<unsigned char>(false, 52, 4), alignment_fifo (156) {} - - void deinterleave (atsc_mpeg_packet_rs_encoded &out, - const atsc_mpeg_packet_rs_encoded &in); - -private: - /*! - * Note: The use of the alignment_fifo keeps the encoder and decoder - * aligned if both are synced to a field boundary. There may be other - * ways to implement this function. This is a best guess as to how - * this should behave, as we have no test vectors for either the - * interleaver or deinterleaver. - */ - interleaver_fifo<unsigned char> alignment_fifo; - - static void remap_pli (plinfo &out, const plinfo &in); -}; - -#endif /* _ATSC_DATA_INTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/atsci_diag_output.h b/gr-atsc/src/lib/atsci_diag_output.h deleted file mode 100644 index 09fd763d6..000000000 --- a/gr-atsc/src/lib/atsci_diag_output.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -/* - * single place to control all compile time diagnostic output options - */ - -#define _BT_DIAG_OUTPUT_ 0 -#define _FPLL_DIAG_OUTPUT_ 0 -#define _SSSR_DIAG_OUTPUT_ 0 diff --git a/gr-atsc/src/lib/atsci_equalizer.cc b/gr-atsc/src/lib/atsci_equalizer.cc deleted file mode 100644 index 4aec47495..000000000 --- a/gr-atsc/src/lib/atsci_equalizer.cc +++ /dev/null @@ -1,248 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_equalizer.h> -#include <algorithm> -#include <iostream> -#include <atsc_types.h> - -using std::cerr; -using std::endl; -using std::min; - - -// total number of symbols (including field sync) / field -static const int SYMBOLS_PER_FIELD = - (ATSC_DSEGS_PER_FIELD + 1) * ATSC_DATA_SEGMENT_LENGTH; - - -atsci_equalizer::atsci_equalizer () -{ - d_locked_p = false; - d_offset_from_last_field_sync = 0; - d_current_field = 0; -} - -atsci_equalizer::~atsci_equalizer () -{ -} - -void -atsci_equalizer::reset () -{ - d_locked_p = false; - d_offset_from_last_field_sync = 0; - d_current_field = 0; -} - -/* - * Errrr.... Define to 1 if compiler handles tail recursion without pushing - * unnecessary stack frames, else define to 0 for lame compilers. - */ -#define WINNING_COMPILER 0 - - -/* - * divide and conquer... - * - * Note that this could be refactored to take advantage of the - * symbol_num that is contained in the input_tags. Then we wouldn't - * have to be counting here. - * - * Today's strategy: get it working. - */ - -void -atsci_equalizer::filter (const float *input_samples, - const atsc::syminfo *input_tags, - float *output_samples, - int nsamples) -{ - lame_compiler_kludge: - - if (!d_locked_p){ - - // look for a field sync - - int i; - for (i = 0; i < nsamples; i++){ - if (atsc::tag_is_start_field_sync (input_tags[i])) - break; - } - - // whether we found one or not, everything up to it should - // be run through the normal path - - if (i != 0) - filter_normal (input_samples, output_samples, i); - - if (i == nsamples) // no field sync found, still not locked. - return; - - // OK, we've just transitioned to the locked state. - - d_locked_p = true; - d_offset_from_last_field_sync = 0; - - // handle locked case recursively - - if (WINNING_COMPILER) - filter (&input_samples[i], &input_tags[i], - &output_samples[i], nsamples - i); - else { - input_samples += i; - input_tags += i; - output_samples += i; - nsamples -= i; - goto lame_compiler_kludge; - } - - return; - } - - // We're in the locked state. - // - // Figure out where we are with respect to a data segment boundary - // and do the right thing. Note that in the interested of performance, - // we don't scan all the tags looking for trouble. We only check - // them where we expect them to be non-NORMAL. Worst case, it'll take - // us a field to notice that something went wrong... - - if (d_offset_from_last_field_sync % SYMBOLS_PER_FIELD == 0){ // we should be looking - // at a field sync - if (atsc::tag_is_start_field_sync_1 (input_tags[0])) - d_current_field = 0; - - else if (atsc::tag_is_start_field_sync_2 (input_tags[0])) - d_current_field = 1; - - else { // we're lost... no field sync where we expected it - - cerr << "!!! atsci_equalizer: expected field sync, didn't find one\n"; - - d_locked_p = false; - d_offset_from_last_field_sync = 0; - - if (WINNING_COMPILER) - filter (input_samples, input_tags, output_samples, nsamples); - else - goto lame_compiler_kludge; - - return; - } - - // OK, everything's cool. We're looking at a field sync. - - int n = min (ATSC_DATA_SEGMENT_LENGTH, nsamples); - - filter_field_sync (input_samples, output_samples, n, 0, d_current_field); - - d_offset_from_last_field_sync = n; - nsamples -= n; - - if (nsamples > 0){ - if (WINNING_COMPILER) - filter (&input_samples[n], &input_tags[n], - &output_samples[n], nsamples); - else { - input_samples += n; - input_tags += n; - output_samples += n; - goto lame_compiler_kludge; - } - } - return; - } - - if (d_offset_from_last_field_sync < ATSC_DATA_SEGMENT_LENGTH){ // we're in the middle of a field sync - int n = min (ATSC_DATA_SEGMENT_LENGTH - d_offset_from_last_field_sync, nsamples); - - filter_field_sync (input_samples, output_samples, n, - d_offset_from_last_field_sync, d_current_field); - - d_offset_from_last_field_sync += n; - nsamples -= n; - - if (nsamples > 0){ - if (WINNING_COMPILER) - filter (&input_samples[n], &input_tags[n], - &output_samples[n], nsamples); - else { - input_samples += n; - input_tags += n; - output_samples += n; - goto lame_compiler_kludge; - } - } - return; - } - - // OK, we're not in a field sync. We're either in a data segment sync or in the clear... - - int seg_offset = d_offset_from_last_field_sync % ATSC_DATA_SEGMENT_LENGTH; - - assert (seg_offset >= 0); - - if (seg_offset < 4){ // somewhere in a data seg sync. - int n = min (4 - seg_offset, nsamples); - - filter_data_seg_sync (input_samples, output_samples, n, seg_offset); - - d_offset_from_last_field_sync += n; - nsamples -= n; - - if (nsamples > 0){ - if (WINNING_COMPILER) - filter (&input_samples[n], &input_tags[n], - &output_samples[n], nsamples); - else { - input_samples += n; - input_tags += n; - output_samples += n; - goto lame_compiler_kludge; - } - } - return; - } - - // otherwise... we're in the normal zone - - int n = min (ATSC_DATA_SEGMENT_LENGTH - seg_offset, nsamples); - - filter_normal (input_samples, output_samples, n); - - d_offset_from_last_field_sync += n; - nsamples -= n; - - if (nsamples <= 0) - return; - - if (WINNING_COMPILER) - filter (&input_samples[n], &input_tags[n], - &output_samples[n], nsamples); - else { - input_samples += n; - input_tags += n; - output_samples += n; - goto lame_compiler_kludge; - } -} diff --git a/gr-atsc/src/lib/atsci_equalizer.h b/gr-atsc/src/lib/atsci_equalizer.h deleted file mode 100644 index b0c243b51..000000000 --- a/gr-atsc/src/lib/atsci_equalizer.h +++ /dev/null @@ -1,169 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_EQUALIZER_H_ -#define _ATSC_EQUALIZER_H_ - -#include <atsc_api.h> -#include <atsci_syminfo.h> -#include <vector> - -/*! - * \brief abstract base class for ATSC equalizer - */ -class ATSC_API atsci_equalizer { - -private: - - /* - * have we seen a field sync since the last reset or problem? - */ - bool d_locked_p; - - /* - * sample offset from the beginning of the last field sync we saw - * to the beginning of our current input stream. When we're locked - * this will be in [0, 313*832] i.e., [0, 260416] - */ - int d_offset_from_last_field_sync; - - int d_current_field; // [0,1] - - -public: - - // CREATORS - atsci_equalizer (); - virtual ~atsci_equalizer (); - - virtual std::vector<double> taps () { - return std::vector<double>(); - } - - // MANIPULATORS - - /*! - * \brief reset state (e.g., on channel change) - * - * Note, subclasses must invoke the superclass's method too! - */ - virtual void reset (); - - /*! - * \brief produce \p 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. - * - * \p 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. - * - * \p input_tags must have nsamples valid entries. - * input_tags[0] .. input_tags[nsamples - 1] are referenced to - * compute the output values. - */ - virtual void filter (const float *input_samples, - const atsc::syminfo *input_tags, - float *output_samples, - int nsamples); - - // ACCESSORS - - /*! - * \brief 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. - */ - virtual int ntaps () const = 0; - - /*! - * \brief 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 (). - */ - virtual int npretaps () const = 0; - - -protected: - - /*! - * 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. - * - * \p 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. - */ - virtual void filter_normal (const float *input_samples, - float *output_samples, - int nsamples) = 0; - - /*! - * Input range is known to consist of only a data segment sync or a - * portion of a data segment sync. \p nsamples will be in [1,4]. - * \p offset will be in [0,3]. \p offset is the offset of the input - * from the beginning of the data segment sync pattern. - * - * \p 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. - */ - virtual void filter_data_seg_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset) = 0; - - /*! - * Input range is known to consist of only a field sync segment or a - * portion of a field sync segment. \p nsamples will be in [1,832]. - * \p offset will be in [0,831]. \p 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. \p which_field is in [0,1] - * and specifies which field (duh). - * - * \p 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. - */ - virtual void filter_field_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset, - int which_field) = 0; -}; - - -#endif /* _ATSC_EQUALIZER_H_ */ diff --git a/gr-atsc/src/lib/atsci_equalizer_lms.cc b/gr-atsc/src/lib/atsci_equalizer_lms.cc deleted file mode 100644 index bab962e32..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_lms.cc +++ /dev/null @@ -1,307 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_equalizer_lms.h> -#include <assert.h> -#include <algorithm> -#include <atsci_pnXXX.h> - -#include <stdio.h> - -using std::min; -using std::max; - -static const int NTAPS = 256; -static const int NPRETAPS = (int) (NTAPS * 0.8); // probably should be either .2 or .8 - - -// the length of the field sync pattern that we know unequivocally -static const int KNOWN_FIELD_SYNC_LENGTH = 4 + 511 + 3 * 63; - -// static const float *get_data_seg_sync_training_sequence (int offset); -static int get_field_sync_training_sequence_length (int offset); -static const float *get_field_sync_training_sequence (int which_field, int offset); - - -atsci_equalizer_lms::atsci_equalizer_lms () : d_taps (NTAPS) -{ - for (int i = 0; i < NTAPS; i++) { - d_taps[i] = 0.0; - } - trainingfile=fopen("taps.txt","w"); -} - -atsci_equalizer_lms::~atsci_equalizer_lms () -{ -} - -void -atsci_equalizer_lms::reset () -{ - atsci_equalizer::reset (); // invoke superclass - - for (int i = 0; i < NTAPS; i++) { - d_taps[i] = 0.0; - } -} - -int -atsci_equalizer_lms::ntaps () const -{ - return NTAPS; -} - -int -atsci_equalizer_lms::npretaps () const -{ - return NPRETAPS; -} - -/*! - * 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. - * - * \p 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. - */ -void -atsci_equalizer_lms::filter_normal (const float *input_samples, - float *output_samples, - int nsamples) -{ - // handle data - filterN (input_samples, output_samples, nsamples); -} - - -/*! - * Input range is known to consist of only a data segment sync or a - * portion of a data segment sync. \p nsamples will be in [1,4]. - * \p offset will be in [0,3]. \p offset is the offset of the input - * from the beginning of the data segment sync pattern. - * - * \p 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. - */ -void -atsci_equalizer_lms::filter_data_seg_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset) -{ - // handle data - // adaptN (input_samples, get_data_seg_sync_training_sequence (offset), - // output_samples, nsamples); - filterN (input_samples, output_samples, nsamples); - - // cerr << "Seg Sync: offset " << offset << "\tnsamples\t" << nsamples << "\t pre, 5 -5 -5 5\t" << - // output_samples[0] << "\t" << output_samples[1] << "\t" << output_samples[2] << "\t" << output_samples[3] << endl; - -} - - -/*! - * Input range is known to consist of only a field sync segment or a - * portion of a field sync segment. \p nsamples will be in [1,832]. - * \p offset will be in [0,831]. \p 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. \p which_field is in [0,1] - * and specifies which field (duh). - * - * \p 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. - */ -void -atsci_equalizer_lms::filter_field_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset, - int which_field) -{ - // Only the first 4 + 511 + 3 * 63 symbols are completely defined. - // Those after that the symbols are bilevel, so we could use decision feedback and use - // that to train, but for now, don't train on them. - - int n = min (nsamples, get_field_sync_training_sequence_length (offset)); - - // handle known training sequence - adaptN (input_samples, get_field_sync_training_sequence (which_field, offset), - output_samples, n); - - // just filter any unknown portion - if (nsamples > n) - filterN (&input_samples[n], &output_samples[n], nsamples - n); - - if (offset == 0 && nsamples > 0){ - for (int i = 0; i < NTAPS; i++) - fprintf(trainingfile,"%f ",d_taps[i]); - - fprintf (trainingfile,"\n"); - } - -} - -// ---------------------------------------------------------------- - -// -// filter a single output -// -float -atsci_equalizer_lms::filter1 (const float input[]) -{ - static const int N_UNROLL = 4; - - float acc0 = 0; - float acc1 = 0; - float acc2 = 0; - float acc3 = 0; - - - unsigned i = 0; - unsigned n = (NTAPS / N_UNROLL) * N_UNROLL; - - for (i = 0; i < n; i += N_UNROLL){ - acc0 += d_taps[i + 0] * input[i + 0]; - acc1 += d_taps[i + 1] * input[i + 1]; - acc2 += d_taps[i + 2] * input[i + 2]; - acc3 += d_taps[i + 3] * input[i + 3]; - } - - for (; i < (unsigned) NTAPS; i++) - acc0 += d_taps[i] * input[i]; - - return (acc0 + acc1 + acc2 + acc3); -} - -// -// filter and adapt a single output -// -float -atsci_equalizer_lms::adapt1 (const float input[], float ideal_output) -{ - static const double BETA = 0.00005; // FIXME figure out what this ought to be - // FIXME add gear-shifting - - double y = filter1 (input); - double e = y - ideal_output; - - // update taps... - for (int i = 0; i < NTAPS; i++){ - d_taps[i] = d_taps[i] - BETA * e * (double)(input[i]); - } - - return y; -} - -void -atsci_equalizer_lms::filterN (const float *input_samples, - float *output_samples, - int nsamples) -{ - for (int i = 0; i < nsamples; i++) - output_samples[i] = filter1 (&input_samples[i]); -} - - -void -atsci_equalizer_lms::adaptN (const float *input_samples, - const float *training_pattern, - float *output_samples, - int nsamples) -{ - for (int i = 0; i < nsamples; i++) - output_samples[i] = adapt1 (&input_samples[i], training_pattern[i]); -} - -// ---------------------------------------------------------------- - -static float -bin_map (int bit) -{ - return bit ? +5 : -5; -} - -static void -init_field_sync_common (float *p, int mask) - -{ - int i = 0; - - p[i++] = bin_map (1); // data segment sync pulse - p[i++] = bin_map (0); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map (atsc_pn511[j]); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map (atsc_pn63[j] ^ mask); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - assert (i == KNOWN_FIELD_SYNC_LENGTH); -} - -#if 0 -static const float * -get_data_seg_sync_training_sequence (int offset) -{ - static const float training_data[4] = { +5, -5, -5, +5 }; - return &training_data[offset]; -} -#endif - -static int -get_field_sync_training_sequence_length (int offset) -{ - return max (0, KNOWN_FIELD_SYNC_LENGTH - offset); -} - -static const float * -get_field_sync_training_sequence (int which_field, int offset) -{ - static float *field_1 = 0; - static float *field_2 = 0; - - if (field_1 == 0){ - field_1 = new float[KNOWN_FIELD_SYNC_LENGTH]; - field_2 = new float[KNOWN_FIELD_SYNC_LENGTH]; - init_field_sync_common (field_1, 0); - init_field_sync_common (field_2, 1); - } - - if (which_field == 0) - return &field_1[offset]; - else - return &field_2[offset]; -} diff --git a/gr-atsc/src/lib/atsci_equalizer_lms.h b/gr-atsc/src/lib/atsci_equalizer_lms.h deleted file mode 100644 index eac72f75b..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_lms.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_EQUALIZER_LMS_H_ -#define _ATSC_EQUALIZER_LMS_H_ - -#include <atsc_api.h> -#include <atsci_equalizer.h> -#include <vector> -#include <stdio.h> - -class ATSC_API atsci_equalizer_lms : public atsci_equalizer -{ -public: - atsci_equalizer_lms (); - virtual ~atsci_equalizer_lms (); - - virtual void reset (); - virtual int ntaps () const; - virtual int npretaps () const; - std::vector<double> taps () { - return d_taps; - } - -protected: - FILE *trainingfile; - 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); - -private: - std::vector<double> d_taps; - - void filterN (const float *input_samples, - float *output_samples, - int nsamples); - - void adaptN (const float *input_samples, - const float *training_pattern, - float *output_samples, - int nsamples); - - float filter1 (const float input[]); - float adapt1 (const float input[], float ideal_output); - -}; - - -#endif /* _ATSC_EQUALIZER_LMS_H_ */ diff --git a/gr-atsc/src/lib/atsci_equalizer_lms2.cc b/gr-atsc/src/lib/atsci_equalizer_lms2.cc deleted file mode 100644 index 2825aad50..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_lms2.cc +++ /dev/null @@ -1,375 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_equalizer_lms2.h> -#include <assert.h> -#include <algorithm> -#include <atsci_pnXXX.h> -#include <cmath> -#include <stdlib.h> -#include <gr_math.h> -#include <stdio.h> -#include <boost/math/special_functions/fpclassify.hpp> - -using std::min; -using std::max; - -static const int NFFTAPS = 64; -static const int NFBTAPS = 192; - -// the length of the field sync pattern that we know unequivocally -static const int KNOWN_FIELD_SYNC_LENGTH = 4 + 511 + 3 * 63; - -// static const float *get_data_seg_sync_training_sequence (int offset); -static int get_field_sync_training_sequence_length (int offset); -static const float *get_field_sync_training_sequence (int which_field, int offset); - -static inline int -wrap (int d) -{ - assert (d >= 0 && d <= (2 * NFBTAPS)); - - if(d >= NFBTAPS) - return d - NFBTAPS; - return d; -} - -static inline float -slice (float d) -{ - if (boost::math::isnan (d)) - return 0.0; - - if (d >= 0.0){ - if (d >= 4.0){ - if (d >= 6.0) - return 7.0; - else - return 5.0; - } - if (d >= 2.0) - return 3.0; - return 1.0; - } - else - return -slice (-d); -} - -atsci_equalizer_lms2::atsci_equalizer_lms2 () - : d_taps_ff (NFFTAPS), d_taps_fb (NFBTAPS), d_old_output (NFBTAPS) -{ - for (int i = 0; i < NFFTAPS; i++) { - d_taps_ff[i] = 0.0; - } - for (int i = 0; i < NFBTAPS; i++) { - d_taps_fb[i] = 0.0; - d_old_output[i] = 0.0; - } - d_output_ptr = 0; - trainingfile=fopen("taps.txt","w"); -} - -atsci_equalizer_lms2::~atsci_equalizer_lms2 () -{ -} - -void -atsci_equalizer_lms2::reset () -{ - atsci_equalizer::reset (); // invoke superclass - for (int i = 0; i < NFFTAPS; i++) { - d_taps_ff[i] = 0.0; - } - for (int i = 0; i < NFBTAPS; i++) { - d_taps_fb[i] = 0.0; - d_old_output[i] = 0.0; - } - d_output_ptr = 0; -} - - -int -atsci_equalizer_lms2::ntaps () const -{ - return NFFTAPS + NFBTAPS; -} - -int -atsci_equalizer_lms2::npretaps () const -{ - return NFFTAPS; -} - -/*! - * 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. - * - * \p 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. - */ -void -atsci_equalizer_lms2::filter_normal (const float *input_samples, - float *output_samples, - int nsamples) -{ - // handle data - filterN (input_samples, output_samples, nsamples); -} - - -/*! - * Input range is known to consist of only a data segment sync or a - * portion of a data segment sync. \p nsamples will be in [1,4]. - * \p offset will be in [0,3]. \p offset is the offset of the input - * from the beginning of the data segment sync pattern. - * - * \p 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. - */ -void -atsci_equalizer_lms2::filter_data_seg_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset) -{ - // handle data - // adaptN (input_samples, get_data_seg_sync_training_sequence (offset), - // output_samples, nsamples); - filterN (input_samples, output_samples, nsamples); - - // cerr << "Seg Sync: offset " << offset << "\tnsamples\t" << nsamples << "\t pre, 5 -5 -5 5\t" << - // output_samples[0] << "\t" << output_samples[1] << "\t" << output_samples[2] << "\t" << output_samples[3] << endl; - -} - - -/*! - * Input range is known to consist of only a field sync segment or a - * portion of a field sync segment. \p nsamples will be in [1,832]. - * \p offset will be in [0,831]. \p 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. \p which_field is in [0,1] - * and specifies which field (duh). - * - * \p 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. - */ -void -atsci_equalizer_lms2::filter_field_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset, - int which_field) -{ - // Only the first 4 + 511 + 3 * 63 symbols are completely defined. - // Those after that the symbols are bilevel, so we could use decision feedback and use - // that to train, but for now, don't train on them. - - int n = min (nsamples, get_field_sync_training_sequence_length (offset)); - - // handle known training sequence - adaptN (input_samples, get_field_sync_training_sequence (which_field, offset), - output_samples, n); - - // just filter any unknown portion - if (nsamples > n) - filterN (&input_samples[n], &output_samples[n], nsamples - n); - - if (offset == 0 && nsamples > 0){ - for (int i = 0; i < NFFTAPS; i++) - fprintf(trainingfile,"%f ",d_taps_ff[i]); - for (int i = 0; i < NFBTAPS; i++) - fprintf(trainingfile,"%f ",d_taps_fb[i]); - fprintf (trainingfile,"\n"); - } - -} - -// ---------------------------------------------------------------- - -// -// filter a single output -// -float -atsci_equalizer_lms2::filter1 (const float input[]) -{ - static const int N_UNROLL = 4; - - float acc0 = 0; - float acc1 = 0; - float acc2 = 0; - float acc3 = 0; - float acc = 0; - - - unsigned i = 0; - unsigned n = (NFFTAPS / N_UNROLL) * N_UNROLL; - - for (i = 0; i < n; i += N_UNROLL){ - acc0 += d_taps_ff[i + 0] * input[i + 0]; - acc1 += d_taps_ff[i + 1] * input[i + 1]; - acc2 += d_taps_ff[i + 2] * input[i + 2]; - acc3 += d_taps_ff[i + 3] * input[i + 3]; - } - - for (; i < (unsigned) NFFTAPS; i++) - acc0 += d_taps_ff[i] * input[i]; - - acc = (acc0 + acc1 + acc2 + acc3); - - d_output_ptr = wrap (d_output_ptr + 1); - - for (int i = 0; i < NFBTAPS; i++) { - acc -= d_taps_fb[i] * d_old_output[wrap(i + d_output_ptr)]; - } - - if (boost::math::isnan (acc)){ - abort (); - } - - d_old_output[d_output_ptr] = slice (acc); - return acc; -} - -// -// filter and adapt a single output -// -float kludge () -{ - return 0.0; -} - -float -atsci_equalizer_lms2::adapt1 (const float input[], float ideal_output) -{ - static const double BETA = 0.00005; // FIXME figure out what this ought to be - // FIXME add gear-shifting - - double y = filter1 (input); - double e = y - ideal_output; - - // update taps... - for (int i = 0; i < NFFTAPS; i++){ - d_taps_ff[i] = d_taps_ff[i] - BETA * e * (double)(input[i]); - } - - for (int i = 0; i < NFBTAPS; i++){ - // d_taps_fb[i] = d_taps_fb[i] - BETA * e * (double)d_old_output[wrap(i+d_output_ptr)]; - d_taps_fb[i] = d_taps_fb[i] - kludge() * e * (double)d_old_output[wrap(i+d_output_ptr)]; - } - - return y; -} - -void -atsci_equalizer_lms2::filterN (const float *input_samples, - float *output_samples, - int nsamples) -{ - for (int i = 0; i < nsamples; i++) - output_samples[i] = filter1 (&input_samples[i]); -} - - -void -atsci_equalizer_lms2::adaptN (const float *input_samples, - const float *training_pattern, - float *output_samples, - int nsamples) -{ - for (int i = 0; i < nsamples; i++) - output_samples[i] = adapt1 (&input_samples[i], training_pattern[i]); -} - -// ---------------------------------------------------------------- - -static float -bin_map (int bit) -{ - return bit ? +5 : -5; -} - -static void -init_field_sync_common (float *p, int mask) - -{ - int i = 0; - - p[i++] = bin_map (1); // data segment sync pulse - p[i++] = bin_map (0); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map (atsc_pn511[j]); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map (atsc_pn63[j] ^ mask); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - assert (i == KNOWN_FIELD_SYNC_LENGTH); -} - -#if 0 -static const float * -get_data_seg_sync_training_sequence (int offset) -{ - static const float training_data[4] = { +5, -5, -5, +5 }; - return &training_data[offset]; -} -#endif - -static int -get_field_sync_training_sequence_length (int offset) -{ - return max (0, KNOWN_FIELD_SYNC_LENGTH - offset); -} - -static const float * -get_field_sync_training_sequence (int which_field, int offset) -{ - static float *field_1 = 0; - static float *field_2 = 0; - - if (field_1 == 0){ - field_1 = new float[KNOWN_FIELD_SYNC_LENGTH]; - field_2 = new float[KNOWN_FIELD_SYNC_LENGTH]; - init_field_sync_common (field_1, 0); - init_field_sync_common (field_2, 1); - } - - if (which_field == 0) - return &field_1[offset]; - else - return &field_2[offset]; -} diff --git a/gr-atsc/src/lib/atsci_equalizer_lms2.h b/gr-atsc/src/lib/atsci_equalizer_lms2.h deleted file mode 100644 index d0f2660d5..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_lms2.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_EQUALIZER_LMS2_H_ -#define _ATSC_EQUALIZER_LMS2_H_ - -#include <atsc_api.h> -#include <atsci_equalizer.h> -#include <vector> -#include <stdio.h> - -class ATSC_API atsci_equalizer_lms2 : public atsci_equalizer -{ -public: - atsci_equalizer_lms2 (); - virtual ~atsci_equalizer_lms2 (); - - virtual void reset (); - virtual int ntaps () const; - virtual int npretaps () const; - -protected: - FILE *trainingfile; - 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); - -private: - std::vector<double> d_taps_ff; - std::vector<double> d_taps_fb; - std::vector<float> d_old_output; - - int d_output_ptr; - - void filterN (const float *input_samples, - float *output_samples, - int nsamples); - - void adaptN (const float *input_samples, - const float *training_pattern, - float *output_samples, - int nsamples); - - float filter1 (const float input[]); - float adapt1 (const float input[], float ideal_output); - -}; - - -#endif /* _ATSC_EQUALIZER_LMS2_H_ */ diff --git a/gr-atsc/src/lib/atsci_equalizer_nop.cc b/gr-atsc/src/lib/atsci_equalizer_nop.cc deleted file mode 100644 index 5af2cc4e7..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_nop.cc +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_equalizer_nop.h> -#include <atsci_sync_tag.h> -#include <assert.h> - -atsci_equalizer_nop::atsci_equalizer_nop () -{ -} - -atsci_equalizer_nop::~atsci_equalizer_nop () -{ -} - -void -atsci_equalizer_nop::reset () -{ - atsci_equalizer::reset (); // invoke superclass -} - -int -atsci_equalizer_nop::ntaps () const -{ - return 1; -} - -int -atsci_equalizer_nop::npretaps () const -{ - return 0; -} - -/*! - * 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. - * - * \p 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. - */ -void -atsci_equalizer_nop::filter_normal (const float *input_samples, - float *output_samples, - int nsamples) -{ - for (int i = 0; i < nsamples; i++){ - output_samples[i] = scale (input_samples[i]); - } -} - - -/*! - * Input range is known to consist of only a data segment sync or a - * portion of a data segment sync. \p nsamples will be in [1,4]. - * \p offset will be in [0,3]. \p offset is the offset of the input - * from the beginning of the data segment sync pattern. - * - * \p 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. - */ -void -atsci_equalizer_nop::filter_data_seg_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset) -{ - for (int i = 0; i < nsamples; i++){ - output_samples[i] = scale_and_train (input_samples[i]); - } -} - - -/*! - * Input range is known to consist of only a field sync segment or a - * portion of a field sync segment. \p nsamples will be in [1,832]. - * \p offset will be in [0,831]. \p 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. \p which_field is in [0,1] - * and specifies which field (duh). - * - * \p 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. - */ -void -atsci_equalizer_nop::filter_field_sync (const float *input_samples, - float *output_samples, - int nsamples, - int offset, - int which_field) -{ - int i = 0; - - if (offset == 0 && nsamples > 0){ - output_samples[0] = scale_and_train (input_samples[0]); - i++; - } - - for (; i < nsamples; i++){ - output_samples[i] = scale_and_train (input_samples[i]); - } -} - - -float -atsci_equalizer_nop::scale_and_train (float input) -{ - return input; -} diff --git a/gr-atsc/src/lib/atsci_equalizer_nop.h b/gr-atsc/src/lib/atsci_equalizer_nop.h deleted file mode 100644 index d29fded64..000000000 --- a/gr-atsc/src/lib/atsci_equalizer_nop.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_EQUALIZER_NOP_H_ -#define _ATSC_EQUALIZER_NOP_H_ - -#include <atsc_api.h> -#include <atsci_equalizer.h> - -class ATSC_API atsci_equalizer_nop : public atsci_equalizer -{ -private: - float scale (float input) { return input; } - - float scale_and_train (float input); - - -public: - atsci_equalizer_nop (); - virtual ~atsci_equalizer_nop (); - - virtual void reset (); - virtual int ntaps () const; - virtual int npretaps () const; - -protected: - 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); -}; - - -#endif /* _ATSC_EQUALIZER_NOP_H_ */ diff --git a/gr-atsc/src/lib/atsci_exp2_lp.cc b/gr-atsc/src/lib/atsci_exp2_lp.cc deleted file mode 100644 index 8f411977e..000000000 --- a/gr-atsc/src/lib/atsci_exp2_lp.cc +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsc_consts.h> -#include <atsci_exp2_lp.h> -#include <stdexcept> -#include <cmath> -#include <iostream> - -using std::vector; -using std::cerr; -using std::endl; - -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:LOW PASS 1H - * PASSBAND RIPPLE IN -dB -.0100 - * STOPBAND RIPPLE IN -dB -66.0000 - * PASSBAND CUTOFF FREQUENCY 5.69000 HERTZ - * STOPBAND CUTOFF FREQUENCY 6.12000 HERTZ - * SAMPLING FREQUENCY 21.5200 HERTZ - */ -static const float atsci_exp2_lp2x[] = { -#include "atsci_exp2_lp2x.dat" -}; - -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:LOW PASS 1H - * PASSBAND RIPPLE IN -dB -.0100 - * STOPBAND RIPPLE IN -dB -66.0000 - * PASSBAND CUTOFF FREQUENCY 5.69000 HERTZ - * STOPBAND CUTOFF FREQUENCY 6.12000 HERTZ - * SAMPLING FREQUENCY 20.0000 HERTZ - */ -static const float atsci_exp2_lp20[] = { -#include "atsci_exp2_lp20.dat" -}; - - -#define NELEM(x) (sizeof (x) / sizeof ((x)[0])) - -// is A within 5% of TARGET? - -static bool -close_enough_p (double a, double target) -{ - double delta = fabs (target * 0.05); // 5 percent - - return fabs (target - a) <= delta; -} - -vector<float> -atsci_exp2_lp::taps (double sampling_freq) -{ - if (close_enough_p (sampling_freq, 20e6)){ - return vector<float>(&atsci_exp2_lp20[0], &atsci_exp2_lp20[NELEM(atsci_exp2_lp20)]); - } - if (close_enough_p (sampling_freq, 2 * ATSC_SYMBOL_RATE)){ - return vector<float>(&atsci_exp2_lp2x[0], &atsci_exp2_lp2x[NELEM(atsci_exp2_lp2x)]); - } - else - throw std::out_of_range ( - "atsci_exp2_lp: no pre-designed filter close enough"); -} diff --git a/gr-atsc/src/lib/atsci_exp2_lp.h b/gr-atsc/src/lib/atsci_exp2_lp.h deleted file mode 100644 index e04c42528..000000000 --- a/gr-atsc/src/lib/atsci_exp2_lp.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_EXP2_LP_H_ -#define _ATSC_EXP2_LP_H_ - -#include <atsc_api.h> -#include <gr_fir_builder.h> - -class ATSC_API atsci_exp2_lp : public gr_fir_builder -{ -public: - virtual std::vector<float> taps (double sampling_freq); -}; - -#endif /* _ATSC_EXP2_LP_H_ */ diff --git a/gr-atsc/src/lib/atsci_exp2_lp20.dat b/gr-atsc/src/lib/atsci_exp2_lp20.dat deleted file mode 100644 index d09c5aca2..000000000 --- a/gr-atsc/src/lib/atsci_exp2_lp20.dat +++ /dev/null @@ -1,178 +0,0 @@ -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:LOW PASS 1H - * PASSBAND RIPPLE IN -dB -.0100 - * STOPBAND RIPPLE IN -dB -66.0000 - * PASSBAND CUTOFF FREQUENCY 5.69000 HERTZ - * STOPBAND CUTOFF FREQUENCY 6.12000 HERTZ - * SAMPLING FREQUENCY 20.0000 HERTZ - */ - -.3137849271297455e-03, - -.6755953654646874e-04, - .2326252870261669e-03, - -.1614624634385109e-03, - -.1158984377980232e-03, - .2114051021635532e-03, - .6828224286437035e-04, - -.3522797487676144e-03, - .1759170554578304e-03, - .2849949523806572e-03, - -.3568925894796848e-03, - -.1521380618214607e-03, - .5445396527647972e-03, - -.1707794144749641e-03, - -.5257474258542061e-03, - .5062967538833618e-03, - .3262492828071117e-03, - -.8037807419896126e-03, - .1136297360062599e-03, - .8607362397015095e-03, - -.6433278322219849e-03, - -.6174184381961823e-03, - .1120670232921839e-02, - .3442214801907539e-04, - -.1305819023400545e-02, - .7387576624751091e-03, - .1056550536304712e-02, - -.1477979123592377e-02, - -.3192713484168053e-03, - .1870564185082912e-02, - -.7502869702875614e-03, - -.1675266306847334e-02, - .1847642473876476e-02, - .7931739091873169e-03, - -.2555002458393574e-02, - .6227688863873482e-03, - .2505954820662737e-02, - -.2186967991292477e-02, - -.1515555195510387e-02, - .3349546808749437e-02, - -.2860687673091888e-03, - -.3578922711312771e-02, - .2438103780150414e-02, - .2555412705987692e-02, - -.4232846200466156e-02, - -.3483905456960201e-03, - .4926202818751335e-02, - -.2523601986467838e-02, - -.3997647203505039e-02, - .5173782818019390e-02, - .1395780127495527e-02, - -.6588382180780172e-02, - .2339247148483992e-02, - .5959283560514450e-02, - -.6131949834525585e-02, - -.3020572476089001e-02, - .8632841985672712e-02, - -.1736589241772890e-02, - -.8627892937511206e-02, - .7060498464852572e-02, - .5489445291459560e-02, - -.1119629153981805e-01, - .4754690453410149e-03, - .1235919492319226e-01, - -.7909852080047131e-02, - -.9316097479313612e-02, - .1459939032793045e-01, - .1910720951855183e-02, - -.1796151325106621e-01, - .8631225209683180e-02, - .1572139468044043e-01, - -.1972115319222212e-01, - -.6601144559681416e-02, - .2775513892993331e-01, - -.9181375615298748e-02, - -.2863558568060398e-01, - .2976502152159810e-01, - .1806837785989046e-01, - -.5192282795906067e-01, - .9526194538921118e-02, - .7172224065288901e-01, - -.6965141417458654e-01, - -.8541030902415514e-01, - .3052920936606824e+00, - .5900069065392017e+00, - .3052920936606824e+00, - -.8541030902415514e-01, - -.6965141417458654e-01, - .7172224065288901e-01, - .9526194538921118e-02, - -.5192282795906067e-01, - .1806837785989046e-01, - .2976502152159810e-01, - -.2863558568060398e-01, - -.9181375615298748e-02, - .2775513892993331e-01, - -.6601144559681416e-02, - -.1972115319222212e-01, - .1572139468044043e-01, - .8631225209683180e-02, - -.1796151325106621e-01, - .1910720951855183e-02, - .1459939032793045e-01, - -.9316097479313612e-02, - -.7909852080047131e-02, - .1235919492319226e-01, - .4754690453410149e-03, - -.1119629153981805e-01, - .5489445291459560e-02, - .7060498464852572e-02, - -.8627892937511206e-02, - -.1736589241772890e-02, - .8632841985672712e-02, - -.3020572476089001e-02, - -.6131949834525585e-02, - .5959283560514450e-02, - .2339247148483992e-02, - -.6588382180780172e-02, - .1395780127495527e-02, - .5173782818019390e-02, - -.3997647203505039e-02, - -.2523601986467838e-02, - .4926202818751335e-02, - -.3483905456960201e-03, - -.4232846200466156e-02, - .2555412705987692e-02, - .2438103780150414e-02, - -.3578922711312771e-02, - -.2860687673091888e-03, - .3349546808749437e-02, - -.1515555195510387e-02, - -.2186967991292477e-02, - .2505954820662737e-02, - .6227688863873482e-03, - -.2555002458393574e-02, - .7931739091873169e-03, - .1847642473876476e-02, - -.1675266306847334e-02, - -.7502869702875614e-03, - .1870564185082912e-02, - -.3192713484168053e-03, - -.1477979123592377e-02, - .1056550536304712e-02, - .7387576624751091e-03, - -.1305819023400545e-02, - .3442214801907539e-04, - .1120670232921839e-02, - -.6174184381961823e-03, - -.6433278322219849e-03, - .8607362397015095e-03, - .1136297360062599e-03, - -.8037807419896126e-03, - .3262492828071117e-03, - .5062967538833618e-03, - -.5257474258542061e-03, - -.1707794144749641e-03, - .5445396527647972e-03, - -.1521380618214607e-03, - -.3568925894796848e-03, - .2849949523806572e-03, - .1759170554578304e-03, - -.3522797487676144e-03, - .6828224286437035e-04, - .2114051021635532e-03, - -.1158984377980232e-03, - -.1614624634385109e-03, - .2326252870261669e-03, - -.6755953654646874e-04, - -.3137849271297455e-03 diff --git a/gr-atsc/src/lib/atsci_exp2_lp2x.dat b/gr-atsc/src/lib/atsci_exp2_lp2x.dat deleted file mode 100644 index 67dd204cb..000000000 --- a/gr-atsc/src/lib/atsci_exp2_lp2x.dat +++ /dev/null @@ -1,196 +0,0 @@ -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:LOW PASS 1H - * PASSBAND RIPPLE IN -dB -.0100 - * STOPBAND RIPPLE IN -dB -66.0000 - * PASSBAND CUTOFF FREQUENCY 5.69000 HERTZ - * STOPBAND CUTOFF FREQUENCY 6.12000 HERTZ - * SAMPLING FREQUENCY 21.5200 HERTZ - */ - -/* - * probably total overkill... -*/ - -.8815620094537735E-04, - -.3356961533427239E-03, - .1227599568665028E-03, - .1281457953155041E-03, - -.1479196362197399E-03, - -.1201131381094456E-03, - .2271742559969425E-03, - .6969040259718895E-04, - -.3000237047672272E-03, - .1565506681799889E-04, - .3562141209840775E-03, - -.1368308439850807E-03, - -.3795824013650417E-03, - .2876669168472290E-03, - .3540110774338245E-03, - -.4550744779407978E-03, - -.2659554593265057E-03, - .6190738640725613E-03, - .1072990708053112E-03, - -.7539116777479649E-03, - .1217066310346127E-03, - .8306214585900307E-03, - -.4104166291654110E-03, - -.8203103207051754E-03, - .7365280762314796E-03, - .6983750499784946E-03, - -.1066216267645359E-02, - -.4491899162530899E-03, - .1356074586510658E-02, - .7050111889839172E-04, - -.1556793693453074E-02, - .4230584017932415E-03, - .1618413720279932E-02, - -.9978362359106541E-03, - -.1497142482548952E-02, - .1601643394678831E-02, - .1162088476121426E-02, - -.2165937330573797E-02, - -.6025419570505619E-03, - .2611500211060047E-02, - -.1667905598878861E-03, - -.2855417784303427E-02, - .1101639121770859E-02, - .2821092493832111E-02, - -.2127973828464747E-02, - -.2448682673275471E-02, - .3145063761621714E-02, - .1706911250948906E-02, - -.4030079115182161E-02, - -.5993186496198177E-03, - .4651836119592190E-02, - -.8259965106844902E-03, - -.4880243912339211E-02, - .2475241199135780E-02, - .4603198729455471E-02, - -.4209769889712334E-02, - -.3741886932402849E-02, - .5853117443621159E-02, - .2264967188239098E-02, - -.7202429696917534E-02, - -.2001645043492317E-03, - .8043776731938124E-02, - -.2357403747737408E-02, - -.8171265944838524E-02, - .5242727231234312E-02, - .7407441269606352E-02, - -.8224328979849815E-02, - -.5622585304081440E-02, - .1101253507658839E-01, - .2751644235104322E-02, - -.1327139046043158E-01, - .1191724557429552E-02, - .1463502133265138E-01, - -.6110311951488257E-02, - -.1471871789544821E-01, - .1182264182716608E-01, - .1312375022098422E-01, - -.1807126961648464E-01, - -.9420783724635840E-02, - .2453883877024055E-01, - .3084233496338129E-02, - -.3086851537227631E-01, - .6689148955047131E-02, - .3669126378372312E-01, - -.2150753932073712E-01, - -.4165294021368027E-01, - .4559329804033041E-01, - .4544338863343000E-01, - -.9483475470915437E-01, - -.4782041534781456E-01, - .3143207929097116E+00, - .5483355415053666E+00, - .3143207929097116E+00, - -.4782041534781456E-01, - -.9483475470915437E-01, - .4544338863343000E-01, - .4559329804033041E-01, - -.4165294021368027E-01, - -.2150753932073712E-01, - .3669126378372312E-01, - .6689148955047131E-02, - -.3086851537227631E-01, - .3084233496338129E-02, - .2453883877024055E-01, - -.9420783724635840E-02, - -.1807126961648464E-01, - .1312375022098422E-01, - .1182264182716608E-01, - -.1471871789544821E-01, - -.6110311951488257E-02, - .1463502133265138E-01, - .1191724557429552E-02, - -.1327139046043158E-01, - .2751644235104322E-02, - .1101253507658839E-01, - -.5622585304081440E-02, - -.8224328979849815E-02, - .7407441269606352E-02, - .5242727231234312E-02, - -.8171265944838524E-02, - -.2357403747737408E-02, - .8043776731938124E-02, - -.2001645043492317E-03, - -.7202429696917534E-02, - .2264967188239098E-02, - .5853117443621159E-02, - -.3741886932402849E-02, - -.4209769889712334E-02, - .4603198729455471E-02, - .2475241199135780E-02, - -.4880243912339211E-02, - -.8259965106844902E-03, - .4651836119592190E-02, - -.5993186496198177E-03, - -.4030079115182161E-02, - .1706911250948906E-02, - .3145063761621714E-02, - -.2448682673275471E-02, - -.2127973828464747E-02, - .2821092493832111E-02, - .1101639121770859E-02, - -.2855417784303427E-02, - -.1667905598878861E-03, - .2611500211060047E-02, - -.6025419570505619E-03, - -.2165937330573797E-02, - .1162088476121426E-02, - .1601643394678831E-02, - -.1497142482548952E-02, - -.9978362359106541E-03, - .1618413720279932E-02, - .4230584017932415E-03, - -.1556793693453074E-02, - .7050111889839172E-04, - .1356074586510658E-02, - -.4491899162530899E-03, - -.1066216267645359E-02, - .6983750499784946E-03, - .7365280762314796E-03, - -.8203103207051754E-03, - -.4104166291654110E-03, - .8306214585900307E-03, - .1217066310346127E-03, - -.7539116777479649E-03, - .1072990708053112E-03, - .6190738640725613E-03, - -.2659554593265057E-03, - -.4550744779407978E-03, - .3540110774338245E-03, - .2876669168472290E-03, - -.3795824013650417E-03, - -.1368308439850807E-03, - .3562141209840775E-03, - .1565506681799889E-04, - -.3000237047672272E-03, - .6969040259718895E-04, - .2271742559969425E-03, - -.1201131381094456E-03, - -.1479196362197399E-03, - .1281457953155041E-03, - .1227599568665028E-03, - -.3356961533427239E-03, - -.8815620094537735E-04 diff --git a/gr-atsc/src/lib/atsci_fake_single_viterbi.cc b/gr-atsc/src/lib/atsci_fake_single_viterbi.cc deleted file mode 100644 index 6246a9050..000000000 --- a/gr-atsc/src/lib/atsci_fake_single_viterbi.cc +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <math.h> -#include <atsci_fake_single_viterbi.h> -#include <iostream> -#include <algorithm> - -using std::cerr; -using std::cout; - -void -atsci_fake_single_viterbi::reset() -{ - post_coder_state = 0; -} - -atsci_fake_single_viterbi::atsci_fake_single_viterbi() -{ - reset(); -} - -/* - * implement simple slicer and post coder - */ -char -atsci_fake_single_viterbi::decode (float input) -{ - int y2, y1; - - if (input < -4){ - y2 = 0; - y1 = 0; - } - else if (input < 0){ - y2 = 0; - y1 = 1; - } - else if (input < 4){ - y2 = 1; - y1 = 0; - } - else { - y2 = 1; - y1 = 1; - } - - int x1 = y1; - int x2 = y2 ^ post_coder_state; - post_coder_state = y2; - - return (x2 << 1) | x1; -} diff --git a/gr-atsc/src/lib/atsci_fake_single_viterbi.h b/gr-atsc/src/lib/atsci_fake_single_viterbi.h deleted file mode 100644 index 561afb3d3..000000000 --- a/gr-atsc/src/lib/atsci_fake_single_viterbi.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSCFAKESINGLEVITERBI_H_ -#define _ATSCFAKESINGLEVITERBI_H_ - -#include <atsc_api.h> - -/*! - * \brief single channel viterbi decoder - */ -class ATSC_API atsci_fake_single_viterbi -{ - -public: - atsci_fake_single_viterbi (); - - /*! - * \p INPUT ideally takes on the values +/- 1,3,5,7 - * return is decoded dibit in the range [0, 3] - */ - char decode (float input); - - void reset (); - - //! internal delay of decoder - int delay () { return 0; } - -protected: - int post_coder_state; -}; - -#endif diff --git a/gr-atsc/src/lib/atsci_fs_checker.cc b/gr-atsc/src/lib/atsci_fs_checker.cc deleted file mode 100644 index 7d321307c..000000000 --- a/gr-atsc/src/lib/atsci_fs_checker.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_fs_checker.h> - -// empty constructor -atsci_fs_checker::atsci_fs_checker () -{ -} - -// empty virtual destructor -atsci_fs_checker::~atsci_fs_checker () -{ -} diff --git a/gr-atsc/src/lib/atsci_fs_checker.h b/gr-atsc/src/lib/atsci_fs_checker.h deleted file mode 100644 index 7a426b742..000000000 --- a/gr-atsc/src/lib/atsci_fs_checker.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_FS_CHECKER_H_ -#define _ATSC_FS_CHECKER_H_ - -#include <atsc_api.h> -#include <atsci_syminfo.h> - -/*! - * \brief abstract base class for ATSC field sync checker - * - * Processes input samples one at a time looking for - * an occurence of either the field sync 1 or field sync 2 pattern. - * - * Note that unlike atsci_fs_correlator, this class uses the symbol_num in - * input_tag to avoid having to test each symbol position. - * - * For each sample processed, an output sample and an output tag are produced. - * The output samples are identical to the input samples but are delayed by - * a number of samples given by \p delay(). The output tag associated with - * the the given output sample indicates whether this sample is the beginning - * of one of the field syncs or is an ordinary sample. The tags are defined in - * atsci_sync_tag.h. - * - * For ease of use, the field sync patterns are defined to begin with the - * first symbol of the 4 symbol data segment sync pattern that immediately - * proceeds the actual PN 511 code. This makes it easier for downstream code - * to determine the location of data segment syncs merely by counting. They'll - * occur every 832 samples assuming everything is working. - */ - -class ATSC_API atsci_fs_checker { - -public: - - // CREATORS - atsci_fs_checker (); - virtual ~atsci_fs_checker () = 0; - - // MANIPULATORS - virtual void reset () = 0; - virtual void filter (float input_sample, atsc::syminfo input_tag, - float *output_sample, atsc::syminfo *output_tag) = 0; - - // ACCESSORS - - //! return delay in samples from input to output - virtual int delay () const = 0; -}; - -#endif /* _ATSC_FS_CHECKER_H_ */ diff --git a/gr-atsc/src/lib/atsci_fs_checker_naive.cc b/gr-atsc/src/lib/atsci_fs_checker_naive.cc deleted file mode 100644 index f14472aa2..000000000 --- a/gr-atsc/src/lib/atsci_fs_checker_naive.cc +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_fs_checker_naive.h> -#include <atsci_syminfo.h> -#include <atsci_pnXXX.h> -#include <iostream> -#include <cstring> - -using std::cerr; -using std::endl; - -static const int PN511_ERROR_LIMIT = 20; // max number of bits wrong -static const int PN63_ERROR_LIMIT = 5; - -unsigned char atsci_fs_checker_naive::s_511[LENGTH_511]; -unsigned char atsci_fs_checker_naive::s_63[LENGTH_2ND_63]; - -static void -init_s_511 (unsigned char *p) -{ - *p++ = 1; // data segment sync pattern - *p++ = 0; - *p++ = 0; - *p++ = 1; - - for (int i = 0; i < 511; i++){ - p[i] = atsc_pn511[i]; - } -} - -static void -init_s_63 (unsigned char *p) -{ - for (int i = 0; i < 63; i++){ - p[i] = atsc_pn63[i]; - } -} - -atsci_fs_checker_naive::atsci_fs_checker_naive () -{ - init_s_511 (s_511); - init_s_63 (s_63); - reset (); -} - -atsci_fs_checker_naive::~atsci_fs_checker_naive () -{ -} - -void -atsci_fs_checker_naive::reset () -{ - d_index = 0; - memset (d_sample_sr, 0, sizeof (d_sample_sr)); - memset (d_tag_sr, 0, sizeof (d_tag_sr)); - memset (d_bit_sr, 0, sizeof (d_bit_sr)); - d_field_num = 0; - d_segment_num = 0; -} - -void -atsci_fs_checker_naive::filter (float input_sample, atsc::syminfo input_tag, - float *output_sample, atsc::syminfo *output_tag) -{ - atsc::syminfo proto_tag = d_tag_sr[d_index]; // oldest tag in the queue - - if (proto_tag.symbol_num == 0){ // check for field sync pattern - - d_segment_num = (d_segment_num + 1) & atsc::SI_SEGMENT_NUM_MASK; // increment - - // check for a hit on the PN 511 pattern - int errors = 0; - int start = wrap (d_index + OFFSET_511); - - for (int i = 0; i < LENGTH_511 && errors < PN511_ERROR_LIMIT; i++) - errors += d_bit_sr[wrap (start + i)] ^ s_511[i]; - - if (errors < PN511_ERROR_LIMIT){ // 511 pattern is good. - // determine if this is field 1 or field 2 - errors = 0; - start = wrap (d_index + OFFSET_2ND_63); - for (int i = 0; i < LENGTH_2ND_63; i++) - errors += d_bit_sr[wrap (start + i)] ^ s_63[i]; - - // we should have either field 1 (== PN63) or field 2 (== ~PN63) - - if (errors <= PN63_ERROR_LIMIT){ - d_segment_num = atsc::SI_FIELD_SYNC_SEGMENT_NUM; // this is FIELD_SYNC_1 - d_field_num = 0; - } - else if (errors >= (LENGTH_2ND_63 - PN63_ERROR_LIMIT)){ - d_segment_num = atsc::SI_FIELD_SYNC_SEGMENT_NUM; // this is FIELD_SYNC_2 - d_field_num = 1; - } - else { - // should be extremely rare. - cerr << "!!! atsci_fs_checker_naive: PN63 error count = " << errors << endl; - } - } - } - - proto_tag.segment_num = d_segment_num; // fill in segment number and field number - proto_tag.field_num = d_field_num; - - // return oldest sample - *output_sample = d_sample_sr[d_index]; - *output_tag = proto_tag; - - // overwrite with newest sample; - d_sample_sr[d_index] = input_sample; - d_bit_sr[d_index] = input_sample < 0 ? 0 : 1; - d_tag_sr[d_index] = input_tag; - d_index = incr (d_index); -} - -int -atsci_fs_checker_naive::delay () const -{ - return SRSIZE; -} diff --git a/gr-atsc/src/lib/atsci_fs_checker_naive.h b/gr-atsc/src/lib/atsci_fs_checker_naive.h deleted file mode 100644 index 21c628a1d..000000000 --- a/gr-atsc/src/lib/atsci_fs_checker_naive.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_FS_CHECKER_NAIVE_H_ -#define _ATSC_FS_CHECKER_NAIVE_H_ - -#include <atsc_api.h> -#include <atsci_fs_checker.h> - -/*! - * \brief Naive concrete implementation of field sync checker - */ -class ATSC_API atsci_fs_checker_naive : public atsci_fs_checker { - - private: - static const int SRSIZE = 1024; // must be power of two - int d_index; // points at oldest sample - float d_sample_sr[SRSIZE]; // sample shift register - atsc::syminfo d_tag_sr[SRSIZE]; // tag shift register - unsigned char d_bit_sr[SRSIZE]; // binary decision shift register - int d_field_num; - int d_segment_num; - - static const int OFFSET_511 = 0; // offset to PN 511 pattern - static const int LENGTH_511 = 511 + 4; // length of PN 511 pattern (+ 4 seg sync) - static const int OFFSET_2ND_63 = 578; // offset to second PN 63 pattern - static const int LENGTH_2ND_63 = 63; // length of PN 63 pattern - - static unsigned char s_511[LENGTH_511]; // PN 511 pattern - static unsigned char s_63[LENGTH_2ND_63]; // PN 63 pattern - - inline static int wrap (int index){ return index & (SRSIZE - 1); } - inline static int incr (int index){ return wrap (index + 1); } - inline static int decr (int index){ return wrap (index - 1); } - - public: - - // CREATORS - atsci_fs_checker_naive (); - ~atsci_fs_checker_naive (); - - // MANIPULATORS - virtual void reset (); - void filter (float input_sample, atsc::syminfo input_tag, - float *output_sample, atsc::syminfo *output_tag); - - // ACCESSORS - - //! return delay in samples from input to output - int delay () const; - -}; - - -#endif /* _ATSC_FS_CHECKER_NAIVE_H_ */ diff --git a/gr-atsc/src/lib/atsci_fs_correlator.cc b/gr-atsc/src/lib/atsci_fs_correlator.cc deleted file mode 100644 index efeb35176..000000000 --- a/gr-atsc/src/lib/atsci_fs_correlator.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_fs_correlator.h> - -// empty constructor -atsci_fs_correlator::atsci_fs_correlator () -{ -} - -// empty virtual destructor -atsci_fs_correlator::~atsci_fs_correlator () -{ -} diff --git a/gr-atsc/src/lib/atsci_fs_correlator.h b/gr-atsc/src/lib/atsci_fs_correlator.h deleted file mode 100644 index ff70245c9..000000000 --- a/gr-atsc/src/lib/atsci_fs_correlator.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_FS_CORRELATOR_H_ -#define _ATSC_FS_CORRELATOR_H_ - -#include <atsc_api.h> - -/*! - * \brief abstract base class for ATSC field sync correlator - * - * Processes input samples one at a time looking for - * an occurence of either the field sync 1 or field sync 2 pattern. - * - * For each sample processed, an output sample and an output tag are produced. - * The output samples are identical to the input samples but are delayed by - * a number of samples given by \p delay(). The output tag associated with - * the the given output sample indicates whether this sample is the beginning - * of one of the field syncs or is an ordinary sample. The tags are defined in - * atsci_sync_tag.h. - * - * For ease of use, the field sync patterns are defined to begin with the - * first symbol of the 4 symbol data segment sync pattern that immediately - * proceeds the actual PN 511 code. This makes it easier for downstream code - * to determine the location of data segment syncs merely by counting. They'll - * occur every 832 samples assuming everything is working. - */ - -class ATSC_API atsci_fs_correlator { - -public: - - // CREATORS - atsci_fs_correlator (); - virtual ~atsci_fs_correlator () = 0; - - // MANIPULATORS - virtual void reset () = 0; - virtual void filter (float input_sample, float *output_sample, float *output_tag) = 0; - - // ACCESSORS - - //! return delay in samples from input to output - virtual int delay () const = 0; -}; - -#endif /* _ATSC_FS_CORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/atsci_fs_correlator_naive.cc b/gr-atsc/src/lib/atsci_fs_correlator_naive.cc deleted file mode 100644 index ccf903531..000000000 --- a/gr-atsc/src/lib/atsci_fs_correlator_naive.cc +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_fs_correlator_naive.h> -#include <atsci_sync_tag.h> -#include <atsci_pnXXX.h> -#include <iostream> -#include <cstring> - -using std::cerr; -using std::endl; - -static const int PN511_ERROR_LIMIT = 20; // max number of bits wrong -static const int PN63_ERROR_LIMIT = 5; - -unsigned char atsci_fs_correlator_naive::s_511[LENGTH_511]; -unsigned char atsci_fs_correlator_naive::s_63[LENGTH_2ND_63]; - -static void -init_s_511 (unsigned char *p) -{ - *p++ = 1; // data segment sync pattern - *p++ = 0; - *p++ = 0; - *p++ = 1; - - for (int i = 0; i < 511; i++){ - p[i] = atsc_pn511[i]; - } -} - -static void -init_s_63 (unsigned char *p) -{ - for (int i = 0; i < 63; i++){ - p[i] = atsc_pn63[i]; - } -} - -atsci_fs_correlator_naive::atsci_fs_correlator_naive () -{ - init_s_511 (s_511); - init_s_63 (s_63); - reset (); -} - -atsci_fs_correlator_naive::~atsci_fs_correlator_naive () -{ -} - -void -atsci_fs_correlator_naive::reset () -{ - d_index = 0; - memset (d_sample_sr, 0, sizeof (d_sample_sr)); - memset (d_bit_sr, 0, sizeof (d_bit_sr)); -} - -void -atsci_fs_correlator_naive::filter (float input_sample, - float *output_sample, float *output_tag) -{ - // check for a hit on the PN 511 pattern - int errors = 0; - int start = wrap (d_index + OFFSET_511); - - for (int i = 0; i < LENGTH_511 && errors < PN511_ERROR_LIMIT; i++) - errors += d_bit_sr[wrap (start + i)] ^ s_511[i]; - - if (errors >= PN511_ERROR_LIMIT) - *output_tag = atsc_sync_tag::NORMAL; - - else { // 511 pattern is good. determine if this is field 1 or field 2 - errors = 0; - start = wrap (d_index + OFFSET_2ND_63); - for (int i = 0; i < LENGTH_2ND_63; i++) - errors += d_bit_sr[wrap (start + i)] ^ s_63[i]; - - // we should have either field 1 (== PN63) or field 2 (== ~PN63) - if (errors <= PN63_ERROR_LIMIT) - *output_tag = atsc_sync_tag::START_FIELD_SYNC_1; - - else if (errors >= (LENGTH_2ND_63 - PN63_ERROR_LIMIT)) - *output_tag = atsc_sync_tag::START_FIELD_SYNC_2; - - else { - // should be extremely rare. - cerr << "!!! atsci_fs_correlator_naive: PN63 error count = " << errors << endl; - *output_tag = atsc_sync_tag::NORMAL; - } - } - - // return oldest sample - *output_sample = d_sample_sr[d_index]; - - // overwrite with newest sample; - d_sample_sr[d_index] = input_sample; - d_bit_sr[d_index] = input_sample < 0 ? 0 : 1; - d_index = incr (d_index); -} - -int -atsci_fs_correlator_naive::delay () const -{ - return SRSIZE; -} diff --git a/gr-atsc/src/lib/atsci_fs_correlator_naive.h b/gr-atsc/src/lib/atsci_fs_correlator_naive.h deleted file mode 100644 index d8afc2ca6..000000000 --- a/gr-atsc/src/lib/atsci_fs_correlator_naive.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_FS_CORRELATOR_NAIVE_H_ -#define _ATSC_FS_CORRELATOR_NAIVE_H_ - -#include <atsc_api.h> -#include <atsci_fs_correlator.h> - -/*! - * \brief Naive concrete implementation of field sync correlator - */ -class ATSC_API atsci_fs_correlator_naive : public atsci_fs_correlator { - - private: - static const int SRSIZE = 1024; // must be power of two - int d_index; // points at oldest sample - float d_sample_sr[SRSIZE]; // sample shift register - unsigned char d_bit_sr[SRSIZE]; // binary decision shift register - - static const int OFFSET_511 = 0; // offset to PN 511 pattern - static const int LENGTH_511 = 511 + 4; // length of PN 511 pattern (+ 4 seg sync) - static const int OFFSET_2ND_63 = 578; // offset to second PN 63 pattern - static const int LENGTH_2ND_63 = 63; // length of PN 63 pattern - - static unsigned char s_511[LENGTH_511]; // PN 511 pattern - static unsigned char s_63[LENGTH_2ND_63]; // PN 63 pattern - - inline static int wrap (int index){ return index & (SRSIZE - 1); } - inline static int incr (int index){ return wrap (index + 1); } - inline static int decr (int index){ return wrap (index - 1); } - - public: - - // CREATORS - atsci_fs_correlator_naive (); - ~atsci_fs_correlator_naive (); - - // MANIPULATORS - virtual void reset (); - void filter (float input_sample, float *output_sample, float *output_tag); - - // ACCESSORS - - //! return delay in samples from input to output - int delay () const; - -}; - - -#endif /* _ATSC_FS_CORRELATOR_NAIVE_H_ */ diff --git a/gr-atsc/src/lib/atsci_pnXXX.cc b/gr-atsc/src/lib/atsci_pnXXX.cc deleted file mode 100644 index 128582d2d..000000000 --- a/gr-atsc/src/lib/atsci_pnXXX.cc +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_pnXXX.h> - -const unsigned char atsc_pn511[511] = { - 0,0,0,0, 0,0,0,1, 0,1,1,1, 1,1,1,1, 1,1,0,0, 1,0,1,0, 1,0,1,0, 1,1,1,0, - 0,1,1,0, 0,1,1,0, 1,0,0,0, 1,0,0,0, 1,0,0,1, 1,1,1,0, 0,0,0,1, 1,1,0,1, - - 0,1,1,1, 1,1,0,1, 0,0,1,1, 0,1,0,1, 0,0,1,1, 1,0,1,1, 0,0,1,1, 1,0,1,0, - 0,1,0,0, 0,1,0,1, 1,0,0,0, 1,1,1,1, 0,0,1,0, 0,0,0,1, 0,1,0,0, 0,1,1,1, - - 1,1,0,0, 1,1,1,1, 0,1,0,1, 0,0,0,1, 0,1,0,0, 1,1,0,0, 0,0,1,1, 0,0,0,1, - 0,0,0,0, 0,1,0,0, 0,0,1,1, 1,1,1,1, 0,0,0,0, 0,1,0,1, 0,1,0,0, 0,0,0,0, - - 1,1,0,0, 1,1,1,1, 1,1,1,0, 1,1,1,0, 1,0,1,0, 1,0,0,1, 0,1,1,0, 0,1,1,0, - 0,0,1,1, 0,1,1,1, 0,1,1,1, 1,0,1,1, 0,1,0,0, 1,0,1,0, 0,1,0,0, 1,1,1,0, - - 0,1,1,1, 0,0,0,1, 0,1,1,1, 0,1,0,0, 0,0,1,1, 0,1,0,0, 1,1,1,1, 1,0,1,1, - 0,0,0,1, 0,1,0,1, 1,0,1,1, 1,1,0,0, 1,1,0,1, 1,0,1,0, 1,1,1,0, 1,1,0,1, - - 1,0,0,1, 0,1,1,0, 1,1,0,1, 1,1,0,0, 1,0,0,1, 0,0,1,0, 1,1,1,0, 0,0,1,1, - 1,0,0,1, 0,1,1,1, 1,0,1,0, 0,0,1,1, 0,1,0,1, 1,0,0,0, 0,1,0,0, 1,1,0,1, - - 1,1,1,1, 0,0,0,1, 0,0,1,0, 1,0,1,1, 1,1,0,0, 0,1,1,0, 0,1,0,1, 0,0,0,0, - 1,0,0,0, 1,1,0,0, 0,0,0,1, 1,1,1,0, 1,1,1,1, 1,1,0,1, 0,1,1,0, 1,0,1,0, - - 1,1,0,0, 1,0,0,1, 1,0,0,1, 0,0,0,1, 1,1,0,1, 1,1,0,0, 0,0,1,0, 1,1,0,1, - 0,0,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0, 1,0,0,1, 0,0,0,0, 0,0,0,1, 1,1,0 -}; - -const unsigned char atsc_pn63[63] = { - 1,1,1,0, 0,1,0,0, 1,0,1,1, 0,1,1,1, 0,1,1,0, 0,1,1,0, 1,0,1,0, 1,1,1,1, - 1,1,0,0, 0,0,0,1, 0,0,0,0, 1,1,0,0, 0,1,0,1, 0,0,1,1, 1,1,0,1, 0,0,0 -}; - diff --git a/gr-atsc/src/lib/atsci_pnXXX.h b/gr-atsc/src/lib/atsci_pnXXX.h deleted file mode 100644 index 612ed2034..000000000 --- a/gr-atsc/src/lib/atsci_pnXXX.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsc_api.h> - -ATSC_API extern const unsigned char atsc_pn511[]; -ATSC_API extern const unsigned char atsc_pn63[]; diff --git a/gr-atsc/src/lib/atsci_randomizer.cc b/gr-atsc/src/lib/atsci_randomizer.cc deleted file mode 100644 index 8766bbef0..000000000 --- a/gr-atsc/src/lib/atsci_randomizer.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_randomizer.h> -#include <assert.h> - -unsigned char atsci_randomizer::s_output_map[1 << 14]; -bool atsci_randomizer::s_output_map_initialized_p = false; - -atsci_randomizer::atsci_randomizer () -{ - d_state = PRELOAD_VALUE; - - if (!s_output_map_initialized_p) - initialize_output_map (); -} - -/*! - * \brief Generate the table used in the fast_output_map function. - * - * The table has 16K byte entries, but because of how is is used, only - * 256 entries end up being resident in the cache. This seems - * like a good use of memory. We can get away with a 16K table - * because the low two bits of the state do not affect the output - * function. By shifting right those two bits we shrink the table, - * and also get better cache line utilization. - */ -void -atsci_randomizer::initialize_output_map () -{ - s_output_map_initialized_p = true; - - for (int i = 0; i < (1 << 14); i++) - s_output_map[i] = slow_output_map (i << 2); -} - - -void -atsci_randomizer::reset () -{ - d_state = PRELOAD_VALUE; -} - -void -atsci_randomizer::randomize (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet &in) -{ - assert (in.data[0] == MPEG_SYNC_BYTE); // confirm it's there, then drop - - for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++) - out.data[i] = in.data[i + 1] ^ output_and_clk (); -} - -void -atsci_randomizer::derandomize (atsc_mpeg_packet &out, const atsc_mpeg_packet_no_sync &in) -{ - out.data[0] = MPEG_SYNC_BYTE; // add sync byte to beginning of packet - - for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++) - out.data[i + 1] = in.data[i] ^ output_and_clk (); -} - - -unsigned char -atsci_randomizer::slow_output_map (int st) -{ - int output = 0; - - if (st & 0x8000) - output |= 0x01; - - if (st & 0x2000) - output |= 0x02; - - if (st & 0x1000) - output |= 0x04; - - if (st & 0x0200) - output |= 0x08; - - if (st & 0x0020) - output |= 0x10; - - if (st & 0x0010) - output |= 0x20; - - if (st & 0x0008) - output |= 0x40; - - if (st & 0x0004) - output |= 0x80; - - return output; -} diff --git a/gr-atsc/src/lib/atsci_randomizer.h b/gr-atsc/src/lib/atsci_randomizer.h deleted file mode 100644 index aedd0d808..000000000 --- a/gr-atsc/src/lib/atsci_randomizer.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_RANDOMIZER_H_ -#define _ATSC_RANDOMIZER_H_ - -#include <atsc_api.h> -#include <atsc_types.h> - -/*! - * \brief ATSC data "whitener" - * - * The data randomizer described in ATSC standard A/53B. - * See figure D4 on page 54. - */ - -class ATSC_API atsci_randomizer { - friend class qa_atsci_randomizer; - - public: - atsci_randomizer(); - - /*! \brief reset randomizer LFSR - * - * must be called during the Data Segment Sync interval prior to the - * first data segment. I.e., the LFSR is reset prior to the first - * field of each VSB data frame. - */ - void reset (); - - //! randomize (whiten) mpeg packet and remove leading MPEG-2 sync byte - void randomize (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet &in); - - //! derandomize (de-whiten) mpeg packet and add leading MPEG-2 sync byte - void derandomize (atsc_mpeg_packet &out, const atsc_mpeg_packet_no_sync &in); - - unsigned int state() const { return d_state; } - - private: - static void initialize_output_map (); - static unsigned char slow_output_map (int st); - - static unsigned char fast_output_map (int st){ - return s_output_map[(st & 0xb23c) >> 2]; // Magic const with 8 bits set improves cache - // utilization. The bits correspond to the taps - // used in output calculation. Others may be - // safely ignored. - } - - //! return current output value - unsigned char output (){ - return fast_output_map (d_state); - } - - //! clock LFSR; advance to next state. - void clk (){ - if (d_state & 0x1) - d_state = ((d_state ^ MASK) >> 1) | 0x8000; - else - d_state = d_state >> 1; - } - - //! return current output value and advance to next state - unsigned char output_and_clk (){ - unsigned char r = output (); - clk (); - return r; - } - - unsigned int d_state; - - static const unsigned int PRELOAD_VALUE = 0x018f; /* 0xf180 bit reversed */ - static const unsigned int MASK = 0xa638; - static unsigned char s_output_map[1 << 14]; - static bool s_output_map_initialized_p; -}; - -#endif /* _ATSC_RANDOMIZER_H_ */ diff --git a/gr-atsc/src/lib/atsci_reed_solomon.cc b/gr-atsc/src/lib/atsci_reed_solomon.cc deleted file mode 100644 index a4a40e3f1..000000000 --- a/gr-atsc/src/lib/atsci_reed_solomon.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_reed_solomon.h> -#include <assert.h> -#include <string.h> - -extern "C" { -#include "rs.h" -} - -static const int rs_init_symsize = 8; -static const int rs_init_gfpoly = 0x11d; -static const int rs_init_fcr = 0; // first consecutive root -static const int rs_init_prim = 1; // primitive is 1 (alpha) -static const int rs_init_nroots = 20; - -static const int N = (1 << rs_init_symsize) - 1; // 255 -static const int K = N - rs_init_nroots; // 235 - -static const int amount_of_pad = N - ATSC_MPEG_RS_ENCODED_LENGTH; // 48 - -atsci_reed_solomon::atsci_reed_solomon () -{ - d_rs = init_rs_char (rs_init_symsize, rs_init_gfpoly, - rs_init_fcr, rs_init_prim, rs_init_nroots); - - assert (d_rs != 0); -} - -atsci_reed_solomon::~atsci_reed_solomon () -{ - if (d_rs) - free_rs_char (d_rs); - d_rs = 0; -} - -void -atsci_reed_solomon::encode (atsc_mpeg_packet_rs_encoded &out, const atsc_mpeg_packet_no_sync &in) -{ - unsigned char tmp[K]; - - assert ((int)(amount_of_pad + sizeof (in.data)) == K); - - // add missing prefix zero padding to message - memset (tmp, 0, amount_of_pad); - memcpy (&tmp[amount_of_pad], in.data, sizeof (in.data)); - - // copy message portion to output packet - memcpy (out.data, in.data, sizeof (in.data)); - - // now compute parity bytes and add them to tail end of output packet - encode_rs_char (d_rs, tmp, &out.data[sizeof (in.data)]); -} - -int -atsci_reed_solomon::decode (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet_rs_encoded &in) -{ - unsigned char tmp[N]; - int ncorrections; - - assert ((int)(amount_of_pad + sizeof (in.data)) == N); - - // add missing prefix zero padding to message - memset (tmp, 0, amount_of_pad); - memcpy (&tmp[amount_of_pad], in.data, sizeof (in.data)); - - // correct message... - ncorrections = decode_rs_char (d_rs, tmp, 0, 0); - - // copy corrected message to output, skipping prefix zero padding - memcpy (out.data, &tmp[amount_of_pad], sizeof (out.data)); - - return ncorrections; -} diff --git a/gr-atsc/src/lib/atsci_reed_solomon.h b/gr-atsc/src/lib/atsci_reed_solomon.h deleted file mode 100644 index 8f6e26426..000000000 --- a/gr-atsc/src/lib/atsci_reed_solomon.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_REED_SOLOMON_H_ -#define _ATSC_REED_SOLOMON_H_ - -#include <atsc_api.h> -#include <atsc_types.h> - -/*! - * \brief ATSC Reed-Solomon encoder / decoder - * - * The t=10 (207,187) code described in ATSC standard A/53B. - * See figure D5 on page 55. - */ - -class ATSC_API atsci_reed_solomon { - - public: - atsci_reed_solomon(); - ~atsci_reed_solomon(); - - /*! - * \brief Add RS error correction encoding - */ - void encode (atsc_mpeg_packet_rs_encoded &out, const atsc_mpeg_packet_no_sync &in); - - /*! - * Decode RS encoded packet. - * \returns a count of corrected symbols, or -1 if the block was uncorrectible. - */ - int decode (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet_rs_encoded &in); - - private: - void *d_rs; -}; - -#endif /* _ATSC_REED_SOLOMON_H_ */ diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine.cc b/gr-atsc/src/lib/atsci_root_raised_cosine.cc deleted file mode 100644 index f555d90ac..000000000 --- a/gr-atsc/src/lib/atsci_root_raised_cosine.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsc_consts.h> -#include <atsci_root_raised_cosine.h> -#include <gr_firdes.h> - -vector<float> -atsc_root_raised_cosine::taps (double sampling_rate) -{ - static const double symbol_rate = ATSC_SYMBOL_RATE/2; // 1/2 as wide because we're designing lp filter - // static const int NTAPS = 93; // good number - // static const int NTAPS = 745; // better number - static const int NTAPS = 279; // better number - - return gr_firdes::root_raised_cosine (1.0, sampling_rate, symbol_rate, .115, NTAPS); -} diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine.h b/gr-atsc/src/lib/atsci_root_raised_cosine.h deleted file mode 100644 index f24606992..000000000 --- a/gr-atsc/src/lib/atsci_root_raised_cosine.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_RRC_H_ -#define _ATSC_RRC_H_ - -#include <atsc_api.h> -#include <gr_fir_builder.h> - -class ATSC_API atsc_root_raised_cosine : public gr_fir_builder -{ -public: - virtual std::vector<float> taps (double sampling_freq); -}; - - -#endif /* _ATSC_RRC_H_ */ diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.cc b/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.cc deleted file mode 100644 index f795a4166..000000000 --- a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.cc +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_root_raised_cosine_bandpass.h> -#include <iostream> -#include <cmath> - -using std::vector; -using std::cerr; -using std::endl; - - -vector<float> -atsc_root_raised_cosine_bandpass::taps (double sampling_freq) -{ - - vector<float> t = atsc_root_raised_cosine::taps (sampling_freq); - - cerr << "atsc_root_raised_cosine_bandpass::taps -- " << t.size () << endl; - - // heterodyne the low pass coefficients up to the specified bandpass - // center frequency. Note that when we do this, the filter bandwidth - // is effectively twice the low pass (2.69 * 2 = 5.38) and hence - // matches the diagram in the ATSC spec. - - double arg = 2 * M_PI * _center_freq / sampling_freq; - for (unsigned int i = 0; i < t.size (); i++) - // the factor of 2 keeps the gain of the passband normalized to 1 - t[i] *= 2 * cos (arg * (double) i); - - return t; -} diff --git a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h b/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h deleted file mode 100644 index bdb33c28d..000000000 --- a/gr-atsc/src/lib/atsci_root_raised_cosine_bandpass.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_RRC_BANDPASS_H_ -#define _ATSC_RRC_BANDPASS_H_ - -#include <atsc_api.h> -#include <atsci_root_raised_cosine.h> - -class ATSC_API atsc_root_raised_cosine_bandpass : public atsc_root_raised_cosine -{ -public: - atsc_root_raised_cosine_bandpass (double center_freq) : _center_freq (center_freq) {} - virtual std::vector<float> taps (double sampling_freq); - -protected: - double _center_freq; -}; - - -#endif /* _ATSC_RRC_BANDPASS_H_ */ diff --git a/gr-atsc/src/lib/atsci_single_viterbi.cc b/gr-atsc/src/lib/atsci_single_viterbi.cc deleted file mode 100644 index a1bf2ea49..000000000 --- a/gr-atsc/src/lib/atsci_single_viterbi.cc +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <math.h> -#include <atsci_single_viterbi.h> -#include <iostream> - -using std::cerr; -using std::cout; - -const float atsci_single_viterbi::was_sent[32] = { - -7,-3,-7,-3,-7,-3,-7,-3, - -5,-1,-5,-1,-5,-1,-5,-1, - 1,5,1,5,1,5,1,5, - 3,7,3,7,3,7,3,7 -}; - -const int atsci_single_viterbi::transition_table[32] = { - 0,2,4,6, - 2,0,6,4, - 1,3,5,7, - 3,1,7,5, - 4,6,0,2, - 6,4,2,0, - 5,7,1,3, - 7,5,3,1 -}; - -void -atsci_single_viterbi::reset() -{ - for (unsigned int i = 0; i<2; i++) - for (unsigned int j = 0; j<8; j++) { - path_metrics[i][j] = 0; - traceback[i][j] = 0; - } - phase = 0; -} - -atsci_single_viterbi::atsci_single_viterbi() -{ - reset(); -} - -char -atsci_single_viterbi::decode(float input) -{ - for (unsigned int next_state = 0; next_state < 8; next_state++) { - unsigned int index = next_state << 2; - int min_metric_symb = 0; - float min_metric = fabs(input - was_sent[index + 0]) + - path_metrics[phase][transition_table[index + 0]]; - - for (unsigned int symbol_sent = 1; symbol_sent < 4; symbol_sent++) - if( (fabs(input-was_sent[index+symbol_sent]) + - path_metrics[phase][transition_table[index+symbol_sent]]) - < min_metric) { - min_metric = fabs(input-was_sent[index+symbol_sent]) + - path_metrics[phase][transition_table[index+symbol_sent]]; - min_metric_symb = symbol_sent; - } - - path_metrics[phase^1][next_state] = min_metric; - traceback[phase^1][next_state] = (((unsigned long long)min_metric_symb) << 62) | - (traceback[phase][transition_table[index+min_metric_symb]] >> 2); - } - unsigned int best_state = 0; - float best_state_metric = path_metrics[phase^1][0]; - for (unsigned int state = 1; state < 8; state++) - if(path_metrics[phase^1][state] < best_state_metric) { - best_state = state; - best_state_metric = path_metrics[phase^1][state]; - } - if(best_state_metric > 10000) { - for(unsigned int state = 0; state < 8; state++) - path_metrics[phase^1][state] -= best_state_metric; - // cerr << "Resetting Path Metrics from " << best_state_metric << " to 0\n"; - } - phase ^= 1; - return (0x3 & traceback[phase][best_state]); -} diff --git a/gr-atsc/src/lib/atsci_single_viterbi.h b/gr-atsc/src/lib/atsci_single_viterbi.h deleted file mode 100644 index 01b13fb25..000000000 --- a/gr-atsc/src/lib/atsci_single_viterbi.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSCSINGLEVITERBI_H_ -#define _ATSCSINGLEVITERBI_H_ - -#include <atsc_api.h> - -/*! - * \brief single channel viterbi decoder - */ -class ATSC_API atsci_single_viterbi -{ - -public: - atsci_single_viterbi (); - - static const unsigned int TB_LEN = 32; - - /*! - * \p INPUT ideally takes on the values +/- 1,3,5,7 - * return is decoded dibit in the range [0, 3] - */ - char decode (float input); - - void reset (); - - //! internal delay of decoder - int delay () { return TB_LEN - 1; } - -protected: - static const int transition_table[32]; - static const float was_sent[32]; - float path_metrics [2][8]; - unsigned long long traceback [2][8]; - unsigned char phase; -}; - -#endif diff --git a/gr-atsc/src/lib/atsci_slicer_agc.h b/gr-atsc/src/lib/atsci_slicer_agc.h deleted file mode 100644 index 8a3927b70..000000000 --- a/gr-atsc/src/lib/atsci_slicer_agc.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_SLICER_AGC_H_ -#define _ATSC_SLICER_AGC_H_ - -#include <atsc_api.h> -#include <math.h> -#include <gr_single_pole_iir.h> - -/*! - * \brief Automatic Gain Control class for atsc slicer - * - * Given perfect data, output values will be +/- {7, 5, 3, 1} - */ - -class ATSC_API atsci_slicer_agc { - - public: - atsci_slicer_agc () : _gain(1), dc(0.0025) {}; - - - float gain () { return _gain; } - -#if 1 - float scale (float input){ - float t = input * _gain; - float output = t - REFERENCE; - float error = REFERENCE - dc.filter (t); - _gain += error * RATE; - return output; - } -#else - float scale(float input){ - float avg = dc.filter(input); - if(fabs(avg)<.1)avg=.1; - _gain += _gain*.99 + .01* REFERENCE/avg; - return input*_gain - REFERENCE; - } -#endif - - protected: - - static const float REFERENCE = 1.25; // pilot reference value - static const float RATE = 1.0e-5; // adjustment rate - float _gain; // current gain - gr_single_pole_iir<float,float,float> dc; -}; - -#endif /* _ATSC_SLICER_AGC_H_ */ diff --git a/gr-atsc/src/lib/atsci_sliding_correlator.cc b/gr-atsc/src/lib/atsci_sliding_correlator.cc deleted file mode 100644 index 877037db7..000000000 --- a/gr-atsc/src/lib/atsci_sliding_correlator.cc +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_sliding_correlator.h> -#include <atsci_pnXXX.h> - -// #define TRY_BACKWARDS - -/* - * Return the number of 1's in v. - * This magic code is explained wonderfully in the AMD Athlon - * optimization guide, pg 136. - */ -static inline int popcount32 (unsigned long v) -{ - unsigned long w = v - ((v >> 1) & 0x55555555); - unsigned long x = (w & 0x33333333) + ((w >> 2) & 0x33333333); - unsigned long y = (x + (x >> 4)) & 0x0f0f0f0f; - unsigned long z = (y * 0x01010101) >> 24; - - return z; -} - -atsci_sliding_correlator::atsci_sliding_correlator () -{ -#if defined(TRY_BACKWARDS) - for (int i = 511 - 1; i >= 0; i--) - mask.shift_in (atsc_pn511[i]); -#else - for (unsigned i = 0; i < 511; i++) - mask.shift_in (atsc_pn511[i]); -#endif - - and_mask.shift_in (0); - for (int i = 0; i < 511; i++) - and_mask.shift_in (1); -} - -/* - * we shift in from the top of the register towards the bottom - * - * +-- bits enter here... - * | - * v - * block 0 | block 1 | block 2 ... | block N-1 - * | - * +--> ... and drop out here - * - */ -inline void -atsci_sliding_correlator::shift_reg::shift_in (int bit) -{ - for (int i = NSRBLOCKS - 1; i > 0; i--) - d[i] = ((d[i-1] & 0x1) << (srblock_bitsize - 1)) | (d[i] >> 1); - - d[0] = (((srblock) bit) << (srblock_bitsize - 1)) | (d[0] >> 1); -} - -int -atsci_sliding_correlator::input_bit (int bit) -{ - input.shift_in (bit); - - // can probably get a win by unrolling the loop, if we need to. - int count = 0; - for (int i = 0; i < NSRBLOCKS; i++) - count += popcount32 ((input.d[i] ^ mask.d[i]) & and_mask.d[i]); - - return count; -} - diff --git a/gr-atsc/src/lib/atsci_sliding_correlator.h b/gr-atsc/src/lib/atsci_sliding_correlator.h deleted file mode 100644 index ffa2124ed..000000000 --- a/gr-atsc/src/lib/atsci_sliding_correlator.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_SLIDING_CORRELATOR_H_ -#define _ATSC_SLIDING_CORRELATOR_H_ - -#include <atsc_api.h> -#include <string.h> - -#include <atsci_pnXXX.h> -//extern const unsigned char atsc_pn511[511]; -//extern const unsigned char atsc_pn63[63]; - -/*! - * \brief look for the PN 511 field sync pattern - */ -class ATSC_API atsci_sliding_correlator { - public: - - atsci_sliding_correlator (); - ~atsci_sliding_correlator (){}; - - //! input hard decision bit, return correlation (0,511) - // Result is the number of wrong bits. - // E.g., 0 -> perfect match; 511 -> all bits are wrong - - int input_bit (int bit); - - //! input sample, return correlation (0,511) - // Result is the number of wrong bits. - // E.g., 0 -> perfect match; 511 -> all bits are wrong - - int input_int (int sample){ - return input_bit (sample < 0 ? 0 : 1); - } - - //! input sample, return correlation (0,511) - // Result is the number of wrong bits. - // E.g., 0 -> perfect match; 511 -> all bits are wrong - - int input_float (float sample){ - return input_bit (sample < 0 ? 0 : 1); - } - - void reset () { input.reset (); } - - private: - - typedef unsigned long srblock; - static const int bits_per_char = 8; - static const int srblock_bitsize = sizeof (srblock) * bits_per_char; - static const int NSRBLOCKS = (511 + srblock_bitsize - 1) / srblock_bitsize; - - class shift_reg { - public: - shift_reg () { reset (); } - void reset () { memset (d, 0, sizeof (d)); } - void shift_in (int bit); - srblock d[NSRBLOCKS]; - }; - - shift_reg mask; // pattern we're looking for - shift_reg input; // current input window - shift_reg and_mask; // bits to consider -}; - -#endif /* _ATSC_SLIDING_CORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/atsci_sssr.cc b/gr-atsc/src/lib/atsci_sssr.cc deleted file mode 100644 index 56a0c6a00..000000000 --- a/gr-atsc/src/lib/atsci_sssr.cc +++ /dev/null @@ -1,297 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2008 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_sssr.h> -#include <algorithm> -#include <cmath> -#include <cstdio> -#include <assert.h> -#include <atsci_diag_output.h> -#include <gr_math.h> -#include <stdio.h> -#include <boost/math/special_functions/sign.hpp> -#include <iostream> - -/* - * ---------------------------------------------------------------- - * Segment Integrator Pre-Processor - * - * Compute weight passed to integrator based on - * correlation result and ncorr_gain2 - */ - -inline static int -sipp (bool digcorr_output) -{ - if (digcorr_output) - return +2; // positive correlation - else - return -1; // no correlation -} - -/* - * ---------------------------------------------------------------- - * Segment Sync Integrator... - */ - -static const int SSI_MIN = -16; -static const int SSI_MAX = 15; - -void -sssr::seg_sync_integrator::reset () -{ - for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++) - d_integrator[i] = SSI_MIN; -} - -int -sssr::seg_sync_integrator::update (int weight, int index) -{ - int t = d_integrator[index] + weight; - t = std::max (t, SSI_MIN); - t = std::min (t, SSI_MAX); - d_integrator[index] = t; - - return t; -} - -int -sssr::seg_sync_integrator::find_max (int *v) -{ - int best_value = d_integrator[0]; - int best_index = 0; - - for (int i = 1; i < ATSC_DATA_SEGMENT_LENGTH; i++) - if (d_integrator[i] > best_value){ - best_value = d_integrator[i]; - best_index = i; - } - - *v = best_value; - return best_index; -} - -/* - * ---------------------------------------------------------------- - * Segment Sync and Symbol recovery - */ - -static const int SYMBOL_INDEX_OFFSET = 3; -static const int MIN_SEG_LOCK_CORRELATION_VALUE = 5; - -atsci_sssr::atsci_sssr () - : d_debug_fp(0) -{ - reset (); - - if (_SSSR_DIAG_OUTPUT_){ - const char *file = "sssr.ssout"; - if ((d_debug_fp = fopen (file, "wb")) == 0){ - perror (file); - exit (1); - } - } -} - -atsci_sssr::~atsci_sssr () -{ - if (d_debug_fp) - fclose (d_debug_fp); -} - -void -atsci_sssr::reset () -{ - d_correlator.reset (); - d_integrator.reset (); - d_quad_filter.reset (); - - for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++) - d_quad_output[i] = 0; - - d_timing_adjust = 0; - d_counter = 0; - d_symbol_index = 0; - d_seg_locked = false; -} - -void -atsci_sssr::update (sssr::sample_t sample_in, // input - bool *seg_locked, // are we seeing segment syncs? - int *symbol_index, // 0..831 - double *timing_adjust) // how much to adjust timing -{ - double qo = d_quad_filter.update (sample_in); - d_quad_output[d_counter] = qo; - - int bit = boost::math::signbit (sample_in); - if (bit != 0) - bit = 0; - else - bit = 1; - int corr_out = d_correlator.update (bit); - int weight = sipp (corr_out); - int corr_value = d_integrator.update (weight, d_counter); - int best_correlation_index = -1; - - incr_symbol_index (); - if (incr_counter ()){ // counter just wrapped... - int best_correlation_value; - best_correlation_index = d_integrator.find_max (&best_correlation_value); - d_seg_locked = best_correlation_value >= MIN_SEG_LOCK_CORRELATION_VALUE; - //std::cout << "best = " << best_correlation_value << " min is " << MIN_SEG_LOCK_CORRELATION_VALUE << std::endl; - d_timing_adjust = d_quad_output[best_correlation_index]; - - d_symbol_index = SYMBOL_INDEX_OFFSET - 1 - best_correlation_index; - if (d_symbol_index < 0) - d_symbol_index += ATSC_DATA_SEGMENT_LENGTH; - } - - *seg_locked = d_seg_locked; - *symbol_index = d_symbol_index; - *timing_adjust = d_timing_adjust; - - if (_SSSR_DIAG_OUTPUT_){ - float iodata[7]; - iodata[0] = bit; - iodata[1] = corr_value; - iodata[2] = qo; - iodata[3] = d_counter; - iodata[4] = d_symbol_index; - iodata[5] = best_correlation_index; - iodata[6] = d_timing_adjust; - - if (fwrite (iodata, sizeof (iodata), 1, d_debug_fp) != 1){ - perror ("fwrite: sssr"); - exit (1); - } - } - -} - -/* - * ---------------------------------------------------------------- - * Interpolator control for Seg & Symbol Sync Recovery - */ - -static const double LOOP_FILTER_TAP = 0.00025; // 0.0005 works -static const double ADJUSTMENT_GAIN = 1.0e-5 / (10 * ATSC_DATA_SEGMENT_LENGTH); - -atsci_interpolator::atsci_interpolator (double nominal_ratio_of_rx_clock_to_symbol_freq) - : d_debug_fp(0) -{ -// Tweaked ratio from 1.8 to 1.78 to support input rate of 19.2MHz - assert (nominal_ratio_of_rx_clock_to_symbol_freq >= 1.78); - d_nominal_ratio_of_rx_clock_to_symbol_freq = - nominal_ratio_of_rx_clock_to_symbol_freq; - - d_loop.set_taps (LOOP_FILTER_TAP); - - reset (); - - if (_SSSR_DIAG_OUTPUT_){ - const char *file = "interp.ssout"; - if ((d_debug_fp = fopen (file, "wb")) == 0){ - perror (file); - exit (1); - } - } - -} - -atsci_interpolator::~atsci_interpolator () -{ - if (d_debug_fp) - fclose (d_debug_fp); -} - -void -atsci_interpolator::reset () -{ - d_w = d_nominal_ratio_of_rx_clock_to_symbol_freq; - d_mu = 0.5; - d_incr = 0; - d_loop.reset (); -} - -bool -atsci_interpolator::update ( - const sssr::sample_t input_samples[], // I: vector of samples - int nsamples, // I: total number of samples - int *index, // I/O: current input index - double timing_adjustment, // I: how much to bump timing - sssr::sample_t *output_sample) -{ - if (*index + (int) ntaps () > nsamples) - return false; - - // FIXME Confirm that this is right. I think it is. It was (1-d_mu) - *output_sample = d_interp.interpolate (&input_samples[*index], d_mu); - - double filter_out = 0; - -#if 0 - - filter_out = d_loop.filter (timing_adjustment); - d_w = d_w + ADJUSTMENT_GAIN * filter_out * 1e-3; - -#elif 1 - - filter_out = d_loop.filter (timing_adjustment); - d_mu = d_mu + ADJUSTMENT_GAIN * 10e3 * filter_out; - -#else - - static const double alpha = 0.01; - static const double beta = alpha * alpha / 16; - - double x = ADJUSTMENT_GAIN * 10e3 * timing_adjustment; - - d_mu = d_mu + alpha * x; // conceptually "phase" - d_w = d_w + beta * x; // conceptually "frequency" - -#endif - - double s = d_mu + d_w; - double float_incr = floor (s); - d_mu = s - float_incr; - d_incr = (int) float_incr; - - assert (d_incr >= 1 && d_incr <= 3); - *index += d_incr; - - if (_SSSR_DIAG_OUTPUT_){ - float iodata[6]; - iodata[0] = timing_adjustment; - iodata[1] = filter_out; - iodata[2] = d_w; - iodata[3] = d_mu; - iodata[4] = d_incr; - iodata[5] = *output_sample; - if (fwrite (iodata, sizeof (iodata), 1, d_debug_fp) != 1){ - perror ("fwrite: interpolate"); - exit (1); - } - } - - return true; -} diff --git a/gr-atsc/src/lib/atsci_sssr.h b/gr-atsc/src/lib/atsci_sssr.h deleted file mode 100644 index f3b825b3c..000000000 --- a/gr-atsc/src/lib/atsci_sssr.h +++ /dev/null @@ -1,241 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -/* - * --- ATSC Segment and Symbol Sync Recovery --- - */ - -#ifndef _ATSC_SSSR_H_ -#define _ATSC_SSSR_H_ - -#include <atsc_api.h> -#include <atsc_consts.h> -#include <gri_mmse_fir_interpolator.h> -#include <gr_single_pole_iir.h> -#include <cstdio> - -/* - * --- support classes for atsci_sssr --- - */ - -namespace sssr { - - typedef float sample_t; - - // ---------------------------------------------------------------- - //! digital correlator for 1001 and 0110 patterns - - class ATSC_API digital_correlator { - int d_sr; // 4 bit shift register - - public: - - // Constructor - digital_correlator () { reset (); } - - // Manipulators - - //! called on channel change - void reset () { d_sr = 0; } - - //! clock bit in and return true if we've seen 1001 - - bool update (int bit) { - d_sr = ((bit & 1) << 3) | (d_sr >> 1); - - return (d_sr == 0x9); // 1001 - } - - }; - - - // ---------------------------------------------------------------- - //! segment sync integrator - - class ATSC_API seg_sync_integrator { - signed char d_integrator[ATSC_DATA_SEGMENT_LENGTH]; - - public: - - // Constructor - seg_sync_integrator () { reset (); } - - // Manipulators - - //! called on channel change - void reset (); - - //! update current tap with weight and return integrated correlation value - int update (int weight, int index); - - //! return index of maximum correlation value - int find_max (int *value); - - }; - - // ---------------------------------------------------------------- - //! quad filter (used to compute timing error) - - class ATSC_API quad_filter { - sample_t d_delay[4]; - - public: - // Constructor - quad_filter () { reset (); } - - // Manipulators - - //! called on channel change - void reset () { d_delay[0] = d_delay[1] = d_delay[2] = d_delay[3] = 0; } - - double update (sample_t sample){ - d_delay[3] = d_delay[2]; - d_delay[2] = d_delay[1]; - d_delay[1] = d_delay[0]; - d_delay[0] = sample; - - // the coefficients are -1,-1,+1,+1 - return d_delay[3] + d_delay[2] - d_delay[1] - d_delay[0]; - } - }; -} - -// ---------------------------------------------------------------- - -/*! - * \brief ATSC Segment and Symbol Sync Recovery - * - * This class implements data segment sync tracking and symbol timing - * using the method described in "ATSC/VSB Tutorial - Receiver Technology" - * by Wayne E. Bretl of Zenith, pgs 41-45. - */ - -class ATSC_API atsci_sssr { - sssr::digital_correlator d_correlator; - sssr::seg_sync_integrator d_integrator; - sssr::quad_filter d_quad_filter; - double d_quad_output[ATSC_DATA_SEGMENT_LENGTH]; - double d_timing_adjust; - int d_counter; // free running mod 832 counter - int d_symbol_index; - bool d_seg_locked; - FILE *d_debug_fp; - - - bool incr_counter () { - d_counter++; - if (d_counter >= ATSC_DATA_SEGMENT_LENGTH){ - d_counter = 0; - return true; - } - return false; - } - - void incr_symbol_index () { - d_symbol_index++; - if (d_symbol_index >= ATSC_DATA_SEGMENT_LENGTH) - d_symbol_index = 0; - } - -public: - - // Constructor - atsci_sssr (); - ~atsci_sssr (); - - // Manipulators - - //! call on channel change - void reset (); - - - /*! - * \brief process a single sample at the ATSC symbol rate (~10.76 MSPS) - * - * This block computes an indication of our timing error and keeps - * track of where the segment sync's occur. \p timing_adjust is - * returned to indicate how the interpolator timing needs to be - * adjusted to track the transmitter's symbol timing. If \p seg_locked - * is true, then \p symbol_index is the index of this sample in - * the current segment. The symbols are numbered from 0 to 831, where - * symbols 0, 1, 2 and 3 correspond to the data segment sync pattern, - * nominally +5, -5, -5, +5. - */ - - void update (sssr::sample_t sample_in, // input - bool *seg_locked, // are we seeing segment syncs? - int *symbol_index, // 0..831 - double *timing_adjust); // how much to adjust timing - -}; - -// ---------------------------------------------------------------- - -/*! - * \brief interpolator control for segment and symbol sync recovery - */ - -class ATSC_API atsci_interpolator { - gri_mmse_fir_interpolator d_interp; - gr_single_pole_iir<float,float,float> d_loop; // ``VCO'' loop filter - double d_nominal_ratio_of_rx_clock_to_symbol_freq; // FREQ - double d_w; // ratio of PERIOD of Tx to Rx clocks - double d_mu; // fractional delay [0,1] - int d_incr; // diagnostic only - FILE *d_debug_fp; // diagnostic only - -public: - //! \p nominal_ratio_of_rx_clock_to_symbol_freq must be >= 1.8 - atsci_interpolator (double nominal_ratio_of_rx_clock_to_symbol_freq); - ~atsci_interpolator (); - - // Manipulators - - //! call on channel change - void reset (); - - /*! - * \brief produce next sample referenced to Tx clock - * - * If there aren't enough input_samples left to produce - * an output, return false, else true. - */ - - bool update (const sssr::sample_t input_samples[], // I: vector of samples - int nsamples, // I: total number of samples - int *index, // I/O: current input index - double timing_adjustment, // I: how much to bump timing - sssr::sample_t *output_sample); // O: the output sample - - // Accessors - - // how much history we require on our input - unsigned ntaps () const { return d_interp.ntaps (); } - - // diagnostic accessors - double mu () const { return d_mu; } - double w () const { return d_w; } - int incr () const { return d_incr; } - -}; - -#endif /* _ATSC_SSSR_H_ */ diff --git a/gr-atsc/src/lib/atsci_syminfo.h b/gr-atsc/src/lib/atsci_syminfo.h deleted file mode 100644 index 9f25e4902..000000000 --- a/gr-atsc/src/lib/atsci_syminfo.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_SYMINFO_H_ -#define _ATSC_SYMINFO_H_ - -namespace atsc { - - static const unsigned int SI_SEGMENT_NUM_MASK = 0x1ff; - static const unsigned int SI_FIELD_SYNC_SEGMENT_NUM = SI_SEGMENT_NUM_MASK; // conceptually -1 - - struct syminfo { - unsigned int symbol_num : 10; // 0..831 - unsigned int segment_num : 9; // 0..311 and SI_FIELD_SYNC_SEGMENT_NUM - unsigned int field_num : 1; // 0..1 - unsigned int valid : 1; // contents are valid - }; - - - static inline bool - tag_is_start_field_sync (syminfo tag) - { - return tag.symbol_num == 0 && tag.segment_num == SI_FIELD_SYNC_SEGMENT_NUM && tag.valid; - } - - static inline bool - tag_is_start_field_sync_1 (syminfo tag) - { - return tag_is_start_field_sync (tag) && tag.field_num == 0; - } - - static inline bool - tag_is_start_field_sync_2 (syminfo tag) - { - return tag_is_start_field_sync (tag) && tag.field_num == 1; - } - -} - -#endif /* _ATSC_SYMINFO_H_ */ diff --git a/gr-atsc/src/lib/atsci_sync_tag.h b/gr-atsc/src/lib/atsci_sync_tag.h deleted file mode 100644 index bdb64c5d3..000000000 --- a/gr-atsc/src/lib/atsci_sync_tag.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _ATSC_SYNC_TAG_H_ -#define _ATSC_SYNC_TAG_H_ - -/* - * Constants used to communicate in the second stream passed between - * GrAtscFSCorrelator, GrAtscEqualizer and GrAtscFieldSyncMux. The - * second stream is sample-for-sample parallel with the streaming - * floating point in the first stream. The second stream provides - * information about alignment boundaries. - * - * These are in floating point because the current implementation - * requires that for a given module, all input streams share the same - * type and all output streams share the same type. We'd use unsigned - * char otherwise. - */ - -namespace atsc_sync_tag { - - // Nothing special - static const float NORMAL = 0.0; - - // The corresponding symbol is the first symbol of the - // data segment sync sequence { +5, -5, -5, +5 } - static const float START_SEG_SYNC = 1.0; - - // The corresponding symbol is the first symbol of the - // field sync 1 PN511 pattern. - static const float START_FIELD_SYNC_1 = 2.0; - - // The corresponding symbol is the first symbol of the - // field sync 2 PN511 pattern. - static const float START_FIELD_SYNC_2 = 3.0; -}; - -#endif /* _ATSC_SYNC_TAG_H_ */ diff --git a/gr-atsc/src/lib/atsci_trellis_encoder.cc b/gr-atsc/src/lib/atsci_trellis_encoder.cc deleted file mode 100644 index 2b3e851bc..000000000 --- a/gr-atsc/src/lib/atsci_trellis_encoder.cc +++ /dev/null @@ -1,208 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_trellis_encoder.h> -#include <assert.h> -#include <stdio.h> -#include <string.h> - -static const int DIBITS_PER_BYTE = 4; - -#define SEGOF(x) ( (x) / ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE)) -#define SYMOF(x) (((x) % ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE))-4) - -/* How many separate Trellis encoders / Viterbi decoders run in parallel */ -static const int NCODERS = 12; - -#define ENCODER_SEG_BUMP 4 - -/* A Segment sync symbol is an 8VSB +5,-5,-5,+5 sequence that occurs at - the start of each 207-byte segment (including field sync segments). */ -#define DSEG_SYNC_SYM1 0x06 /* +5 */ -#define DSEG_SYNC_SYM2 0x01 /* -5 */ -#define DSEG_SYNC_SYM3 0x01 /* -5 */ -#define DSEG_SYNC_SYM4 0x06 /* +5 */ - - -/* Shift counts to bit numbers (high order, low order); 9x entries unused */ -static const int bit1[8] = {1, 99, 3, 98, 5, 97, 7, 96}; -static const int bit2[8] = {0, 99, 2, 98, 4, 97, 6, 96}; - - -atsci_trellis_encoder::atsci_trellis_encoder () -{ - debug = false; - reset (); -} - -atsci_trellis_encoder::~atsci_trellis_encoder () -{ -} - -void -atsci_trellis_encoder::reset () -{ - for (int i = 0; i < NCODERS; i++) - enc[i].reset (); -} - -void -atsci_trellis_encoder::encode (atsc_data_segment out[NCODERS], - const atsc_mpeg_packet_rs_encoded in[NCODERS]) -{ - unsigned char out_copy[OUTPUT_SIZE]; - unsigned char in_copy[INPUT_SIZE]; - - assert (sizeof (in_copy) == sizeof (in[0].data) * NCODERS); - assert (sizeof (out_copy) == sizeof (out[0].data) * NCODERS); - - // copy input into continguous temporary buffer - for (int i = 0; i < NCODERS; i++){ - assert (in[i].pli.regular_seg_p ()); - plinfo::sanity_check (in[i].pli); - memcpy (&in_copy[i * INPUT_SIZE/NCODERS], - &in[i].data[0], - ATSC_MPEG_RS_ENCODED_LENGTH * sizeof (in_copy[0])); - } - - memset (out_copy, 0, sizeof (out_copy)); // FIXME, sanity check - - // do the deed... - encode_helper (out_copy, in_copy); - - // copy output from contiguous temp buffer into final output - for (int i = 0; i < NCODERS; i++){ - memcpy (&out[i].data[0], - &out_copy[i * OUTPUT_SIZE/NCODERS], - ATSC_DATA_SEGMENT_LENGTH * sizeof (out_copy[0])); - - // copy pipeline info - out[i].pli = in[i].pli; - - plinfo::sanity_check (out[i].pli); - assert (out[i].pli.regular_seg_p ()); - } -} - -/* - * This code expects contiguous arrrays. Use it as is, it computes - * the correct answer. Maybe someday, when we've run out of better - * things to do, rework to avoid the copying in encode. - */ -void -atsci_trellis_encoder::encode_helper (unsigned char output[OUTPUT_SIZE], - const unsigned char input[INPUT_SIZE]) -{ - int i; - int encoder; - unsigned char trellis_buffer[NCODERS]; - int trellis_wherefrom[NCODERS]; - unsigned char *out, *next_out_seg; - int chunk; - int shift; - unsigned char dibit; - unsigned char symbol; - int skip_encoder_bump; - - /* FIXME, we may want special processing here - for a flag byte to keep track of which part of the field we're in? */ - - encoder = NCODERS - ENCODER_SEG_BUMP; - skip_encoder_bump = 0; - out = output; - next_out_seg = out; - - for (chunk = 0; - chunk < INPUT_SIZE; - chunk += NCODERS) { - /* Load a new chunk of bytes into the Trellis encoder buffers. - They get loaded in an order that depends on where we are in the - segment sync progress (sigh). - GRR! When the chunk reload happens at the same time as the - segment boundary, we should bump the encoder NOW for the reload, - rather than LATER during the bitshift transition!!! */ - if (out >= next_out_seg) { - encoder = (encoder + ENCODER_SEG_BUMP) % NCODERS; - skip_encoder_bump = 1; - } - - for (i = 0; i < NCODERS; i++) { - /* for debug */ trellis_wherefrom[encoder] = chunk+i; - trellis_buffer[encoder] = input [chunk+i]; - encoder++; - if (encoder >= NCODERS) encoder = 0; - } - - for (shift = 6; shift >= 0; shift -= 2) { - - /* Segment boundaries happen to occur on some bitshift transitions. */ - if (out >= next_out_seg) { - /* Segment transition. Output a data segment sync symbol, and - mess with the trellis encoder mux. */ - *out++ = DSEG_SYNC_SYM1; - *out++ = DSEG_SYNC_SYM2; - *out++ = DSEG_SYNC_SYM3; - *out++ = DSEG_SYNC_SYM4; - if (debug) printf ("SYNC SYNC SYNC SYNC\n"); - next_out_seg = out + (SEGMENT_SIZE * DIBITS_PER_BYTE); - - if (!skip_encoder_bump) - encoder = (encoder + ENCODER_SEG_BUMP) % NCODERS; - skip_encoder_bump = 0; - } - - /* Now run each of the 12 Trellis encoders to spit out 12 symbols. - Each encoder takes input from the same byte of the chunk, but the - outputs of the encoders come out in various orders. - NOPE -- this is false. The encoders take input from various - bytes of the chunk (which changes at segment sync time), AND - they also come out in various orders. You really do have to - keep separate track of: the input bytes, the encoders, and - the output bytes -- because they're all moving with respect to - each other!!! */ - for (i = 0; i < NCODERS; i++) { - dibit = 0x03 & (trellis_buffer[encoder] >> shift); - if (debug) - printf ("Seg %ld Symb %3ld Trell %2d Byte %6d Bits %d-%d = dibit %d ", - (long) SEGOF(out-output), (long) SYMOF(out-output), - encoder, trellis_wherefrom[encoder], - bit1[shift], bit2[shift], dibit); - symbol = enc[encoder].encode (dibit); - *out++ = symbol; - encoder++; if (encoder >= NCODERS) encoder = 0; - if (debug) printf ("sym %d\n", symbol); - } /* Encoders */ - } /* Bit shifts */ - } /* Chunks */ - - /* Check up on ourselves */ -#if 0 - assertIntsEqual (0, (INPUT_SIZE * DIBITS_PER_BYTE) % NCODERS, "not %"); - assertIntsEqual (OUTPUT_SIZE, out - output, "outptr"); - assertIntsEqual (NCODERS - ENCODER_SEG_BUMP, encoder, "mux sync"); -#else - assert (0 == (INPUT_SIZE * DIBITS_PER_BYTE) % NCODERS); - assert (OUTPUT_SIZE == out - output); - assert (NCODERS - ENCODER_SEG_BUMP == encoder); -#endif -} - diff --git a/gr-atsc/src/lib/atsci_trellis_encoder.h b/gr-atsc/src/lib/atsci_trellis_encoder.h deleted file mode 100644 index 294ad860f..000000000 --- a/gr-atsc/src/lib/atsci_trellis_encoder.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_TRELLIS_ENCODER_H_ -#define _ATSC_TRELLIS_ENCODER_H_ - -#include <atsc_api.h> -#include <atsci_basic_trellis_encoder.h> -#include <atsc_types.h> - -/*! - * \brief fancy, schmancy 12-way interleaved trellis encoder for ATSC - */ - -class ATSC_API atsci_trellis_encoder { - public: - static const int NCODERS = 12; - - atsci_trellis_encoder (); - ~atsci_trellis_encoder (); - - //! reset all encoder states - void reset (); - - /*! - * Take 12 RS encoded, convolutionally interleaved segments and - * produce 12 trellis coded data segments. We work in groups of 12 - * because that's the smallest number of segments that composes a - * single full cycle of the encoder mux. - */ - void encode (atsc_data_segment out[NCODERS], - const atsc_mpeg_packet_rs_encoded in[NCODERS]); - - - protected: - static const int SEGMENT_SIZE = ATSC_MPEG_RS_ENCODED_LENGTH; // 207 - static const int INPUT_SIZE = (SEGMENT_SIZE * 12); - static const int OUTPUT_SIZE = (ATSC_DATA_SEGMENT_LENGTH * 12); - - void encode_helper (unsigned char out[OUTPUT_SIZE], - const unsigned char in[INPUT_SIZE]); - - atsci_basic_trellis_encoder enc[NCODERS]; - bool debug; -}; - - -#endif /* _ATSC_TRELLIS_ENCODER_H_ */ diff --git a/gr-atsc/src/lib/atsci_viterbi_decoder.cc b/gr-atsc/src/lib/atsci_viterbi_decoder.cc deleted file mode 100644 index 8804f6007..000000000 --- a/gr-atsc/src/lib/atsci_viterbi_decoder.cc +++ /dev/null @@ -1,176 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsci_viterbi_decoder.h> -#include <assert.h> -#include <stdio.h> -#include <cmath> -#include "atsci_viterbi_mux.cc" -#include <string.h> - - -/* How many separate Trellis encoders / Viterbi decoders run in parallel */ -static const int NCODERS = 12; - -static const float DSEG_SYNC_SYM1 = 5; -static const float DSEG_SYNC_SYM2 = -5; -static const float DSEG_SYNC_SYM3 = -5; -static const float DSEG_SYNC_SYM4 = 5; - -atsci_viterbi_decoder::atsci_viterbi_decoder () -{ - debug = true; - - /* - * These fifo's handle the alignment problem caused by the - * inherent decoding delay of the individual viterbi decoders. - * The net result is that this entire block has a pipeline latency - * of 12 complete segments. - * - * If anybody cares, it is possible to do it with less delay, but - * this approach is at least somewhat understandable... - */ - - // the -4 is for the 4 sync symbols - int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay (); - for (int i = 0; i < NCODERS; i++) - fifo[i] = new fifo_t(fifo_size); - - reset (); -} - -atsci_viterbi_decoder::~atsci_viterbi_decoder () -{ - for (int i = 0; i < NCODERS; i++) - delete fifo[i]; -} - -void -atsci_viterbi_decoder::reset () -{ - for (int i = 0; i < NCODERS; i++){ - viterbi[i].reset (); - fifo[i]->reset (); - } -} - - -void -atsci_viterbi_decoder::decode (atsc_mpeg_packet_rs_encoded out[NCODERS], - const atsc_soft_data_segment in[NCODERS]) -{ - unsigned char out_copy[OUTPUT_SIZE]; - float in_copy[INPUT_SIZE]; - - // copy input into continguous temporary buffer - for (int i = 0; i < NCODERS; i++){ - assert (in[i].pli.regular_seg_p ()); - memcpy (&in_copy[i * INPUT_SIZE/NCODERS], - &in[i].data[0], - ATSC_DATA_SEGMENT_LENGTH * sizeof (in_copy[0])); - } - - memset (out_copy, 0, sizeof (out_copy)); // sanity check - - // do the deed... - decode_helper (out_copy, in_copy); - - // copy output from contiguous temp buffer into final output - for (int i = 0; i < NCODERS; i++){ - memcpy (&out[i].data[0], - &out_copy[i * OUTPUT_SIZE/NCODERS], - ATSC_MPEG_RS_ENCODED_LENGTH * sizeof (out_copy[0])); - - - // adjust pipeline info to reflect 12 segment delay - plinfo::delay (out[i].pli, in[i].pli, NCODERS); - } -} - -void -atsci_viterbi_decoder::decode_helper (unsigned char out[OUTPUT_SIZE], - const float symbols_in[INPUT_SIZE]) -{ - int encoder; - unsigned int i; - int dbi; - int dbwhere; - int dbindex; - int shift; - unsigned char dibit; - float symbol; - - /* Memset is not necessary if it's all working... */ - memset (out, 0, OUTPUT_SIZE); - -#define VERBOSE 0 - -#if 1 - /* Check for sync symbols in the incoming data stream */ - /* For now, all we do is complain to stdout. FIXME, pass it back to - caller as an error/quality signal. */ - for (i = 0; i < sync_symbol_indices_max; i++) { - int j = sync_symbol_indices[i]; - if (fabsf (symbols_in[j] - DSEG_SYNC_SYM1) > 1.0) - if (VERBOSE) fprintf (stderr, "** Missing dataseg sync 1 at %d, expect %g, got %g.\n", - j, DSEG_SYNC_SYM1, symbols_in[j]); - j++; - if (fabsf (symbols_in[j] - DSEG_SYNC_SYM2) > 1.0) - if (VERBOSE) fprintf (stderr, "** Missing dataseg sync 2 at %d, expect %g, got %g.\n", - j, DSEG_SYNC_SYM2, symbols_in[j]); - j++; - if (fabsf (symbols_in[j] - DSEG_SYNC_SYM3) > 1.0) - if (VERBOSE) fprintf (stderr, "** Missing dataseg sync 3 at %d, expect %g, got %g.\n", - j, DSEG_SYNC_SYM3, symbols_in[j]); - j++; - if (fabsf (symbols_in[j] - DSEG_SYNC_SYM4) > 1.0) - if (VERBOSE) fprintf (stderr, "** Missing dataseg sync 4 at %d, expect %g, got %g.\n", - j, DSEG_SYNC_SYM4, symbols_in[j]); - } -#endif -#undef VERBOSE - - // printf ("@@@ DIBITS @@@\n"); - - /* Now run each of the 12 Trellis encoders over their subset of - the input symbols */ - for (encoder = 0; encoder < NCODERS; encoder++) { - dbi = 0; /* Reinitialize dibit index for new encoder */ - fifo_t *dibit_fifo = fifo[encoder]; - - /* Feed all the incoming symbols into one encoder; - pump them into the relevant dibits. */ - for (i = 0; i < enco_which_max; i++) { - symbol = symbols_in[enco_which_syms[encoder][i]]; - dibit = dibit_fifo->stuff (viterbi[encoder].decode (symbol)); - // printf ("%d\n", dibit); - /* Store the dibit into the output data segment */ - dbwhere = enco_which_dibits[encoder][dbi++]; - dbindex = dbwhere >> 3; - shift = dbwhere & 0x7; - out[dbindex] = - (out[dbindex] & ~(0x03 << shift)) | (dibit << shift); - } /* Symbols fed into one encoder */ - } /* Encoders */ - - // fflush (stdout); -} diff --git a/gr-atsc/src/lib/atsci_viterbi_decoder.h b/gr-atsc/src/lib/atsci_viterbi_decoder.h deleted file mode 100644 index f339ce79a..000000000 --- a/gr-atsc/src/lib/atsci_viterbi_decoder.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_VITERBI_DECODER_H_ -#define _ATSC_VITERBI_DECODER_H_ - -#define USE_SIMPLE_SLICER 0 - -#include <atsc_api.h> -#include <atsc_types.h> -#include <interleaver_fifo.h> - -#if (USE_SIMPLE_SLICER) -#include <atsci_fake_single_viterbi.h> -typedef atsci_fake_single_viterbi single_viterbi_t; -#else -#include <atsci_single_viterbi.h> -typedef atsci_single_viterbi single_viterbi_t; -#endif - -/*! - * \brief fancy, schmancy 12-way interleaved viterbi decoder for ATSC - */ - -class ATSC_API atsci_viterbi_decoder { -public: - static const int NCODERS = 12; - - atsci_viterbi_decoder (); - ~atsci_viterbi_decoder (); - - //! reset all decoder states - void reset (); - - /*! - * Take 12 data segments of soft decisions (floats) and - * produce 12 RS encoded data segments. We work in groups of 12 - * because that's the smallest number of segments that composes a - * single full cycle of the decoder mux. - */ - void decode (atsc_mpeg_packet_rs_encoded out[NCODERS], - const atsc_soft_data_segment in[NCODERS]); - - - - protected: - typedef interleaver_fifo<unsigned char> fifo_t; - - static const int SEGMENT_SIZE = ATSC_MPEG_RS_ENCODED_LENGTH; // 207 - static const int OUTPUT_SIZE = (SEGMENT_SIZE * 12); - static const int INPUT_SIZE = (ATSC_DATA_SEGMENT_LENGTH * 12); - - void decode_helper (unsigned char out[OUTPUT_SIZE], - const float in[INPUT_SIZE]); - - - single_viterbi_t viterbi[NCODERS]; - fifo_t *fifo[NCODERS]; - bool debug; - -}; - - - -#endif /* _ATSC_VITERBI_DECODER_H_ */ diff --git a/gr-atsc/src/lib/atsci_viterbi_gen.cc b/gr-atsc/src/lib/atsci_viterbi_gen.cc deleted file mode 100644 index bff3c4773..000000000 --- a/gr-atsc/src/lib/atsci_viterbi_gen.cc +++ /dev/null @@ -1,267 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <iostream> -#include <stdio.h> - -using std::cerr; - -/* - * Trellis-encode a whole pile of 12 data segments for ATSC. - * This also includes scrambling the data among twelve Trellis encoders. - * - * Input is twelve 207-byte blocks of raw data (Reed-Solomon output that's - * been scrambled up by interleaving with other blocks). - * - * Output is 12 x 208 x 4 bytes, each byte containing a 3-bit symbol. - * The first 4 bytes are the segment sync symbol. - * - Got the first version of Trellis encoder coded. Compiles, but I - didn't realize that each data segment contains an odd number of BITS! - The second data segment in a field starts by pulling bits out of the - middles of the bytes it's encoding. You actually have to read all the - entries in that table on page 59 AND 60 to get it. - - There's a 4-segment asymmetric pattern of bit accesses. - There's a 3-segment asymmetric pattern of muxing encoders. - - The result is there's a 12-segment pattern that repeats throughout - the encoding of a field. So this routine now encodes 12 segments at once. - - This encoding system was either designed by a complete idiot or by - a complete genius. It's highly complex when it could have been very - simple. Now the question is whether - this incredible complexity buys us anything subtle and important. - */ - -#define SEGMENT_SIZE 207 -#define INPUT_SIZE (SEGMENT_SIZE * 12) -#define DIBITS_PER_BYTE 4 -#define EXTRAS (4 * 12) /* FIXME, sync symbols and such */ -#define SYMBOLS_OUT ((INPUT_SIZE * DIBITS_PER_BYTE) + EXTRAS) -#define SEGOF(x) ( (x) / ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE)) -#define SYMOF(x) (((x) % ((SEGMENT_SIZE+1) * DIBITS_PER_BYTE))-4) -#define ENCODERS 12 -#define ENCODER_SEG_BUMP 4 - - -/* Shift counts to bit numbers (high order, low order); 9x entries unused */ -static const int bit1[8] = {1, 99, 3, 98, 5, 97, 7, 96}; -static const int bit2[8] = {0, 99, 2, 98, 4, 97, 6, 96}; - -/* Detailed Debugging */ -int debug_dec = 0; - -/* - * Build indirect data structures to say which symbols go into which - * encoder, and then where the resulting dibits from the encoders go. - */ -int -build_decode_structures (char *fileout) -{ - int retval = 0; - int i; - int encoder; - int trellis_wheredata[ENCODERS]; - unsigned char *symp, *next_sym_seg; - unsigned char symbols[SYMBOLS_OUT]; - int chunk; - int shift; - int skip_encoder_bump; - int *enco_syms[ENCODERS]; - int *enco_dibits[ENCODERS]; - int j; - /* The data structures we'll build and then spit out... */ - int sync_symbol_indices[1000]; - int sync_symbol_indices_max; - int enco_which_syms[ENCODERS][INPUT_SIZE]; - int enco_which_dibits[ENCODERS][INPUT_SIZE]; - int enco_which_max; - #define BIT_PTR(int,shif) (((int) << 3) | ((shif) & 0x7)) - /* Running indices into them as we build 'em... */ - int *syncsyms = sync_symbol_indices; - - /* Start our running pointers at the start of our per-encoder subarrays */ - for (i = 0; i < ENCODERS; i++) { - enco_dibits[i] = enco_which_dibits[i]; - enco_syms[i] = enco_which_syms[i]; - } - - encoder = ENCODERS - ENCODER_SEG_BUMP; - skip_encoder_bump = 0; - symp = symbols; - next_sym_seg = symp; - - for (chunk = 0; - chunk < INPUT_SIZE; - chunk += ENCODERS) { - /* Associate data bytes with the Trellis encoders. - They get loaded or stored in an order that depends on where we are in the - segment sync progress (sigh). - GRR! When the chunk reload happens at the same time as the - segment boundary, we should bump the encoder NOW for the reload, - rather than LATER during the bitshift transition!!! */ - if (symp >= next_sym_seg) { - encoder = (encoder + ENCODER_SEG_BUMP) % ENCODERS; - skip_encoder_bump = 1; - } - - /* Remember where the data bytes are going to go, once we've - accumulated them from the 12 interleaved decoders */ - for (i = 0; i < ENCODERS; i++) { - trellis_wheredata[encoder] = chunk+i; - encoder++; - if (encoder >= ENCODERS) encoder = 0; - } - - for (shift = 6; shift >= 0; shift -= 2) { - - /* Segment boundaries happen to occur on some bitshift transitions. */ - if (symp >= next_sym_seg) { - /* Segment transition. Output a data segment sync symbol, and - mess with the trellis encoder mux. */ - *syncsyms++ = symp - symbols; - symp += 4; - next_sym_seg = symp + (SEGMENT_SIZE * DIBITS_PER_BYTE); - - if (!skip_encoder_bump) - encoder = (encoder + ENCODER_SEG_BUMP) % ENCODERS; - skip_encoder_bump = 0; - } - - /* Now run each of the 12 Trellis encoders to spit out 12 symbols. - Each encoder takes input from the same byte of the chunk, but the - outputs of the encoders come out in various orders. - NOPE -- this is false. The encoders take input from various - bytes of the chunk (which changes at segment sync time), AND - they also come out in various orders. You really do have to - keep separate track of: the datasegs bytes, the encoders, and - the symbol bytes -- because they're all moving with respect to - each other!!! */ - for (i = 0; i < ENCODERS; i++) { - if (debug_dec) - printf ("Seg %ld Symb %3ld Trell %2d Byte %6d Bits %d-%d = ", - (long) SEGOF(symp-symbols), (long) SYMOF(symp-symbols), - encoder, trellis_wheredata[encoder], - bit1[shift], bit2[shift]); - - /* Decoding: Grab symbol, run through decoder, slice dibit into - buffer. */ - /* This symbol goes into this encoder next */ - *(enco_syms[encoder]++) = symp - symbols; - symp++; - /* The next output from this encoder goes into these dibits */ - *(enco_dibits[encoder]++) = BIT_PTR(trellis_wheredata[encoder], shift); - - encoder++; if (encoder >= ENCODERS) encoder = 0; - } /* Encoders */ - } /* Bit shifts */ - -#if 0 - /* Now dump out the chunk of 12 data bytes that the twelve decoders have - accumulated. */ - unsigned char trellis_buffer[ENCODERS]; - unsigned char dibit; - unsigned char symbol; - int save_state; - for (i = 0; i < ENCODERS; i++) { - datasegs [trellis_wheredata[encoder]] = trellis_buffer[encoder]; - encoder++; - if (encoder >= ENCODERS) encoder = 0; - } /* Dumping encoder bytes */ -#endif - } /* Chunks */ - - /* Now print the resulting data structures in C++ */ - - if (!freopen(fileout, "w", stdout)) - return 2; - - printf ("/*\n\ - * atsc_viterbi_mux.cc\n\ - *\n\ - * Data structures for knowing which symbols are fed to which\n\ - * Viterbi decoders, and then where to put the resulting output dibits.\n\ - *\n\ - * Generated by 'atsc_viterbi_gen.cc'.\n\ - */\n\n"); - sync_symbol_indices_max = syncsyms - sync_symbol_indices; - printf ("const unsigned int sync_symbol_indices_max = %d;\n", - sync_symbol_indices_max); - printf ("const unsigned int sync_symbol_indices[%d] = {\n ", - sync_symbol_indices_max); - for (i = 0; i < sync_symbol_indices_max; i++) { - printf ("%d,%s", sync_symbol_indices[i], (7 == i%8)? "\n ": " "); - } - printf ("};\n\n"); - - enco_which_max = enco_dibits[0] - enco_which_dibits[0]; - for (i = 0; i < ENCODERS; i++) - if (enco_which_max != enco_dibits[i] - enco_which_dibits[i]) { - cerr << "Encoder " << i << " has different max_dibits " << - enco_dibits[i] - enco_which_dibits[i] << " than " << enco_which_max; - retval = 3; - } - - printf ("const unsigned int enco_which_max = %d;\n" , enco_which_max); - - printf ("const unsigned int enco_which_syms[%d][%d] = {\n", - ENCODERS, enco_which_max); - for (i = 0; i < ENCODERS; i++) { - printf (" /* %d */\n {", i); - for (j = 0; j < enco_which_max; j++) - printf ("%d,%s", enco_which_syms[i][j], (7 == j%8)? "\n ": " "); - printf ("},\n"); - } - printf ("};\n\n"); - - printf ("const unsigned int enco_which_dibits[%d][%d] = {\n", - ENCODERS, enco_which_max); - for (i = 0; i < ENCODERS; i++) { - printf (" /* %d */\n {", i); - for (j = 0; j < enco_which_max; j++) - printf ("%d,%s", enco_which_dibits[i][j], (7 == j%8)? "\n ": " "); - printf ("},\n"); - } - printf ("};\n\n"); - return retval; -} - -int -usage() -{ - cerr << "atsc_viterbi_gen: Usage:\n"; - cerr << " ./atsc_viterbi_gen -o atsc_viterbi_mux.cc\n"; - cerr << "That's all, folks!\n"; - return 1; -} - - -int -main(int argc, char **argv) -{ - if (argc != 3) return usage(); - if (argv[1][0] != '-' - || argv[1][1] != 'o' - || argv[1][2] != 0 ) return usage(); - return build_decode_structures(argv[2]); -} diff --git a/gr-atsc/src/lib/atsci_vsbtx_lp.cc b/gr-atsc/src/lib/atsci_vsbtx_lp.cc deleted file mode 100644 index 704cd00ca..000000000 --- a/gr-atsc/src/lib/atsci_vsbtx_lp.cc +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsc_consts.h> -#include <atsci_vsbtx_lp.h> -#include <stdexcept> -#include <cmath> -#include <iostream> - -using std::vector; -using std::cerr; -using std::endl; - -// atsc root raised cosine filter, sampling rate = 21.52 MHz -static const float atsc_vsbtx_lp2x[] = { -#include "atsc_vsbtx_lp.dat" -}; - -#define NELEM(x) (sizeof (x) / sizeof ((x)[0])) - -// is a within 5% of target? - -static bool -close_enough_p (double a, double target) -{ - double delta = fabs (target * 0.05); // 5 percent - - return fabs (target - a) <= delta; -} - -vector<float> -atsc_vsbtx_lp::taps (double sampling_freq) -{ - if (close_enough_p (sampling_freq, 2 * ATSC_SYMBOL_RATE)){ - return vector<float>(&atsc_vsbtx_lp2x[0], &atsc_vsbtx_lp2x[NELEM(atsc_vsbtx_lp2x)]); - } - else - throw std::out_of_range ( - "atsc_vsbtx_lp: no pre-designed filter close enough"); -} diff --git a/gr-atsc/src/lib/atsci_vsbtx_lp.dat b/gr-atsc/src/lib/atsci_vsbtx_lp.dat deleted file mode 100644 index 0fa54d42b..000000000 --- a/gr-atsc/src/lib/atsci_vsbtx_lp.dat +++ /dev/null @@ -1,49 +0,0 @@ -/* - * FILTER SPECIFICATION FILE - * FILTER TYPE:LOW PASS 1H - * PASSBAND RIPPLE IN -dB -.0100 - * STOPBAND RIPPLE IN -dB -76.0000 - * PASSBAND CUTOFF FREQUENCY .250000 HERTZ - * STOPBAND CUTOFF FREQUENCY .360000 HERTZ - * SAMPLING FREQUENCY 1.00000 HERTZ - */ -/* - * gain of 2 - */ - 9.23312269151211e-04, - 8.75200144946575e-04, - -2.89211887866259e-03, - 1.31580047309399e-04, - 6.72745611518621e-03, - -5.82943391054869e-03, - -8.86140950024128e-03, - 1.84674616903067e-02, - 1.27039104700089e-03, - -3.39064113795757e-02, - 2.52537783235312e-02, - 3.74889532104135e-02, - -7.35438484698534e-02, - -3.70154529809952e-03, - 1.33745657280087e-01, - -1.12098718993366e-01, - -1.84760546311736e-01, - 5.98605459555984e-01, - 1.20420956425369e+00, - 5.98605459555984e-01, - -1.84760546311736e-01, - -1.12098718993366e-01, - 1.33745657280087e-01, - -3.70154529809952e-03, - -7.35438484698534e-02, - 3.74889532104135e-02, - 2.52537783235312e-02, - -3.39064113795757e-02, - 1.27039104700089e-03, - 1.84674616903067e-02, - -8.86140950024128e-03, - -5.82943391054869e-03, - 6.72745611518621e-03, - 1.31580047309399e-04, - -2.89211887866259e-03, - 8.75200144946575e-04, - 9.23312269151211e-04 diff --git a/gr-atsc/src/lib/atsci_vsbtx_lp.h b/gr-atsc/src/lib/atsci_vsbtx_lp.h deleted file mode 100644 index b892641c9..000000000 --- a/gr-atsc/src/lib/atsci_vsbtx_lp.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _ATSC_VSBTX_LP_H_ -#define _ATSC_VSBTX_LP_H_ - -#include <atsc_api.h> -#include <gr_fir_builder.h> - -class ATSC_API atsc_vsbtx_lp : public gr_fir_builder -{ -public: - virtual std::vector<float> taps (double sampling_freq); -}; - - - -#endif /* _ATSC_VSBTX_LP_H_ */ diff --git a/gr-atsc/src/lib/convolutional_interleaver.h b/gr-atsc/src/lib/convolutional_interleaver.h deleted file mode 100644 index 35a31d487..000000000 --- a/gr-atsc/src/lib/convolutional_interleaver.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _CONVOLUTIONAL_INTERLEAVER_H_ -#define _CONVOLUTIONAL_INTERLEAVER_H_ - -#include <vector> -#include <interleaver_fifo.h> -#include <assert.h> - -/*! - * \brief template class for generic convolutional interleaver - */ - -template<class symbol_type> -class convolutional_interleaver { - public: - - convolutional_interleaver (bool interleave_p, int nbanks, int fifo_size_incr); - virtual ~convolutional_interleaver (); - - //! reset interleaver (flushes contents and resets commutator) - void reset (); - - //! sync interleaver (resets commutator, but doesn't flush fifos) - void sync () { m_commutator = 0; } - - //! return end to end delay in symbols (delay through concatenated interleaver / deinterleaver) - int end_to_end_delay (); - - //! transform a single symbol - symbol_type transform (symbol_type input){ - symbol_type retval = m_fifo[m_commutator]->stuff (input); - m_commutator++; - if (m_commutator >= m_nbanks) - m_commutator = 0; - return retval; - } - - //! transform a bunch of symbols - void transform (symbol_type *out, const symbol_type *in, int nsymbols); - -protected: - int m_commutator; - int m_nbanks; - int m_fifo_size_incr; - std::vector<interleaver_fifo<symbol_type> *> m_fifo; -}; - -template<class symbol_type> -convolutional_interleaver<symbol_type>::convolutional_interleaver ( - bool interleave_p, - int nbanks, - int fifo_size_incr) -{ - assert (nbanks >= 1); - assert (fifo_size_incr >= 1); - - m_nbanks = nbanks; - m_fifo_size_incr = fifo_size_incr; - - m_fifo.resize (nbanks); - - if (interleave_p){ // configure as interleaver - for (int i = 0; i < nbanks; i++) - m_fifo[i] = new interleaver_fifo<symbol_type>(i * fifo_size_incr); - } - else { // configure as de-interleaver - for (int i = 0; i < nbanks; i++) - m_fifo[nbanks - 1 - i] = new interleaver_fifo<symbol_type>(i * fifo_size_incr); - } - sync (); -} - -template<class symbol_type> -convolutional_interleaver<symbol_type>::~convolutional_interleaver () -{ - for (int i = 0; i < m_nbanks; i++) - delete m_fifo[i]; -} - -template<class symbol_type> void -convolutional_interleaver<symbol_type>::reset () -{ - sync (); - for (int i = 0; i < m_nbanks; i++) - m_fifo[i]->reset (); -} - -template<class symbol_type> int -convolutional_interleaver<symbol_type>::end_to_end_delay () -{ - int m = m_nbanks * m_fifo_size_incr; - return m * (m_nbanks - 1); -} - -template<class symbol_type> void -convolutional_interleaver<symbol_type>::transform (symbol_type *out, - const symbol_type *in, - int nsymbols) -{ - // we may want to unroll this a couple of times... - for (int i = 0; i < nsymbols; i++) - out[i] = transform (in[i]); -} - -#endif /* _CONVOLUTIONAL_INTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/create_atsci_equalizer.cc b/gr-atsc/src/lib/create_atsci_equalizer.cc deleted file mode 100644 index f784116d2..000000000 --- a/gr-atsc/src/lib/create_atsci_equalizer.cc +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <create_atsci_equalizer.h> -#include <atsci_equalizer_nop.h> -#include <atsci_equalizer_lms.h> -#include <atsci_equalizer_lms2.h> - -atsci_equalizer * -create_atsci_equalizer_nop () -{ - return new atsci_equalizer_nop (); -} - -atsci_equalizer * -create_atsci_equalizer_lms () -{ - return new atsci_equalizer_lms (); -} - -atsci_equalizer * -create_atsci_equalizer_lms2 () -{ - return new atsci_equalizer_lms2 (); -} diff --git a/gr-atsc/src/lib/create_atsci_equalizer.h b/gr-atsc/src/lib/create_atsci_equalizer.h deleted file mode 100644 index b291e0bbd..000000000 --- a/gr-atsc/src/lib/create_atsci_equalizer.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _CREATE_ATSC_EQUALIZER_H_ -#define _CREATE_ATSC_EQUALIZER_H_ - -#include <atsc_api.h> - -class atsci_equalizer; - -ATSC_API atsci_equalizer *create_atsci_equalizer_nop (); -ATSC_API atsci_equalizer *create_atsci_equalizer_lms (); -ATSC_API atsci_equalizer *create_atsci_equalizer_lms2 (); - -#endif /* _CREATE_ATSC_EQUALIZER_H_ */ diff --git a/gr-atsc/src/lib/create_atsci_fs_checker.cc b/gr-atsc/src/lib/create_atsci_fs_checker.cc deleted file mode 100644 index 5b9a4092c..000000000 --- a/gr-atsc/src/lib/create_atsci_fs_checker.cc +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <create_atsci_fs_checker.h> -#include <atsci_fs_checker_naive.h> - -atsci_fs_checker * -create_atsci_fs_checker () -{ - return new atsci_fs_checker_naive (); -} diff --git a/gr-atsc/src/lib/create_atsci_fs_checker.h b/gr-atsc/src/lib/create_atsci_fs_checker.h deleted file mode 100644 index 42119a6d4..000000000 --- a/gr-atsc/src/lib/create_atsci_fs_checker.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _CREATE_ATSC_FS_CHECKER_H_ -#define _CREATE_ATSC_FS_CHECKER_H_ - -#include <atsc_api.h> - -class atsci_fs_checker; - -/*! - * Factory that creates appropriate atsci_fs_checker - */ -ATSC_API atsci_fs_checker *create_atsci_fs_checker (); - - -#endif /* _CREATE_ATSC_FS_CHECKER_H_ */ diff --git a/gr-atsc/src/lib/create_atsci_fs_correlator.cc b/gr-atsc/src/lib/create_atsci_fs_correlator.cc deleted file mode 100644 index 414b2d7f4..000000000 --- a/gr-atsc/src/lib/create_atsci_fs_correlator.cc +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <create_atsci_fs_correlator.h> -#include <atsci_fs_correlator_naive.h> - -atsci_fs_correlator * -create_atsci_fs_correlator () -{ - return new atsci_fs_correlator_naive (); -} diff --git a/gr-atsc/src/lib/create_atsci_fs_correlator.h b/gr-atsc/src/lib/create_atsci_fs_correlator.h deleted file mode 100644 index b9b037403..000000000 --- a/gr-atsc/src/lib/create_atsci_fs_correlator.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _CREATE_ATSC_FS_CORRELATOR_H_ -#define _CREATE_ATSC_FS_CORRELATOR_H_ - -#include <atsc_api.h> - -class atsci_fs_correlator; - -/*! - * Factory that creates appropriate atsci_fs_correlator - */ -ATSC_API atsci_fs_correlator *create_atsci_fs_correlator (); - - -#endif /* _CREATE_ATSC_FS_CORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/fpll_btloop_coupling.h b/gr-atsc/src/lib/fpll_btloop_coupling.h deleted file mode 100644 index 9a1a99d86..000000000 --- a/gr-atsc/src/lib/fpll_btloop_coupling.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _FPLL_BTLOOP_COUPLING_H_ -#define _FPLL_BTLOOP_COUPLING_H_ - -/*! - * Magic coupling constant between GrAtscFPLL and GrAtscBitTimingLoop. - * Trust me, you don't want to mess with this. - * - * The agc block buried in the FPLL indirectly sets the level of the input - * to the bit timing loop. The bit timing loop's convergence properties - * depend on the the mean amplitude of it's input. This constant ties - * them together such that you can tweak the input level of the bit timing loop - * (somewhat) without screwing everything. - */ - -static const float FPLL_BTLOOP_COUPLING_CONST = 3.125; - -#endif /* _FPLL_BTLOOP_COUPLING_H_ */ diff --git a/gr-atsc/src/lib/gen_encoder.py b/gr-atsc/src/lib/gen_encoder.py deleted file mode 100755 index 6c8fabf7a..000000000 --- a/gr-atsc/src/lib/gen_encoder.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2002 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -def output(input, state): - x2 = (input >> 1) & 0x1 - x1 = (input >> 0) & 0x1 - s = (state >> 2) & 0x1 - t = (state >> 1) & 0x1 - u = (state >> 0) & 0x1 - - z0 = u - z1 = x1 - z2 = x2 ^ s - return (z2 << 2) | (z1 << 1) | z0 - - -def next_state(input, state): - x2 = (input >> 1) & 0x1 - x1 = (input >> 0) & 0x1 - s0 = (state >> 2) & 0x1 - t0 = (state >> 1) & 0x1 - u0 = (state >> 0) & 0x1 - - s1 = x2 ^ s0 - t1 = u0 - u1 = t0 ^ x1 - - return (s1 << 2) | (t1 << 1) | u1 - -print "@@@ NEXT @@@" - -for i in range (32): - state = (i >> 2) & 0x7 - input = i & 0x3 - print next_state (input, state) - - -print "@@@ OUTPUT @@@" - -for i in range (32): - state = (i >> 2) & 0x7 - input = i & 0x3 - print output (input, state) - diff --git a/gr-atsc/src/lib/interleaver_fifo.h b/gr-atsc/src/lib/interleaver_fifo.h deleted file mode 100644 index cacac85a3..000000000 --- a/gr-atsc/src/lib/interleaver_fifo.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _INTERLEAVER_FIFO_H_ -#define _INTERLEAVER_FIFO_H_ - - -#include <interleaver_fifo.h> -#include <string.h> - -/*! - * \brief template class for interleaver fifo - */ - -template<class symbol_type> -class interleaver_fifo { - public: - - interleaver_fifo (unsigned int size); - ~interleaver_fifo (); - - //! reset interleaver (flushes contents and resets commutator) - void reset (); - - //! stuff a symbol into the fifo and return the oldest - symbol_type stuff (symbol_type input){ - if (m_size == 0) - return input; - - symbol_type retval = m_fifo[m_position]; - m_fifo[m_position] = input; - m_position++; - if (m_position >= m_size) - m_position = 0; - - return retval; - } - -protected: - unsigned int m_size; - unsigned int m_position; - symbol_type *m_fifo; -}; - -template<class symbol_type> -interleaver_fifo<symbol_type>::interleaver_fifo (unsigned int size) -{ - m_size = size; - m_position = 0; - m_fifo = new symbol_type[size]; - memset (m_fifo, 0, m_size * sizeof (symbol_type)); -} - -template<class symbol_type> -interleaver_fifo<symbol_type>::~interleaver_fifo () -{ - delete [] m_fifo; -} - -template<class symbol_type> void -interleaver_fifo<symbol_type>::reset () -{ - m_position = 0; - memset (m_fifo, 0, m_size * sizeof (symbol_type)); -} - -#endif /* _INTERLEAVER_FIFO_H_ */ diff --git a/gr-atsc/src/lib/plinfo.cc b/gr-atsc/src/lib/plinfo.cc deleted file mode 100644 index 30e192907..000000000 --- a/gr-atsc/src/lib/plinfo.cc +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <atsc_types.h> -#include <assert.h> - -void -plinfo::delay (plinfo &out, const plinfo &in, int nsegs_of_delay) -{ - assert (in.regular_seg_p ()); - assert (nsegs_of_delay >= 0); - - int s = in.segno (); - if (in.in_field2_p ()) - s += ATSC_DSEGS_PER_FIELD; - - s -= nsegs_of_delay; - if (s < 0) - s += 2 * ATSC_DSEGS_PER_FIELD; - - assert (0 <= s && s < 2 * ATSC_DSEGS_PER_FIELD); - - if (s < ATSC_DSEGS_PER_FIELD) - out.set_regular_seg (false, s); // field 1 - else - out.set_regular_seg (true, s - ATSC_DSEGS_PER_FIELD); // field 2 -} - -void -plinfo::sanity_check (const plinfo &x) -{ - // basic sanity checks... - assert (x.segno () >= 0); - assert (x.segno () < (unsigned) ATSC_DSEGS_PER_FIELD); - assert ((x.flags () & ~0x3f) == 0); - - assert (x.regular_seg_p () ^ x.field_sync_p ()); - assert ((x.segno () != 0) ^ x.first_regular_seg_p ()); -} - diff --git a/gr-atsc/src/lib/qa_atsci.cc b/gr-atsc/src/lib/qa_atsci.cc deleted file mode 100644 index 8dc940bcb..000000000 --- a/gr-atsc/src/lib/qa_atsci.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -/* - * This class gathers together all the test cases for the atsc - * directory into a single test suite. As you create new test cases, - * add them here. - */ - -#include <qa_atsci.h> -#include <qa_atsci_randomizer.h> -#include <qa_atsci_reed_solomon.h> -#include <qa_interleaver_fifo.h> -#include <qa_convolutional_interleaver.h> -#include <qa_atsci_data_interleaver.h> -#include <qa_atsci_basic_trellis_encoder.h> -#include <qa_atsci_sliding_correlator.h> -#include <qa_atsci_fake_single_viterbi.h> -#include <qa_atsci_single_viterbi.h> -#include <qa_atsci_trellis_encoder.h> -#include <qa_atsci_viterbi_decoder.h> -#include <qa_atsci_fs_correlator.h> -#include <qa_atsci_equalizer_nop.h> - -CppUnit::TestSuite * -qa_atsc::suite () -{ - CppUnit::TestSuite *s = new CppUnit::TestSuite ("atsc"); - - s->addTest (qa_atsci_randomizer::suite ()); - s->addTest (qa_atsci_reed_solomon::suite ()); - s->addTest (qa_interleaver_fifo::suite ()); - s->addTest (qa_convolutional_interleaver::suite ()); - s->addTest (qa_atsci_data_interleaver::suite ()); - s->addTest (qa_atsci_basic_trellis_encoder::suite ()); - s->addTest (qa_atsci_sliding_correlator::suite ()); - s->addTest (qa_atsci_fake_single_viterbi::suite ()); - s->addTest (qa_atsci_single_viterbi::suite ()); - s->addTest (qa_atsci_trellis_encoder::suite ()); - s->addTest (qa_atsci_viterbi_decoder::suite ()); - s->addTest (qa_atsci_fs_correlator::suite ()); - s->addTest (qa_atsci_equalizer_nop::suite ()); - - return s; -} diff --git a/gr-atsc/src/lib/qa_atsci.h b/gr-atsc/src/lib/qa_atsci.h deleted file mode 100644 index 86aca2d32..000000000 --- a/gr-atsc/src/lib/qa_atsci.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_H_ -#define _QA_ATSC_H_ - -#include <cppunit/TestSuite.h> - -//! collect all the tests for the dtv directory - -class qa_atsc { - public: - //! return suite of tests for all of dtv directory - static CppUnit::TestSuite *suite (); -}; - - -#endif /* _QA_ATSC_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.cc b/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.cc deleted file mode 100644 index 4a8137424..000000000 --- a/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <qa_atsci_basic_trellis_encoder.h> -#include <stdlib.h> -#include <stdio.h> - -void -qa_atsci_basic_trellis_encoder::t0 () -{ - const static unsigned char in[14] = { - 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 2, 3 - }; - - const static unsigned char expected_out[14] = { - 0, 2, 3, 1, 1, 3, 0, 1, 2, 0, 0, 2, 5, 2 - }; - - for (unsigned i = 0; i < sizeof (in); i++) - CPPUNIT_ASSERT_EQUAL ((int) expected_out[i], enc.encode (in[i])); - - // reset encoder and test again. - - enc.reset (); - for (unsigned i = 0; i < sizeof (in); i++) - CPPUNIT_ASSERT_EQUAL ((int) expected_out[i], enc.encode (in[i])); -} - - -void -qa_atsci_basic_trellis_encoder::t1 () -{ - // Print data to externally check distribution. - // looks OK. -#if 0 - srandom (27); - - for (int i = 0; i < 8192; i++){ - int t = (random () >> 10) & 0x3; // 2 random bits - printf ("%d %d\n", t, enc.encode (t)); - } -#endif -} diff --git a/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.h b/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.h deleted file mode 100644 index e413d0d3d..000000000 --- a/gr-atsc/src/lib/qa_atsci_basic_trellis_encoder.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _QA_ATSC_BASIC_TRELLIS_ENCODER_H_ -#define _QA_ATSC_BASIC_TRELLIS_ENCODER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <atsci_basic_trellis_encoder.h> - -class qa_atsci_basic_trellis_encoder : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_atsci_basic_trellis_encoder); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_basic_trellis_encoder enc; - - void t0 (); - void t1 (); -}; - -#endif /* _QA_ATSC_BASIC_TRELLIS_ENCODER_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_data_interleaver.cc b/gr-atsc/src/lib/qa_atsci_data_interleaver.cc deleted file mode 100644 index 6069e8680..000000000 --- a/gr-atsc/src/lib/qa_atsci_data_interleaver.cc +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cppunit/TestAssert.h> -#include <qa_atsci_data_interleaver.h> -#include <string.h> - - -/*! - * write an easy to identify pattern into the packet - */ -void -qa_atsci_data_interleaver::init_test_packet (int counter, - atsc_mpeg_packet_rs_encoded &out) -{ - out.data[0] = 0xf0; - out.data[1] = 0xff; - out.data[2] = (counter >> 8) & 0xff; - out.data[3] = counter & 0xff; - - for (int i = 4; i < 205; i++) - out.data[i] = i; - - out.data[205] = 0xa0; - out.data[206] = 0xaf; -} - -void -qa_atsci_data_interleaver::print_packet (FILE *fp, - int frame_number, - int field_number, - int segment_number, - const atsc_mpeg_packet_rs_encoded &in) -{ - fprintf (fp, "%04d:%d:%03d ", frame_number, field_number, segment_number); - - const unsigned char *p = &in.data[0]; - for (int i = 0; i < 8; i++) - fprintf (fp, "%02X", p[i]); - - fprintf (fp, " "); - p = &in.data[8]; - for (int i = 0; i < 8; i++) - fprintf (fp, "%02X", p[i]); - - - fprintf (fp, " ... "); - p = &in.data[191]; - for (int i = 0; i < 8; i++) - fprintf (fp, "%02X", p[i]); - - fprintf (fp, " "); - p = &in.data[199]; - for (int i = 0; i < 8; i++) - fprintf (fp, "%02X", p[i]); - - fprintf (fp, "\n"); -} - -void -qa_atsci_data_interleaver::chk_assert (const atsc_mpeg_packet_rs_encoded &expected, - const atsc_mpeg_packet_rs_encoded &actual) -{ - if (expected == actual) - return; - - FILE *fp = stderr; - - fprintf (fp, "Expected: "); - print_packet (fp, 0, 0, 0, expected); - - fprintf (fp, "Actual: "); - print_packet (fp, 0, 0, 0, actual); - - CPPUNIT_ASSERT (expected == actual); -} - -void -qa_atsci_data_interleaver::t0 () -{ - int counter = 0; - atsc_mpeg_packet_rs_encoded in, enc, out; - atsc_mpeg_packet_rs_encoded zero; - - memset (&zero, 0, sizeof (zero)); - - for (int frame = 0; frame < 4; frame++){ - for (int field = 0; field < 2; field++){ - for (int segment = 0; segment < 312; segment++, counter++){ - - // build test packet - init_test_packet (counter, in); - in.pli.set_regular_seg (field == 1, segment); - - // interleave it - outbound.interleave (enc, in); - - // deinterleave it - inbound.deinterleave (out, enc); - - if (counter < 52) - // CPPUNIT_ASSERT (zero == out); - chk_assert (zero, out); - - else if (counter >= 52){ - atsc_mpeg_packet_rs_encoded expected; - init_test_packet (counter - 52, expected); - // CPPUNIT_ASSERT (expected == out); - chk_assert (expected, out); - } - } - } - } -} - -// -// Note, this assumes that the interleaver and deinterleaver -// have the state left by t0. -// -// This test pushes crap into the interleaver, and then confirms that -// the deinterleaver recovers. This would be part of what you'd see -// on a channel change. -// - -void -qa_atsci_data_interleaver::t1 () -{ - int counter = 0; - atsc_mpeg_packet_rs_encoded in, enc, out; - atsc_mpeg_packet_rs_encoded zero; - - memset (&zero, 0, sizeof (zero)); - - static const int NCRAP = 13; - - // push NCRAP segments of crap into the interleaver, - // but don't change the deinterleaver state - - for (int i = 0; i < NCRAP; i++){ - init_test_packet (i + 2758, in); - in.pli.set_regular_seg (false, i + 5); - - outbound.interleave (enc, in); - } - - // now run the normal test. - // we should get good segments after NCRAP + 52 - - int starting_counter = 3141; - counter = starting_counter; - - for (int frame = 0; frame < 4; frame++){ - for (int field = 0; field < 2; field++){ - for (int segment = 0; segment < 312; segment++, counter++){ - - // build test packet - init_test_packet (counter, in); - in.pli.set_regular_seg (field == 1, segment); - - // interleave it - outbound.interleave (enc, in); - - // deinterleave it - inbound.deinterleave (out, enc); - - if (counter < starting_counter + 52 + NCRAP){ - // don't care... - } - else if (counter >= starting_counter + 52 + NCRAP){ - atsc_mpeg_packet_rs_encoded expected; - init_test_packet (counter - 52, expected); - // CPPUNIT_ASSERT (expected == out); - chk_assert (expected, out); - } - } - } - } -} diff --git a/gr-atsc/src/lib/qa_atsci_data_interleaver.h b/gr-atsc/src/lib/qa_atsci_data_interleaver.h deleted file mode 100644 index 6b9408c9a..000000000 --- a/gr-atsc/src/lib/qa_atsci_data_interleaver.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_DATA_INTERLEAVER_H_ -#define _QA_ATSC_DATA_INTERLEAVER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> -#include <stdio.h> - -#include <atsci_data_interleaver.h> - -class qa_atsci_data_interleaver : public CppUnit::TestCase { - public: - - void setUp (){ - outbound.reset (); - inbound.reset (); - } - - CPPUNIT_TEST_SUITE (qa_atsci_data_interleaver); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_data_interleaver outbound; - atsci_data_deinterleaver inbound; - - void t0 (); - void t1 (); - - void init_test_packet (int counter, atsc_mpeg_packet_rs_encoded &out); - void print_packet (FILE *fp, int frame_number, int field_number, int segment_number, - const atsc_mpeg_packet_rs_encoded &in); - void chk_assert (const atsc_mpeg_packet_rs_encoded &expected, - const atsc_mpeg_packet_rs_encoded &actual); -}; - - -#endif /* _QA_ATSC_DATA_INTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc b/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc deleted file mode 100644 index 7039eeb8e..000000000 --- a/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <qa_atsci_equalizer_nop.h> -#include <atsci_equalizer.h> -#include <atsci_equalizer_nop.h> -#include <atsci_pnXXX.h> -#include <atsc_types.h> -#include <cppunit/TestAssert.h> -#include <assert.h> -#include <iostream> -#include <string.h> - -using std::cerr; -using std::endl; - - -static const int SYMBOLS_PER_FIELD = (ATSC_DSEGS_PER_FIELD + 1) * ATSC_DATA_SEGMENT_LENGTH; -static const int PAD = 500; -static const int NFIELDS = 2; - -static const int INPUT_SIZE = PAD + (NFIELDS * SYMBOLS_PER_FIELD); - -static float -bin_map (int bit) -{ - return bit ? +5 : -5; -} - -static void -init_tags (atsc::syminfo *tags, int segnum, int fieldnum) -{ - int i; - - for (i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++){ - tags[i].symbol_num = i; - tags[i].segment_num = segnum; - tags[i].field_num = fieldnum; - tags[i].valid = 1; - } -} - -static void -init_data_seg (float *p, atsc::syminfo *tags, int v, int segnum, int fieldnum) -{ - init_tags (tags, segnum, fieldnum); - - int i = 0; - - p[i++] = bin_map (1); // data segment sync pulse - p[i++] = bin_map (0); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - for (; i < ATSC_DATA_SEGMENT_LENGTH; i++) - p[i] = (float) (i + v); -} - -static void -init_field_sync_tags (atsc::syminfo *tags, int fieldnum) -{ - init_tags (tags, atsc::SI_FIELD_SYNC_SEGMENT_NUM, fieldnum); -} - -static void -init_field_sync_common (float *p, int mask) - -{ - int i = 0; - - p[i++] = bin_map (1); // data segment sync pulse - p[i++] = bin_map (0); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map (atsc_pn511[j]); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map (atsc_pn63[j] ^ mask); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map (atsc_pn63[j]); - - p[i++] = bin_map (0); // 24 bits of VSB8 mode identifiera - p[i++] = bin_map (0); - p[i++] = bin_map (0); - p[i++] = bin_map (0); - - p[i++] = bin_map (1); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - p[i++] = bin_map (0); - - p[i++] = bin_map (0); - p[i++] = bin_map (1); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - p[i++] = bin_map (1); - p[i++] = bin_map (1); - p[i++] = bin_map (1); - p[i++] = bin_map (1); - - p[i++] = bin_map (0); - p[i++] = bin_map (1); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - - p[i++] = bin_map (1); - p[i++] = bin_map (0); - p[i++] = bin_map (1); - p[i++] = bin_map (0); - - - for (int j = 0; j < 92; j++) // 92 more bits - p[i++] = bin_map (atsc_pn63[j % 63]); - - // now copy the last 12 symbols of the previous segment - // bogus fill - - for (int j = 0; j < 12; j++) - p[i++] = bin_map (j & 1); - - assert (i == ATSC_DATA_SEGMENT_LENGTH); -} - -void -qa_atsci_equalizer_nop::setUp () -{ - eq = new atsci_equalizer_nop (); -} - -void -qa_atsci_equalizer_nop::tearDown () -{ - delete eq; - eq = 0; -} - -static void -setup_test_data (float *data, atsc::syminfo *tags) -{ - int mask = 0; - int i = 0; - - for (i = 0; i < PAD; i++){ - data[i] = (float) i; - tags[i].symbol_num = 13 + i; - tags[i].segment_num = 17; - tags[i].field_num = 0; - tags[i].valid = 1; - } - - for (int nfields = 0; nfields < NFIELDS; nfields++){ - init_field_sync_common (&data[i], mask); - init_field_sync_tags (&tags[i], mask); - i += ATSC_DATA_SEGMENT_LENGTH; - - for (int segnum = 0; segnum < 312; segnum++){ - init_data_seg (&data[i], &tags[i], i, segnum, mask); - i += ATSC_DATA_SEGMENT_LENGTH; - } - mask ^= 1; - } - assert (i == INPUT_SIZE); -} - -void -qa_atsci_equalizer_nop::t0 () -{ - // these are dynamically allocated because they are bigger - // than the default stack limit. - - float *input_data = new float[INPUT_SIZE]; - atsc::syminfo *input_tags = new atsc::syminfo[INPUT_SIZE]; - float *output_data = new float[INPUT_SIZE]; - - try { - - memset (input_data, 0, sizeof (input_data)); - memset (input_tags, 0, sizeof (input_tags)); - memset (output_data, 0, sizeof (output_data)); - - setup_test_data (input_data, input_tags); - - eq->filter (input_data, input_tags, - output_data, INPUT_SIZE); - - - // now check that data values got copied correctly - - for (int i = 0; i < INPUT_SIZE; i++){ - - if (input_tags[i].segment_num == atsc::SI_FIELD_SYNC_SEGMENT_NUM){ - // ignore entire field sync data segment - } - else if (input_tags[i].symbol_num <= 3){ - // ignore 4 symbols of data segment sync (+5, -5, -5, +5) - } - else { - if (output_data[i] != (float) i){ - cerr << "output_data[" << i << "] == " << output_data[i] << endl; - CPPUNIT_ASSERT_DOUBLES_EQUAL ((float) i, output_data[i], 1e-6); - } - } - } - - delete [] input_data; - delete [] input_tags; - delete [] output_data; - } - - catch ( ... ){ - delete [] input_data; - delete [] input_tags; - delete [] output_data; - } -} - -void -qa_atsci_equalizer_nop::t1 () -{ - // think of another test... -} diff --git a/gr-atsc/src/lib/qa_atsci_equalizer_nop.h b/gr-atsc/src/lib/qa_atsci_equalizer_nop.h deleted file mode 100644 index 244daf8b3..000000000 --- a/gr-atsc/src/lib/qa_atsci_equalizer_nop.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_EQUALIZER_NOP_H_ -#define _QA_ATSC_EQUALIZER_NOP_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class atsci_equalizer; - -class qa_atsci_equalizer_nop : public CppUnit::TestCase { -private: - atsci_equalizer *eq; - -public: - void setUp (); - void tearDown (); - - CPPUNIT_TEST_SUITE (qa_atsci_equalizer_nop); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - -private: - - void t0 (); - void t1 (); - -}; - -#endif /* _QA_ATSC_EQUALIZER_NOP_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc b/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc deleted file mode 100644 index 2cc646daf..000000000 --- a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <stdio.h> -#include <atsci_fake_single_viterbi.h> -#include <qa_atsci_fake_single_viterbi.h> -#include <random.h> -#include <string.h> - - -static const int NTRIALS = 50; -static const int MAXERRORS = 10; -static const int NN = 200; - -static const int MAXDIBIT = 3; - -void -qa_atsci_fake_single_viterbi::encode_block (unsigned char *out, unsigned char *in, - unsigned int n) -{ - for (unsigned int i = 0; i < n; i++) { - out[i] = encoder.encode(in[i]); - } -} - - -void -qa_atsci_fake_single_viterbi::decode_block (unsigned char *out, unsigned char *in, - unsigned int n) -{ - for (unsigned int i = 0; i < n; i++) { - out[i] = decoder.decode ((2*in[i]-7) + noise ()); - } -} - -float -qa_atsci_fake_single_viterbi::noise () -{ -#if 1 - return 2.0 * ((float) random () / RANDOM_MAX - 0.5);; -#else - return 0; -#endif -} - -void -qa_atsci_fake_single_viterbi::t0 () -{ - static const int blocklen = NN; - unsigned char in[blocklen]; - unsigned char enc[blocklen]; - unsigned char out[blocklen]; - int decoder_errors = 0; - int delay = decoder.delay (); - int i; - - // printf (" Delay is %d.\n", delay); - - srandom (27); // reproducable sequence of "random" values - - for (int nt = 0; nt < NTRIALS; nt++){ - - // load block with random data and encode - - for (i = 0; i < (blocklen-delay); i++) - in[i] = random () & MAXDIBIT; - for ( ; i < blocklen; i++) - in[i] = 0; /* To empty the delay buffers */ - - encoder.reset (); - encode_block (enc, in, blocklen); - - decoder.reset (); - - // decode the block - decode_block (out, enc, blocklen); - - // int offset = delay/4; - int offset = 2; - bool differs = (memcmp (in+offset, - out+delay+offset, blocklen-(delay+offset))); - - // initial values after reset are 0 - for (i = 0; i < delay; i++){ - if (out[i] != 0) - printf (" initial output at %i is %X, not 0\n", - i, out[i]); - } - - if (differs){ - printf (" incorrect data, trial #%d\n", nt); - - printf ("\n Erroneous result dibits:"); - for (int erri = 0; erri < (NN-delay); erri++) { - if (in[erri] != out[erri+delay]) - printf (" %d", erri); - } - printf ("\n In: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", in[erri]); - } - printf ("\n Out: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", out[erri+delay]); - } - printf ("\n Errs:"); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %c", (in[erri] != out[erri+delay])? '*': ' '); - } - printf ("\n THIS IS A REAL PROBLEM.\n"); - decoder_errors++; - } - } - - printf (" Summary: %d decoder errors out of %d trials.\n", - decoder_errors, NTRIALS); - - CPPUNIT_ASSERT (decoder_errors == 0); -} - diff --git a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.h b/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.h deleted file mode 100644 index 47805952c..000000000 --- a/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_FAKE_SINGLE_VITERBI_H -#define _QA_ATSC_FAKE_SINGLE_VITERBI_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <atsci_fake_single_viterbi.h> -#include <atsci_basic_trellis_encoder.h> - -class qa_atsci_fake_single_viterbi : public CppUnit::TestCase { - private: - atsci_fake_single_viterbi decoder; - atsci_basic_trellis_encoder encoder; - - CPPUNIT_TEST_SUITE (qa_atsci_fake_single_viterbi); - CPPUNIT_TEST (t0); - CPPUNIT_TEST_SUITE_END (); - - private: - - void t0 (); - - void encode_block(unsigned char *out, unsigned char *in, unsigned n); - void decode_block(unsigned char *out, unsigned char *in, unsigned n); - float noise (); - -}; - -#endif /* _QA_ATSC_FAKE_SINGLE_VITERBI_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_fs_correlator.cc b/gr-atsc/src/lib/qa_atsci_fs_correlator.cc deleted file mode 100644 index 591c84050..000000000 --- a/gr-atsc/src/lib/qa_atsci_fs_correlator.cc +++ /dev/null @@ -1,255 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <qa_atsci_fs_correlator.h> -#include <atsci_fs_correlator.h> -#include <create_atsci_fs_correlator.h> -#include <atsci_sync_tag.h> -#include <stdlib.h> -#include <algorithm> -#include <atsci_pnXXX.h> -#include <atsc_types.h> -#include <cppunit/TestAssert.h> -#include <assert.h> -#include <random.h> - - -static float -uniform () -{ - return 2.0 * ((float) random () / RANDOM_MAX - 0.5); // uniformly (-1, 1) -} - - -static float -bin_map (int bit) -{ - return bit ? +5 : -5; -} - -static void -init_field_sync_common (float *p, int mask) - -{ - int i = 0; - - p[i++] = bin_map(1); // data segment sync pulse - p[i++] = bin_map(0); - p[i++] = bin_map(0); - p[i++] = bin_map(1); - - for (int j = 0; j < 511; j++) // PN511 - p[i++] = bin_map(atsc_pn511[j]); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map(atsc_pn63[j]); - - for (int j = 0; j < 63; j++) // PN63, toggled on field 2 - p[i++] = bin_map(atsc_pn63[j] ^ mask); - - for (int j = 0; j < 63; j++) // PN63 - p[i++] = bin_map(atsc_pn63[j]); - - p[i++] = bin_map(0); // 24 bits of VSB8 mode identifiera - p[i++] = bin_map(0); - p[i++] = bin_map(0); - p[i++] = bin_map(0); - - p[i++] = bin_map(1); - p[i++] = bin_map(0); - p[i++] = bin_map(1); - p[i++] = bin_map(0); - - p[i++] = bin_map(0); - p[i++] = bin_map(1); - p[i++] = bin_map(0); - p[i++] = bin_map(1); - - p[i++] = bin_map(1); - p[i++] = bin_map(1); - p[i++] = bin_map(1); - p[i++] = bin_map(1); - - p[i++] = bin_map(0); - p[i++] = bin_map(1); - p[i++] = bin_map(0); - p[i++] = bin_map(1); - - p[i++] = bin_map(1); - p[i++] = bin_map(0); - p[i++] = bin_map(1); - p[i++] = bin_map(0); - - - for (int j = 0; j < 92; j++) // 92 more bits - p[i++] = bin_map(atsc_pn63[j % 63]); - - // now copy the last 12 symbols of the previous segment - // bogus pad for this test... - - for (int j = 0; j < 12; j++) - p[i++] = bin_map(j & 1); - - assert (i == ATSC_DATA_SEGMENT_LENGTH); -} - -inline static void -init_field_sync_1 (float *s) -{ - init_field_sync_common (s, 0); -} - -inline static void -init_field_sync_2 (float *s) -{ - init_field_sync_common (s, 1); -} - -static void -cause_errors (float *p, int nerrs1, int nerrs2) -{ - static const int offset1 = 4; // offset to PN 511 - static const int offset2 = 578; // offset to 2nd PN 63 - - for (int i = 0; i < nerrs1; i++){ // flip nerrs1 bits in PN 511 - p[i + offset1] = -p[i + offset1]; - } - - for (int i = 0; i < nerrs2; i++){ // flip nerrs2 bits in PN 63 - p[i + offset2] = -p[i + offset2]; - } -} - - -void -qa_atsci_fs_correlator::setUp () -{ - fsc = create_atsci_fs_correlator (); -} - -void -qa_atsci_fs_correlator::tearDown () -{ - delete fsc; - fsc = 0; -} - - -// check sample fifo - -void -qa_atsci_fs_correlator::t0 () -{ - int delay = fsc->delay (); - int i; - float output_sample, output_tag; - - for (i = 0; i < delay; i++){ - fsc->filter ((float) i, &output_sample, &output_tag); - CPPUNIT_ASSERT_DOUBLES_EQUAL (0.0, output_sample, 1e-6); - CPPUNIT_ASSERT_DOUBLES_EQUAL (atsc_sync_tag::NORMAL, output_tag, 1e-6); - } - - for (; i < delay + 5000; i++){ - fsc->filter ((float) i, &output_sample, &output_tag); - CPPUNIT_ASSERT_DOUBLES_EQUAL ((float) (i - delay), output_sample, 1e-6); - CPPUNIT_ASSERT_DOUBLES_EQUAL (atsc_sync_tag::NORMAL, output_tag, 1e-6); - } -} - -void -qa_atsci_fs_correlator::util (int which_field, int nerrs1, int nerrs2) -{ - static const int PAD = 303; - static const int ISIZE = 4096; - int delay = fsc->delay (); - float output_sample, output_tag; - int i; - float input[ISIZE]; - - fsc->reset (); // known starting conditions - - // build input - - for (i = 0; i < PAD; i++) - input[i] = uniform () * 7; - - init_field_sync_common (&input[i], which_field); - cause_errors (&input[i], nerrs1, nerrs2); - i += ATSC_DATA_SEGMENT_LENGTH; - - for (; i < ISIZE; i++) - input[i] = uniform () * 7; - - // run the input and check - - for (i = 0; i < ISIZE; i++){ - fsc->filter (input[i], &output_sample, &output_tag); - if (i == delay + PAD){ // should be field sync - if (which_field == 0) - CPPUNIT_ASSERT_DOUBLES_EQUAL (atsc_sync_tag::START_FIELD_SYNC_1, output_tag, 1e-6); - else - CPPUNIT_ASSERT_DOUBLES_EQUAL (atsc_sync_tag::START_FIELD_SYNC_2, output_tag, 1e-6); - } - else { - CPPUNIT_ASSERT_DOUBLES_EQUAL (atsc_sync_tag::NORMAL, output_tag, 1e-6); - } - } -} - - -void -qa_atsci_fs_correlator::t1 () -{ - util (0, 0, 0); -} - -void -qa_atsci_fs_correlator::t2 () -{ - util (1, 0, 0); -} - -void -qa_atsci_fs_correlator::t3 () -{ - for (int nerrs1 = 0; nerrs1 < 20; nerrs1++){ - for (int nerrs2 = 0; nerrs2 < 5; nerrs2++){ - util (0, nerrs1, nerrs2); - } - } -} - -void -qa_atsci_fs_correlator::t4 () -{ - for (int nerrs1 = 0; nerrs1 < 5; nerrs1++){ - for (int nerrs2 = 0; nerrs2 < 5; nerrs2++){ - util (1, nerrs1, nerrs2); - } - } -} - diff --git a/gr-atsc/src/lib/qa_atsci_fs_correlator.h b/gr-atsc/src/lib/qa_atsci_fs_correlator.h deleted file mode 100644 index 4785f096e..000000000 --- a/gr-atsc/src/lib/qa_atsci_fs_correlator.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _QA_ATSC_FS_CORRELATOR_H_ -#define _QA_ATSC_FS_CORRELATOR_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class atsci_fs_correlator; - -class qa_atsci_fs_correlator : public CppUnit::TestCase { -private: - atsci_fs_correlator *fsc; - - public: - - void setUp (); - void tearDown (); - - CPPUNIT_TEST_SUITE (qa_atsci_fs_correlator); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST (t4); - CPPUNIT_TEST_SUITE_END (); - - private: - - void util (int which_field, int nerr1, int nerr2); - - void t0 (); - void t1 (); - void t2 (); - void t3 (); - void t4 (); -}; - -#endif /* _QA_ATSC_FS_CORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_randomizer.cc b/gr-atsc/src/lib/qa_atsci_randomizer.cc deleted file mode 100644 index c12582dfd..000000000 --- a/gr-atsc/src/lib/qa_atsci_randomizer.cc +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <qa_atsci_randomizer.h> - -#include <cppunit/TestAssert.h> -#include <string.h> - -static unsigned int expected_initial_states[] = { - 0x018f, - 0xd3db, - 0xbaf1, - 0x8e64, - 0x4732, - 0x2399, - 0xc2d0, - 0x6168 -}; - -static unsigned char expected_initial_values[] = { - 0xc0, - 0x6d, - 0x3f, - 0x99, - 0x38, - 0x6a, - 0x29, - 0x52 -}; - -#define NELEMENTS(ary) ((sizeof (ary)) / sizeof (ary[0])) - -void -qa_atsci_randomizer::t0_compare_output_maps () -{ - for (int i = 0; i < 0x10000; i++){ - unsigned char slow = atsci_randomizer::slow_output_map(i); - unsigned char fast = atsci_randomizer::fast_output_map(i); - CPPUNIT_ASSERT_EQUAL (slow, fast); - } -} - -void -qa_atsci_randomizer::t1_initial_states () -{ - // LFSR should start with expected states - - for (unsigned int i = 0; i < NELEMENTS (expected_initial_values); i++){ - unsigned int got = randomizer.state(); - randomizer.clk (); - CPPUNIT_ASSERT_EQUAL (expected_initial_states[i], got); - } -} - -void -qa_atsci_randomizer::t2_initial_values () -{ - // LFSR should start with expected values - - for (unsigned int i = 0; i < NELEMENTS (expected_initial_values); i++){ - unsigned char got = randomizer.output_and_clk (); - CPPUNIT_ASSERT_EQUAL (expected_initial_values[i], got); - } -} - -void -qa_atsci_randomizer::t3_reset () -{ - // LFSR should start with expected values - - for (unsigned int i = 0; i < NELEMENTS (expected_initial_values); i++){ - unsigned char got = randomizer.output_and_clk (); - CPPUNIT_ASSERT_EQUAL (expected_initial_values[i], got); - } - - randomizer.reset (); // reset LFSR - - // and now should repeat expected values - - for (unsigned int i = 0; i < NELEMENTS (expected_initial_values); i++){ - unsigned char got = randomizer.output_and_clk (); - CPPUNIT_ASSERT_EQUAL (expected_initial_values[i], got); - } -} - -void -qa_atsci_randomizer::t4_high_level () -{ - static const int N = 5; - - atsc_mpeg_packet in[N]; - atsc_mpeg_packet_no_sync middle[N]; - atsc_mpeg_packet out[N]; - - memset (in, 0, sizeof (in)); - memset (middle, 0, sizeof (middle)); - memset (out, 0, sizeof (out)); - - // setup input test data - - int counter = 0xff; - for (int n = 0; n < N; n++){ - in[n].data[0] = MPEG_SYNC_BYTE; - for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++) - in[n].data[i + 1] = counter++; - } - - // randomize N packets - - for (int n = 0; n < N; n++) - randomizer.randomize (middle[n], in[n]); - - // reset LFSR and derandomize N packets - - randomizer.reset (); // reset LFSR - - for (int n = 0; n < N; n++) - randomizer.derandomize (out[n], middle[n]); - - // compare packets - - for (int n = 0; n < N; n++){ - CPPUNIT_ASSERT (in[n] == out[n]); - } -} - diff --git a/gr-atsc/src/lib/qa_atsci_randomizer.h b/gr-atsc/src/lib/qa_atsci_randomizer.h deleted file mode 100644 index 16d12754f..000000000 --- a/gr-atsc/src/lib/qa_atsci_randomizer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef _QA_ATSC_RANDOMIZER_H_ -#define _QA_ATSC_RANDOMIZER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <atsci_randomizer.h> - -class qa_atsci_randomizer : public CppUnit::TestCase { - private: - atsci_randomizer randomizer; - - public: - - void setUp (){ - // nop - } - - void tearDown (){ - // nop - } - - CPPUNIT_TEST_SUITE (qa_atsci_randomizer); - CPPUNIT_TEST (t0_compare_output_maps); - CPPUNIT_TEST (t1_initial_states); - CPPUNIT_TEST (t2_initial_values); - CPPUNIT_TEST (t3_reset); - CPPUNIT_TEST (t4_high_level); - CPPUNIT_TEST_SUITE_END (); - - - private: - void t0_compare_output_maps (); - void t1_initial_states (); - void t2_initial_values (); - void t3_reset (); - void t4_high_level (); - -}; - -#endif /* _QA_ATSC_RANDOMIZER_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_reed_solomon.cc b/gr-atsc/src/lib/qa_atsci_reed_solomon.cc deleted file mode 100644 index 81766f856..000000000 --- a/gr-atsc/src/lib/qa_atsci_reed_solomon.cc +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <stdlib.h> -#include <stdio.h> -#include <atsci_reed_solomon.h> -#include <qa_atsci_reed_solomon.h> -#include <string.h> - - -static const int NROOTS = 20; -static const int NTRIALS = 100; -static const int NN = ATSC_MPEG_RS_ENCODED_LENGTH; - -void -qa_atsci_reed_solomon::t0_reed_solomon () -{ - atsc_mpeg_packet_no_sync in; - atsc_mpeg_packet_rs_encoded enc; - atsc_mpeg_packet_no_sync out; - int derrors; - int errlocs[NN]; - int errval; - int errloc; - int decoder_errors = 0; - - for (int nt = 0; nt < NTRIALS; nt++){ - - // test up to the error correction capacity of the code - for (int errors = 0; errors <= NROOTS*2; errors++){ - - // load block with random data and encode - - for (int i = 0; i < ATSC_MPEG_DATA_LENGTH; i++) - in.data[i] = random () & 0xff; - - rs.encode (enc, in); - - memset (errlocs, 0, sizeof (errlocs)); - - for (int i = 0; i < errors; i++){ - - do { - errval = random () & 0xff; - } while (errval == 0); // error value must be non-zero - - do { - errloc = random () % NN; - } while (errlocs[errloc] != 0); // must not choose the same location twice - - errlocs[errloc] = 1; - - enc.data[errloc] ^= errval; // cause the error - } - - // decode the errored block - derrors = rs.decode (out, enc); - - if (errors <= NROOTS/2) { - // We should have handled all these errors and corrected them. - if (derrors != errors){ - fprintf (stderr, " decoder says %d errors, true number is %d\n", derrors, errors); - decoder_errors++; - } - - if (in != out){ - fprintf (stderr, " uncorrected errors!\n"); - decoder_errors++; - } - } else { - // We have been given more errors than we could cope with. Make - // sure that we detect these errors. Complain if we get incorrect - // block but don't say it's incorrect. - bool differs = (in != out); - - if (differs && (derrors < 0)) { - // Reported uncorrectable error accurately - } else if (differs) { - fprintf (stderr, - " decoder found %d of %d errors, but incorrect block\n", - derrors, errors); - } else { - fprintf (stderr, " decoder corrected %d of %d errors unexpectedly\n", - derrors, errors); - } - } - } - } - - CPPUNIT_ASSERT (decoder_errors == 0); -} diff --git a/gr-atsc/src/lib/qa_atsci_reed_solomon.h b/gr-atsc/src/lib/qa_atsci_reed_solomon.h deleted file mode 100644 index 95d642e72..000000000 --- a/gr-atsc/src/lib/qa_atsci_reed_solomon.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_REED_SOLOMON_H_ -#define _QA_ATSC_REED_SOLOMON_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <atsci_reed_solomon.h> - -class qa_atsci_reed_solomon : public CppUnit::TestCase { - - CPPUNIT_TEST_SUITE (qa_atsci_reed_solomon); - CPPUNIT_TEST (t0_reed_solomon); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_reed_solomon rs; - - void t0_reed_solomon (); -}; - -#endif /* _QA_ATSC_REED_SOLOMON_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_single_viterbi.cc b/gr-atsc/src/lib/qa_atsci_single_viterbi.cc deleted file mode 100644 index 699dce952..000000000 --- a/gr-atsc/src/lib/qa_atsci_single_viterbi.cc +++ /dev/null @@ -1,284 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <stdlib.h> -#include <stdio.h> -#include <atsci_single_viterbi.h> -#include <qa_atsci_single_viterbi.h> -#include <random.h> -#include <string.h> - - -static const int NTRIALS = 50; -static const int MAXERRORS = 10; -static const int NN = 200; - -static const int MAXDIBIT = 3; - -void -qa_atsci_single_viterbi::encode_block (unsigned char *out, unsigned char *in, - unsigned int n) -{ - for (unsigned int i = 0; i < n; i++) { - out[i] = encoder.encode(in[i]); - } -} - - -void -qa_atsci_single_viterbi::decode_block (unsigned char *out, unsigned char *in, - unsigned int n, float noise_factor) -{ - for (unsigned int i = 0; i < n; i++) { - out[i] = decoder.decode((2*in[i]-7) + noise () * noise_factor); - } -} - -float -qa_atsci_single_viterbi::noise () -{ - return 2.0 * ((float) random () / RANDOM_MAX - 0.5); // uniformly (-1, 1) -} - -void -qa_atsci_single_viterbi::t0 () -{ - static const int blocklen = NN; - unsigned char in[blocklen]; - unsigned char enc[blocklen]; - unsigned char out[blocklen]; - int decoder_errors = 0; - int delay = decoder.delay (); - int i; - - // printf (" Delay is %d.\n", delay); - - srandom (27); // reproducable sequence of "random" values - - for (int nt = 0; nt < NTRIALS; nt++){ - - // load block with random data and encode - - for (i = 0; i < (blocklen-delay); i++) - in[i] = random () & MAXDIBIT; - for ( ; i < blocklen; i++) - in[i] = 0; /* To empty the delay buffers */ - - encoder.reset (); - encode_block (enc, in, blocklen); - - decoder.reset (); - - // decode the block - decode_block (out, enc, blocklen, 1.0); - - // int offset = delay/4; - int offset = 2; - bool differs = (memcmp (in+offset, - out+delay+offset, blocklen-(delay+offset))); - - // initial values after reset are 0 - for (i = 0; i < delay; i++){ - if (out[i] != 0) - printf (" initial output at %i is %X, not 0\n", - i, out[i]); - } - - if (differs){ - printf (" incorrect data\n"); - - printf ("\n Erroneous result dibits:"); - for (int erri = 0; erri < (NN-delay); erri++) { - if (in[erri] != out[erri+delay]) - printf (" %d", erri); - } - printf ("\n In: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", in[erri]); - } - printf ("\n Out: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", out[erri+delay]); - } - printf ("\n Errs:"); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %c", (in[erri] != out[erri+delay])? '*': ' '); - } - printf ("\n THIS IS A REAL PROBLEM.\n"); - decoder_errors++; - } - } - - printf (" Summary: %d decoder errors out of %d trials.\n", - decoder_errors, NTRIALS); - - CPPUNIT_ASSERT (decoder_errors == 0); -} - -void -qa_atsci_single_viterbi::t1 () -{ - static const int blocklen = NN; - unsigned char in[blocklen]; - unsigned char enc[blocklen]; - unsigned char out[blocklen]; - int errlocs[NN]; - int errval; - int errloc; - int decoder_errors = 0; - int delay = decoder.delay (); - int i; - - // printf (" Delay is %d.\n", delay); - - srandom (1); // reproducable sequence of "random" values - - for (int nt = 0; nt < NTRIALS; nt++){ - - // test up to the error correction capacity of the code - for (int errors = 0; errors <= MAXERRORS; errors++){ - - // load block with random data and encode - - for (i = 0; i < (blocklen-delay); i++) - in[i] = random () & MAXDIBIT; - for ( ; i < blocklen; i++) - in[i] = 0; /* To empty the delay buffers */ - - encoder.reset (); - encode_block (enc, in, blocklen); - - // Now generate 0 to N errors in the encoded symbols. - // - // If we restrict ourselves to damaging the low-order bit, - // our decoder finds and fixes the vast majority of errors. - // - // If we munge any or all of the three bits of the symbol, - // our decoder frequently gets the wrong data even with a single - // error. - // - // Let's see what it can do with just the two low-order bits. - // - // ALSO: Don't let any error be within 12 spots of another - // error. This simulates the muxed behavior. - - memset (errlocs, 0, sizeof (errlocs)); - - for (int j = 0; j < errors; j++){ - - do { - // errval = random () & 3; // FIXME: 1; // FIXME: MAXSYM; - errval = random () & 1; // FIXME: 1; // FIXME: MAXSYM; - } while (errval == 0); // error value must be non-zero - - // Don't insert errors in the first delay slot, since we - // don't have valid history to correct them. Also, don't - // insert burst errors (adjacent errors), or errors within 2, - // since we can't reliably correct them. Also we must not choose - // the same location twice when inserting an error. - - do { - errloc = random () % NN; - } while (errloc < delay || errlocs[errloc] != 0 - || (errloc > 0 && errlocs[errloc-1] != 0) - || (errloc > 1 && errlocs[errloc-2] != 0) - || (errloc < (NN-1) && errlocs[errloc+1] != 0) - || (errloc < (NN-2) && errlocs[errloc+2] != 0)); - - errlocs[errloc] = 1; - - enc[errloc] ^= errval; // cause the error - } - - // decode the errored block - decoder.reset (); - decode_block (out, enc, blocklen, 0.5); - - // int offset = delay/4; - int offset = 2; - bool differs = (memcmp (in+offset, - out+delay+offset, blocklen-(delay+offset))); - - // initial values after reset are 0 - for (i = 0; i < delay; i++){ - if (out[i] != 0) - printf (" initial output at %i is %X, not 0\n", - i, out[i]); - } - - if (differs){ - printf (" %2d errors introduced, %scorrect data\n", - errors, differs? "in": ""); - - // FIXME, should we be able to tell how many errs too? - if (differs) { - //const int ERRTOL = 12; /* Or relate to delay? */ - int shouldfix = 1; - //int lasti = -ERRTOL; - - printf ( " Inserted errors: "); - for (int erri = 0; erri < NN; erri++) { - if (errlocs[erri]) { - printf (" %d", erri); - // if (erri < lasti+ERRTOL) - // shouldfix = 0; - //lasti = erri; - } - } - printf ("\n Erroneous result dibits:"); - for (int erri = 0; erri < (NN-delay); erri++) { - if (in[erri] != out[erri+delay]) - printf (" %d", erri); - } - printf ("\n In: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", in[erri]); - } - printf ("\n Out: "); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %d", out[erri+delay]); - } - printf ("\n Errs:"); - for (int erri = 0; erri < (NN-delay); erri++) { - printf (" %c", (in[erri] != out[erri+delay])? '*': ' '); - } - if (shouldfix) - printf ("\n THIS IS A REAL PROBLEM.\n"); - else - printf ("\n BUT THAT'S OK since errors are too close.\n"); - if (shouldfix) - decoder_errors++; - } - } - } - } - - printf (" Summary: %d decoder errors out of %d trials.\n", - decoder_errors, (MAXERRORS*NTRIALS)); - - CPPUNIT_ASSERT (decoder_errors <= (MAXERRORS*NTRIALS) * .1); -} diff --git a/gr-atsc/src/lib/qa_atsci_single_viterbi.h b/gr-atsc/src/lib/qa_atsci_single_viterbi.h deleted file mode 100644 index 07585de22..000000000 --- a/gr-atsc/src/lib/qa_atsci_single_viterbi.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_SINGLE_VITERBI_H -#define _QA_ATSC_SINGLE_VITERBI_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <atsci_single_viterbi.h> -#include <atsci_basic_trellis_encoder.h> - -class qa_atsci_single_viterbi : public CppUnit::TestCase { - private: - atsci_single_viterbi decoder; - atsci_basic_trellis_encoder encoder; - - CPPUNIT_TEST_SUITE (qa_atsci_single_viterbi); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - - void t0 (); - void t1 (); - - void encode_block(unsigned char *out, unsigned char *in, unsigned n); - void decode_block(unsigned char *out, unsigned char *in, unsigned n, float noise_factor); - float noise (); - -}; - -#endif /* _QA_ATSC_SINGLE_VITERBI_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_sliding_correlator.cc b/gr-atsc/src/lib/qa_atsci_sliding_correlator.cc deleted file mode 100644 index 4b215ba85..000000000 --- a/gr-atsc/src/lib/qa_atsci_sliding_correlator.cc +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cppunit/TestAssert.h> -#include <qa_atsci_sliding_correlator.h> -#include <cstdio> - -void -qa_atsci_sliding_correlator::t0 () -{ - -#if 0 - int count = 0; - int i; - for (i = 0; i < 100; i++) - printf ("%6d: %3d\n", count++, corr.input_bit (i & 1)); - - for (i = 0; i < 511; i++) - printf ("%6d: %3d\n", count++, corr.input_bit (atsc_pn511[i])); - - for (i = 0; i < 100; i++) - printf ("%6d: %3d\n", count++, corr.input_bit ((i & 2) != 0)); - - for (i = 0; i < 511; i++) - printf ("%6d: %3d\n", count++, corr.input_bit (atsc_pn511[i] ^ 1)); - - for (i = 0; i < 100; i++) - printf ("%6d: %3d\n", count++, - corr.input_bit (atsc_pn511[i] ^ atsc_pn511[i+31])); -#endif - -} diff --git a/gr-atsc/src/lib/qa_atsci_sliding_correlator.h b/gr-atsc/src/lib/qa_atsci_sliding_correlator.h deleted file mode 100644 index bdcd09319..000000000 --- a/gr-atsc/src/lib/qa_atsci_sliding_correlator.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_SLIDING_CORRELATOR_H_ -#define _QA_ATSC_SLIDING_CORRELATOR_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> -#include <stdio.h> - -#include <atsci_sliding_correlator.h> - -class qa_atsci_sliding_correlator : public CppUnit::TestCase { - - public: - - void setUp (void) - { - corr.reset (); - } - - CPPUNIT_TEST_SUITE (qa_atsci_sliding_correlator); - CPPUNIT_TEST (t0); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_sliding_correlator corr; - - void t0 (); -}; - - -#endif /* _QA_ATSC_SLIDING_CORRELATOR_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc b/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc deleted file mode 100644 index d3a3482f0..000000000 --- a/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <qa_atsci_trellis_encoder.h> -#include <cstdio> -#include <string.h> -#include <stdlib.h> -#include <time.h> -#include <string.h> - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - - -static const int NCODERS = atsci_trellis_encoder::NCODERS; - -void -qa_atsci_trellis_encoder::t0 () -{ -#if 0 // generate i/o test data for t1 - - atsc_mpeg_packet_rs_encoded in[NCODERS]; - atsc_data_segment out[NCODERS]; - - - memset (in, 0, sizeof (in)); - memset (out, 0, sizeof (out)); - - srandom (1); - - printf ("@@@ INPUT @@@\n"); - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (in[i].data); j++){ - int t = (random () >> 8) & 0xff; // 8 random bits - in[i].data[j] = t; - printf ("%d\n", t); - } - } - - enc.reset (); - enc.encode (out, in); - - printf ("@@@ OUTPUT @@@\n"); - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (out[i].data); j++){ - printf ("%d\n", out[i].data[j]); - } - } -#endif -} - -void -qa_atsci_trellis_encoder::t1 () -{ - atsc_mpeg_packet_rs_encoded in[NCODERS]; - atsc_data_segment expected_out[NCODERS]; - atsc_data_segment actual_out[NCODERS]; - static const unsigned char raw_input[NCODERS * NELEM (in[0].data)] = { -#include "qa_atsci_trellis_encoder_t1_input.dat" - }; - static const unsigned char raw_output[NCODERS * NELEM (expected_out[0].data)] = { -#include "qa_atsci_trellis_encoder_t1_output.dat" - }; - - - // load up input - const unsigned char *r = &raw_input[0]; - for (int i = 0; i < NCODERS; i++){ - in[i].pli.set_regular_seg (false, i); - for (unsigned int j = 0; j < NELEM (in[i].data); j++){ - in[i].data[j] = *r++; - } - } - - // load up expected output - r = &raw_output[0]; - for (int i = 0; i < NCODERS; i++){ - expected_out[i].pli.set_regular_seg (false, i); - for (unsigned int j = 0; j < NELEM (expected_out[i].data); j++){ - expected_out[i].data[j] = *r++; - } - } - - memset (&actual_out, 0, sizeof (actual_out)); // ensure zero - - enc.reset (); - enc.encode (actual_out, in); // trellis code test data - - for (int i = 0; i < NCODERS; i++){ // check the result - CPPUNIT_ASSERT (expected_out[i] == actual_out[i]); - CPPUNIT_ASSERT (expected_out[i].pli == actual_out[i].pli); - } -} diff --git a/gr-atsc/src/lib/qa_atsci_trellis_encoder.h b/gr-atsc/src/lib/qa_atsci_trellis_encoder.h deleted file mode 100644 index fcd114330..000000000 --- a/gr-atsc/src/lib/qa_atsci_trellis_encoder.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_TRELLIS_ENCODER_H_ -#define _QA_ATSC_TRELLIS_ENCODER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> -#include <stdio.h> - -#include <atsci_trellis_encoder.h> - -class qa_atsci_trellis_encoder : public CppUnit::TestCase { - - public: - - void setUp (void) - { - enc.reset (); - } - - CPPUNIT_TEST_SUITE (qa_atsci_trellis_encoder); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_trellis_encoder enc; - - void t0 (); - void t1 (); -}; - - -#endif /* _QA_ATSC_TRELLIS_ENCODER_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_input.dat b/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_input.dat deleted file mode 100644 index e6109ddfc..000000000 --- a/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_input.dat +++ /dev/null @@ -1,2484 +0,0 @@ -69, -35, -152, -72, -220, -92, -148, -88, -31, -124, -88, -215, -65, -30, -169, -225, -0, -98, -8, -39, -35, -233, -205, -67, -15, -37, -249, -114, -194, -215, -196, -7, -251, -93, -80, -215, -186, -228, -48, -217, -97, -137, -177, -163, -168, -90, -132, -168, -189, -140, -208, -224, -118, -158, -36, -134, -196, -29, -248, -134, -245, -189, -141, -240, -26, -221, -200, -212, -194, -248, -173, -35, -130, -95, -198, -42, -185, -74, -211, -119, -215, -164, -88, -78, -66, -124, -212, -6, -154, -204, -141, -143, -137, -27, -127, -164, -249, -72, -120, -187, -64, -38, -222, -195, -133, -165, -237, -63, -240, -193, -183, -199, -101, -15, -21, -168, -140, -233, -175, -38, -182, -60, -182, -64, -87, -53, -228, -80, -126, -93, -11, -191, -132, -234, -130, -10, -143, -112, -74, -127, -49, -2, -71, -150, -18, -93, -63, -158, -71, -238, -197, -253, -43, -123, -62, -130, -177, -35, -211, -47, -129, -223, -238, -6, -202, -112, -17, -89, -224, -91, -217, -17, -94, -33, -168, -112, -126, -231, -14, -197, -214, -212, -195, -1, -79, -1, -132, -1, -36, -87, -48, -165, -55, -30, -172, -1, -143, -189, -90, -112, -24, -52, -130, -119, -85, -42, -231, -211, -18, -246, -153, -232, -202, -92, -234, -26, -93, -110, -27, -130, -197, -75, -40, -253, -106, -212, -254, -250, -145, -89, -106, -170, -141, -236, -33, -227, -23, -9, -183, -41, -255, -80, -18, -201, -172, -252, -227, -10, -107, -255, -141, -49, -74, -181, -46, -181, -138, -44, -175, -27, -133, -26, -198, -19, -6, -232, -246, -29, -241, -174, -71, -240, -254, -90, -185, -171, -87, -157, -182, -194, -157, -67, -243, -232, -248, -34, -157, -130, -78, -77, -158, -212, -103, -100, -231, -110, -76, -222, -140, -61, -140, -211, -46, -138, -46, -232, -54, -133, -133, -236, -72, -35, -47, -59, -11, -40, -94, -168, -171, -172, -246, -74, -128, -93, -174, -104, -204, -251, -70, -88, -57, -210, -44, -103, -93, -90, -79, -148, -223, -213, -129, -39, -248, -177, -99, -4, -217, -193, -172, -133, -110, -162, -207, -239, -0, -126, -87, -205, -121, -158, -37, -179, -113, -81, -27, -207, -171, -107, -99, -139, -65, -228, -178, -58, -149, -22, -62, -111, -216, -234, -244, -70, -141, -195, -54, -142, -66, -141, -91, -187, -44, -129, -111, -157, -210, -138, -108, -126, -245, -208, -9, -55, -180, -188, -113, -74, -211, -175, -185, -171, -154, -174, -242, -40, -114, -40, -183, -180, -182, -19, -112, -226, -148, -223, -128, -103, -106, -237, -229, -96, -189, -239, -151, -114, -172, -8, -189, -127, -184, -118, -43, -83, -37, -29, -123, -151, -70, -50, -76, -252, -69, -188, -223, -218, -156, -96, -65, -6, -77, -39, -102, -11, -23, -254, -125, -195, -7, -59, -67, -191, -178, -111, -18, -215, -141, -142, -111, -211, -192, -187, -208, -6, -119, -176, -225, -19, -16, -34, -26, -94, -74, -128, -105, -97, -127, -231, -37, -134, -35, -104, -69, -213, -215, -88, -172, -101, -230, -27, -56, -167, -214, -9, -174, -78, -185, -143, -98, -202, -178, -124, -40, -253, -253, -146, -94, -124, -122, -131, -2, -157, -236, -72, -114, -196, -161, -31, -41, -136, -58, -98, -47, -17, -107, -222, -96, -37, -110, -194, -239, -32, -63, -24, -29, -60, -170, -124, -185, -37, -0, -188, -195, -237, -4, -53, -178, -165, -84, -219, -45, -143, -62, -93, -161, -169, -60, -1, -206, -170, -196, -190, -203, -4, -214, -232, -65, -129, -101, -250, -166, -102, -182, -105, -83, -186, -159, -5, -96, -244, -225, -142, -132, -31, -236, -37, -201, -40, -39, -152, -210, -236, -86, -157, -240, -44, -134, -49, -173, -235, -44, -83, -81, -226, -189, -165, -157, -93, -170, -254, -81, -140, -141, -213, -171, -121, -251, -117, -161, -35, -13, -116, -16, -99, -17, -0, -144, -152, -50, -61, -132, -95, -145, -214, -66, -79, -123, -223, -172, -38, -222, -254, -178, -107, -211, -94, -229, -207, -212, -134, -242, -225, -251, -2, -69, -12, -3, -214, -164, -54, -20, -40, -149, -165, -254, -215, -245, -122, -183, -162, -160, -150, -160, -83, -1, -116, -177, -230, -67, -133, -109, -54, -103, -104, -56, -173, -117, -60, -131, -26, -115, -151, -67, -9, -61, -65, -224, -50, -188, -152, -212, -92, -46, -116, -175, -48, -232, -97, -23, -44, -231, -132, -98, -78, -237, -155, -251, -98, -215, -126, -124, -74, -22, -191, -83, -83, -1, -52, -133, -189, -205, -90, -26, -252, -207, -202, -45, -183, -43, -68, -228, -19, -201, -70, -98, -182, -225, -93, -25, -185, -220, -150, -4, -243, -86, -88, -70, -88, -141, -203, -21, -90, -38, -48, -87, -245, -250, -132, -173, -38, -200, -145, -57, -145, -215, -156, -72, -185, -250, -98, -114, -215, -248, -119, -202, -78, -207, -16, -166, -92, -220, -188, -183, -2, -237, -14, -247, -231, -146, -164, -14, -91, -53, -72, -237, -13, -228, -53, -199, -222, -151, -57, -181, -144, -177, -127, -222, -128, -143, -133, -220, -107, -66, -147, -109, -47, -162, -101, -23, -52, -9, -37, -143, -63, -110, -125, -77, -82, -179, -20, -49, -75, -78, -230, -219, -255, -102, -186, -127, -246, -64, -92, -98, -130, -240, -208, -177, -146, -53, -200, -198, -63, -238, -86, -127, -92, -212, -204, -175, -135, -224, -224, -210, -47, -199, -173, -46, -45, -104, -174, -36, -168, -10, -134, -42, -250, -86, -220, -141, -139, -165, -83, -203, -148, -170, -74, -241, -126, -22, -160, -6, -247, -128, -216, -38, -72, -134, -85, -117, -238, -3, -153, -151, -13, -32, -194, -8, -118, -158, -149, -2, -68, -233, -205, -217, -148, -23, -202, -19, -46, -106, -25, -38, -235, -241, -76, -51, -120, -162, -169, -103, -165, -66, -254, -179, -98, -192, -188, -217, -95, -82, -219, -164, -59, -169, -125, -208, -193, -71, -227, -239, -177, -252, -22, -157, -238, -98, -208, -102, -5, -121, -206, -170, -188, -204, -94, -31, -141, -26, -248, -237, -108, -212, -146, -168, -125, -15, -120, -62, -87, -91, -46, -9, -88, -68, -166, -70, -167, -118, -173, -172, -240, -124, -87, -172, -72, -181, -203, -214, -207, -196, -196, -59, -152, -86, -228, -21, -102, -92, -84, -190, -183, -131, -199, -16, -199, -110, -86, -110, -229, -4, -27, -213, -128, -114, -129, -201, -39, -77, -160, -247, -17, -100, -51, -169, -187, -23, -191, -33, -115, -20, -223, -43, -151, -167, -59, -94, -21, -146, -205, -251, -150, -233, -208, -23, -91, -82, -224, -131, -159, -129, -122, -177, -229, -173, -91, -160, -196, -27, -194, -56, -47, -162, -99, -198, -74, -159, -37, -95, -49, -243, -91, -200, -220, -43, -223, -55, -126, -192, -187, -29, -65, -53, -207, -39, -226, -42, -200, -167, -69, -138, -223, -116, -45, -67, -59, -119, -226, -97, -215, -20, -84, -50, -221, -48, -94, -188, -104, -220, -125, -35, -249, -191, -89, -200, -230, -60, -243, -175, -227, -56, -57, -195, -173, -103, -7, -233, -222, -234, -74, -181, -254, -158, -232, -219, -207, -70, -152, -56, -34, -22, -92, -28, -213, -181, -229, -188, -241, -216, -107, -213, -17, -165, -153, -190, -12, -160, -167, -235, -139, -242, -161, -138, -144, -137, -101, -96, -208, -254, -152, -242, -20, -244, -14, -234, -170, -243, -167, -155, -204, -19, -113, -221, -184, -11, -156, -197, -171, -68, -177, -55, -54, -82, -193, -199, -220, -39, -39, -172, -37, -192, -158, -58, -180, -173, -37, -94, -161, -204, -250, -109, -224, -108, -75, -153, -119, -232, -94, -35, -45, -15, -90, -99, -98, -27, -43, -62, -66, -83, -234, -104, -20, -137, -162, -201, -54, -200, -39, -215, -149, -34, -69, -117, -142, -144, -14, -6, -121, -109, -41, -166, -125, -131, -10, -223, -159, -53, -29, -225, -137, -8, -74, -157, -145, -237, -102, -200, -181, -142, -159, -74, -177, -229, -192, -64, -118, -207, -70, -239, -60, -111, -149, -185, -243, -160, -153, -146, -214, -182, -116, -95, -191, -190, -253, -80, -171, -99, -25, -97, -242, -185, -172, -163, -158, -108, -228, -20, -59, -42, -4, -120, -154, -154, -49, -141, -58, -202, -32, -16, -129, -149, -112, -65, -83, -109, -146, -255, -209, -171, -96, -196, -100, -13, -103, -2, -121, -76, -23, -181, -118, -28, -45, -17, -183, -95, -158, -241, -42, -191, -2, -172, -84, -115, -237, -168, -224, -127, -168, -178, -42, -8, -118, -142, -22, -222, -145, -143, -42, -169, -69, -160, -197, -114, -177, -124, -210, -80, -110, -252, -16, -113, -168, -101, -228, -149, -13, -197, -20, -181, -119, -63, -190, -237, -206, -212, -203, -95, -100, -245, -9, -169, -150, -207, -28, -72, -76, -238, -153, -186, -234, -169, -44, -146, -14, -17, -40, -28, -214, -61, -209, -77, -125, -144, -59, -75, -100, -6, -171, -200, -252, -180, -114, -147, -131, -142, -219, -207, -124, -117, -138, -102, -31, -183, -249, -45, -200, -34, -74, -158, -96, -27, -236, -221, -172, -39, -40, -16, -46, -212, -217, -43, -136, -75, -190, -11, -217, -154, -219, -85, -15, -102, -188, -46, -29, -182, -92, -229, -217, -166, -131, -57, -194, -112, -22, -110, -151, -63, -127, -197, -19, -88, -241, -156, -163, -175, -168, -125, -73, -131, -211, -88, -233, -143, -135, -7, -70, -227, -236, -31, -138, -112, -88, -77, -224, -111, -187, -120, -174, -59, -62, -194, -147, -47, -94, -55, -222, -6, -180, -40, -138, -135, -129, -116, -23, -8, -123, -93, -236, -103, -125, -118, -216, -213, -195, -184, -69, -127, -49, -244, -187, -111, -182, -78, -158, -21, -134, -125, -27, -59, -165, -165, -195, -38, -25, -218, -47, -149, -56, -27, -252, -181, -146, -213, -139, -86, -142, -208, -213, -191, -196, -145, -46, -123, -223, -205, -144, -102, -75, -171, -161, -240, -81, -101, -23, -107, -64, -70, -0, -120, -98, -253, -46, -244, -210, -185, -74, -96, -138, -32, -32, -78, -177, -79, -201, -145, -28, -89, -248, -103, -5, -154, -88, -87, -255, -112, -195, -63, -183, -196, -184, -25, -193, -230, -14, -148, -160, -89, -245, -42, -122, -21, -121, -43, -100, -67, -189, -129, -157, -182, -233, -162, -80, -65, -250, -80, -178, -190, -143, -105, -130, -72, -131, -67, -47, -145, -216, -208, -235, -205, -251, -101, -227, -116, -145, -71, -183, -78, -201, -84, -4, -178, -247, -85, -244, -242, -165, -166, -176, -53, -16, -50, -126, -147, -118, -173, -37, -78, -125, -16, -28, -120, -117, -0, -237, -6, -71, -164, -85, -17, -249, -90, -195, -240, -175, -184, -227, -85, -94, -147, -138, -110, -197, -8, -2, -60, -182, -39, -139, -51, -55, -167, -172, -173, -167, -153, -179, -239, -62, -9, -1, -55, -99, -196, -40, -19, -124, -12, -104, -219, -159, -243, -74, -101, -251, -76, -161, -178, -115, -44, -230, -171, -212, -146, -88, -124, -44, -12, -108, -107, -21, -109, -163, -121, -50, -204, -140, -175, -216, -244, -138, -119, -232, -213, -221, -228, -33, -127, -150, -149, -172, -124, -64, -129, -15, -153, -253, -59, -166, -105, -167, -187, -215, -74, -53, -9, -22, -193, -184, -238, -182, -67, -102, -158, -24, -68, -130, -58, -195, -24, -207, -111, -149, -16, -240, -164, -170, -238, -224, -80, -88, -135, -12, -47, -209, -65, -57, -232, -2, -242, -215, -185, -53, -62, -87, -78, -130, -218, -136, -69, -243, -87, -181, -136, -104, -166, -44, -18, -148, -13, -99, -237, -148, -111, -28, -102, -176, -86, -79, -179, -72, -38, -109, -125, -100, -197, -203, -231, -159, -83, -44, -146, -171, -226, -27, -20, -137, -72, -39, -29, -85, -138, -10, -234, -249, -39, -81, -170, -125, -160, -94, -197, -198, -203, -67, -43, -145, -15, -18, -48, -98, -63, -195, -14, -34, -222, -35, -171, -39, -74, -201, -125, -212, -212, -103, -206, -251, -185, -121, -121, -89, -215, -63, -32, -163, -130, -75, -52, -145, -94, -101, -244, -158, -40, -3, -192, -7, -38, -107, -47, -113, -52, -172, -69, -8, -20, -20, -4, -205, -141, -126, -38, -101, -189, -71, -9, -64, -147, -62, -210, -241, -163, -198, -143, -204, -202, -80, -212, -241, -187, -4, -98, -240, -176, -168, -249, -197, -188, -254, -146, -73, -124, -185, -175, -57, -1, -184, -122, -148, -246, -76, -134, -154, -19, -21, -102, -222, -102, -59, -207, -33, -63, -49, -18, -240, -218, -11, -181, -150, -9, -72, -224, -134, -2, -143, -192, -3, -71, -58, -151, -62, -135, -29, -216, -154, -51, -63, -120, -153, -123, -72, -187, -187, -122, -206, -171, -84, -218, -97, -234, -228, -169, -203, -106, -172, -90, -42, -175, -162, -101, -71, -224, -236, -101, -185, -135, -153, -248, -0, -51, -116, -72, -238, -47, -194, -189, -218, -22, -151, -60, -1, -123, -230, -204, -230, -146, -38, -17, -66, -200, -118, -137, -169, -99, -239, -98, -234, -136, -91, -234, -187, -208, -51, -170, -255, -245, -103, -218, -11, -255, -22, -12, -123, -252, -217, -97, -142, -255, -115, -208, -200, -234, -90, -114, -77, -73, -212, -56, -209, -48, -35, -141, -0, -86, -55, -0, -75, -159, -218, -87, -159, -240, -100, -26, -237, -61, -124, -124, -61, -239, -77, -6, -218, -167, -120, -39, -241, -77, -96, -195, -125, -132, -80, -126, -218, -136, -126, -38, -40, -88, -126, -199, -73, -226, -225, -55, -32, -94, -179, -94, -78, -1, -100, -40, -168, -220, -80, -154, -41, -177, -93, -167, -53, -173, -37, -16, -54, -164, -55, -94, -253, -181, -37, -70, -152, -7, -126, -184, -102, -50, -22, -180, -51, -123, -221, -220, -87, -46, -118, -129, -223, -211, -41, -20, -129, -78, -37, -183, -243, -92, -21, -240, -17, -59, -55, -169, -67, -181, -98, -170, -231, -121, -94, -27, -244, -60, -247, -76, -106, -109, -206, -73, -64, -247, -94, -193, -70, -131, -121, -57, -223, -143, -41, -241, -203, -97, -155, -14, -23, -253, -184, -255, -119, -23, -26, -108, -83, -17, -184, -190, -127, -135, -7, -191, -126, -102, -129, -196, -233, -251, -254, -200, -138, -40, -186, -85, -137, -85, -100, -160, -83, -29, -159, -202, -53, -185, -54, -137, -203, -239, -71, -74, -119, -79, -10, -245, -181, -140, -186, -158, -135, -184, -103, -18, -224, -33, -103, -106, -118, -204, -10, -201, -234, -170, -147, -31, -99, -202, -168, -47, -186, -239, -121, -50, -62, -131, -39, -243, -15, -225, -146, -151, -154, -249, -169, -123, -26, -17, -229, -145, -221, -239, -90, -199, -153, -238, -230, -253, -185, -142, -44, -116, -126, -166, -166, -189, -41, -206, -176, -57, -176, -67, -208, -74, -60, -121, -197, -87, -138, -170, -232, -104, -154, -67, -48, -52, -50, -22, -49, -236, -165, -94, -96, -36, -4, -7, -225, -46, -213, -146, -104, -133, -213, -57, -207, -18, -178, -149, -105, -61, -63, -82, -166, -218, -150, -214, -14, -200, -237, -64, -180, -147, -159, -21, -183, -164, -28, -152, -210, -241, -42, -59, -118, -0, -116, -70, -18, diff --git a/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_output.dat b/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_output.dat deleted file mode 100644 index 175d482b4..000000000 --- a/gr-atsc/src/lib/qa_atsci_trellis_encoder_t1_output.dat +++ /dev/null @@ -1,9984 +0,0 @@ -6, -1, -1, -6, -2, -0, -4, -2, -6, -2, -4, -2, -0, -2, -2, -6, -1, -4, -6, -1, -7, -3, -6, -3, -2, -7, -3, -7, -2, -4, -1, -4, -3, -7, -7, -5, -7, -3, -5, -7, -2, -2, -0, -5, -0, -4, -5, -5, -3, -0, -5, -2, -3, -1, -5, -2, -1, -7, -5, -5, -0, -7, -3, -2, -1, -2, -0, -4, -0, -1, -5, -1, -5, -1, -0, -1, -1, -6, -5, -4, -1, -1, -1, -3, -4, -5, -7, -0, -3, -1, -6, -6, -0, -5, -1, -6, -3, -7, -7, -7, -0, -0, -2, -7, -7, -3, -7, -4, -7, -6, -6, -3, -1, -5, -7, -3, -5, -2, -4, -4, -2, -6, -6, -2, -6, -6, -1, -0, -5, -2, -7, -6, -4, -3, -5, -2, -2, -6, -3, -5, -1, -7, -5, -3, -2, -3, -4, -7, -5, -3, -0, -2, -3, -1, -1, -5, -5, -2, -1, -1, -2, -5, -7, -2, -4, -1, -7, -1, -0, -2, -0, -5, -4, -7, -5, -5, -5, -5, -4, -1, -5, -5, -3, -1, -0, -4, -5, -6, -6, -7, -7, -7, -4, -0, -1, -1, -4, -1, -3, -2, -6, -0, -5, -0, -3, -1, -7, -5, -2, -0, -2, -5, -3, -3, -1, -1, -1, -2, -2, -5, -7, -7, -0, -4, -3, -7, -3, -2, -3, -6, -4, -7, -7, -5, -0, -5, -4, -0, -0, -4, -0, -7, -4, -0, -2, -1, -4, -2, -5, -7, -7, -2, -7, -3, -0, -1, -6, -7, -4, -6, -6, -7, -5, -3, -5, -6, -4, -4, -7, -2, -2, -5, -0, -2, -1, -3, -5, -0, -2, -5, -7, -2, -3, -4, -4, -2, -1, -0, -1, -0, -3, -2, -0, -3, -7, -5, -0, -3, -7, -3, -7, -4, -3, -2, -1, -3, -4, -0, -6, -1, -6, -7, -6, -0, -2, -1, -0, -6, -7, -5, -1, -5, -4, -6, -6, -2, -4, -6, -5, -2, -1, -0, -2, -1, -2, -2, -3, -1, -4, -0, -6, -3, -7, -1, -4, -7, -5, -5, -5, -0, -6, -4, -4, -7, -6, -0, -6, -4, -4, -4, -5, -3, -3, -0, -4, -2, -6, -3, -1, -3, -3, -3, -1, -5, -7, -2, -0, -0, -5, -5, -4, -1, -3, -7, -3, -3, -2, -1, -6, -2, -6, -1, -7, -1, -6, -2, -4, -4, -6, -0, -3, -1, -2, -7, -5, -5, -6, -0, -5, -1, -1, -7, -5, -4, -5, -0, -5, -7, -3, -0, -6, -2, -6, -3, -7, -5, -4, -7, -5, -0, -5, -6, -6, -2, -6, -6, -2, -2, -1, -3, -7, -1, -5, -1, -1, -7, -1, -4, -6, -0, -6, -0, -0, -0, -7, -4, -0, -1, -4, -0, -5, -0, -6, -3, -3, -7, -6, -1, -7, -5, -3, -2, -4, -2, -3, -7, -3, -3, -6, -0, -5, -7, -7, -5, -1, -1, -5, -6, -2, -0, -3, -3, -7, -6, -4, -0, -6, -6, -3, -4, -2, -7, -5, -3, -2, -6, -5, -7, -6, -2, -2, -4, -3, -7, -7, -0, -6, -3, -0, -3, -1, -1, -4, -4, -7, -6, -4, -1, -1, -3, -7, -6, -4, -6, -0, -4, -0, -6, -7, -2, -0, -0, -7, -0, -5, -0, -0, -4, -1, -3, -5, -6, -7, -1, -4, -2, -6, -4, -0, -0, -6, -1, -1, -3, -5, -0, -7, -3, -4, -0, -4, -4, -2, -1, -5, -7, -7, -5, -3, -5, -4, -2, -4, -0, -3, -7, -3, -2, -4, -6, -0, -1, -6, -3, -2, -2, -1, -0, -0, -6, -1, -2, -7, -1, -5, -7, -7, -7, -3, -7, -3, -3, -4, -5, -3, -1, -0, -6, -3, -1, -6, -1, -3, -3, -3, -2, -4, -5, -5, -4, -6, -1, -0, -7, -6, -0, -7, -2, -5, -7, -2, -0, -6, -5, -0, -6, -0, -1, -4, -7, -6, -6, -0, -0, -5, -3, -0, -2, -6, -2, -1, -5, -4, -0, -2, -6, -2, -6, -2, -7, -1, -4, -4, -5, -6, -2, -7, -7, -6, -4, -3, -5, -4, -6, -7, -3, -5, -7, -1, -7, -7, -6, -3, -1, -1, -3, -3, -4, -4, -5, -1, -0, -1, -5, -6, -1, -4, -1, -6, -7, -3, -7, -1, -7, -3, -6, -0, -3, -5, -1, -0, -3, -5, -6, -7, -3, -6, -4, -2, -0, -0, -1, -0, -2, -5, -0, -6, -2, -4, -4, -1, -1, -1, -1, -4, -2, -3, -4, -6, -2, -4, -4, -6, -0, -2, -1, -6, -3, -0, -6, -1, -1, -2, -6, -2, -3, -0, -3, -5, -7, -1, -7, -0, -0, -5, -5, -5, -5, -2, -2, -4, -4, -4, -7, -7, -3, -0, -4, -4, -3, -3, -6, -7, -3, -5, -2, -7, -7, -7, -5, -3, -6, -5, -5, -1, -3, -4, -2, -2, -0, -5, -6, -7, -6, -1, -4, -1, -0, -1, -7, -2, -1, -3, -2, -4, -3, -5, -3, -7, -3, -6, -5, -6, -1, -1, -6, -7, -7, -7, -5, -4, -3, -0, -7, -3, -4, -4, -3, -5, -6, -0, -1, -1, -6, -4, -0, -3, -1, -7, -1, -1, -0, -3, -1, -4, -4, -0, -5, -2, -4, -3, -7, -3, -2, -1, -5, -3, -6, -0, -2, -2, -3, -6, -2, -2, -5, -3, -5, -1, -5, -4, -6, -5, -3, -2, -6, -6, -2, -4, -5, -3, -0, -0, -3, -0, -2, -7, -1, -7, -4, -3, -1, -2, -7, -0, -3, -5, -0, -1, -4, -1, -6, -3, -5, -4, -3, -0, -6, -4, -0, -5, -5, -3, -7, -4, -1, -4, -4, -4, -0, -7, -0, -3, -0, -0, -1, -1, -5, -2, -3, -4, -0, -7, -4, -2, -5, -3, -3, -4, -1, -3, -1, -6, -6, -2, -6, -6, -6, -7, -2, -5, -7, -5, -7, -3, -5, -2, -3, -1, -4, -2, -2, -6, -4, -1, -2, -5, -4, -5, -7, -0, -2, -6, -1, -4, -1, -7, -6, -5, -1, -0, -2, -7, -1, -3, -0, -0, -2, -4, -5, -3, -4, -7, -6, -7, -2, -3, -5, -0, -4, -1, -4, -4, -5, -1, -5, -2, -0, -0, -2, -4, -2, -0, -1, -1, -6, -1, -6, -0, -2, -5, -2, -2, -3, -5, -6, -6, -0, -3, -0, -2, -1, -0, -3, -5, -3, -0, -4, -2, -6, -2, -4, -5, -6, -1, -7, -2, -0, -7, -0, -3, -3, -6, -6, -0, -0, -0, -0, -6, -3, -3, -4, -1, -7, -3, -7, -7, -4, -3, -5, -7, -7, -0, -2, -3, -4, -7, -1, -1, -0, -5, -4, -1, -6, -3, -5, -6, -5, -0, -5, -3, -6, -7, -1, -5, -2, -5, -6, -2, -2, -7, -5, -4, -1, -6, -2, -3, -1, -7, -4, -7, -4, -3, -1, -7, -0, -6, -6, -2, -0, -2, -4, -5, -0, -4, -1, -3, -1, -3, -7, -4, -5, -2, -2, -3, -0, -5, -5, -2, -4, -3, -7, -0, -2, -3, -3, -6, -2, -6, -3, -4, -5, -0, -4, -2, -2, -5, -5, -0, -5, -4, -2, -4, -2, -7, -3, -7, -3, -7, -7, -2, -2, -2, -6, -2, -6, -1, -3, -1, -1, -2, -4, -7, -4, -1, -1, -1, -7, -5, -6, -1, -5, -0, -3, -5, -0, -4, -6, -2, -5, -5, -6, -5, -5, -4, -5, -3, -0, -5, -0, -0, -1, -3, -5, -3, -1, -2, -1, -2, -2, -6, -6, -4, -1, -0, -2, -4, -5, -5, -1, -4, -3, -6, -5, -4, -7, -1, -0, -5, -5, -6, -5, -0, -5, -3, -6, -0, -6, -4, -6, -4, -1, -6, -1, -4, -1, -7, -4, -0, -6, -3, -1, -1, -5, -3, -5, -0, -7, -6, -0, -0, -3, -7, -6, -6, -5, -5, -5, -6, -4, -0, -4, -0, -3, -0, -6, -2, -3, -7, -7, -5, -3, -0, -6, -2, -2, -5, -1, -1, -6, -4, -6, -2, -3, -4, -1, -3, -2, -2, -4, -6, -0, -7, -0, -4, -0, -2, -2, -7, -5, -4, -5, -4, -6, -1, -0, -6, -5, -1, -6, -6, -0, -6, -0, -2, -3, -5, -0, -3, -0, -2, -5, -2, -7, -5, -3, -3, -3, -5, -4, -7, -7, -4, -4, -3, -5, -2, -3, -7, -2, -5, -6, -0, -5, -4, -7, -5, -5, -6, -0, -2, -2, -7, -3, -1, -7, -2, -5, -7, -7, -1, -5, -2, -5, -2, -7, -0, -6, -3, -3, -6, -0, -4, -4, -5, -0, -0, -0, -1, -2, -3, -0, -2, -3, -3, -7, -2, -1, -6, -7, -0, -7, -2, -7, -5, -7, -1, -7, -4, -4, -3, -3, -1, -1, -6, -7, -6, -0, -1, -0, -6, -7, -1, -6, -4, -3, -7, -0, -6, -7, -5, -7, -3, -7, -3, -4, -1, -4, -1, -1, -5, -1, -7, -5, -1, -4, -4, -2, -4, -1, -1, -4, -4, -3, -6, -3, -3, -7, -3, -7, -3, -6, -7, -3, -7, -0, -0, -0, -4, -5, -1, -7, -7, -2, -2, -3, -1, -7, -6, -7, -7, -7, -7, -0, -6, -5, -6, -0, -1, -5, -5, -1, -7, -6, -2, -7, -0, -0, -7, -3, -7, -5, -0, -5, -6, -0, -4, -3, -0, -5, -5, -5, -6, -3, -1, -1, -6, -4, -6, -4, -0, -0, -7, -1, -2, -4, -6, -1, -5, -4, -7, -3, -4, -1, -0, -3, -3, -5, -6, -7, -4, -2, -1, -5, -2, -0, -7, -6, -1, -0, -1, -0, -1, -3, -7, -3, -1, -3, -3, -6, -5, -5, -2, -3, -6, -7, -4, -0, -4, -5, -2, -7, -3, -0, -4, -7, -2, -6, -5, -7, -3, -3, -6, -5, -2, -5, -2, -2, -3, -4, -0, -7, -3, -6, -5, -1, -0, -2, -1, -4, -3, -4, -3, -2, -0, -4, -6, -5, -6, -6, -4, -0, -4, -0, -7, -0, -3, -4, -0, -1, -1, -5, -3, -4, -7, -4, -2, -4, -7, -0, -6, -7, -6, -6, -6, -1, -1, -6, -0, -0, -4, -4, -7, -6, -6, -4, -5, -0, -1, -2, -4, -0, -1, -4, -3, -4, -1, -2, -7, -6, -5, -5, -6, -6, -4, -2, -4, -6, -2, -7, -2, -7, -1, -2, -3, -1, -7, -3, -5, -1, -4, -1, -4, -1, -7, -4, -1, -0, -7, -7, -4, -2, -0, -7, -6, -1, -2, -2, -1, -5, -4, -2, -5, -6, -4, -6, -7, -1, -2, -7, -5, -6, -1, -0, -0, -7, -0, -6, -5, -3, -1, -5, -7, -2, -4, -0, -7, -3, -6, -3, -1, -2, -4, -7, -6, -1, -3, -4, -3, -6, -1, -3, -5, -0, -7, -2, -2, -4, -1, -4, -2, -2, -0, -4, -3, -6, -7, -2, -3, -1, -3, -4, -2, -7, -3, -1, -6, -3, -0, -3, -7, -2, -0, -2, -1, -3, -1, -6, -6, -3, -3, -5, -0, -2, -3, -1, -6, -6, -3, -2, -3, -4, -7, -5, -7, -7, -5, -4, -4, -4, -2, -1, -7, -1, -4, -5, -7, -5, -7, -5, -6, -4, -0, -6, -6, -6, -5, -5, -4, -5, -4, -0, -1, -4, -2, -2, -2, -4, -4, -3, -5, -7, -3, -3, -2, -0, -3, -7, -7, -4, -7, -4, -6, -0, -3, -7, -4, -6, -7, -1, -7, -2, -3, -3, -6, -5, -4, -6, -4, -3, -0, -5, -6, -7, -6, -5, -5, -2, -3, -0, -6, -3, -1, -5, -0, -7, -4, -3, -4, -6, -1, -6, -5, -2, -6, -3, -6, -4, -4, -4, -3, -3, -5, -3, -0, -6, -6, -4, -3, -3, -4, -3, -7, -1, -7, -5, -7, -5, -5, -5, -1, -3, -6, -5, -6, -1, -2, -3, -1, -6, -6, -0, -3, -2, -5, -5, -4, -3, -2, -0, -1, -4, -4, -1, -4, -6, -0, -5, -4, -4, -7, -1, -3, -2, -4, -4, -1, -1, -5, -5, -6, -7, -7, -6, -0, -5, -4, -7, -2, -6, -2, -7, -1, -1, -2, -0, -5, -4, -0, -1, -0, -6, -2, -6, -4, -1, -6, -2, -6, -7, -0, -5, -2, -7, -3, -0, -7, -3, -3, -7, -6, -1, -6, -5, -3, -7, -7, -0, -1, -2, -7, -5, -5, -5, -3, -5, -5, -6, -0, -4, -5, -4, -0, -7, -2, -1, -3, -5, -1, -4, -7, -4, -3, -6, -3, -0, -4, -3, -2, -1, -7, -2, -1, -2, -0, -7, -5, -7, -4, -6, -4, -3, -0, -5, -3, -7, -3, -3, -1, -7, -4, -2, -2, -4, -3, -6, -2, -1, -5, -0, -7, -2, -0, -7, -7, -7, -3, -2, -6, -1, -5, -5, -4, -6, -4, -3, -3, -5, -6, -7, -1, -1, -1, -0, -1, -5, -4, -2, -2, -1, -0, -5, -4, -7, -1, -5, -6, -6, -6, -6, -4, -1, -0, -1, -5, -6, -1, -6, -0, -4, -3, -5, -0, -3, -4, -1, -2, -0, -1, -2, -6, -0, -1, -6, -0, -6, -0, -5, -4, -0, -5, -3, -5, -0, -5, -4, -2, -2, -2, -5, -0, -4, -5, -1, -6, -6, -7, -4, -3, -7, -7, -5, -0, -4, -1, -3, -0, -7, -0, -0, -5, -5, -1, -1, -6, -6, -7, -0, -4, -3, -1, -2, -3, -5, -7, -1, -3, -1, -2, -3, -2, -4, -0, -3, -4, -1, -2, -1, -7, -0, -0, -1, -5, -7, -5, -1, -5, -5, -6, -7, -4, -1, -2, -7, -0, -3, -2, -5, -4, -3, -5, -0, -5, -6, -7, -2, -5, -6, -4, -7, -5, -6, -4, -7, -6, -6, -7, -0, -0, -4, -6, -6, -4, -4, -3, -7, -4, -7, -0, -4, -3, -2, -5, -0, -5, -6, -5, -0, -4, -5, -7, -0, -3, -3, -0, -0, -2, -7, -1, -5, -2, -5, -5, -2, -2, -5, -7, -6, -6, -3, -1, -0, -7, -5, -1, -3, -0, -3, -7, -3, -1, -2, -3, -3, -5, -7, -7, -5, -6, -4, -2, -1, -6, -6, -2, -5, -7, -2, -4, -1, -5, -3, -0, -1, -6, -1, -0, -5, -0, -6, -3, -5, -6, -7, -4, -3, -7, -4, -0, -5, -3, -1, -5, -1, -4, -0, -2, -0, -1, -5, -2, -7, -3, -4, -1, -3, -0, -3, -3, -5, -5, -4, -3, -2, -6, -1, -5, -4, -6, -5, -3, -2, -7, -5, -5, -6, -0, -0, -7, -7, -7, -1, -0, -4, -2, -6, -5, -7, -0, -7, -0, -1, -1, -3, -7, -0, -6, -6, -5, -5, -2, -1, -5, -1, -7, -0, -3, -0, -5, -1, -3, -3, -3, -5, -4, -3, -0, -5, -0, -4, -0, -2, -2, -4, -3, -7, -7, -6, -7, -6, -5, -0, -3, -4, -0, -3, -2, -2, -5, -2, -5, -6, -6, -0, -7, -4, -4, -1, -4, -2, -3, -1, -1, -5, -0, -6, -4, -6, -6, -7, -0, -5, -6, -4, -1, -2, -4, -1, -1, -7, -7, -0, -6, -0, -4, -3, -3, -0, -2, -4, -6, -5, -5, -1, -3, -3, -6, -1, -1, -6, -3, -3, -4, -3, -7, -4, -3, -3, -4, -1, -4, -2, -5, -3, -0, -6, -6, -1, -4, -6, -0, -3, -3, -3, -7, -2, -4, -2, -6, -0, -5, -6, -4, -6, -7, -7, -2, -6, -0, -7, -5, -7, -2, -7, -0, -0, -0, -6, -2, -7, -4, -1, -6, -5, -2, -7, -6, -2, -7, -6, -5, -5, -4, -3, -4, -7, -1, -4, -1, -5, -5, -5, -0, -1, -4, -6, -6, -0, -2, -5, -2, -6, -3, -2, -1, -1, -2, -6, -5, -1, -0, -4, -0, -0, -0, -6, -2, -7, -3, -5, -4, -6, -2, -5, -0, -0, -5, -7, -4, -6, -5, -2, -7, -6, -3, -2, -4, -0, -2, -3, -4, -6, -7, -2, -5, -5, -7, -2, -0, -4, -2, -6, -6, -3, -4, -3, -5, -2, -0, -7, -6, -6, -7, -2, -5, -7, -7, -5, -1, -6, -7, -3, -5, -1, -1, -5, -0, -6, -3, -7, -7, -3, -3, -4, -2, -6, -7, -4, -7, -0, -2, -6, -0, -1, -2, -5, -6, -0, -2, -5, -5, -4, -0, -2, -3, -7, -2, -6, -5, -0, -4, -4, -1, -2, -6, -5, -3, -2, -1, -0, -0, -2, -2, -1, -3, -1, -5, -2, -4, -0, -0, -0, -5, -5, -7, -6, -0, -0, -4, -2, -1, -6, -3, -4, -6, -0, -3, -6, -3, -7, -5, -3, -2, -7, -3, -0, -6, -3, -6, -7, -3, -5, -2, -5, -0, -1, -0, -0, -7, -3, -0, -3, -6, -7, -4, -1, -4, -5, -5, -2, -5, -2, -4, -6, -2, -2, -2, -5, -0, -7, -0, -3, -5, -6, -2, -0, -3, -4, -3, -5, -0, -6, -1, -1, -5, -7, -1, -2, -3, -0, -7, -1, -0, -0, -0, -7, -7, -5, -2, -5, -2, -4, -6, -1, -2, -2, -1, -0, -6, -5, -4, -4, -0, -4, -0, -7, -5, -5, -6, -5, -2, -3, -4, -7, -0, -6, -6, -6, -6, -0, -0, -2, -3, -6, -4, -1, -6, -7, -7, -0, -2, -1, -0, -2, -3, -4, -2, -5, -7, -1, -7, -0, -1, -2, -6, -1, -4, -0, -7, -7, -3, -3, -4, -0, -6, -0, -1, -6, -3, -2, -7, -6, -0, -2, -5, -4, -2, -0, -0, -4, -7, -5, -6, -2, -7, -6, -2, -6, -3, -2, -1, -0, -4, -4, -4, -1, -5, -7, -4, -5, -7, -3, -0, -0, -3, -1, -6, -2, -1, -3, -0, -2, -0, -5, -3, -4, -5, -0, -1, -0, -7, -2, -6, -0, -5, -5, -3, -2, -7, -3, -0, -6, -0, -0, -3, -0, -4, -7, -6, -1, -2, -1, -5, -1, -7, -4, -7, -2, -3, -6, -6, -2, -0, -5, -6, -2, -1, -6, -2, -5, -3, -2, -3, -0, -2, -3, -6, -2, -7, -1, -4, -4, -2, -7, -7, -4, -3, -6, -5, -1, -6, -6, -2, -1, -6, -1, -4, -0, -5, -2, -2, -6, -4, -4, -5, -4, -3, -3, -5, -6, -3, -7, -0, -0, -4, -2, -4, -3, -1, -2, -6, -3, -0, -5, -4, -6, -4, -3, -7, -7, -7, -4, -0, -7, -7, -1, -2, -7, -6, -1, -7, -6, -6, -0, -4, -4, -3, -5, -3, -3, -5, -3, -2, -4, -2, -2, -6, -1, -6, -7, -1, -4, -0, -0, -4, -6, -1, -1, -1, -6, -0, -6, -3, -3, -5, -3, -6, -5, -4, -2, -0, -6, -0, -2, -4, -5, -2, -1, -5, -2, -7, -4, -5, -1, -2, -3, -7, -7, -6, -5, -4, -6, -7, -6, -6, -2, -5, -7, -5, -6, -7, -7, -5, -3, -6, -7, -4, -2, -4, -4, -7, -6, -3, -6, -6, -1, -6, -1, -6, -5, -3, -1, -6, -1, -0, -0, -4, -7, -1, -1, -1, -4, -3, -6, -6, -4, -1, -0, -6, -2, -6, -5, -4, -5, -6, -0, -5, -1, -4, -6, -7, -6, -2, -5, -1, -0, -4, -2, -2, -2, -7, -5, -7, -7, -5, -7, -6, -3, -0, -1, -4, -0, -1, -4, -2, -7, -0, -4, -6, -5, -0, -2, -6, -2, -7, -1, -2, -0, -7, -7, -7, -3, -6, -2, -3, -3, -6, -2, -1, -7, -3, -1, -3, -2, -3, -7, -1, -1, -6, -6, -4, -1, -4, -1, -0, -2, -5, -7, -5, -7, -3, -5, -5, -3, -1, -5, -5, -7, -5, -2, -1, -0, -7, -4, -0, -2, -6, -1, -0, -5, -3, -0, -7, -7, -4, -7, -5, -2, -6, -7, -7, -5, -4, -0, -2, -1, -3, -5, -6, -7, -3, -2, -7, -5, -3, -6, -2, -3, -7, -5, -0, -5, -1, -0, -2, -1, -3, -1, -7, -6, -0, -1, -0, -7, -1, -2, -6, -1, -6, -0, -3, -2, -3, -5, -0, -6, -7, -1, -1, -1, -0, -7, -0, -3, -1, -7, -6, -0, -6, -4, -6, -7, -2, -7, -3, -7, -5, -4, -1, -6, -6, -5, -6, -6, -1, -6, -7, -0, -6, -1, -1, -6, -1, -4, -1, -0, -4, -6, -2, -5, -1, -1, -6, -7, -2, -3, -6, -2, -3, -3, -2, -4, -1, -0, -6, -1, -2, -5, -6, -1, -1, -7, -7, -5, -7, -3, -3, -5, -7, -7, -7, -0, -3, -2, -1, -4, -2, -3, -1, -3, -7, -0, -7, -1, -4, -2, -1, -5, -0, -0, -5, -0, -4, -3, -0, -4, -1, -5, -3, -2, -0, -5, -5, -7, -5, -1, -7, -3, -0, -6, -2, -2, -4, -6, -3, -3, -0, -7, -7, -7, -5, -6, -6, -1, -6, -6, -6, -6, -3, -6, -6, -6, -0, -5, -5, -2, -7, -3, -2, -2, -5, -2, -4, -6, -7, -6, -2, -0, -5, -5, -3, -7, -3, -7, -2, -5, -5, -6, -0, -4, -3, -7, -5, -3, -4, -7, -3, -0, -3, -5, -2, -2, -4, -0, -3, -6, -7, -0, -3, -7, -2, -6, -3, -5, -3, -7, -4, -0, -1, -7, -6, -3, -0, -6, -5, -4, -7, -7, -3, -2, -3, -1, -2, -2, -0, -3, -5, -5, -4, -4, -1, -1, -4, -5, -7, -4, -0, -1, -1, -0, -5, -5, -3, -4, -5, -3, -3, -4, -6, -3, -3, -3, -2, -2, -4, -1, -2, -0, -0, -2, -1, -2, -6, -3, -2, -0, -1, -0, -2, -5, -3, -7, -6, -2, -2, -6, -3, -6, -6, -3, -3, -4, -5, -3, -0, -5, -7, -4, -1, -5, -2, -7, -7, -3, -3, -0, -6, -0, -5, -4, -3, -0, -1, -0, -0, -5, -2, -5, -5, -5, -1, -0, -4, -5, -4, -5, -1, -5, -0, -2, -6, -2, -7, -6, -1, -2, -7, -0, -0, -5, -4, -6, -2, -2, -0, -7, -0, -4, -5, -1, -1, -1, -4, -3, -3, -7, -5, -1, -5, -6, -3, -4, -0, -1, -0, -7, -3, -7, -4, -1, -0, -7, -0, -7, -5, -3, -4, -0, -2, -2, -3, -5, -3, -5, -5, -7, -0, -4, -0, -5, -4, -0, -3, -3, -3, -3, -2, -4, -5, -7, -6, -6, -4, -4, -0, -6, -4, -6, -0, -7, -0, -5, -3, -2, -6, -0, -1, -2, -5, -6, -4, -5, -5, -1, -1, -7, -7, -0, -2, -3, -4, -1, -6, -1, -0, -5, -3, -1, -1, -0, -4, -7, -5, -0, -1, -1, -5, -7, -2, -7, -1, -4, -0, -4, -4, -7, -0, -3, -4, -6, -6, -0, -1, -6, -2, -5, -1, -5, -1, -6, -7, -6, -7, -7, -1, -1, -3, -2, -0, -5, -4, -6, -1, -7, -7, -1, -7, -2, -7, -2, -1, -1, -5, -1, -5, -1, -4, -3, -2, -6, -2, -5, -0, -7, -4, -0, -7, -3, -5, -0, -4, -5, -2, -6, -3, -4, -7, -5, -2, -2, -4, -3, -0, -2, -5, -6, -3, -1, -5, -2, -4, -2, -1, -1, -2, -2, -6, -5, -6, -4, -3, -4, -6, -1, -0, -7, -7, -3, -4, -6, -0, -1, -2, -0, -1, -2, -5, -0, -3, -1, -2, -2, -4, -4, -4, -4, -4, -4, -6, -5, -0, -7, -1, -5, -4, -1, -6, -6, -1, -6, -0, -2, -3, -4, -6, -4, -0, -2, -3, -7, -2, -3, -4, -2, -7, -1, -2, -7, -2, -6, -5, -5, -0, -7, -2, -5, -4, -6, -3, -7, -3, -7, -1, -3, -0, -2, -1, -4, -5, -2, -5, -2, -1, -1, -3, -4, -4, -4, -6, -1, -4, -1, -7, -6, -5, -7, -0, -3, -0, -6, -2, -6, -7, -6, -2, -1, -3, -4, -5, -7, -4, -3, -3, -4, -5, -0, -4, -6, -6, -7, -6, -0, -0, -7, -1, -4, -7, -0, -2, -4, -2, -7, -2, -7, -2, -6, -1, -6, -2, -6, -7, -6, -1, -0, -3, -1, -3, -2, -3, -5, -2, -3, -1, -1, -6, -3, -1, -5, -5, -3, -4, -4, -7, -1, -5, -6, -4, -3, -3, -5, -5, -1, -7, -7, -1, -7, -1, -2, -2, -6, -6, -3, -1, -1, -1, -7, -3, -0, -5, -1, -1, -0, -2, -2, -1, -7, -7, -6, -6, -5, -1, -2, -0, -2, -1, -2, -3, -2, -0, -0, -6, -6, -5, -6, -1, -7, -6, -3, -4, -4, -7, -6, -7, -4, -1, -3, -6, -1, -2, -3, -1, -4, -7, -5, -5, -0, -1, -3, -2, -1, -5, -6, -2, -4, -4, -6, -7, -4, -3, -4, -3, -5, -0, -2, -2, -0, -5, -6, -4, -0, -0, -1, -7, -1, -5, -7, -5, -6, -0, -1, -7, -2, -3, -2, -6, -7, -2, -5, -2, -1, -3, -0, -5, -5, -5, -6, -0, -6, -0, -5, -2, -2, -5, -3, -1, -2, -3, -3, -6, -2, -0, -1, -7, -2, -1, -1, -7, -0, -2, -1, -5, -1, -6, -3, -3, -3, -7, -5, -6, -4, -2, -7, -6, -2, -1, -4, -0, -7, -4, -5, -6, -2, -5, -2, -4, -0, -6, -5, -3, -2, -5, -7, -7, -3, -0, -4, -0, -6, -4, -2, -6, -1, -1, -6, -7, -3, -7, -2, -0, -5, -6, -0, -3, -4, -6, -0, -2, -2, -3, -3, -0, -6, -5, -2, -2, -6, -6, -3, -0, -0, -4, -7, -6, -2, -4, -7, -4, -5, -7, -5, -2, -2, -7, -2, -5, -1, -3, -1, -6, -0, -3, -5, -5, -3, -1, -4, -4, -2, -3, -1, -3, -1, -0, -1, -2, -3, -7, -6, -7, -4, -2, -1, -1, -0, -5, -3, -4, -4, -0, -7, -5, -2, -2, -1, -5, -3, -6, -6, -6, -1, -7, -5, -7, -1, -5, -5, -5, -5, -4, -6, -5, -4, -3, -7, -0, -6, -0, -3, -7, -3, -0, -3, -2, -5, -2, -4, -3, -4, -5, -4, -6, -6, -0, -1, -2, -4, -6, -7, -1, -2, -6, -3, -2, -2, -2, -7, -1, -3, -5, -1, -5, -1, -6, -1, -5, -7, -7, -0, -2, -3, -0, -3, -1, -6, -7, -3, -6, -5, -3, -3, -2, -6, -5, -2, -3, -0, -3, -2, -4, -3, -4, -3, -1, -2, -2, -6, -6, -6, -4, -2, -0, -2, -3, -4, -6, -7, -0, -7, -6, -3, -1, -5, -4, -2, -5, -3, -0, -7, -2, -7, -7, -5, -0, -6, -4, -7, -3, -5, -4, -4, -3, -0, -5, -5, -1, -2, -4, -1, -0, -7, -6, -5, -7, -7, -1, -5, -6, -7, -6, -5, -3, -6, -1, -6, -0, -3, -1, -3, -4, -5, -1, -7, -7, -6, -4, -6, -5, -0, -3, -0, -2, -1, -4, -0, -4, -5, -3, -1, -4, -3, -4, -1, -5, -7, -5, -1, -7, -0, -3, -6, -5, -1, -3, -4, -4, -2, -0, -6, -1, -5, -4, -4, -6, -1, -7, -7, -3, -6, -1, -2, -1, -6, -7, -0, -6, -7, -2, -7, -1, -7, -4, -3, -7, -2, -3, -2, -3, -4, -0, -0, -5, -3, -1, -7, -6, -7, -6, -3, -7, -7, -6, -7, -5, -0, -6, -2, -2, -1, -2, -5, -4, -7, -5, -3, -5, -7, -4, -6, -5, -3, -1, -3, -7, -4, -2, -0, -1, -1, -0, -5, -0, -0, -0, -4, -3, -5, -2, -7, -3, -1, -4, -0, -3, -3, -1, -3, -2, -6, -3, -3, -6, -5, -0, -1, -7, -3, -4, -7, -2, -4, -3, -0, -6, -3, -2, -6, -4, -2, -5, -6, -7, -0, -0, -7, -3, -4, -5, -6, -7, -2, -0, -2, -7, -6, -1, -1, -3, -5, -4, -7, -7, -3, -5, -7, -4, -7, -6, -7, -6, -0, -7, -3, -4, -1, -4, -3, -5, -7, -0, -6, -2, -3, -5, -6, -1, -3, -3, -2, -2, -6, -6, -0, -3, -7, -1, -2, -6, -2, -1, -6, -0, -2, -3, -4, -7, -2, -1, -5, -2, -4, -5, -7, -0, -5, -1, -4, -4, -2, -7, -6, -7, -6, -3, -3, -0, -2, -5, -2, -5, -1, -2, -0, -7, -5, -0, -4, -6, -6, -1, -5, -2, -6, -0, -4, -0, -4, -5, -7, -3, -5, -7, -4, -4, -0, -0, -2, -3, -7, -4, -1, -1, -2, -2, -3, -4, -2, -6, -3, -7, -3, -3, -7, -7, -2, -4, -7, -0, -7, -3, -7, -6, -4, -5, -6, -0, -1, -2, -2, -2, -1, -3, -4, -4, -7, -1, -2, -5, -4, -3, -6, -7, -5, -4, -3, -6, -1, -3, -5, -0, -1, -3, -1, -1, -5, -3, -7, -1, -1, -0, -4, -1, -2, -0, -6, -5, -3, -5, -2, -6, -3, -7, -1, -2, -2, -3, -6, -3, -4, -3, -6, -6, -4, -1, -0, -2, -7, -7, -7, -2, -7, -6, -5, -1, -1, -1, -5, -5, -5, -4, -7, -2, -7, -4, -6, -0, -6, -7, -4, -0, -1, -1, -4, -5, -0, -2, -0, -7, -0, -6, -7, -5, -3, -6, -5, -0, -5, -5, -0, -3, -4, -6, -5, -6, -4, -2, -2, -1, -6, -0, -4, -0, -4, -7, -7, -6, -7, -5, -0, -0, -2, -7, -2, -5, -6, -1, -0, -1, -7, -6, -6, -7, -5, -3, -1, -2, -5, -1, -3, -0, -0, -0, -7, -3, -6, -6, -2, -6, -4, -5, -1, -5, -3, -0, -5, -6, -0, -4, -2, -7, -3, -1, -1, -6, -3, -0, -5, -0, -0, -0, -1, -5, -5, -7, -5, -2, -4, -4, -3, -0, -2, -6, -4, -5, -1, -0, -1, -7, -1, -6, -0, -2, -7, -7, -3, -5, -3, -5, -5, -5, -2, -1, -7, -1, -5, -3, -5, -1, -6, -0, -1, -3, -6, -6, -5, -6, -7, -2, -5, -7, -4, -7, -5, -2, -1, -4, -5, -6, -2, -6, -3, -4, -4, -5, -1, -0, -6, -2, -3, -7, -0, -5, -2, -1, -0, -7, -5, -2, -4, -3, -2, -5, -0, -6, -6, -2, -2, -6, -3, -1, -6, -7, -4, -1, -2, -2, -5, -6, -7, -0, -0, -6, -1, -4, -0, -5, -1, -3, -0, -3, -3, -4, -5, -4, -2, -3, -6, -1, -4, -3, -5, -1, -6, -6, -1, -1, -6, -5, -7, -7, -7, -6, -4, -7, -0, -2, -6, -4, -6, -1, -5, -6, -7, -0, -7, -4, -4, -1, -6, -4, -1, -3, -3, -6, -6, -4, -7, -3, -6, -0, -5, -4, -2, -4, -4, -1, -4, -6, -2, -5, -7, -5, -0, -4, -2, -3, -5, -6, -0, -1, -2, -1, -3, -4, -7, -2, -5, -3, -4, -4, -6, -2, -7, -1, -4, -3, -7, -7, -0, -2, -7, -4, -5, -0, -7, -3, -3, -3, -4, -1, -5, -4, -1, -6, -0, -6, -4, -2, -5, -4, -7, -1, -0, -4, -1, -1, -5, -3, -5, -0, -1, -1, -7, -5, -1, -2, -5, -6, -2, -5, -0, -6, -5, -0, -4, -7, -4, -7, -5, -2, -0, -3, -5, -5, -7, -3, -1, -0, -5, -5, -3, -1, -4, -2, -6, -0, -4, -7, -0, -3, -4, -1, -2, -4, -6, -2, -6, -1, -7, -6, -7, -1, -3, -3, -4, -5, -3, -7, -7, -4, -7, -6, -1, -1, -5, -0, -6, -6, -1, -1, -7, -1, -4, -3, -5, -1, -5, -1, -3, -0, -5, -5, -2, -0, -5, -3, -7, -7, -7, -2, -5, -6, -1, -7, -6, -1, -0, -6, -2, -6, -2, -4, -7, -7, -3, -0, -7, -6, -5, -2, -6, -6, -2, -2, -0, -5, -2, -5, -1, -2, -6, -7, -1, -1, -5, -5, -1, -5, -0, -6, -3, -5, -0, -5, -6, -0, -6, -4, -4, -1, -4, -2, -0, -2, -2, -1, -6, -7, -2, -7, -7, -1, -0, -3, -3, -2, -5, -1, -7, -1, -7, -7, -1, -7, -6, -3, -3, -7, -6, -7, -5, -3, -1, -4, -7, -0, -5, -0, -6, -5, -4, -0, -3, -4, -3, -1, -4, -3, -4, -1, -6, -3, -6, -7, -6, -3, -2, -4, -7, -3, -5, -0, -1, -6, -1, -3, -4, -7, -2, -1, -3, -4, -0, -5, -6, -0, -2, -2, -0, -0, -7, -6, -6, -1, -3, -6, -6, -6, -6, -2, -6, -7, -3, -0, -4, -0, -5, -4, -7, -7, -7, -7, -3, -3, -6, -2, -2, -1, -7, -0, -1, -1, -5, -3, -7, -4, -6, -3, -5, -2, -4, -2, -7, -5, -1, -4, -0, -7, -3, -3, -0, -4, -7, -5, -2, -3, -5, -1, -3, -1, -5, -0, -5, -4, -1, -4, -0, -4, -3, -0, -7, -7, -7, -1, -2, -2, -3, -7, -4, -7, -0, -7, -0, -4, -4, -0, -0, -1, -0, -7, -0, -1, -1, -1, -1, -3, -5, -3, -6, -4, -1, -2, -2, -3, -6, -1, -6, -1, -0, -3, -1, -1, -2, -4, -5, -4, -4, -7, -0, -5, -1, -0, -6, -4, -0, -4, -0, -1, -6, -6, -4, -1, -0, -1, -0, -1, -2, -6, -3, -2, -1, -2, -2, -5, -3, -2, -0, -2, -7, -5, -3, -4, -2, -7, -3, -1, -5, -0, -0, -2, -5, -4, -0, -2, -0, -3, -1, -5, -5, -0, -2, -3, -5, -7, -7, -3, -4, -6, -3, -3, -5, -6, -3, -1, -7, -5, -7, -3, -4, -0, -2, -0, -5, -5, -5, -1, -0, -5, -2, -0, -6, -6, -6, -3, -1, -6, -7, -7, -3, -5, -4, -7, -7, -7, -7, -7, -7, -4, -4, -6, -7, -1, -6, -5, -3, -7, -1, -4, -6, -4, -1, -6, -0, -7, -5, -1, -0, -0, -3, -7, -2, -6, -6, -7, -3, -2, -0, -7, -1, -5, -2, -3, -5, -5, -6, -3, -7, -0, -5, -2, -0, -2, -2, -0, -2, -6, -3, -6, -0, -2, -0, -6, -5, -0, -1, -7, -2, -0, -7, -6, -5, -5, -1, -5, -6, -4, -0, -3, -5, -4, -0, -3, -0, -2, -4, -4, -2, -4, -3, -2, -6, -0, -1, -7, -5, -0, -1, -1, -3, -2, -3, -6, -4, -0, -0, -2, -4, -4, -4, -0, -5, -5, -4, -1, -6, -4, -1, -4, -7, -0, -3, -3, -1, -6, -3, -2, -7, -4, -4, -0, -5, -4, -1, -7, -7, -2, -3, -2, -1, -2, -1, -4, -7, -4, -3, -4, -4, -7, -0, -1, -7, -7, -4, -6, -6, -4, -2, -1, -7, -5, -5, -0, -0, -3, -5, -7, -0, -6, -6, -4, -5, -3, -4, -5, -3, -6, -6, -3, -4, -1, -1, -7, -5, -0, -7, -2, -7, -2, -4, -0, -0, -2, -2, -7, -3, -3, -7, -2, -6, -1, -4, -3, -0, -2, -0, -6, -2, -3, -4, -3, -2, -0, -0, -7, -6, -7, -6, -6, -2, -6, -5, -5, -5, -7, -6, -0, -5, -7, -5, -7, -5, -2, -4, -1, -6, -3, -3, -7, -2, -6, -0, -3, -6, -3, -1, -5, -6, -6, -5, -7, -4, -4, -7, -6, -4, -3, -2, -7, -1, -2, -5, -6, -6, -2, -1, -0, -2, -4, -0, -0, -0, -1, -7, -4, -5, -5, -3, -6, -5, -1, -4, -3, -1, -6, -2, -0, -2, -2, -4, -1, -0, -4, -2, -1, -6, -6, -1, -1, -6, -4, -7, -4, -5, -7, -1, -5, -0, -2, -0, -0, -0, -4, -5, -5, -2, -5, -6, -7, -2, -5, -0, -2, -2, -6, -1, -6, -2, -3, -6, -4, -7, -6, -6, -1, -5, -5, -5, -2, -3, -6, -5, -3, -3, -4, -1, -4, -6, -6, -5, -1, -5, -6, -6, -3, -2, -4, -6, -3, -4, -4, -1, -6, -3, -1, -6, -4, -4, -0, -2, -7, -6, -4, -5, -4, -6, -6, -3, -7, -4, -0, -3, -4, -3, -6, -1, -0, -2, -6, -1, -5, -4, -6, -5, -3, -7, -1, -7, -0, -1, -5, -5, -3, -2, -1, -3, -7, -4, -2, -0, -2, -0, -0, -3, -0, -7, -0, -2, -0, -7, -6, -1, -5, -3, -7, -6, -5, -5, -5, -0, -3, -1, -7, -4, -6, -7, -7, -0, -2, -1, -4, -4, -7, -1, -7, -1, -0, -2, -2, -2, -2, -1, -1, -0, -0, -1, -4, -6, -6, -4, -0, -1, -1, -1, -6, -6, -1, -5, -7, -0, -7, -0, -4, -4, -2, -5, -6, -7, -4, -5, -1, -6, -3, -6, -6, -1, -0, -3, -7, -1, -1, -1, -7, -5, -2, -5, -3, -0, -0, -4, -5, -3, -6, -1, -6, -0, -0, -2, -5, -7, -2, -5, -7, -4, -4, -1, -4, -7, -0, -2, -7, -7, -3, -4, -0, -3, -0, -3, -0, -3, -4, -5, -0, -0, -3, -3, -3, -7, -6, -6, -6, -4, -2, -6, -5, -7, -2, -7, -5, -4, -1, -6, -1, -7, -7, -2, -0, -1, -0, -2, -7, -5, -2, -1, -6, -7, -1, -3, -5, -1, -6, -0, -2, -6, -4, -2, -6, -2, -3, -5, -6, -1, -1, -0, -0, -6, -2, -2, -1, -0, -2, -7, -0, -7, -2, -4, -0, -1, -5, -7, -0, -2, -6, -4, -2, -2, -4, -0, -4, -4, -6, -7, -7, -7, -5, -7, -3, -6, -6, -4, -0, -1, -2, -4, -3, -3, -6, -5, -5, -5, -3, -4, -6, -4, -7, -1, -6, -6, -6, -3, -5, -6, -1, -2, -3, -5, -7, -2, -0, -2, -7, -6, -1, -0, -1, -3, -7, -2, -4, -4, -0, -3, -7, -0, -1, -0, -1, -1, -0, -4, -7, -4, -0, -1, -0, -4, -7, -2, -3, -3, -1, -2, -3, -0, -6, -7, -1, -6, -2, -7, -6, -4, -6, -1, -6, -4, -7, -6, -2, -3, -2, -1, -6, -1, -4, -0, -2, -0, -3, -6, -0, -5, -5, -7, -3, -4, -2, -7, -1, -2, -0, -1, -6, -5, -2, -0, -5, -3, -5, -3, -0, -1, -1, -0, -7, -5, -6, -7, -5, -5, -2, -4, -5, -6, -0, -3, -5, -3, -5, -1, -5, -1, -4, -1, -6, -4, -5, -3, -3, -2, -4, -7, -1, -1, -4, -0, -2, -6, -2, -6, -2, -6, -7, -6, -5, -5, -6, -1, -3, -7, -6, -0, -6, -1, -1, -4, -5, -1, -3, -2, -1, -3, -5, -2, -7, -6, -3, -6, -7, -7, -7, -6, -5, -2, -4, -7, -7, -0, -4, -3, -2, -6, -6, -5, -3, -0, -1, -1, -2, -6, -7, -7, -2, -0, -6, -4, -4, -2, -0, -7, -2, -5, -3, -6, -5, -0, -7, -3, -5, -3, -3, -4, -7, -0, -2, -0, -6, -4, -5, -5, -6, -1, -7, -3, -3, -7, -4, -6, -4, -6, -7, -5, -2, -3, -2, -1, -2, -1, -2, -7, -2, -3, -6, -7, -7, -4, -6, -3, -0, -7, -7, -1, -5, -5, -6, -0, -7, -3, -5, -4, -4, -2, -5, -1, -2, -5, -1, -1, -4, -7, -2, -1, -0, -0, -1, -3, -2, -1, -2, -6, -7, -2, -4, -2, -2, -0, -3, -4, -5, -7, -2, -0, -1, -6, -2, -2, -3, -6, -4, -7, -0, -2, -3, -0, -7, -5, -5, -5, -7, -1, -7, -1, -7, -6, -5, -6, -0, -4, -2, -6, -6, -0, -7, -1, -7, -7, -3, -5, -3, -1, -2, -4, -6, -5, -6, -7, -4, -7, -6, -6, -1, -6, -3, -0, -7, -2, -0, -0, -5, -6, -2, -4, -3, -0, -3, -6, -3, -4, -2, -3, -0, -0, -7, -6, -2, -0, -6, -7, -0, -6, -5, -1, -5, -4, -3, -7, -4, -2, -0, -3, -7, -5, -6, -5, -0, -4, -0, -5, -6, -3, -6, -6, -7, -4, -0, -3, -7, -6, -1, -7, -7, -7, -7, -6, -6, -5, -2, -2, -3, -5, -6, -2, -1, -6, -1, -5, -4, -4, -7, -4, -6, -0, -2, -2, -7, -4, -5, -4, -6, -5, -1, -4, -2, -7, -3, -1, -0, -0, -3, -5, -1, -4, -1, -0, -3, -1, -1, -4, -3, -4, -2, -0, -0, -5, -3, -4, -3, -7, -5, -5, -3, -2, -4, -1, -5, -0, -0, -2, -0, -4, -7, -6, -2, -7, -4, -4, -4, -1, -7, -1, -7, -1, -4, -2, -4, -1, -4, -1, -5, -0, -1, -2, -3, -2, -7, -1, -6, -1, -6, -1, -1, -6, -3, -0, -4, -2, -7, -6, -7, -7, -4, -4, -2, -5, -4, -0, -7, -3, -6, -2, -3, -4, -2, -3, -0, -2, -7, -2, -1, -5, -6, -7, -0, -5, -7, -3, -2, -4, -3, -3, -5, -5, -3, -3, -1, -2, -3, -6, -1, -4, -0, -7, -3, -5, -5, -4, -2, -6, -0, -6, -0, -6, -3, -4, -4, -5, -7, -1, -2, -3, -5, -3, -3, -3, -5, -5, -7, -3, -6, -0, -5, -3, -0, -5, -3, -5, -7, -6, -1, -4, -4, -1, -6, -2, -5, -1, -2, -7, -4, -6, -3, -1, -0, -4, -0, -6, -0, -3, -2, -2, -1, -1, -0, -6, -0, -7, -6, -1, -5, -2, -1, -6, -4, -2, -1, -2, -0, -3, -7, -4, -4, -0, -0, -1, -3, -0, -6, -3, -2, -2, -1, -7, -1, -0, -3, -4, -3, -4, -0, -5, -3, -4, -3, -1, -2, -0, -5, -3, -2, -2, -6, -5, -5, -4, -0, -1, -0, -4, -7, -3, -0, -1, -3, -3, -1, -4, -5, -1, -0, -2, -4, -4, -0, -4, -5, -6, -3, -0, -4, -7, -6, -7, -7, -5, -6, -3, -3, -2, -2, -6, -7, -0, -7, -1, -7, -2, -7, -5, -0, -7, -4, -1, -3, -3, -5, -7, -4, -0, -5, -1, -7, -1, -6, -0, -2, -1, -7, -6, -3, -4, -5, -7, -7, -7, -7, -7, -0, -3, -2, -2, -5, -6, -7, -4, -0, -2, -7, -3, -6, -4, -4, -5, -5, -5, -6, -5, -7, -6, -6, -6, -3, -1, -0, -2, -3, -6, -6, -6, -5, -7, -6, -6, -1, -2, -2, -0, -2, -4, -5, -4, -1, -3, -7, -5, -5, -2, -5, -0, -2, -4, -4, -6, -5, -2, -1, -4, -7, -3, -4, -0, -3, -6, -3, -3, -7, -6, -5, -1, -4, -7, -7, -2, -7, -3, -1, -7, -4, -7, -3, -2, -3, -2, -5, -7, -0, -3, -5, -0, -3, -1, -2, -2, -5, -2, -5, -5, -1, -2, -5, -7, -1, -3, -4, -3, -5, -7, -7, -3, -6, -4, -5, -1, -1, -0, -0, -3, -7, -3, -6, -0, -2, -0, -5, -7, -3, -3, -2, -2, -4, -4, -0, -1, -1, -6, -5, -6, -4, -7, -1, -2, -7, -7, -4, -6, -0, -3, -1, -2, -7, -6, -4, -5, -7, -3, -4, -4, -1, -5, -7, -5, -7, -6, -7, -4, -0, -0, -4, -4, -6, -3, -0, -4, -6, -3, -5, -1, -7, -3, -0, -4, -2, -2, -1, -3, -6, -5, -3, -4, -1, -3, -0, -0, -1, -4, -0, -5, -5, -5, -4, -1, -5, -4, -4, -4, -6, -4, -5, -5, -2, -3, -1, -4, -1, -1, -6, -2, -0, -2, -6, -1, -0, -2, -2, -3, -7, -2, -1, -1, -6, -7, -2, -7, -6, -6, -6, -1, -6, -6, -2, -6, -3, -1, -1, -4, -5, -7, -3, -1, -4, -7, -0, -6, -7, -5, -0, -5, -2, -1, -1, -5, -6, -3, -0, -1, -6, -7, -5, -4, -2, -1, -3, -1, -5, -6, -6, -4, -0, -2, -6, -7, -7, -7, -0, -1, -2, -4, -5, -5, -6, -6, -2, -7, -7, -2, -3, -5, -4, -6, -4, -2, -1, -3, -7, -4, -0, -6, -1, -1, -2, -3, -1, -4, -4, -3, -5, -1, -3, -1, -7, -1, -1, -1, -6, -6, -1, -2, -3, -4, -3, -6, -4, -3, -4, -7, -4, -1, -6, -0, -4, -7, -2, -4, -5, -2, -7, -4, -6, -4, -6, -0, -7, -7, -6, -0, -4, -4, -1, -7, -1, -1, -3, -6, -5, -0, -3, -6, -3, -2, -5, -7, -6, -0, -5, -5, -1, -1, -1, -5, -1, -1, -3, -6, -6, -7, -7, -0, -7, -4, -5, -2, -7, -4, -2, -2, -3, -3, -2, -1, -4, -5, -1, -2, -2, -5, -6, -5, -3, -2, -4, -4, -3, -2, -7, -5, -2, -0, -7, -0, -2, -6, -6, -5, -1, -0, -2, -4, -1, -5, -3, -1, -2, -7, -5, -6, -3, -4, -4, -1, -2, -6, -4, -0, -5, -3, -4, -0, -6, -6, -6, -4, -6, -4, -5, -1, -6, -6, -3, -4, -2, -7, -7, -3, -3, -4, -4, -6, -0, -2, -5, -6, -7, -1, -7, -1, -1, -4, -7, -2, -2, -3, -3, -1, -7, -5, -0, -7, -3, -4, -5, -1, -7, -5, -6, -4, -0, -1, -7, -6, -0, -2, -5, -2, -5, -3, -0, -3, -5, -3, -1, -6, -5, -3, -1, -2, -5, -4, -6, -3, -6, -6, -7, -3, -0, -3, -3, -5, -7, -5, -1, -4, -6, -6, -0, -1, -3, -4, -0, -2, -4, -2, -2, -1, -5, -1, -3, -3, -1, -5, -7, -0, -7, -0, -4, -2, -4, -2, -7, -4, -3, -4, -1, -0, -1, -6, -2, -2, -3, -4, -0, -5, -0, -1, -5, -6, -1, -3, -7, -3, -1, -2, -5, -0, -7, -6, -7, -7, -5, -1, -5, -7, -6, -1, -1, -6, -1, -0, -6, -7, -5, -1, -1, -6, -3, -7, -0, -5, -7, -0, -4, -0, -7, -7, -7, -4, -0, -5, -3, -0, -0, -0, -4, -1, -2, -4, -2, -6, -1, -5, -1, -5, -3, -0, -2, -0, -6, -3, -4, -5, -0, -7, -3, -0, -1, -6, -5, -1, -3, -3, -2, -2, -7, -6, -0, -1, -1, -1, -0, -0, -1, -2, -5, -2, -3, -6, -7, -0, -3, -2, -1, -5, -5, -6, -6, -3, -4, -3, -1, -5, -6, -4, -2, -2, -7, -1, -0, -3, -1, -1, -1, -0, -6, -4, -0, -6, -6, -6, -0, -4, -4, -5, -3, -3, -1, -0, -2, -5, -6, -6, -4, -1, -7, -3, -0, -3, -4, -0, -3, -2, -3, -7, -4, -0, -1, -0, -5, -0, -5, -2, -7, -4, -3, -5, -6, -5, -3, -3, -0, -3, -4, -5, -0, -6, -4, -7, -1, -2, -2, -1, -7, -1, -3, -4, -7, -7, -3, -2, -2, -0, -2, -7, -5, -5, -3, -3, -7, -5, -7, -0, -4, -0, -5, -2, -3, -5, -0, -3, -6, -7, -2, -6, -2, -4, -6, -0, -4, -1, -5, -4, -2, -0, -0, -5, -5, -6, -6, -4, -7, -5, -6, -3, -7, -3, -2, -0, -6, -3, -5, -2, -5, -1, -0, -3, -7, -1, -3, -7, -2, -7, -2, -1, -1, -7, -6, -0, -4, -5, -3, -5, -1, -6, -4, -0, -7, -2, -1, -3, -7, -5, -0, -1, -2, -6, -4, -1, -0, -6, -0, -5, -7, -1, -5, -3, -6, -7, -0, -4, -5, -1, -5, -3, -4, -3, -4, -6, -7, -7, -4, -1, -0, -2, -4, -2, -1, -2, -1, -6, -3, -2, -2, -2, -1, -4, -1, -2, -4, -6, -4, -7, -0, -0, -1, -0, -4, -6, -2, -1, -1, -3, -5, -3, -3, -2, -4, -0, -1, -5, -6, -2, -4, -3, -4, -4, -3, -5, -3, -6, -6, -6, -5, -0, -5, -2, -5, -3, -0, -4, -7, -5, -0, -4, -4, -2, -2, -4, -2, -1, -1, -1, -6, -0, -4, -0, -3, -1, -0, -4, -6, -1, -6, -0, -2, -1, -0, -2, -7, -4, -0, -0, -3, -7, -0, -5, -5, -6, -6, -7, -6, -3, -2, -6, -7, -6, -6, -2, -0, -6, -7, -7, -4, -1, -7, -7, -6, -0, -5, -6, -7, -3, -3, -6, -0, -5, -3, -7, -6, -2, -2, -1, -1, -5, -4, -0, -4, -7, -2, -4, -5, -7, -4, -6, -3, -7, -7, -2, -2, -4, -0, -1, -0, -7, -4, -0, -2, -6, -3, -5, -3, -3, -4, -4, -1, -4, -2, -2, -2, -0, -6, -6, -3, -7, -4, -5, -0, -1, -3, -1, -7, -2, -6, -2, -6, -2, -4, -2, -5, -6, -1, -2, -1, -3, -5, -5, -4, -0, -2, -0, -4, -6, -1, -2, -1, -5, -6, -4, -0, -0, -1, -0, -1, -1, -5, -7, -7, -1, -4, -5, -4, -0, -0, -2, -2, -4, -3, -5, -6, -7, -6, -0, -4, -6, -1, -7, -4, -3, -6, -7, -4, -4, -7, -1, -4, -5, -0, -3, -0, -3, -4, -6, -0, -7, -5, -2, -6, -6, -1, -0, -0, -6, -0, -0, -6, -5, -5, -0, -7, -6, -2, -7, -6, -2, -2, -2, -3, -7, -1, -0, -5, -5, -0, -7, -7, -5, -5, -3, -3, -2, -3, -0, -1, -4, -6, -2, -1, -2, -0, -7, -6, -2, -6, -6, -3, -3, -7, -6, -5, -0, -1, -4, -4, -3, -6, -3, -0, -7, -5, -5, -5, -2, -6, -3, -0, -1, -7, -1, -7, -0, -1, -6, -3, -5, -2, -1, -4, -1, -5, -3, -1, -1, -3, -2, -4, -0, -7, -7, -0, -7, -1, -2, -7, -0, -4, -7, -3, -5, -3, -4, -6, -2, -3, -0, -0, -3, -5, -5, -1, -0, -4, -7, -3, -6, -0, -4, -7, -1, -0, -5, -1, -1, -7, -7, -1, -1, -5, -6, -7, -5, -5, -5, -1, -4, -7, -0, -7, -2, -0, -1, -2, -3, -0, -3, -1, -3, -2, -3, -2, -0, -1, -2, -6, -4, -7, -4, -1, -5, -4, -3, -2, -6, -2, -4, -5, -7, -3, -7, -3, -5, -0, -0, -5, -5, -4, -0, -4, -5, -2, -3, -2, -5, -6, -1, -4, -4, -4, -6, -7, -7, -4, -2, -4, -3, -5, -4, -3, -3, -6, -3, -5, -6, -6, -6, -6, -4, -2, -5, -7, -1, -5, -1, -3, -6, -1, -1, -1, -3, -6, -6, -2, -3, -0, -1, -6, -5, -4, -4, -0, -3, -3, -0, -0, -4, -7, -1, -6, -4, -3, -7, -1, -0, -5, -0, -0, -5, -5, -1, -1, -1, -3, -7, -4, -5, -5, -2, -0, -2, -5, -1, -4, -6, -2, -0, -7, -4, -5, -5, -4, -6, -5, -7, -7, -4, -4, -1, -1, -5, -3, -0, -4, -5, -7, -0, -5, -2, -6, -6, -1, -6, -2, -3, -2, -2, -2, -3, -6, -1, -1, -6, -3, -2, -4, -5, -1, -6, -4, -5, -7, -5, -7, -2, -6, -3, -4, -1, -6, -3, -4, -7, -2, -0, -3, -5, -6, -3, -0, -5, -6, -7, -0, -6, -6, -3, -6, -2, -3, -0, -6, -3, -3, -4, -4, -6, -7, -5, -0, -4, -5, -5, -1, -4, -5, -3, -0, -7, -1, -5, -4, -6, -3, -4, -6, -3, -1, -5, -6, -5, -5, -7, -0, -5, -4, -3, -6, -5, -3, -5, -1, -1, -7, -6, -6, -2, -1, -1, -1, -1, -2, -1, -4, -5, -0, -4, -1, -4, -4, -5, -4, -7, -4, -5, -3, -5, -3, -6, -0, -2, -7, -3, -1, -4, -0, -1, -7, -1, -3, -3, -1, -1, -7, -4, -4, -1, -6, -1, -4, -3, -2, -7, -0, -6, -0, -3, -5, -2, -3, -1, -3, -6, -0, -0, -5, -4, -3, -5, -6, -4, -5, -1, -1, -6, -4, -7, -2, -4, -3, -7, -2, -6, -5, -1, -7, -5, -4, -1, -6, -0, -4, -2, -1, -1, -5, -1, -6, -2, -2, -7, -1, -0, -3, -2, -2, -2, -3, -1, -2, -4, -1, -0, -2, -4, -7, -5, -2, -2, -6, -1, -5, -6, -6, -3, -0, -6, -6, -0, -5, -7, -4, -3, -2, -1, -4, -5, -4, -1, -4, -3, -2, -7, -0, -4, -2, -6, -6, -3, -0, -2, -6, -1, -0, -2, -0, -1, -5, -0, -1, -4, -0, -2, -5, -1, -4, -2, -4, -4, -4, -6, -0, -1, -4, -5, -6, -5, -4, -5, -6, -7, -3, -3, -5, -4, -4, -2, -2, -1, -2, -4, -1, -3, -7, -3, -2, -5, -2, -0, -5, -7, -3, -3, -4, -6, -2, -4, -2, -4, -7, -2, -0, -0, -1, -1, -1, -2, -2, -7, -5, -1, -3, -3, -5, -7, -1, -7, -4, -7, -3, -3, -0, -6, -6, -5, -4, -7, -7, -2, -7, -1, -7, -2, -7, -2, -2, -7, -5, -2, -2, -2, -1, -1, -2, -6, -7, -1, -5, -6, -2, -4, -6, -5, -1, -7, -6, -5, -4, -4, -0, -0, -0, -2, -5, -6, -3, -0, -3, -2, -5, -5, -5, -4, -2, -3, -6, -2, -0, -7, -1, -0, -0, -4, -6, -4, -7, -1, -4, -3, -7, -7, -7, -4, -1, -5, -6, -2, -5, -7, -0, -3, -1, -4, -4, -4, -6, -4, -7, -3, -1, -6, -2, -0, -1, -7, -5, -2, -6, -5, -1, -7, -1, -6, -5, -7, -3, -1, -2, -3, -5, -2, -1, -6, -1, -5, -6, -7, -2, -3, -6, -5, -6, -4, -7, -2, -1, -0, -2, -0, -2, -6, -5, -7, -0, -2, -2, -7, -1, -7, -7, -5, -7, -2, -4, -4, -4, -3, -2, -5, -3, -5, -3, -6, -5, -7, -1, -7, -4, -7, -3, -7, -6, -3, -4, -4, -5, -7, -4, -3, -0, -2, -1, -0, -2, -6, -3, -2, -7, -0, -7, -4, -2, -0, -7, -1, -1, -6, -7, -3, -0, -5, -3, -5, -7, -2, -6, -0, -6, -7, -0, -3, -3, -2, -4, -6, -5, -1, -6, -3, -4, -3, -1, -2, -7, -2, -5, -2, -1, -4, -7, -7, -4, -6, -2, -0, -2, -5, -0, -7, -3, -1, -1, -2, -2, -6, -0, -0, -4, -0, -1, -1, -4, -0, -1, -4, -7, -7, -6, -6, -4, -1, -2, -5, -7, -3, -1, -6, -5, -5, -1, -1, -2, -4, -2, -3, -7, -1, -1, -1, -7, -1, -0, -0, -3, -5, -7, -0, -2, -7, -1, -2, -2, -3, -5, -3, -7, -4, -1, -7, -4, -0, -3, -0, -0, -4, -2, -3, -0, -5, -5, -7, -0, -1, -4, -0, -4, -1, -2, -2, -3, -0, -3, -6, -4, -6, -1, -4, -0, -4, -7, -0, -5, -5, -0, -2, -6, -6, -6, -6, -0, -5, -5, -0, -1, -6, -3, -3, -3, -7, -6, -7, -0, -4, -1, -0, -3, -2, -5, -1, -3, -1, -5, -7, -2, -3, -5, -6, -2, -7, -3, -5, -0, -3, -4, -2, -1, -3, -7, -7, -6, -3, -2, -7, -3, -4, -7, -6, -0, -4, -4, -3, -1, -2, -2, -6, -5, -5, -3, -1, -5, -7, -5, -0, -4, -0, -3, -2, -3, -6, -0, -2, -2, -1, -2, -3, -3, -6, -7, -3, -2, -6, -5, -6, -4, -3, -0, -3, -3, -5, -0, -7, -6, -7, -2, -7, -4, -4, -4, -4, -0, -2, -7, -6, -5, -3, -4, -1, -0, -3, -2, -5, -1, -4, -7, -4, -0, -6, -6, -1, -0, -3, -3, -0, -2, -4, -4, -0, -7, -2, -7, -3, -0, -6, -1, -5, -2, -4, -3, -2, -7, -1, -3, -2, -2, -2, -7, -6, -1, -6, -5, -3, -2, -6, -0, -2, -7, -1, -4, -4, -4, -7, -1, -3, -4, -2, -3, -3, -3, -2, -3, -2, -1, -5, -7, -4, -0, -5, -7, -3, -0, -0, -5, -3, -4, -5, -6, -5, -4, -6, -0, -6, -6, -1, -1, -6, -7, -3, -6, -0, -0, -2, -3, -0, -1, -2, -3, -7, -5, -6, -5, -7, -2, -3, -3, -6, -2, -3, -6, -6, -7, -2, -2, -3, -1, -5, -4, -5, -0, -1, -2, -6, -0, -3, -6, -2, -6, -1, -3, -2, -4, -1, -3, -3, -7, -1, -5, -6, -4, -5, -3, -4, -6, -1, -7, -5, -3, -3, -0, -7, -4, -3, -4, -4, -3, -7, -6, -1, -0, -0, -1, -3, -2, -2, -5, -0, -7, -4, -0, -3, -1, -3, -0, -4, -5, -6, -2, -4, -4, -1, -0, -4, -2, -5, -7, -7, -6, -3, -6, -6, -7, -6, -2, -3, -0, -5, -3, -1, -2, -3, -5, -5, -7, -6, -1, -5, -0, -7, -6, -7, -7, -6, -6, -6, -0, -7, -2, -3, -6, -6, -2, -0, -3, -6, -6, -0, -7, -5, -0, -4, -1, -2, -3, -1, -6, -3, -3, -4, -5, -3, -2, -5, -4, -3, -5, -0, -0, -3, -3, -0, -3, -6, -7, -2, -3, -7, -5, -1, -6, -6, -4, -0, -0, -0, -3, -6, -7, -2, -7, -2, -3, -2, -7, -0, -3, -4, -4, -3, -0, -6, -2, -6, -7, -5, -1, -2, -1, -6, -3, -5, -7, -1, -0, -1, -6, -0, -3, -3, -5, -7, -1, -1, -5, -0, -4, -6, -6, -1, -2, -5, -1, -7, -3, -3, -1, -5, -0, -0, -7, -4, -2, -7, -1, -4, -6, -6, -1, -0, -0, -4, -7, -7, -3, -4, -1, -3, -6, -2, -7, -1, -4, -4, -0, -3, -7, -7, -3, -3, -7, -1, -4, -6, -2, -2, -1, -0, -0, -5, -0, -6, -5, -0, -1, -6, -5, -3, -4, -5, -7, -7, -5, -6, -3, -5, -4, -7, -6, -5, -7, -2, -3, -2, -0, -3, -6, -0, -3, -1, -0, -1, -1, -4, -4, -2, -1, -7, -4, -3, -7, -7, -0, -7, -3, -4, -3, -5, -2, -0, -0, -5, -6, -6, -6, -0, -6, -6, -5, -6, -0, -1, -0, -7, -6, -6, -5, -5, -0, -3, -5, -2, -4, -0, -2, -2, -7, -7, -2, -4, -6, -7, -1, -5, -4, -3, -7, -4, -1, -3, -0, -5, -5, -0, -5, -6, -6, -5, -5, -0, -5, -2, -6, -0, -0, -5, -1, -4, -3, -5, -1, -4, -1, -4, -5, -5, -3, -0, -5, -2, -7, -3, -5, -4, -1, -0, -2, -6, -1, -1, -1, -1, -2, -0, -3, -0, -5, -6, -4, -2, -7, -6, -1, -4, -6, -1, -4, -2, -3, -1, -2, -5, -4, -2, -1, -7, -5, -6, -5, -1, -6, -4, -7, -6, -1, -5, -7, -3, -2, -2, -6, -4, -0, -1, -3, -0, -2, -4, -4, -6, -4, -7, -2, -7, -2, -2, -6, -4, -6, -7, -7, -0, -6, -7, -5, -7, -3, -4, -0, -0, -1, -1, -5, -2, -5, -2, -2, -0, -7, -0, -2, -2, -6, -5, -7, -3, -6, -2, -6, -5, -2, -4, -7, -7, -2, -1, -0, -1, -6, -3, -1, -0, -0, -6, -1, -1, -7, -7, -1, -5, -3, -7, -4, -5, -2, -1, -7, -3, -3, -0, -6, -3, -3, -2, -7, -6, -7, -2, -0, -4, -2, -3, -0, -0, -0, -4, -1, -0, -1, -0, -7, -1, -0, -5, -2, -7, -3, -4, -3, -6, -7, -4, -5, -6, -6, -3, -1, -7, -1, -2, -6, -5, -2, -0, -3, -4, -1, -0, -0, -4, -5, -7, -0, -6, -2, -2, -4, -4, -2, -1, -7, -5, -1, -5, -2, -6, -3, -5, -1, -2, -2, -4, -7, -4, -1, -5, -1, -5, -3, -4, -4, -5, -5, -7, -4, -3, -7, -3, -2, -2, -2, -1, -1, -0, -0, -1, -5, -1, -6, -0, -2, -0, -6, -4, -4, -1, -1, -5, -2, -1, -4, -5, -5, -2, -3, -1, -7, -2, -0, -5, -0, -7, -4, -2, -0, -3, -5, -4, -7, -4, -5, -5, -0, -0, -0, -2, -3, -5, -3, -7, -2, -4, -6, -7, -2, -1, -6, -3, -1, -1, -0, -7, -4, -4, -4, -4, -7, -2, -1, -3, -5, -1, -5, -2, -4, -2, -4, -1, -1, -2, -0, -0, -7, -5, -4, -2, -2, -1, -6, -6, -3, -5, -7, -7, -6, -1, -7, -3, -5, -6, -5, -4, -2, -0, -3, -3, -4, -3, -7, -3, -6, -2, -0, -0, -2, -3, -2, -6, -0, -4, -2, -4, -2, -1, -7, -6, -3, -5, -4, -0, -0, -1, -2, -7, -3, -0, -5, -1, -1, -3, -6, -2, -2, -6, -5, -7, -3, -7, -1, -6, -1, -2, -5, -7, -3, -6, -0, -0, -4, -1, -1, -6, -1, -0, -2, -3, -3, -3, -5, -1, -1, -7, -7, -5, -1, -2, -0, -2, -2, -1, -0, -2, -2, -6, -2, -0, -7, -7, -0, -6, -0, -3, -3, -6, -4, -4, -0, -5, -0, -7, -0, -7, -2, -0, -1, -5, -4, -0, -2, -0, -7, -0, -0, -5, -5, -5 diff --git a/gr-atsc/src/lib/qa_atsci_viterbi_decoder.cc b/gr-atsc/src/lib/qa_atsci_viterbi_decoder.cc deleted file mode 100644 index 8902b6eb8..000000000 --- a/gr-atsc/src/lib/qa_atsci_viterbi_decoder.cc +++ /dev/null @@ -1,178 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <cppunit/TestAssert.h> -#include <qa_atsci_viterbi_decoder.h> -#include <qa_atsci_trellis_encoder.h> -#include <cstdio> -#include <string.h> -#include <stdlib.h> -#include <time.h> - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - - -static const int NCODERS = atsci_viterbi_decoder::NCODERS; - -#if 0 -static void -map_to_soft_symbols (atsc_soft_data_segment &out, - const atsc_data_segment &in) -{ - for (unsigned int i = 0; i < NELEM (in.data); i++){ - out.data[i] = in.data[i] * 2 - 7; - } -} -#endif - -static void -pad_decoder_input (atsc_soft_data_segment out[NCODERS]) -{ - memset (out, 0, sizeof (out)); - - // add data segment sync - for (int i = 0; i < NCODERS; i++){ - out[i].data[0] = 5; - out[i].data[1] = -5; - out[i].data[2] = -5; - out[i].data[3] = 5; - out[i].pli.set_regular_seg (false, i); - } -} - -void -qa_atsci_viterbi_decoder::t0 () -{ -#if 0 - atsci_trellis_encoder enc; - atsc_mpeg_packet_rs_encoded encoder_in[NCODERS]; - atsc_data_segment encoder_out[NCODERS]; - atsc_soft_data_segment decoder_in[NCODERS]; - atsc_soft_data_segment decoder_in_pad[NCODERS]; - atsc_mpeg_packet_rs_encoded decoder_out[NCODERS]; - atsc_mpeg_packet_rs_encoded decoder_out_pad[NCODERS]; - - - memset (encoder_in, 0, sizeof (encoder_in)); - memset (encoder_out, 0, sizeof (encoder_out)); - memset (decoder_out_pad, 0, sizeof (decoder_out_pad)); - - srandom (1); - - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (encoder_in[i].data); j++){ - int t = (random () >> 8) & 0xff; // 8 random bits - encoder_in[i].data[j] = t; - } - } - - fflush (stdout); - printf ("@@@ ENCODER INPUT @@@\n"); - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (encoder_in[i].data); j++){ - printf ("%d\n", encoder_in[i].data[j]); - } - } - - enc.reset (); - enc.encode (encoder_out, encoder_in); - - printf ("@@@ ENCODER OUTPUT @@@\n"); - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (encoder_out[i].data); j++){ - printf ("%d\n", encoder_out[i].data[j]); - } - } - - for (int i = 0; i < NCODERS; i++) - map_to_soft_symbols (decoder_in[i], encoder_out[i]); - - viterbi.reset (); - - // this has only the previous (non-existant) output - viterbi.decode (decoder_out_pad, decoder_in); - - // now we'll see the real output - pad_decoder_input (decoder_in_pad); - viterbi.decode (decoder_out, decoder_in_pad); - - printf ("@@@ DECODER OUTPUT @@@\n"); - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (decoder_out[i].data); j++){ - printf ("%d\n", decoder_out[i].data[j]); - } - } - fflush (stdout); -#endif -} - -void -qa_atsci_viterbi_decoder::t1 () -{ - atsc_soft_data_segment decoder_in[NCODERS]; - atsc_soft_data_segment decoder_in_pad[NCODERS]; - atsc_mpeg_packet_rs_encoded decoder_out[NCODERS]; - atsc_mpeg_packet_rs_encoded decoder_out_pad[NCODERS]; - atsc_mpeg_packet_rs_encoded expected_out[NCODERS]; - static const float raw_input[NCODERS * NELEM (decoder_in[0].data)] = { -#include "qa_atsci_viterbi_decoder_t1_input.dat" - }; - static const unsigned char raw_output[NCODERS * NELEM (expected_out[0].data)] = { -#include "qa_atsci_viterbi_decoder_t1_output.dat" - }; - - - // load up input - const float *ri = &raw_input[0]; - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (decoder_in[i].data); j++){ - decoder_in[i].data[j] = *ri++; - } - decoder_in[i].pli.set_regular_seg (false, i); - } - - // load up expected output - const unsigned char *ro = &raw_output[0]; - for (int i = 0; i < NCODERS; i++){ - for (unsigned int j = 0; j < NELEM (expected_out[i].data); j++){ - expected_out[i].data[j] = *ro++; - } - expected_out[i].pli.set_regular_seg (false, i); - } - - viterbi.reset (); - - // this has only the previous (non-existant) output - viterbi.decode (decoder_out_pad, decoder_in); - - // now we'll see the real output - pad_decoder_input (decoder_in_pad); - viterbi.decode (decoder_out, decoder_in_pad); - - for (int i = 0; i < NCODERS; i++){ // check the result - CPPUNIT_ASSERT (expected_out[i] == decoder_out[i]); - } -} diff --git a/gr-atsc/src/lib/qa_atsci_viterbi_decoder.h b/gr-atsc/src/lib/qa_atsci_viterbi_decoder.h deleted file mode 100644 index 440c79caf..000000000 --- a/gr-atsc/src/lib/qa_atsci_viterbi_decoder.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_ATSC_VITERBI_DECODER_H_ -#define _QA_ATSC_VITERBI_DECODER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <stdio.h> -#include <atsci_viterbi_decoder.h> - -class qa_atsci_viterbi_decoder : public CppUnit::TestCase { - - public: - - void setUp (void) - { - viterbi.reset (); - } - - CPPUNIT_TEST_SUITE (qa_atsci_viterbi_decoder); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST_SUITE_END (); - - private: - atsci_viterbi_decoder viterbi; - - void t0 (); - void t1 (); -}; - - -#endif /* _QA_ATSC_VITERBI_DECODER_H_ */ diff --git a/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_input.dat b/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_input.dat deleted file mode 100644 index b2f356c87..000000000 --- a/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_input.dat +++ /dev/null @@ -1,9984 +0,0 @@ - 5 + -0.863407, - -5 + 0.630254, - -5 + 0.766777, - 5 + -0.587788, - -3 + 0.197374, - -7 + -0.928392, - 1 + 0.846137, - -3 + -0.148515, - 5 + 0.20529, - -3 + 0.957658, - 1 + 0.712777, - -3 + -0.783731, - -7 + -0.649688, - -3 + 0.364183, - -3 + 0.766379, - 5 + -0.254228, - -5 + 0.265344, - 1 + -0.0926997, - 5 + -0.729882, - -5 + -0.946608, - 7 + 0.941424, - -1 + 0.00502258, - 5 + 0.353994, - -1 + -0.431315, - -3 + 0.802947, - 7 + 0.0174765, - -1 + 0.107732, - 7 + -0.426013, - -3 + 0.179269, - 1 + -0.334729, - -5 + 0.363112, - 1 + -0.793512, - -1 + -0.386831, - 7 + -0.469307, - 7 + -0.592471, - 3 + -0.0650877, - 7 + 0.465307, - -1 + 0.0575076, - 3 + 0.804467, - 7 + 0.766673, - -3 + 0.177288, - -3 + 0.254259, - -7 + 0.0933109, - 3 + -0.132741, - -7 + 0.226975, - 1 + 0.805, - 3 + 0.474327, - 3 + -0.147847, - -1 + 0.3179, - -7 + -0.141455, - 3 + 0.322113, - -3 + 0.633945, - -1 + -0.950742, - -5 + -0.39542, - 3 + -0.0594983, - -3 + -0.772717, - -5 + 0.545784, - 7 + 0.398416, - 3 + -0.673597, - 3 + -0.790352, - -7 + -0.544624, - 7 + -0.633903, - -1 + -0.908654, - -3 + -0.311397, - -5 + 0.662512, - -3 + -0.135222, - -7 + 0.366291, - 1 + -0.741085, - -7 + -0.29157, - -5 + -0.673842, - 3 + 0.776452, - -5 + -0.0937042, - 3 + 0.683802, - -5 + -0.722854, - -7 + 0.0347072, - -5 + 0.40685, - -5 + 0.31874, - 5 + -0.947299, - 3 + -0.955457, - 1 + 0.742103, - -5 + -0.535021, - -5 + -0.67394, - -5 + -0.108192, - -1 + -0.968649, - 1 + 0.445698, - 3 + -0.476884, - 7 + 0.566045, - -7 + -0.137864, - -1 + -0.190159, - -5 + -0.0220287, - 5 + 0.307356, - 5 + 0.917233, - -7 + 0.320761, - 3 + -0.789388, - -5 + 0.117822, - 5 + -0.604396, - -1 + 0.552753, - 7 + -0.446649, - 7 + -0.810118, - 7 + -0.658175, - -7 + 0.553164, - -7 + -0.344854, - -3 + 0.280593, - 7 + -0.884303, - 7 + 0.720506, - -1 + -0.987799, - 7 + 0.793155, - 1 + -0.850125, - 7 + 0.115369, - 5 + 0.544406, - 5 + -0.276058, - -1 + -0.231108, - -5 + 0.376881, - 3 + -0.559075, - 7 + -0.915446, - -1 + -0.460641, - 3 + 0.818044, - -3 + -0.991244, - 1 + 0.420497, - 1 + 0.485863, - -3 + -0.376003, - 5 + -0.350986, - 5 + 0.430744, - -3 + 0.463798, - 5 + 0.42518, - 5 + -0.290836, - -5 + -0.691567, - -7 + 0.824346, - 3 + 0.450636, - -3 + 0.043629, - 7 + 0.316293, - 5 + -0.120924, - 1 + 0.726472, - -1 + -0.543775, - 3 + 0.933344, - -3 + 0.132114, - -3 + -0.310619, - 5 + 0.911921, - -1 + -0.497207, - 3 + -0.637383, - -5 + -0.732262, - 7 + 0.107649, - 3 + 0.520015, - -1 + 0.157455, - -3 + -0.894858, - -1 + 0.0945327, - 1 + -0.691426, - 7 + 0.144207, - 3 + 0.445607, - -1 + 0.255407, - -7 + 0.306034, - -3 + -0.371352, - -1 + 0.124452, - -5 + 0.359695, - -5 + -0.888643, - 3 + 0.290357, - 3 + -0.0254667, - -3 + 0.407853, - -5 + 0.679174, - -5 + 0.0575717, - -3 + 0.137283, - 3 + 0.729587, - 7 + 0.31509, - -3 + -0.348804, - 1 + 0.57604, - -5 + 0.345748, - 7 + -0.327496, - -5 + -0.425651, - -7 + 0.140657, - -3 + 0.238764, - -7 + -0.143133, - 3 + 0.337288, - 1 + 0.959842, - 7 + -0.977864, - 3 + -0.317419, - 3 + -0.198654, - 3 + 0.955435, - 3 + -0.23876, - 1 + -0.88292, - -5 + -0.511151, - 3 + 0.779996, - 3 + -0.443377, - -1 + -0.192438, - -5 + 0.811447, - -7 + 0.634155, - 1 + -0.762404, - 3 + 0.731365, - 5 + 0.783236, - 5 + -0.307317, - 7 + 0.482175, - 7 + -0.539608, - 7 + -0.775192, - 1 + -0.560785, - -7 + 0.206625, - -5 + -0.038118, - -5 + -0.228189, - 1 + 0.462362, - -5 + 0.72833, - -1 + 0.622996, - -3 + 0.998274, - 5 + 0.142163, - -7 + 0.618011, - 3 + 0.122273, - -7 + -0.483532, - -1 + -0.854097, - -5 + 0.108088, - 7 + -0.193228, - 3 + 0.648767, - -3 + -0.656924, - -7 + -0.991222, - -3 + -0.25652, - 3 + -0.269033, - -1 + 0.324665, - -1 + 0.107827, - -5 + -0.0475933, - -5 + -0.99274, - -5 + -0.30318, - -3 + -0.747831, - -3 + -0.203781, - 3 + -0.010757, - 7 + 0.0734757, - 7 + -0.761203, - -7 + 0.389509, - 1 + -0.25976, - -1 + 0.965806, - 7 + 0.526324, - -1 + -0.298331, - -3 + 0.410725, - -1 + 0.00752225, - 5 + -0.455632, - 1 + -0.884761, - 7 + 0.602377, - 7 + 0.555917, - 3 + -0.160695, - -7 + -0.567533, - 3 + 0.758232, - 1 + -0.587694, - -7 + 0.414466, - -7 + -0.652491, - 1 + 0.0124494, - -7 + 0.389889, - 7 + 0.227003, - 1 + 0.242753, - -7 + 0.913462, - -3 + 0.691642, - -5 + 0.75989, - 1 + -0.596777, - -3 + -0.752662, - 3 + -0.108642, - 7 + -0.60189, - 7 + 0.511322, - -3 + -0.24478, - 7 + -0.849058, - -1 + -0.845527, - -7 + -0.572068, - -5 + -0.661012, - 5 + -0.701889, - 7 + 0.822228, - 1 + -0.00200901, - 5 + -0.71468, - 5 + 0.691151, - 7 + 0.561903, - 3 + -0.527991, - -1 + -0.867353, - 3 + -0.728324, - 5 + -0.813234, - 1 + -0.966217, - 1 + 0.0669532, - 7 + 0.905965, - -3 + -0.937283, - -3 + 0.774056, - 3 + -0.384885, - -7 + 0.175322, - -3 + 0.309913, - -5 + 0.251167, - -1 + 0.381753, - 3 + 0.00625176, - -7 + 0.56373, - -3 + 0.63392, - 3 + 0.762169, - 7 + 0.0347039, - -3 + -0.935108, - -1 + -0.114944, - 1 + -0.424213, - 1 + 0.0317198, - -3 + 0.2139, - -5 + 0.0530905, - -7 + -0.36603, - -5 + -0.851717, - -7 + 0.414219, - -1 + -0.397429, - -3 + -0.995697, - -7 + -0.328063, - -1 + -0.604664, - 7 + -0.45941, - 3 + 0.718596, - -7 + -0.377836, - -1 + 0.915331, - 7 + -0.730175, - -1 + -0.51083, - 7 + -0.923481, - 1 + 0.102495, - -1 + 0.1293, - -3 + 0.812872, - -5 + 0.066343, - -1 + -0.578684, - 1 + 0.926482, - -7 + 0.10389, - 5 + -0.462554, - -5 + -0.108, - 5 + -0.471902, - 7 + -0.34884, - 5 + 0.719192, - -7 + -0.763765, - -3 + 0.257366, - -5 + -0.623314, - -7 + 0.0467943, - 5 + -0.646451, - 7 + 0.54531, - 3 + -0.955682, - -5 + -0.432122, - 3 + -0.886357, - 1 + 0.088559, - 5 + -0.975894, - 5 + -0.105386, - -3 + 0.0978638, - 1 + -0.199998, - 5 + 0.0380346, - 3 + 0.427315, - -3 + 0.214304, - -5 + -0.566543, - -7 + -0.380715, - -3 + -0.877135, - -5 + 0.267701, - -3 + -0.03107, - -3 + 0.595488, - -1 + 0.322574, - -5 + 0.559362, - 1 + -0.0401364, - -7 + 0.528057, - 5 + -0.319427, - -1 + 0.357237, - 7 + 0.222854, - -5 + -0.432566, - 1 + -0.998243, - 7 + 0.742835, - 3 + -0.182255, - 3 + -0.471161, - 3 + 0.606823, - -7 + 0.974148, - 5 + -0.667598, - 1 + -0.811568, - 1 + -0.936551, - 7 + -0.530943, - 5 + 0.908057, - -7 + 0.895185, - 5 + 0.711135, - 1 + -0.95896, - 1 + 0.83532, - 1 + 0.14732, - 3 + 0.90921, - -1 + -0.30945, - -1 + -0.869543, - -7 + -0.360646, - 1 + 0.357157, - -3 + -0.514692, - 5 + 0.896144, - -1 + -0.196886, - -5 + -0.319624, - -1 + -0.472977, - -1 + -0.784624, - -1 + -0.281646, - -5 + -0.559682, - 3 + 0.391078, - 7 + 0.306199, - -3 + 0.962734, - -7 + -0.11162, - -7 + 0.357581, - 3 + 0.0805047, - 3 + -0.922337, - 1 + 0.232492, - -5 + -0.574144, - -1 + 0.710829, - 7 + -0.284843, - -1 + 0.831973, - -1 + -0.336799, - -3 + -0.745866, - -5 + -0.645711, - 5 + 0.0646029, - -3 + 0.252552, - 5 + -0.48003, - -5 + 0.299438, - 7 + 0.738929, - -5 + 0.40337, - 5 + 0.605547, - -3 + -0.525722, - 1 + -0.326724, - 1 + -0.515053, - 5 + 0.261516, - -7 + 0.320474, - -1 + -0.521487, - -5 + 0.903239, - -3 + -0.403525, - 7 + 0.0639151, - 3 + 0.359482, - 3 + 0.823776, - 5 + 0.0387504, - -7 + 0.109849, - 3 + -0.097467, - -5 + -0.832645, - -5 + 0.526237, - 7 + 0.438123, - 3 + -0.519244, - 1 + -0.0476922, - 3 + 0.191197, - -7 + -0.534928, - 3 + 0.462164, - 7 + -0.895527, - -1 + 0.473474, - -7 + 0.146189, - 5 + -0.179909, - -3 + -0.285322, - 5 + 0.613479, - -1 + -0.0315166, - 7 + 0.698841, - 3 + -0.774282, - 1 + 0.818017, - 7 + -0.932623, - 3 + 0.0664446, - -7 + 0.06308, - 3 + -0.519814, - 5 + -0.576546, - 5 + -0.267179, - -3 + -0.837482, - 5 + -0.255068, - 5 + -0.0568383, - -3 + 0.888405, - -3 + -0.366288, - -5 + -0.552696, - -1 + 0.541689, - 7 + -0.0454361, - -5 + 0.608489, - 3 + -0.922755, - -5 + 0.406846, - -5 + -0.506253, - 7 + -0.688017, - -5 + 0.776949, - 1 + -0.378568, - 5 + -0.727209, - -7 + 0.613322, - 5 + 0.962756, - -7 + -0.893482, - -7 + -0.987528, - -7 + 0.456806, - 7 + 0.786419, - 1 + 0.034181, - -7 + 0.790939, - -5 + -0.0300588, - 1 + 0.1652, - -7 + -0.481907, - 3 + 0.0991387, - -7 + -0.564886, - 5 + 0.85039, - -1 + 0.812973, - -1 + -0.407522, - 7 + -0.952524, - 5 + 0.765642, - -5 + -0.337741, - 7 + 0.957819, - 3 + -0.899041, - -1 + -0.671052, - -3 + 0.983954, - 1 + -0.89124, - -3 + 0.0940522, - -1 + 0.611417, - 7 + -0.937967, - -1 + 0.941416, - -1 + -0.359601, - 5 + 0.747211, - -7 + -0.111301, - 3 + -0.640113, - 7 + 0.0550081, - 7 + -0.189345, - 3 + 0.214366, - -5 + 0.135666, - -5 + 0.226602, - 3 + -0.410662, - 5 + -0.843728, - -3 + -0.371912, - -7 + -0.989917, - -1 + 0.690856, - -1 + 0.0420038, - 7 + 0.00959448, - 5 + -0.815518, - 1 + 0.430825, - -7 + 0.609881, - 5 + -0.688188, - 5 + -0.60674, - -1 + 0.0334734, - 1 + 0.722216, - -3 + 0.285942, - 7 + 0.519757, - 3 + -0.27104, - -1 + 0.509289, - -3 + -0.81976, - 5 + 0.481086, - 3 + -0.974128, - 7 + -0.337838, - 5 + 0.962801, - -3 + -0.798452, - -3 + 0.457351, - 1 + 0.103281, - -1 + -0.0256317, - 7 + 0.802218, - 7 + 0.689228, - -7 + -0.276751, - 5 + 0.404102, - -1 + -0.860859, - -7 + -0.0371287, - -1 + 0.370437, - -5 + -0.616334, - -5 + -0.758392, - 1 + -0.454585, - 1 + -0.137519, - 7 + -0.261276, - 5 + 0.558348, - 1 + -0.948463, - -5 + 0.523879, - -5 + 0.555652, - -1 + 0.840325, - 7 + 0.279812, - 5 + 0.617966, - 1 + 0.192231, - 5 + 0.132018, - -7 + -0.11959, - 1 + -0.894721, - -7 + -0.504819, - 5 + -0.419666, - 7 + -0.391328, - -3 + -0.24103, - -7 + -0.852627, - -7 + 0.990221, - 7 + 0.822151, - -7 + 0.170617, - 3 + 0.614475, - -7 + 0.446277, - -7 + -0.371819, - 1 + 0.831829, - -5 + 0.0787276, - -1 + -0.684313, - 3 + -0.611736, - 5 + 0.472613, - 7 + 0.730033, - -5 + -0.811217, - 1 + -0.760817, - -3 + 0.268843, - 5 + 0.584456, - 1 + 0.823053, - -7 + 0.80804, - -7 + 0.457053, - 5 + -0.577104, - -5 + -0.224893, - -5 + -0.107738, - -1 + -0.51484, - 3 + -0.198893, - -7 + 0.278753, - 7 + 0.502244, - -1 + 0.0510433, - 1 + -0.402208, - -7 + 0.343478, - 1 + -0.901047, - 1 + 0.369701, - -3 + -0.944263, - -5 + 0.386476, - 3 + -0.954781, - 7 + -0.688498, - 7 + -0.365083, - 3 + -0.776885, - -1 + -0.598649, - 3 + -0.87102, - 1 + 0.975515, - -3 + -0.467838, - 1 + 0.466075, - -7 + 0.271324, - -1 + 0.978247, - 7 + 0.112029, - -1 + 0.601593, - -3 + -0.412666, - 1 + -0.601096, - 5 + -0.0684049, - -7 + 0.552019, - -5 + 0.313324, - 5 + -0.836011, - -1 + 0.528016, - -3 + 0.284965, - -3 + 0.700575, - -5 + 0.0874079, - -7 + -0.0126598, - -7 + -0.276119, - 5 + -0.218603, - -5 + -0.0014039, - -3 + 0.189325, - 7 + 0.429569, - -5 + 0.837003, - 3 + 0.703335, - 7 + -0.216503, - 7 + 0.0920741, - 7 + 0.750109, - -1 + -0.322132, - 7 + -0.128556, - -1 + 0.00373274, - -1 + -0.17115, - 1 + 0.264227, - 3 + 0.988822, - -1 + 0.0243255, - -5 + 0.605084, - -7 + 0.295968, - 5 + 0.873413, - -1 + 0.434273, - -5 + -0.781778, - 5 + -0.0426681, - -5 + 0.167692, - -1 + -0.334183, - -1 + 0.07798, - -1 + -0.297114, - -3 + 0.816338, - 1 + -0.611242, - 3 + -0.423656, - 3 + -0.432077, - 1 + -0.145807, - 5 + 0.10632, - -5 + 0.756861, - -7 + -0.931971, - 7 + -0.397063, - 5 + 0.283628, - -7 + 0.721398, - 7 + 0.348194, - -3 + -0.33922, - 3 + 0.412108, - 7 + 0.510752, - -3 + -0.263234, - -7 + 0.485708, - 5 + 0.573377, - 3 + 0.244824, - -7 + 0.756185, - 5 + -0.981843, - -7 + 0.890249, - -5 + -0.785723, - 1 + 0.429159, - 7 + 0.891205, - 5 + -0.310018, - 5 + -0.0331806, - -7 + 0.567766, - -7 + -0.172382, - 3 + -0.0973954, - -1 + -0.726783, - -7 + 0.86626, - -3 + 0.640023, - 5 + -0.104726, - -3 + -0.213919, - -5 + -0.131563, - 3 + 0.108026, - 1 + 0.426832, - -7 + 0.631181, - -3 + -0.911012, - 5 + 0.232769, - -3 + -0.124074, - 5 + -0.263584, - -3 + 0.246066, - 7 + 0.833384, - -5 + -0.798822, - 1 + -0.281957, - 1 + -0.527281, - 3 + 0.918325, - 5 + -0.872591, - -3 + 0.987781, - 7 + -0.724259, - 7 + 0.73749, - 5 + -0.179643, - 1 + -0.480496, - -1 + -0.0747694, - 3 + -0.162109, - 1 + 0.655518, - 5 + 0.815859, - 7 + -0.422858, - -1 + 0.19599, - 3 + -0.601651, - 7 + -0.598413, - -5 + -0.951473, - 7 + 0.684015, - 7 + 0.121945, - 5 + 0.330604, - -1 + 0.800472, - -5 + -0.892743, - -5 + -0.0700532, - -1 + 0.143832, - -1 + 0.713388, - 1 + -0.253503, - 1 + -0.0462767, - 3 + 0.140933, - -5 + 0.94534, - -7 + 0.665662, - -5 + 0.207102, - 3 + -0.327194, - 5 + 0.110171, - -5 + 0.225803, - 1 + -0.900872, - -5 + 0.0169889, - 5 + 0.152721, - 7 + 0.125242, - -1 + 0.63948, - 7 + 0.0639926, - -5 + -0.869524, - 7 + -0.160608, - -1 + -0.465428, - 5 + -0.2185, - -7 + -0.465846, - -1 + 0.0973919, - 3 + 0.450568, - -5 + -0.451587, - -7 + -0.83918, - -1 + 0.709855, - 3 + -0.86862, - 5 + 0.676479, - 7 + -0.125049, - -1 + -0.191198, - 5 + -0.925049, - 1 + -0.521026, - -3 + -0.0364143, - -7 + 0.600769, - -7 + 0.164072, - -5 + 0.416589, - -7 + -0.595857, - -3 + 0.220567, - 3 + 0.0636474, - -7 + 0.644101, - 5 + -0.775524, - -3 + -0.192748, - 1 + 0.0538391, - 1 + 0.29524, - -5 + 0.882538, - -5 + -0.816844, - -5 + 0.862396, - -5 + 0.314402, - 1 + -0.392808, - -3 + 0.651255, - -1 + -0.231968, - 1 + 0.738021, - 5 + 0.84997, - -3 + 0.186296, - 1 + 0.741231, - 1 + -0.177977, - 5 + 0.522434, - -7 + 0.597047, - -3 + 0.0266608, - -5 + -0.152547, - 5 + -0.579447, - -1 + -0.357272, - -7 + -0.497293, - 5 + 0.869424, - -5 + -0.0230876, - -5 + -0.132476, - -3 + 0.936738, - 5 + 0.558816, - -3 + -0.0384813, - -1 + 0.483534, - -7 + 0.867384, - -1 + 0.42158, - 3 + 0.420513, - 7 + -0.0754159, - -5 + -0.379954, - 7 + 0.769618, - -7 + 0.340938, - -7 + -0.869991, - 3 + 0.830734, - 3 + 0.94181, - 3 + -0.130749, - 3 + 0.517635, - -3 + -0.252298, - -3 + -0.0496521, - 1 + 0.684225, - 1 + 0.172965, - 1 + 0.417296, - 7 + -0.466398, - 7 + -0.114508, - -1 + -0.109476, - -7 + 0.00148834, - 1 + 0.0949139, - 1 + 0.432791, - -1 + -0.240929, - -1 + 0.652485, - 5 + -0.217385, - 7 + -0.8724, - -1 + 0.387098, - 3 + -0.444865, - -3 + 0.184706, - 7 + -0.730551, - 7 + 0.754565, - 7 + -0.604301, - 3 + -0.119371, - -1 + -0.28214, - 5 + 0.143776, - 3 + 0.957703, - 3 + -0.104371, - -5 + -0.261664, - -1 + 0.495793, - 1 + -0.734588, - -3 + 0.628134, - -3 + 0.817538, - -7 + 0.361645, - 3 + 0.162489, - 5 + -0.536024, - 7 + -0.486136, - 5 + -0.776124, - -5 + -0.629988, - 1 + -0.0367843, - -5 + -0.493533, - -7 + -0.725222, - -5 + 0.492433, - 7 + 0.288113, - -3 + -0.784857, - -5 + 0.824698, - -1 + -0.545993, - -3 + -0.306256, - 1 + -0.877171, - -1 + 0.567034, - 3 + -0.440337, - -1 + 0.14643, - 7 + -0.755017, - -1 + -0.832763, - 5 + -0.498979, - 3 + 0.763625, - 5 + 0.566975, - -5 + 0.0534092, - -5 + -0.963171, - 5 + 0.0216508, - 7 + 0.597324, - 7 + -0.441571, - 7 + 0.0347587, - 3 + 0.983787, - 1 + 0.188113, - -1 + -0.171194, - -7 + -0.641733, - 7 + 0.36138, - -1 + -0.566453, - 1 + 0.882606, - 1 + 0.61524, - -1 + -0.773541, - 3 + 0.153026, - 5 + -0.621578, - -7 + -0.904904, - -5 + 0.0406272, - -5 + 0.415864, - 5 + -0.60085, - 1 + 0.727596, - -7 + -0.0860673, - -1 + -0.785685, - -5 + -0.889453, - 7 + -0.141489, - -5 + 0.04296, - -5 + 0.564742, - -7 + -0.12966, - -1 + 0.841196, - -5 + 0.71528, - 1 + -0.104704, - 1 + -0.263372, - -7 + 0.680698, - 3 + 0.756433, - -3 + -0.200798, - 1 + 0.027729, - -1 + -0.464512, - 7 + -0.60066, - -1 + 0.104495, - -3 + 0.713626, - -5 + -0.776119, - 3 + 0.168751, - -1 + -0.905566, - 5 + -0.955254, - -7 + -0.407108, - -3 + 0.170629, - -3 + -0.453202, - -1 + -0.907515, - 5 + -0.210368, - -3 + -0.98412, - -3 + -0.798125, - 3 + -0.414919, - -1 + -0.236897, - 3 + -0.491091, - -5 + -0.77713, - 3 + 0.230108, - 1 + -0.796737, - 5 + -0.26121, - 3 + 0.397635, - -1 + 0.85451, - -3 + -0.393889, - 5 + 0.983874, - 5 + 0.942163, - -3 + 0.74394, - 1 + 0.242709, - 3 + -0.779053, - -1 + 0.341856, - -7 + -0.116747, - -7 + -0.640877, - -1 + -0.318128, - -7 + 0.00367009, - -3 + 0.617172, - 7 + -0.204651, - -5 + 0.0780388, - 7 + 0.626396, - 1 + -0.638141, - -1 + -0.882934, - -5 + -0.704026, - -3 + 0.851265, - 7 + 0.0141939, - -7 + 0.611678, - -1 + 0.341055, - 3 + -0.405282, - -7 + 0.993071, - -5 + -0.0799289, - 1 + -0.967094, - -5 + -0.893374, - 5 + -0.606802, - -1 + -0.296088, - 3 + 0.578082, - 1 + 0.630626, - -1 + -0.256433, - -7 + 0.023755, - 5 + -0.565901, - 1 + -0.87536, - -7 + 0.591114, - 3 + -0.0151382, - 3 + -0.218575, - -1 + -0.571426, - 7 + -0.817884, - 1 + -0.105616, - -5 + 0.226052, - 1 + -0.197419, - 1 + -0.804454, - 1 + -0.957871, - -7 + 0.869702, - 7 + -0.118016, - -7 + 0.231177, - -1 + 0.143965, - -7 + -0.544014, - -7 + -0.125394, - -5 + 0.66333, - -5 + 0.0453925, - 3 + -0.445539, - -3 + -0.841133, - -1 + 0.406819, - 1 + 0.066009, - -7 + -0.141267, - 7 + 0.20172, - 1 + -0.397711, - -3 + -0.341991, - 3 + -0.66472, - -1 + 0.1133, - -1 + -0.0874664, - 1 + 0.460378, - -5 + 0.833044, - -1 + 0.694845, - -5 + -0.814154, - 5 + 0.190124, - 5 + 0.90168, - -3 + 0.150333, - 5 + -0.832164, - 5 + -0.623571, - 5 + 0.116979, - 7 + -0.623282, - -3 + 0.724953, - 3 + -0.656996, - 7 + 0.0645319, - 3 + 0.0895726, - 7 + -0.776726, - -1 + 0.318608, - 3 + 0.0496206, - -3 + 0.0368759, - -1 + 0.555521, - -5 + -0.673436, - 1 + 0.0103849, - -3 + 0.0743446, - -3 + -0.259726, - 5 + 0.0216708, - 1 + 0.769972, - -5 + -0.441797, - -3 + 0.719177, - 3 + 0.576816, - 1 + -0.95444, - 3 + 0.385715, - 7 + 0.215961, - -7 + -0.0887377, - -3 + 0.9093, - 5 + 0.231244, - -5 + 0.878044, - 1 + 0.237768, - -5 + -0.224173, - 7 + 0.115184, - 5 + -0.507669, - 3 + -0.4694, - -5 + -0.559494, - -7 + 0.256493, - -3 + 0.691867, - 7 + 0.760056, - -5 + -0.0235437, - -1 + -0.491056, - -7 + -0.632234, - -7 + 0.688073, - -3 + 0.448912, - 1 + 0.806255, - 3 + 0.174302, - -1 + 0.924295, - 1 + -0.0079971, - 7 + 0.585534, - 5 + -0.106368, - 7 + -0.647104, - -3 + -0.232442, - -1 + 0.103303, - 3 + -0.545308, - -7 + 0.171427, - 1 + -0.150061, - -5 + 0.124142, - 1 + 0.609533, - 1 + -0.51341, - 3 + 0.372706, - -5 + 0.406665, - 3 + -0.277069, - -3 + 0.316304, - -7 + -0.233404, - -7 + 0.0158354, - -3 + -0.376876, - 1 + -0.914291, - -3 + -0.819444, - -7 + 0.566109, - -5 + -0.582836, - -5 + -0.839922, - 5 + 0.186932, - -5 + -0.675285, - 5 + -0.957952, - -7 + -0.784832, - -3 + 0.403649, - 3 + 0.798144, - -3 + -0.880645, - -3 + 0.528126, - -1 + -0.657318, - 3 + 0.890482, - 5 + -0.46684, - 5 + -0.566931, - -7 + 0.81062, - -1 + -0.0238388, - -7 + -0.377402, - -3 + -0.21429, - -5 + -0.505753, - -7 + -0.951982, - -1 + -0.515628, - 3 + -0.871026, - -1 + -0.838789, - -7 + -0.725925, - 1 + 0.77047, - -3 + 0.858867, - 5 + 0.600752, - -3 + 0.0665514, - 1 + -0.317725, - 3 + -0.843704, - 5 + 0.219384, - -5 + -0.586559, - 7 + -0.240551, - -3 + -0.209033, - -7 + 0.493641, - 7 + 0.152856, - -7 + -0.597324, - -1 + -0.276392, - -1 + 0.831608, - 5 + 0.470546, - 5 + 0.330143, - -7 + 0.642262, - -7 + 0.977435, - -7 + 0.313444, - -7 + -0.10048, - 5 + 0.563594, - -1 + -0.186187, - -1 + -0.365659, - 1 + -0.837578, - -5 + 0.140403, - 7 + -0.78022, - -1 + 0.844668, - 7 + 0.375148, - 7 + -0.0498808, - 1 + 0.40211, - -1 + 0.744509, - 3 + 0.079077, - 7 + 0.296291, - 7 + -0.27219, - -7 + -0.660157, - -3 + 0.915867, - -1 + 0.102478, - 1 + -0.851214, - 7 + -0.634492, - -5 + -0.253903, - -5 + -0.598679, - -7 + -0.223802, - 3 + 0.0226067, - 1 + 0.696982, - -5 + -0.0351859, - 5 + -0.481739, - -1 + -0.00746336, - 3 + 0.416315, - 5 + 0.321218, - 3 + -0.283638, - -7 + 0.752743, - 3 + -0.774599, - -1 + 0.30598, - 5 + -0.0478183, - 7 + 0.791332, - -5 + -0.235768, - 3 + 0.292966, - -3 + 0.414722, - 3 + -0.665212, - 5 + -0.710929, - -3 + -0.588074, - -3 + 0.331691, - 7 + 0.882629, - 3 + -0.550038, - 1 + -0.957022, - -5 + 0.990136, - 5 + -0.558498, - -3 + -0.842342, - -1 + 0.000248163, - -5 + 0.131952, - 7 + -0.167911, - 1 + -0.425364, - 7 + -0.372087, - 1 + 0.526899, - -1 + -0.638801, - -5 + -0.386877, - 7 + 0.871863, - -7 + 0.459965, - 5 + -0.165079, - 5 + 0.296509, - -3 + 0.833452, - -7 + 0.744527, - -3 + 0.626609, - 1 + -0.814472, - 3 + 0.998261, - -7 + 0.270782, - 1 + -0.904688, - -5 + 0.723069, - -1 + -0.664172, - -5 + -0.019654, - -1 + 0.757106, - 7 + 0.780875, - 1 + -0.898937, - 3 + -0.485577, - -3 + -0.140519, - -3 + -0.240458, - -1 + 0.353802, - -7 + -0.918099, - 3 + -0.32276, - 3 + 0.672086, - -3 + -0.335273, - 1 + -0.999146, - -1 + -0.630338, - 7 + -0.544571, - -7 + 0.470793, - -3 + -0.581126, - -1 + 0.135819, - -1 + 0.0451301, - 5 + 0.479837, - -3 + 0.172697, - 5 + 0.796663, - -1 + -0.566894, - 1 + 0.470888, - 3 + 0.0653015, - -7 + 0.792323, - 1 + -0.867727, - -3 + 0.829587, - -3 + -0.740408, - 3 + -0.830687, - 3 + 0.957641, - -7 + -0.423364, - 3 + -0.893497, - 1 + -0.853771, - -3 + 0.92187, - 1 + -0.929865, - -3 + 0.198643, - 7 + 0.961747, - -1 + -0.431994, - 7 + 0.35683, - -1 + -0.871135, - 7 + 0.727451, - 7 + 0.458093, - -3 + 0.22682, - -3 + -0.827643, - -3 + -0.189953, - 5 + -0.688236, - -3 + -0.294562, - 5 + -0.903106, - -5 + 0.444196, - -1 + 0.2121, - -5 + -0.214493, - -5 + -0.392994, - -3 + 0.665017, - 1 + 0.269187, - 7 + -0.745741, - 1 + -0.185388, - -5 + -0.795616, - -5 + -0.989525, - -5 + -0.0291574, - 7 + 0.577641, - 3 + -0.98546, - 5 + 0.696809, - -5 + 0.649647, - 3 + -0.401609, - -7 + 0.29181, - -1 + -0.336865, - 3 + -0.279985, - -7 + 0.819639, - 1 + -0.69903, - 5 + -0.956345, - -3 + 0.917636, - 3 + -0.539845, - 3 + -0.58337, - 5 + 0.0319712, - 3 + -0.682523, - 3 + -0.160175, - 1 + -0.707552, - 3 + -0.197245, - -1 + 0.583643, - -7 + 0.128135, - 3 + 0.240791, - -7 + -0.289134, - -7 + 0.955084, - -5 + 0.495007, - -1 + 0.955188, - 3 + 0.523281, - -1 + 0.468672, - -5 + -0.467838, - -3 + 0.654833, - -5 + 0.85963, - -3 + 0.532693, - -3 + -0.11304, - 5 + 0.947132, - 5 + 0.395143, - 1 + -0.114501, - -5 + 0.275912, - -7 + -0.816982, - -3 + 0.280537, - 1 + -0.290476, - 3 + 0.753207, - 3 + -0.37078, - -5 + -0.73641, - 1 + 0.720629, - -1 + 0.61751, - 5 + -0.114619, - 3 + -0.509509, - 1 + 0.349672, - 7 + 0.426544, - -5 + -0.567438, - -7 + -0.52387, - 3 + -0.376306, - 3 + -0.49252, - 5 + 0.441628, - 3 + 0.703002, - -7 + 0.62187, - 3 + 0.754402, - -1 + -0.344451, - 5 + -0.0148834, - -7 + 0.449515, - 5 + 0.230859, - 1 + 0.724024, - 5 + 0.190704, - 1 + -0.69348, - -5 + 0.586233, - 5 + 0.0794267, - -5 + -0.631736, - 1 + 0.105417, - -5 + 0.136263, - 7 + -0.642064, - 1 + 0.0430542, - -7 + -0.41497, - 5 + 0.775936, - -1 + 0.687085, - -5 + 0.925474, - -5 + 0.0990985, - 3 + -0.277763, - -1 + 0.299999, - 3 + 0.392572, - -7 + -0.546367, - 7 + 0.403084, - 5 + -0.0418944, - -7 + 0.446579, - -7 + 0.372017, - -1 + 0.459786, - 7 + -0.0032825, - 5 + 0.189248, - 5 + -0.155126, - 3 + 0.53685, - 3 + 0.933272, - 3 + -0.384181, - 5 + 0.204225, - 1 + -0.327539, - -7 + 0.348723, - 1 + -0.685387, - -7 + -0.750799, - -1 + -0.627168, - -7 + 0.610837, - 5 + -0.957175, - -3 + 0.834856, - -1 + 0.528653, - 7 + -0.780567, - 7 + 0.0884855, - 3 + 0.648985, - -1 + 0.218943, - -7 + 0.832075, - 5 + 0.811807, - -3 + -0.685713, - -3 + -0.296578, - 3 + 0.000125931, - -5 + -0.996983, - -5 + -0.193044, - 5 + -0.0545228, - 1 + 0.893854, - 5 + 0.97836, - -3 + -0.748222, - -1 + 0.196022, - 1 + 0.163083, - -5 + -0.180233, - -1 + 0.209452, - -3 + 0.744591, - -3 + -0.1817, - 1 + -0.447565, - 5 + 0.528624, - -7 + -0.692082, - 7 + -0.428345, - -7 + 0.0934917, - 1 + 0.678237, - -7 + -0.298993, - -3 + 0.654322, - -3 + -0.942614, - 7 + 0.783697, - 3 + 0.395035, - 1 + -0.372332, - 3 + -0.859733, - 1 + 0.4468, - 5 + 0.822121, - -5 + 0.201003, - -7 + -0.74061, - 5 + -0.568736, - 3 + 0.904994, - -5 + 0.325172, - 5 + 0.292775, - 5 + 0.511914, - -7 + 0.675604, - 5 + 0.907106, - -7 + 0.676053, - -3 + -0.64883, - -1 + -0.451512, - 3 + -0.841985, - -7 + 0.0817016, - -1 + 0.111568, - -7 + -0.594469, - -3 + -0.844349, - 3 + -0.26745, - -3 + -0.559703, - 7 + 0.53067, - 3 + -0.256771, - -1 + -0.170001, - -1 + -0.775529, - -1 + -0.456536, - 3 + -0.998071, - 1 + 0.941052, - 7 + 0.130878, - 7 + 0.838738, - 1 + 0.856186, - 1 + 0.846151, - -1 + -0.737487, - 3 + -0.76553, - -3 + 0.222, - -1 + -0.387758, - 7 + -0.269319, - -3 + 0.0668951, - 3 + 0.731949, - 5 + -0.741075, - -7 + -0.219907, - 3 + 0.487581, - 1 + -0.973969, - 7 + 0.639967, - 3 + 0.809232, - 3 + -0.642748, - 5 + -0.453162, - -7 + -0.474022, - -3 + -0.631836, - -3 + 0.0981818, - 7 + 0.684498, - -1 + -0.654845, - -5 + -0.612608, - 7 + 0.610862, - -3 + -0.369351, - 3 + -0.261936, - 7 + -0.814926, - 7 + 0.390131, - -5 + 0.531136, - 3 + 0.974289, - -3 + -0.111925, - 3 + 0.376471, - -3 + -0.941562, - 7 + -0.410982, - -7 + 0.875953, - 5 + -0.448872, - -1 + -0.806028, - -1 + -0.814961, - 5 + 0.395374, - -7 + 0.814904, - 1 + 0.383855, - 1 + -0.252184, - 3 + 0.524843, - -7 + -0.233859, - -7 + 0.764495, - -7 + 0.817705, - -5 + 0.641853, - -3 + -0.758414, - -1 + -0.260464, - -7 + -0.240351, - -3 + 0.0476139, - -1 + -0.220685, - -1 + -0.993293, - 7 + 0.627481, - -3 + -0.950516, - -5 + -0.0848613, - 5 + 0.670037, - 7 + 0.825011, - -7 + 0.111405, - 7 + 0.0703245, - -3 + 0.177663, - 7 + -0.739343, - 3 + -0.673892, - 7 + -0.947279, - -5 + 0.732764, - 7 + -0.807932, - 1 + -0.494108, - 1 + 0.611574, - -1 + 0.205265, - -1 + -0.485118, - -5 + 0.0552847, - -5 + -0.176059, - 5 + 0.00244508, - 7 + -0.773636, - 5 + 0.951496, - -7 + 0.525518, - -5 + 0.968101, - -7 + 0.10137, - 5 + -0.4487, - 7 + 0.215142, - -5 + -0.162651, - 5 + -0.520808, - 1 + -0.89087, - -1 + -0.804296, - 7 + -0.341382, - -7 + 0.793131, - 5 + -0.724335, - 7 + 0.0832606, - 3 + -0.819473, - 7 + -0.613928, - -1 + -0.975915, - 7 + 0.555494, - -1 + -0.753698, - 1 + -0.570132, - -5 + -0.00221921, - 1 + 0.010534, - -5 + -0.825051, - -5 + 0.528378, - 3 + 0.559274, - -5 + 0.826081, - 7 + -0.349553, - 3 + 0.36511, - -5 + -0.881283, - 1 + 0.833997, - 1 + 0.00815386, - -3 + -0.820684, - 1 + 0.952573, - -5 + 0.378794, - -5 + 0.465909, - 1 + -0.166333, - 1 + 0.0746185, - -1 + 0.431021, - 5 + 0.266922, - -1 + 0.339902, - -1 + 0.372874, - 7 + -0.0149696, - -1 + 0.0317811, - 7 + -0.691387, - -1 + 0.929823, - 5 + -0.295751, - 7 + -0.851862, - -1 + 0.33382, - 7 + -0.589562, - -7 + -0.217095, - -7 + 0.115214, - -7 + 0.220949, - 1 + 0.800567, - 3 + -0.251049, - -5 + -0.626753, - 7 + -0.450723, - 7 + 0.22979, - -3 + -0.342451, - -3 + 0.997709, - -1 + 0.582385, - -5 + 0.191317, - 7 + -0.873862, - 5 + 0.213097, - 7 + -0.762892, - 7 + 0.954305, - 7 + 0.188828, - 7 + 0.931783, - -7 + -0.839115, - 5 + -0.738813, - 3 + 0.926841, - 5 + 0.399905, - -7 + 0.0123429, - -5 + 0.545699, - 3 + -0.661568, - 3 + -0.261673, - -5 + -0.81428, - 7 + 0.866628, - 5 + -0.048188, - -3 + 0.165017, - 7 + -0.698899, - -7 + 0.0783355, - -7 + 0.693822, - 7 + 0.726706, - -1 + 0.148921, - 7 + -0.685703, - 3 + 0.548864, - -7 + -0.878148, - 3 + 0.205964, - 5 + -0.271077, - -7 + -0.15239, - 1 + -0.949635, - -1 + 0.961041, - -7 + 0.0868696, - 3 + -0.361298, - 3 + 0.624626, - 3 + -0.0838945, - 5 + 0.132301, - -1 + 0.192646, - -5 + -0.579731, - -5 + -0.101051, - 5 + 0.870131, - 1 + 0.535988, - 5 + 0.255953, - 1 + 0.314134, - -7 + 0.762894, - -7 + 0.127185, - 7 + -0.222042, - -5 + -0.529038, - -3 + 0.231572, - 1 + 0.788721, - 5 + -0.891869, - -5 + -0.472732, - 3 + -0.0128941, - 1 + -0.623197, - 7 + -0.490687, - -1 + -0.441505, - 1 + -0.0410075, - -5 + 0.847264, - -7 + -0.371955, - -1 + 0.41401, - -1 + -0.742, - 3 + 0.0546079, - 5 + -0.529726, - 7 + -0.0630406, - 1 + 0.196568, - -3 + 0.488722, - -5 + -0.357116, - 3 + -0.179397, - -3 + 0.358234, - -7 + 0.821111, - 7 + -0.634397, - 5 + -0.490498, - -5 + -0.103393, - -7 + -0.996996, - -5 + 0.358586, - -7 + 0.785637, - -5 + 0.46574, - -1 + -0.714036, - 7 + 0.73281, - -1 + -0.980125, - -5 + 0.152175, - -1 + -0.468575, - -1 + -0.154831, - 5 + -0.257122, - 3 + -0.414745, - 3 + 0.663051, - -3 + 0.787162, - -1 + 0.773088, - 5 + -0.0174988, - 7 + 0.348241, - 1 + 0.856018, - -7 + -0.177525, - 1 + 0.409387, - 3 + 0.0205055, - -3 + 0.212273, - 7 + -0.35314, - -1 + 0.253691, - -7 + 0.988757, - 1 + 0.915514, - 7 + -0.0632796, - -3 + -0.0794022, - 5 + 0.905145, - 3 + -0.678132, - 7 + 0.842035, - -1 + 0.189324, - -1 + 0.431813, - 5 + 0.855323, - 3 + -0.285528, - -3 + -0.740299, - 3 + 0.526598, - -3 + -0.807057, - -3 + -0.907001, - -1 + 0.673215, - 1 + -0.806326, - -7 + -0.0179321, - 7 + 0.0822508, - -1 + 0.850969, - 5 + 0.18839, - 3 + -0.692543, - -5 + 0.064437, - -7 + -0.112983, - -3 + -0.0709171, - -5 + 0.327346, - 1 + -0.595314, - -1 + 0.878245, - 1 + 0.291632, - -1 + -0.922109, - -3 + -0.872261, - -7 + -0.212876, - 1 + -0.348517, - 5 + -0.24286, - 3 + 0.777443, - 5 + 0.00615786, - 5 + 0.834023, - 1 + -0.590069, - -7 + 0.653321, - 1 + -0.234737, - -7 + 0.664936, - 7 + 0.411378, - -7 + -0.88205, - -1 + -0.855369, - 1 + 0.377919, - -7 + -0.456485, - -5 + -0.949986, - -5 + -0.0158651, - 3 + 0.535672, - -1 + -0.687636, - 1 + 0.736756, - 7 + -0.696999, - 1 + 0.847792, - -3 + -0.349274, - 1 + -0.544481, - 7 + 0.608189, - -7 + 0.608384, - 5 + -0.323123, - 7 + -0.947181, - 5 + 0.753829, - 5 + -0.573138, - 5 + -0.485321, - -5 + 0.480423, - -5 + -0.371829, - 5 + -0.853753, - -7 + 0.878959, - -7 + 0.0642654, - 1 + 0.680307, - 1 + 0.291632, - 7 + -0.853807, - 5 + 0.644158, - 5 + -0.355364, - 1 + 0.190966, - 3 + -0.294411, - -7 + -0.67303, - -5 + -0.965702, - -3 + 0.55212, - 1 + -0.804562, - -7 + -0.494127, - -5 + -0.983771, - 1 + -0.133138, - -1 + -0.607814, - 1 + -0.742387, - -5 + -0.411707, - -3 + -0.816862, - 7 + 0.426785, - 5 + -0.089001, - 3 + -0.966127, - 3 + -0.784032, - 5 + -0.356036, - 5 + 0.475987, - 1 + 0.970457, - -3 + 0.678356, - 1 + -0.430618, - 5 + 0.942241, - -3 + -0.913966, - 7 + -0.730373, - -3 + 0.640682, - 7 + -0.024488, - -5 + 0.462632, - -3 + -0.609614, - -1 + -0.482857, - -5 + 0.535506, - 7 + 0.821051, - -1 + 0.793945, - 3 + -0.0835013, - -5 + -0.393026, - 1 + -0.415528, - -5 + 0.182819, - 1 + -0.561988, - -5 + -0.417262, - 7 + 0.708211, - 1 + -0.207354, - -5 + -0.844518, - -7 + 0.604461, - 7 + 0.787027, - 7 + 0.763122, - 1 + 0.300372, - -3 + -0.0203687, - -7 + -0.500432, - 7 + -0.5601, - 5 + -0.682225, - -5 + -0.547398, - -3 + 0.769381, - -3 + 0.750163, - -5 + -0.820679, - 3 + 0.236003, - 1 + -0.316465, - -3 + 0.802262, - 3 + -0.399964, - 5 + -0.166494, - 1 + 0.776745, - 5 + 0.716541, - 7 + -0.251088, - -5 + -0.42548, - -3 + -0.761153, - 7 + -0.0766243, - 3 + -0.180629, - 5 + -0.166458, - -5 + -0.833394, - -7 + 0.0297446, - -7 + -0.362676, - 7 + -0.644897, - -7 + 0.283366, - 5 + -0.665628, - 3 + -0.488068, - -1 + -0.902438, - -5 + -0.355751, - 3 + -0.419479, - 7 + -0.370073, - -3 + 0.480753, - 1 + -0.420338, - -7 + -0.24157, - 7 + 0.207747, - -1 + -0.777488, - 5 + 0.341417, - -1 + -0.33618, - -5 + 0.598459, - -3 + -0.280681, - 1 + -0.0398586, - 7 + 0.717195, - 5 + 0.431427, - -5 + -0.839676, - -1 + -0.74745, - 1 + 0.73193, - -1 + 0.729311, - 5 + 0.561066, - -5 + -0.670177, - -1 + -0.254041, - 3 + 0.0451663, - -7 + -0.160697, - 7 + 0.13319, - -3 + 0.360953, - -3 + 0.264897, - 1 + -0.566809, - -5 + 0.291045, - 1 + -0.573798, - -3 + 0.854987, - -3 + -0.973763, - -7 + -0.958898, - 1 + -0.945093, - -1 + -0.72672, - 5 + 0.814473, - 7 + -0.794704, - -3 + 0.229887, - -1 + 0.801239, - -5 + 0.531782, - -1 + 0.247072, - 1 + -0.179189, - -3 + 0.401884, - 7 + 0.236019, - -1 + 0.725281, - -5 + 0.74655, - 5 + -0.427725, - -1 + 0.967868, - -7 + -0.432802, - -1 + 0.541378, - 7 + -0.555299, - -3 + 0.166895, - -7 + 0.921733, - -3 + 0.840396, - -5 + -0.602658, - -1 + -0.189227, - -5 + 0.605957, - 5 + -0.525512, - 5 + 0.433278, - -1 + 0.554043, - -1 + 0.353735, - 3 + -0.493134, - -7 + 0.86014, - -3 + 0.543759, - -1 + 0.248284, - -5 + -0.502769, - 5 + -0.984136, - 5 + 0.407552, - -1 + 0.869081, - -3 + -0.7676, - -1 + 0.940972, - 1 + -0.511719, - 7 + 0.870979, - 3 + -0.0582847, - 7 + -0.628254, - 7 + -0.780393, - 3 + -0.227097, - 1 + -0.738505, - 1 + 0.364707, - 1 + -0.522339, - -3 + -0.123359, - -5 + 0.911237, - 7 + -0.856169, - -5 + 0.878138, - 1 + -0.761068, - 3 + 0.341228, - 7 + 0.0689835, - 3 + -0.15808, - 7 + -0.138551, - 3 + 0.368672, - 5 + -0.617489, - 1 + 0.404668, - -7 + -0.699522, - 5 + -0.997434, - 5 + 0.36597, - 5 + 0.785275, - 3 + -0.231849, - 3 + -0.0999933, - 1 + -0.109, - 3 + -0.686237, - 1 + -0.902631, - -7 + 0.51259, - -5 + 0.0942837, - 1 + 0.708383, - -3 + -0.861124, - -3 + -0.179481, - -3 + 0.779682, - 1 + -0.493657, - 1 + -0.418592, - -1 + 0.856146, - 3 + -0.0875076, - 7 + -0.483033, - -1 + 0.646554, - -1 + 0.974864, - -3 + -0.841565, - -7 + 0.228352, - -1 + -0.0205758, - 7 + -0.359954, - 7 + 0.314803, - 1 + -0.357785, - 7 + 0.751935, - 1 + 0.215695, - 5 + -0.190122, - -7 + 0.428353, - -1 + -0.890184, - 7 + 0.122886, - 1 + -0.557184, - 5 + -0.556109, - 7 + 0.828952, - -5 + -0.989435, - 7 + 0.830655, - -3 + -0.217279, - -1 + -0.835888, - -1 + 0.254548, - 5 + 0.523081, - 3 + 0.584681, - 1 + -0.0839997, - 5 + -0.186458, - 1 + 0.0540011, - -1 + 0.274899, - -7 + 0.116505, - 3 + 0.723544, - 5 + 0.136319, - 7 + -0.419947, - 5 + 0.476982, - 3 + 0.243726, - 3 + 0.0739162, - -3 + -0.028526, - -1 + -0.915011, - -7 + 0.764662, - 5 + -0.449836, - -1 + 0.54113, - -5 + 0.435229, - 3 + 0.0290581, - -7 + -0.416793, - 7 + 0.733392, - 1 + -0.222058, - -1 + -0.70491, - 1 + -0.738726, - 5 + 0.467214, - -5 + -0.820001, - 5 + -0.100838, - 3 + -0.867579, - -3 + 0.682739, - 5 + -0.418042, - -1 + 0.451298, - 5 + 0.494458, - 1 + -0.849409, - 1 + -0.69703, - 1 + 0.852578, - -1 + -0.781506, - -1 + 0.477606, - 3 + -0.215093, - -1 + 0.741802, - -7 + 0.574622, - 5 + 0.855315, - 5 + 0.655386, - 1 + -0.0553299, - -1 + -0.801709, - -1 + 0.610893, - 1 + -0.996069, - -1 + -0.632696, - 7 + 0.337866, - -5 + -0.444426, - 7 + 0.557502, - 3 + 0.171951, - 7 + 0.0341445, - 3 + 0.332677, - 3 + 0.169284, - 3 + -0.273138, - -5 + 0.31627, - -1 + -0.456444, - 5 + -0.892569, - 3 + 0.936689, - 5 + -0.406369, - -5 + 0.589934, - -3 + -0.20777, - -1 + 0.757187, - -5 + 0.629676, - 5 + 0.365524, - 5 + 0.289739, - -7 + -0.182101, - -1 + 0.784527, - -3 + 0.382947, - 3 + -0.380673, - 3 + -0.748491, - 1 + 0.642036, - -1 + 0.423028, - -3 + -0.740949, - -7 + 0.0430477, - -5 + 0.916659, - 1 + -0.858744, - 1 + 0.354461, - -5 + 0.197777, - 1 + 0.132034, - 5 + -0.935967, - -7 + 0.920792, - 3 + -0.456423, - 1 + -0.288826, - 1 + -0.600615, - 7 + -0.975289, - -5 + -0.259924, - -1 + -0.640925, - -3 + 0.531508, - 1 + 0.560676, - 1 + -0.36099, - -5 + 0.122059, - -5 + -0.701523, - 3 + -0.620508, - 3 + -0.918876, - 5 + -0.716268, - 7 + -0.885677, - 7 + -0.812334, - 5 + -0.427292, - -7 + -0.543744, - 3 + -0.917745, - 1 + 0.285421, - 7 + -0.938258, - -3 + 0.845977, - 5 + -0.817096, - -3 + -0.81931, - 7 + 0.384529, - -5 + 0.923807, - -5 + -0.835286, - -3 + 0.495043, - -7 + 0.610036, - 3 + 0.691557, - 1 + 0.262664, - -7 + 0.312157, - -5 + -0.629477, - -7 + -0.396994, - 5 + -0.749666, - -3 + -0.693143, - 5 + 0.427751, - 1 + 0.18179, - -5 + 0.994096, - 5 + -0.868472, - -3 + -0.000652722, - 5 + -0.826959, - 7 + 0.810413, - -7 + 0.624387, - 3 + -0.0808038, - -3 + 0.766962, - 7 + -0.576073, - -1 + 0.549271, - -7 + -0.831344, - 7 + -0.693934, - -1 + 0.494453, - -1 + 0.201426, - 7 + 0.722833, - 5 + -0.156928, - -5 + 0.470001, - 5 + 0.928162, - 3 + 0.282769, - -1 + 0.914984, - 7 + 0.453746, - 7 + 0.641607, - -7 + -0.00260904, - -5 + -0.1964, - -3 + 0.251894, - 7 + 0.528101, - 3 + 0.110567, - 3 + 0.589285, - 3 + -0.820993, - -1 + 0.933257, - 3 + 0.400226, - 3 + 0.307276, - 5 + -0.485213, - -7 + 0.442066, - 1 + -0.967156, - 3 + 0.725474, - 1 + -0.699786, - -7 + 0.506006, - 7 + 0.513752, - -3 + -0.55039, - -5 + 0.997721, - -1 + 0.875475, - 3 + 0.935239, - -5 + 0.114364, - 1 + -0.956559, - 7 + -0.360408, - 1 + 0.198951, - -1 + -0.202082, - 5 + 0.6909, - -1 + 0.530785, - -7 + 0.117763, - 1 + -0.671653, - -1 + -0.301334, - -3 + -0.0852486, - -5 + 0.24372, - 7 + -0.937574, - -3 + 0.970979, - -5 + -0.307326, - -3 + 0.755383, - -7 + -0.0614709, - 7 + -0.354787, - 3 + -0.195025, - 7 + -0.294593, - 1 + 0.679208, - 5 + 0.876946, - 1 + 0.896838, - -1 + 0.343962, - -7 + -0.0557097, - 3 + 0.335734, - -1 + 0.00658689, - 7 + -0.707898, - -1 + 0.355665, - -1 + -0.598976, - -5 + -0.591982, - 7 + -0.485165, - 1 + -0.624015, - -3 + -0.545053, - -3 + -0.584821, - 1 + -0.748295, - -1 + 0.603633, - 5 + -0.281878, - -3 + 0.887608, - -5 + -0.701604, - 3 + 0.583568, - -7 + -0.987855, - 7 + 0.0166069, - -3 + 0.156798, - -7 + 0.693214, - 7 + 0.197865, - 7 + 0.461644, - 7 + -0.751676, - -1 + 0.989154, - -3 + -0.828416, - 5 + 0.478627, - -5 + -0.225786, - 3 + 0.146553, - 3 + 0.242108, - 1 + -0.991743, - 5 + -0.23658, - 1 + 0.712781, - -1 + -0.320432, - -1 + -0.272036, - 3 + 0.601587, - 5 + -0.176224, - 7 + -0.599448, - -5 + 0.821199, - -5 + -0.650962, - -5 + 0.54749, - -7 + 0.846249, - -5 + 0.895817, - 3 + -0.368985, - 1 + -0.479081, - -3 + 0.780251, - -3 + 0.30783, - -5 + -0.0721856, - -7 + -0.0359803, - 3 + -0.559485, - 1 + 0.296459, - 7 + 0.19517, - -5 + -0.686891, - 3 + 0.126611, - 5 + -0.0218955, - 5 + -0.0897653, - 5 + -0.476869, - 5 + -0.36738, - 1 + -0.905938, - -5 + 0.769578, - -7 + -0.911913, - -5 + 0.243897, - 3 + 0.688956, - 5 + 0.278523, - -5 + 0.119666, - 5 + -0.0967183, - -7 + -0.925501, - 1 + -0.609733, - -1 + 0.538315, - 3 + -0.49403, - -7 + 0.00403903, - -1 + 0.422778, - 1 + -0.676254, - -5 + -0.495082, - -3 + 0.887213, - -7 + -0.210539, - -5 + 0.802399, - -3 + -0.205944, - 5 + -0.684772, - -7 + 0.844196, - -5 + -0.69577, - 5 + -0.822575, - -7 + -0.158769, - 5 + 0.942987, - -7 + -0.739025, - 3 + 0.791325, - 1 + -0.931093, - -7 + -0.8201, - 3 + -0.732275, - -1 + 0.945871, - 3 + -0.891814, - -7 + 0.0258538, - 3 + 0.892123, - 1 + -0.880949, - -3 + -0.633805, - -3 + -0.709181, - -3 + -0.383623, - 3 + -0.150093, - -7 + -0.117931, - 1 + -0.307017, - 3 + 0.380702, - -5 + -0.594801, - 5 + -0.43212, - 5 + 0.920089, - 7 + -0.804395, - 1 + -0.918654, - -1 + -0.904769, - 7 + -0.78175, - 7 + 0.322011, - 3 + -0.294538, - -7 + 0.930585, - 1 + -0.477718, - -5 + -0.989844, - -1 + 0.902946, - -7 + -0.350604, - 7 + 0.126035, - -7 + -0.920143, - -7 + 0.851657, - 3 + -0.136341, - 3 + 0.593154, - -5 + -0.803969, - -5 + 0.503475, - 5 + 0.0188022, - 5 + 0.631931, - 7 + 0.91577, - -7 + -0.549304, - 1 + -0.723671, - -1 + -0.305956, - -5 + 0.74761, - -3 + 0.355676, - -1 + 0.855675, - 3 + 0.613764, - 7 + 0.700543, - -5 + -0.132191, - -1 + -0.0646009, - -5 + 0.590769, - -3 + -0.49326, - -1 + 0.216807, - -3 + -0.946063, - 1 + 0.186966, - -7 + 0.790963, - -1 + 0.45715, - 1 + 0.743977, - -5 + -0.136574, - -3 + -0.888679, - -5 + -0.732167, - 7 + -0.397459, - -7 + -0.0469681, - -7 + 0.615953, - -5 + 0.439568, - 3 + 0.273846, - 7 + 0.314949, - 3 + 0.911291, - -5 + -0.453662, - 3 + 0.80863, - 3 + -0.0106643, - 5 + 0.607597, - 7 + 0.356758, - 1 + -0.6931, - -5 + 0.371134, - -3 + -0.711628, - 7 + 0.944743, - -7 + 0.202408, - -1 + 0.728236, - -3 + 0.684351, - 3 + -0.40255, - 1 + -0.186503, - -1 + 0.0150248, - 3 + 0.185297, - -7 + 0.36002, - 3 + 0.750152, - 5 + -0.381467, - 7 + 0.334737, - -3 + 0.0568684, - 3 + -0.567396, - 5 + -0.995164, - 1 + 0.602424, - 7 + 0.0454783, - 3 + 0.516061, - 5 + -0.199994, - 1 + 0.737877, - 7 + 0.411311, - 5 + -0.853456, - 5 + -0.121685, - 7 + -0.507778, - -7 + 0.152738, - -7 + 0.094981, - 1 + -0.681713, - 5 + 0.442789, - 5 + 0.973592, - 1 + -0.323444, - 1 + 0.863931, - -1 + 0.396984, - 7 + 0.249854, - 1 + 0.807021, - 7 + 0.644638, - -7 + -0.422386, - 1 + 0.0698824, - -1 + 0.24009, - -3 + -0.406826, - 3 + -0.997362, - -7 + -0.410919, - 3 + 0.0102449, - 5 + -0.495212, - 3 + 0.260833, - -7 + -0.397034, - 1 + -0.379961, - 3 + 0.483326, - 7 + -0.909255, - -7 + 0.950334, - -1 + -0.970264, - -1 + 0.276129, - -7 + -0.0553154, - -7 + 0.322334, - -3 + -0.902084, - 7 + 0.29514, - -5 + 0.864139, - 3 + 0.925323, - -3 + 0.338491, - 3 + -0.0651398, - 3 + 0.912289, - -3 + 0.52022, - -3 + -0.709139, - 3 + -0.742856, - 7 + 0.565104, - 5 + 0.894589, - 5 + -0.556394, - -1 + -0.864631, - -5 + 0.794986, - -7 + -0.869075, - 7 + 0.774674, - 3 + 0.428512, - -5 + 0.839244, - -1 + 0.357717, - -7 + 0.199788, - -1 + -0.458671, - 7 + 0.526558, - -1 + -0.318607, - -5 + 0.630471, - -3 + -0.441537, - -1 + -0.580994, - -1 + 0.690485, - 3 + -0.547178, - 7 + 0.0732123, - 7 + -0.552486, - 3 + -0.133145, - 5 + -0.933638, - 1 + 0.255392, - -3 + -0.280157, - -5 + -0.150034, - 5 + -0.122912, - 5 + 0.941452, - -3 + 0.188547, - 3 + -0.211247, - 7 + 0.946076, - -3 + 0.92071, - 1 + 0.972226, - -5 + 0.852144, - 3 + 0.377145, - -1 + 0.413943, - -7 + 0.439598, - -5 + -0.13615, - 5 + 0.171454, - -5 + 0.845844, - -7 + 0.783942, - 3 + -0.618869, - -7 + 0.760145, - 5 + -0.0578561, - -1 + -0.582842, - 3 + -0.155049, - 5 + -0.220217, - 7 + -0.73738, - 1 + -0.767926, - -1 + -0.1484, - 7 + 0.834785, - 1 + 0.101825, - -7 + -0.449194, - 3 + 0.11657, - -1 + 0.904672, - -5 + 0.054498, - 3 + 0.924094, - -5 + -0.0965653, - 1 + -0.613703, - -7 + 0.4126, - -3 + 0.584113, - -7 + 0.159096, - -5 + -0.485646, - 3 + -0.0365765, - -3 + -0.417187, - 7 + 0.916336, - -1 + 0.725319, - 1 + 0.494014, - -5 + -0.532621, - -1 + 0.646111, - -7 + -0.417253, - -1 + -0.0992868, - -1 + 0.654899, - 3 + -0.444689, - 3 + 0.800794, - 1 + -0.112122, - -1 + -0.712385, - -3 + 0.166391, - 5 + 0.314575, - -5 + 0.950806, - 3 + -0.44719, - 1 + -0.175398, - 5 + -0.225897, - 3 + 0.258122, - -1 + -0.571683, - -3 + 0.745108, - 7 + -0.489975, - 3 + 0.869279, - 3 + -0.536627, - 5 + -0.828879, - -7 + -0.62512, - -7 + -0.456803, - 7 + 0.142581, - 7 + -0.220935, - 7 + 0.012534, - -5 + -0.681989, - -7 + 0.622798, - 1 + -0.557702, - -3 + 0.482869, - 5 + 0.197984, - 3 + 0.934018, - 7 + -0.094445, - -7 + 0.325073, - 7 + 0.917923, - -7 + 0.17338, - -5 + -0.354761, - -5 + 0.71292, - -1 + -0.877613, - 7 + -0.857628, - -7 + 0.5547, - 5 + 0.819892, - 5 + 0.550559, - 3 + -0.0277248, - 3 + 0.0711193, - -3 + -0.0491096, - -5 + -0.860672, - 3 + -0.0807872, - -5 + 0.651853, - 7 + 0.104082, - -7 + 0.236164, - -1 + -0.330286, - -7 + -0.480073, - 3 + 0.406925, - -5 + -0.518305, - -1 + -0.605615, - -1 + 0.381587, - -1 + -0.11044, - 3 + -0.160278, - 1 + -0.304637, - -1 + -0.527384, - -7 + 0.882399, - 3 + -0.777911, - -7 + -0.0419154, - 1 + -0.719173, - -7 + 0.936713, - -3 + -0.751213, - -3 + 0.441754, - 1 + -0.0637285, - -1 + 0.375699, - 7 + -0.153902, - 7 + -0.792171, - 5 + 0.655847, - 7 + 0.882999, - 5 + 0.0812634, - 3 + 0.546496, - -7 + -0.223494, - -1 + -0.356427, - 1 + 0.310918, - -7 + 0.571231, - -1 + 0.798337, - -3 + 0.598408, - -3 + 0.72025, - 3 + 0.51356, - -3 + -0.167374, - 3 + 0.240713, - 5 + 0.933577, - 5 + 0.267443, - -7 + 0.853163, - 7 + 0.751923, - 1 + -0.76546, - 1 + -0.464537, - -5 + -0.307334, - 1 + 0.78241, - -3 + -0.998566, - -1 + 0.35207, - -5 + 0.427847, - -5 + 0.110459, - 3 + 0.834955, - -7 + 0.254993, - 5 + 0.368997, - 1 + 0.697111, - 5 + 0.458215, - 5 + 0.0957664, - 7 + -0.97862, - -7 + -0.615026, - 3 + 0.859467, - 5 + -0.306685, - 1 + 0.305295, - -5 + 0.093081, - -3 + 0.673005, - 1 + 0.985715, - -5 + -0.944994, - -5 + 0.817741, - 7 + -0.898887, - 7 + -0.742699, - -7 + 0.298725, - 5 + -0.180113, - -7 + 0.18706, - 1 + 0.185461, - -1 + -0.522394, - -1 + -0.117225, - -7 + -0.143794, - -3 + -0.273471, - 1 + 0.139797, - 5 + -0.265773, - 3 + 0.427259, - 3 + -0.869272, - -5 + -0.144366, - -1 + 0.337665, - -1 + 0.171026, - 5 + -0.79788, - -5 + 0.192947, - -5 + -0.311556, - 5 + 0.785642, - -1 + -0.505434, - -1 + 0.233518, - 1 + 0.420173, - -1 + 0.163412, - 7 + 0.605216, - 1 + -0.593143, - -1 + -0.957213, - -1 + -0.515973, - 1 + 0.525257, - -5 + 0.446536, - 1 + 0.486375, - -3 + -0.5737, - 3 + -0.217493, - -1 + 0.517623, - -7 + 0.920525, - 5 + 0.365421, - 5 + 0.00848039, - -5 + 0.153402, - 1 + 0.13929, - 5 + 0.977456, - -7 + 0.22807, - -1 + -0.119464, - -1 + -0.351284, - -1 + -0.991155, - 7 + 0.889795, - -3 + 0.691846, - 1 + -0.746596, - -3 + 0.586713, - 5 + 0.596188, - -7 + -0.477961, - 3 + -0.620132, - 5 + -0.0775085, - 1 + -0.165338, - 5 + -0.211165, - 7 + -0.0470844, - 7 + -0.748061, - -3 + -0.810057, - 5 + -0.196284, - -7 + 0.0831261, - 7 + 0.823358, - 3 + -0.628647, - 7 + 0.576381, - -3 + -0.347779, - 7 + 0.223497, - -7 + -0.526754, - -7 + 0.806814, - -7 + -0.725776, - 5 + -0.793048, - -3 + -0.678268, - 7 + -0.718848, - 1 + 0.914832, - -5 + 0.808905, - 5 + 0.664148, - 3 + -0.151127, - -3 + -0.289634, - 7 + 0.276275, - 5 + 0.0411116, - -3 + 0.180697, - 7 + -0.957571, - 5 + -0.931349, - 3 + 0.346197, - 3 + 0.855933, - 1 + -0.9529, - -1 + -0.687524, - 1 + 0.393423, - 7 + 0.946512, - -5 + 0.361563, - 1 + 0.197133, - -5 + 0.313557, - 3 + -0.932788, - 3 + -0.342819, - 3 + 0.07439, - -7 + 0.703045, - -5 + -0.37896, - 1 + -0.175719, - 5 + 0.223835, - 5 + -0.516742, - -7 + 0.791386, - -3 + 0.594912, - 3 + 0.917958, - -3 + -0.550284, - 5 + 0.161439, - -1 + 0.308031, - -3 + 0.129603, - -5 + -0.755601, - -5 + -0.0725142, - -3 + 0.900576, - 5 + -0.0439364, - 3 + -0.571107, - -5 + -0.696274, - -7 + -0.101347, - 1 + 0.364593, - -7 + -0.428825, - -7 + 0.723648, - -7 + -0.196055, - 5 + -0.466505, - -3 + 0.906948, - 7 + 0.869376, - -1 + 0.965839, - 3 + -0.279962, - 1 + 0.734883, - 5 + 0.829225, - -3 + 0.931521, - 3 + 0.362365, - -7 + 0.797885, - -7 + 0.497423, - 3 + 0.776487, - 7 + 0.636682, - 1 + 0.285877, - 5 + 0.662518, - 3 + -0.273415, - -3 + -0.609258, - 7 + -0.621225, - 5 + 0.795938, - -1 + 0.330694, - -3 + 0.690014, - 1 + -0.493836, - -7 + 0.308625, - -3 + -0.948984, - -1 + -0.553156, - 1 + -0.561592, - 5 + 0.835248, - 7 + -0.722998, - -3 + -0.147382, - 3 + -0.986829, - 3 + -0.428939, - 7 + -0.486681, - -3 + -0.512164, - -7 + -0.849359, - 1 + 0.169338, - -3 + 0.794093, - 5 + -0.54137, - 5 + -0.526859, - -1 + 0.452928, - 1 + -0.42493, - -1 + 0.121008, - 3 + 0.227603, - -3 + -0.933629, - -7 + -0.176661, - 7 + -0.444884, - 5 + 0.0810715, - 5 + -0.139102, - 7 + -0.726052, - -3 + 0.342913, - 3 + -0.586903, - 7 + 0.619812, - 7 + 0.513767, - 3 + 0.179749, - -5 + 0.28388, - 5 + 0.494988, - 7 + -0.697871, - -1 + 0.320561, - 3 + 0.336703, - -5 + 0.277044, - -5 + 0.637778, - 3 + -0.778878, - -7 + 0.563479, - 5 + 0.933587, - -1 + -0.0155785, - 7 + 0.967945, - 7 + -0.441443, - -1 + 0.476776, - -1 + 0.784109, - 1 + 0.282272, - -3 + 0.120237, - 5 + 0.909491, - 7 + 0.0166548, - 1 + 0.0874624, - 7 + -0.943263, - -7 + 0.404136, - -3 + -0.425458, - 5 + -0.279096, - -7 + 0.297659, - -5 + -0.909941, - -3 + 0.417617, - 3 + 0.541595, - 5 + 0.553146, - -7 + -0.758788, - -3 + 0.810651, - 3 + 0.824127, - 3 + -0.860216, - 1 + -0.301784, - -7 + 0.774392, - -3 + -0.409294, - -1 + -0.233762, - 7 + -0.169785, - -3 + 0.0785076, - 5 + 0.612462, - 3 + -0.436439, - -7 + 0.879343, - 1 + 0.639467, - 1 + 0.052389, - -5 + -0.0166562, - -3 + 0.341038, - 5 + -0.828713, - 3 + 0.794875, - -1 + 0.45125, - -3 + 0.681263, - -5 + 0.420113, - -7 + -0.367513, - -7 + 0.706676, - -3 + -0.494458, - -3 + -0.834332, - -5 + -0.683485, - -1 + -0.0354494, - -5 + -0.604827, - 3 + 0.413222, - -3 + 0.275839, - 1 + 0.456946, - -7 + -0.171177, - -7 + -0.518215, - -7 + 0.0480101, - 3 + -0.543404, - 3 + 0.634555, - 7 + 0.509344, - 5 + 0.032606, - -7 + 0.847702, - -7 + -0.382019, - 1 + -0.893403, - -3 + 0.0839257, - -5 + -0.605519, - 5 + -0.398689, - -1 + 0.777001, - 1 + 0.557634, - 5 + -0.203117, - -7 + 0.388056, - -1 + -0.841352, - 5 + 0.571447, - -1 + 0.540101, - 7 + 0.707744, - 3 + 0.0310338, - -1 + -0.222217, - -3 + 0.878539, - 7 + 0.0656955, - -1 + 0.579365, - -7 + 0.77745, - 5 + -0.330132, - -1 + -0.181327, - 5 + -0.936911, - 7 + -0.28417, - -1 + 0.184943, - 3 + 0.470113, - -3 + -0.668268, - 3 + 0.443922, - -7 + -0.254059, - -5 + -0.998164, - -7 + -0.293805, - -7 + 0.0910158, - 7 + 0.692813, - -1 + -0.0799075, - -7 + 0.721993, - -1 + 0.385094, - 5 + -0.00619203, - 7 + 0.552784, - 1 + -0.596967, - -5 + -0.00704482, - 1 + -0.110811, - 3 + 0.121887, - 3 + 0.674047, - -3 + 0.170743, - 3 + 0.760664, - -3 + 0.42977, - 1 + 0.315997, - 5 + 0.154003, - -3 + 0.369766, - -3 + 0.646692, - -3 + -0.0673465, - 3 + -0.0560396, - -7 + 0.138723, - 7 + -0.0105182, - -7 + -0.742613, - -1 + -0.0661037, - 3 + 0.00532501, - 5 + -0.755478, - -3 + 0.363332, - -7 + -0.299669, - -1 + 0.27668, - 1 + -0.117032, - -1 + -0.0241725, - 3 + 0.0823766, - -7 + -0.207114, - 5 + -0.0581861, - -5 + 0.689536, - -5 + -0.206481, - 3 + -0.457966, - 7 + -0.489086, - -5 + 0.467335, - -3 + -0.360001, - -1 + -0.138445, - -7 + -0.914763, - 7 + 0.588969, - -5 + 0.283839, - -7 + 0.959326, - -7 + -0.67792, - -7 + -0.334574, - 7 + 0.370579, - 7 + -0.171007, - 3 + -0.868796, - -3 + -0.319757, - 3 + -0.879288, - -3 + -0.435152, - 1 + -0.700487, - 5 + -0.313853, - -5 + 0.0436639, - -3 + -0.579779, - -3 + -0.778584, - -5 + -0.789192, - -7 + -0.0165036, - 5 + -0.746662, - 3 + 0.423599, - 1 + -0.896458, - 1 + 0.884175, - -7 + -0.861808, - 1 + 0.0740701, - -7 + 0.338526, - 7 + 0.292062, - 3 + 0.948647, - 3 + -0.473585, - 5 + -0.420246, - 3 + -0.949748, - -3 + -0.593698, - -1 + -0.996076, - 1 + -0.862255, - 7 + 0.137548, - -7 + -0.28388, - 5 + 0.534124, - 5 + 0.434866, - 5 + 0.139012, - 5 + -0.468484, - -7 + 0.740186, - -7 + -0.376626, - -3 + -0.183861, - -1 + 0.669948, - 5 + 0.859722, - 1 + -0.138174, - -5 + -0.573832, - 5 + -0.940617, - 7 + -0.267174, - 7 + -0.3461, - -7 + -0.741914, - -3 + -0.322358, - -5 + 0.718059, - -7 + -0.97611, - -3 + 0.154576, - -1 + -0.183644, - 1 + -0.575116, - -3 + 0.825954, - 3 + -0.751385, - 7 + -0.607166, - -5 + -0.500472, - 7 + 0.882115, - -7 + 0.0493956, - -5 + 0.362625, - -3 + 0.492293, - 5 + 0.389105, - -5 + 0.800949, - 1 + 0.94705, - -7 + -0.377441, - 7 + 0.351678, - 7 + -0.44366, - -1 + 0.320667, - -1 + 0.752543, - 1 + 0.969968, - -7 + 0.0223379, - 5 + -0.91498, - -7 + -0.172866, - -5 + -0.173087, - 5 + 0.996417, - -1 + -0.490241, - -3 + 0.91821, - 7 + -0.563976, - 5 + -0.485962, - -7 + 0.892581, - -3 + -0.460805, - 3 + 0.941525, - 1 + -0.174042, - -3 + 0.838862, - -7 + -0.156077, - -7 + 0.466488, - 1 + -0.724364, - 7 + 0.587571, - 3 + -0.274185, - 5 + -0.514854, - -3 + 0.254629, - 7 + -0.291446, - 5 + -0.0912776, - -3 + -0.54812, - 5 + -0.0964439, - -1 + -0.952324, - -3 + 0.477252, - -5 + -0.75421, - -7 + -0.536212, - 1 + 0.97589, - 1 + -0.534707, - 1 + -0.610279, - -5 + -0.380512, - 3 + -0.213305, - 7 + 0.951862, - 1 + 0.514467, - 3 + -0.52728, - 7 + -0.107415, - -1 + 0.530744, - -7 + -0.780547, - -7 + 0.601507, - -1 + -0.884028, - -5 + 0.295033, - 5 + 0.216542, - -3 + 0.803556, - -5 + 0.408551, - -1 + 0.0640241, - -7 + 0.337687, - -3 + 0.973948, - -7 + -0.112561, - 3 + 0.497891, - -1 + -0.360651, - 1 + 0.429832, - 3 + 0.599578, - -7 + 0.62018, - -5 + 0.00679079, - -7 + 0.214149, - 7 + 0.840447, - -3 + -0.167543, - 5 + 0.0564775, - -7 + 0.824302, - 3 + 0.0793194, - 3 + 0.999321, - -1 + -0.446545, - -3 + 0.703463, - 7 + 0.991686, - -1 + -0.894842, - -7 + -0.011711, - 5 + 0.280148, - -7 + 0.854388, - -7 + -0.187445, - -1 + 0.594443, - -7 + 0.933654, - 1 + 0.297684, - 7 + 0.305794, - 5 + -0.871352, - -5 + -0.415714, - -3 + -0.437484, - -5 + 0.425868, - 3 + 0.413091, - -5 + 0.413299, - 7 + -0.94675, - 1 + 0.403995, - 7 + 0.792962, - -3 + -0.663822, - -1 + 0.782255, - 5 + 0.740358, - 5 + 0.64335, - -3 + -0.677456, - -7 + 0.318753, - 3 + 0.637624, - 5 + 0.716802, - -3 + 0.506525, - -5 + -0.0154431, - 5 + -0.413524, - -3 + -0.97805, - 3 + -0.715193, - -1 + 0.855351, - -3 + -0.547344, - -1 + 0.707832, - -7 + -0.100186, - -3 + 0.1044, - -1 + 0.834975, - 5 + 0.950804, - -3 + -0.146867, - 7 + -0.922332, - -5 + 0.361724, - 1 + -0.376783, - 1 + -0.979652, - -3 + -0.860688, - 7 + -0.0470151, - 7 + -0.29374, - 1 + -0.820914, - -1 + -0.811114, - 5 + -0.585238, - 3 + 0.0997306, - -5 + -0.789875, - 5 + -0.240234, - 5 + -0.795669, - -3 + 0.834812, - -5 + -0.0813862, - 5 + -0.154017, - -5 + 0.414384, - 1 + 0.878358, - -7 + -0.0818945, - 3 + -0.239543, - -3 + -0.203324, - -3 + -0.921207, - 5 + 0.69081, - 1 + -0.727172, - 1 + 0.287061, - 3 + 0.216088, - 1 + -0.47675, - -1 + 0.679726, - -1 + 0.147156, - 3 + 0.785956, - 5 + -0.0128753, - -1 + -0.198679, - 7 + 0.16421, - -7 + -0.41241, - -7 + 0.785757, - 1 + 0.502945, - -3 + -0.611199, - 1 + 0.589565, - -1 + -0.0650551, - -5 + -0.575992, - -3 + -0.744359, - 5 + -0.856259, - -1 + 0.95337, - -7 + 0.285215, - 3 + -0.692112, - 1 + 0.427753, - 5 + -0.771773, - 1 + 0.469569, - -1 + -0.428564, - 7 + 0.465778, - 7 + -0.468184, - 7 + 0.958522, - 1 + -0.129728, - -7 + 0.48096, - 7 + -0.127209, - 7 + -0.725595, - -5 + -0.100204, - -3 + 0.231591, - 7 + 0.54961, - 5 + 0.714396, - -5 + -0.891057, - 7 + 0.0990063, - 5 + -0.0485793, - 5 + 0.350462, - -7 + 0.683771, - 1 + -0.69861, - 1 + 0.0453779, - -1 + -0.609794, - 3 + -0.30366, - -1 + -0.0804034, - -1 + -0.119469, - 3 + 0.0833771, - -1 + 0.365207, - -3 + 0.569098, - 1 + 0.122556, - -3 + 0.383273, - -3 + 0.873332, - 5 + -0.992991, - -5 + -0.888515, - 5 + 0.0792137, - 7 + -0.949043, - -5 + -0.311345, - 1 + 0.129391, - -7 + 0.514229, - -7 + -0.889496, - 1 + -0.188848, - 5 + -0.47186, - -5 + -0.0947434, - -5 + -0.860318, - -5 + 0.240262, - 5 + -0.855161, - -7 + -0.682376, - 5 + -0.268279, - -1 + 0.574063, - -1 + -0.607989, - 3 + 0.563884, - -1 + -0.28172, - 5 + 0.889506, - 3 + 0.961434, - 1 + 0.701135, - -3 + -0.36667, - -7 + -0.665516, - 5 + -0.982884, - -7 + -0.444751, - -3 + -0.0457394, - 1 + 0.686493, - 3 + -0.763344, - -3 + -0.969778, - -5 + 0.557193, - 3 + -0.70817, - -3 + -0.0794386, - 7 + -0.674222, - 1 + 0.776054, - 3 + 0.0315101, - -5 + 0.629314, - -3 + 0.0376186, - -1 + 0.363226, - 7 + -0.829763, - 7 + -0.252856, - 5 + -0.622667, - 3 + -0.409799, - 1 + 0.33154, - 5 + 0.731536, - 7 + 0.702268, - 5 + 0.926338, - 5 + 0.843521, - -3 + -0.505366, - 3 + 0.034738, - 7 + 0.935227, - 3 + -0.633068, - 5 + 0.612473, - 7 + -0.0785781, - 7 + -0.209858, - 3 + -0.519326, - -1 + -0.900059, - 5 + 0.167903, - 7 + -0.237923, - 1 + 0.568017, - -3 + 0.338209, - 1 + -0.262908, - 1 + 0.0486361, - 7 + 0.05413, - 5 + -0.900298, - -1 + 0.13673, - 5 + 0.256166, - 5 + 0.302061, - -5 + 0.399097, - 5 + -0.379186, - -5 + 0.623826, - 5 + -0.436995, - 3 + 0.15716, - -1 + -0.839201, - -5 + -0.0482146, - 5 + -0.580043, - -5 + -0.276397, - -7 + -0.224163, - -7 + 0.569099, - 1 + 0.112961, - 7 + 0.695617, - -5 + -0.985498, - -5 + 0.624633, - -5 + -0.698944, - 1 + 0.290597, - -1 + 0.492301, - 5 + -0.873225, - 5 + 0.517916, - 1 + -0.739614, - -5 + -0.118872, - -7 + 0.429263, - 5 + -0.374059, - -3 + -0.196779, - 5 + 0.845428, - 3 + -0.825515, - 1 + -0.324621, - 3 + -0.321085, - 5 + 0.659568, - -7 + 0.507627, - 3 + -0.762506, - -5 + 0.0177499, - 1 + -0.969493, - 5 + -0.989013, - 7 + 0.639013, - 5 + -0.293451, - -3 + -0.399314, - 3 + -0.164182, - -5 + -0.0115777, - -7 + 0.728109, - 1 + 0.0601385, - -3 + 0.53905, - -3 + 0.557821, - -3 + 0.267226, - 7 + 0.484006, - 3 + -0.462906, - 7 + 0.593879, - 7 + 0.70928, - 3 + 0.783019, - 7 + -0.390819, - 5 + 0.447453, - -1 + -0.327203, - -7 + -0.249398, - -5 + -0.100986, - 1 + -0.155282, - -7 + -0.798511, - -5 + -0.415777, - 1 + 0.971724, - -3 + -0.087326, - 7 + 0.946116, - -7 + -0.681513, - 1 + -0.564743, - 5 + 0.939016, - 3 + -0.437047, - -7 + -0.551414, - -3 + 0.489793, - 5 + -0.535763, - -3 + -0.98994, - 7 + 0.192269, - -5 + 0.802636, - -3 + 0.335588, - -7 + -0.346334, - 7 + 0.710128, - 7 + 0.359396, - 7 + 0.167325, - -1 + -0.359781, - 5 + -0.450043, - -3 + -0.399062, - -1 + 0.220616, - -1 + -0.713507, - 5 + -0.323577, - -3 + -0.324612, - -5 + -0.0478501, - 7 + 0.0652244, - -1 + 0.694262, - -5 + 0.234324, - -1 + 0.684074, - -3 + 0.885926, - -1 + 0.709219, - 7 + -0.403976, - -5 + 0.0613845, - -5 + 0.578585, - 5 + 0.531759, - 5 + -0.823466, - 1 + 0.885001, - -5 + 0.678863, - 1 + 0.235131, - -5 + 0.741793, - -7 + 0.831432, - -3 + 0.524304, - 3 + -0.740704, - 7 + 0.507732, - 3 + -0.0357639, - 7 + 0.863181, - -1 + 0.576264, - 3 + 0.516363, - 3 + -0.764998, - -1 + -0.362159, - -5 + 0.197446, - 3 + -0.446453, - 3 + 0.981725, - 7 + 0.0734841, - 3 + 0.256196, - -3 + -0.77722, - -5 + 0.791577, - -7 + 0.402091, - 7 + 0.553504, - 1 + -0.93853, - -7 + 0.584471, - -3 + -0.437479, - 5 + 0.997935, - -5 + 0.682598, - -7 + 0.641139, - 3 + -0.732735, - -1 + 0.930625, - -7 + -0.488808, - 7 + -0.985779, - 7 + 0.526349, - 1 + 0.412067, - 7 + 0.405549, - 3 + 0.95903, - -3 + 0.304788, - 5 + -0.344784, - 7 + -0.707093, - 7 + 0.508233, - 3 + 0.704947, - 1 + 0.790839, - -7 + -0.789173, - -3 + -0.320104, - -5 + -0.0990607, - -1 + -0.181266, - 3 + 0.413149, - 5 + -0.445842, - 7 + 0.114297, - -1 + -0.0193645, - -3 + -0.630197, - 7 + 0.549956, - 3 + 0.832843, - -1 + 0.709999, - 5 + 0.35154, - -3 + 0.488788, - -1 + -0.367693, - 7 + 0.81898, - 3 + -0.977579, - -7 + 0.677679, - 3 + 0.0798718, - -5 + -0.361776, - -7 + 0.029239, - -3 + 0.752219, - -5 + 0.36909, - -1 + -0.845805, - -5 + 0.552649, - 7 + -0.320622, - 5 + -0.0791636, - -7 + 0.155842, - -5 + -0.383591, - -7 + -0.921708, - 7 + 0.262659, - -5 + -0.311854, - -3 + 0.909658, - 5 + 0.220908, - -5 + -0.24149, - 5 + 0.424055, - -7 + -0.115968, - -1 + -0.837231, - -3 + -0.943953, - -1 + -0.501246, - 3 + -0.30943, - -7 + 0.726022, - 5 + 0.468604, - 7 + -0.536298, - -5 + 0.180367, - -5 + 0.478635, - -5 + -0.983354, - -7 + 0.948823, - 7 + -0.964671, - -7 + 0.83219, - -1 + -0.00482819, - -5 + 0.910779, - 7 + 0.0379913, - 5 + 0.958815, - -7 + 0.37621, - 5 + -0.348852, - 1 + 0.251557, - 5 + 0.421582, - 7 + 0.100173, - -3 + -0.343514, - 7 + 0.866663, - -1 + 0.442026, - 7 + 0.0442502, - 3 + -0.617214, - 1 + -0.743735, - -5 + 0.458965, - 5 + -0.572788, - 5 + 0.040819, - 3 + -0.445056, - 5 + -0.58016, - 5 + 0.386475, - -5 + 0.470098, - 5 + -0.00197146, - 7 + -0.614743, - -7 + 0.632339, - 5 + -0.445174, - -5 + -0.462788, - -5 + 0.994442, - 5 + -0.0414883, - -5 + 0.882532, - 1 + 0.694469, - -5 + -0.36298, - -7 + 0.836014, - 1 + 0.247427, - 5 + -0.623588, - -3 + 0.509161, - 3 + -0.0136789, - -5 + 0.551708, - -5 + 0.714889, - 5 + 0.948555, - 7 + -0.542934, - -3 + 0.284379, - -1 + 0.445103, - 5 + -0.302788, - -3 + 0.782427, - -1 + -0.137974, - -1 + 0.874363, - -3 + -0.450784, - 1 + -0.962429, - -5 + 0.938102, - -7 + -0.879492, - 5 + 0.666352, - -5 + 0.146655, - -3 + 0.505806, - 3 + -0.90168, - 5 + -0.00662362, - -5 + 0.401645, - -5 + 0.516729, - 7 + -0.325518, - 7 + -0.670081, - 3 + -0.898185, - 7 + 0.725776, - -1 + -0.519448, - -1 + 0.101936, - 3 + -0.800607, - 7 + -0.407942, - 7 + -0.249011, - 7 + 0.974777, - -7 + 0.984282, - -1 + 0.177661, - -3 + 0.165499, - -5 + -0.145106, - 1 + 0.092101, - -3 + -0.287475, - -1 + -0.160128, - -5 + 0.20695, - -1 + 0.278086, - 7 + 0.376328, - -7 + 0.854766, - 7 + 0.242705, - -5 + -0.623362, - 1 + -0.755314, - -3 + -0.498729, - -5 + -0.742776, - 3 + -0.17839, - -7 + -0.141452, - -7 + 0.0890251, - 3 + -0.761854, - -7 + 0.316197, - 1 + 0.531921, - -1 + 0.763375, - -7 + 0.398482, - 1 + -0.930327, - -5 + 0.559533, - 3 + -0.782727, - -1 + -0.809251, - -3 + -0.827661, - -7 + -0.790187, - 3 + 0.886559, - 3 + -0.312838, - 7 + -0.205646, - 3 + 0.538917, - -5 + -0.151619, - 7 + -0.498444, - -1 + -0.777891, - -7 + 0.709902, - 5 + -0.842215, - -3 + -0.0873613, - -3 + 0.88423, - 1 + 0.50133, - 5 + 0.87654, - -1 + 0.775389, - -1 + 0.274183, - -7 + -0.1128, - 7 + 0.129837, - 7 + -0.138116, - 7 + 0.697651, - 3 + -0.363404, - 5 + -0.51758, - 5 + 0.276224, - -5 + -0.843988, - 5 + 0.965171, - 5 + -0.433201, - 5 + 0.77057, - 5 + -0.347871, - -1 + -0.337877, - 5 + 0.0192994, - 5 + -0.00149202, - 5 + -0.705596, - -7 + 0.848062, - 3 + -0.780618, - 3 + 0.33526, - -3 + -0.0251735, - 7 + -0.148926, - -1 + -0.655041, - -3 + -0.559493, - -3 + -0.604536, - 3 + -0.0386967, - -3 + 0.830413, - 1 + -0.428, - 5 + -0.0231212, - 7 + -0.199671, - 5 + -0.396984, - -3 + 0.687779, - -7 + -0.126673, - 3 + -0.14281, - 3 + -0.663755, - -1 + 0.590741, - 7 + -0.259138, - -1 + 0.36915, - 7 + -0.193918, - -3 + 0.074994, - 3 + 0.0734893, - 3 + -0.87442, - 5 + -0.277579, - -7 + 0.874191, - 1 + 0.603273, - -1 + -0.933543, - 7 + 0.952655, - 3 + -0.0753299, - -1 + -0.0547395, - 1 + 0.298926, - 7 + 0.89666, - -1 + -0.169361, - -7 + -0.0164988, - -1 + 0.536616, - 3 + 0.123214, - -3 + -0.686119, - -3 + 0.207928, - 1 + 0.690104, - -7 + -0.840309, - -1 + 0.22515, - 5 + -0.848586, - 7 + -0.266778, - -7 + -0.573275, - -1 + 0.792824, - 7 + -0.984161, - -3 + -0.188004, - 5 + -0.461688, - -1 + -0.62303, - 3 + -0.513087, - -1 + -0.0713464, - 7 + -0.4341, - 1 + 0.791935, - -7 + -0.216476, - -5 + -0.472753, - 7 + 0.887405, - 5 + -0.629382, - -1 + 0.960013, - -7 + -0.225607, - 5 + -0.783357, - 3 + 0.238133, - 1 + -0.939504, - 7 + 0.300807, - 7 + 0.714341, - -1 + 0.0662017, - -3 + 0.709742, - -1 + 0.80212, - -5 + 0.78005, - -3 + 0.252241, - -3 + -0.848605, - -7 + -0.928371, - -1 + 0.6205, - 3 + -0.355202, - 3 + -0.884526, - 1 + 0.766157, - 1 + -0.48066, - -5 + 0.148214, - -5 + 0.416083, - 1 + 0.141582, - 3 + 0.954276, - 7 + -0.598539, - 1 + 0.302432, - -7 + -0.302829, - -5 + 0.365095, - -5 + 0.291996, - -7 + -0.853708, - 3 + -0.27352, - 3 + 0.544414, - -1 + -0.459018, - 1 + 0.184556, - 3 + -0.52332, - -1 + -0.191827, - -1 + 0.670293, - 1 + 0.519123, - 5 + 0.841211, - -1 + -0.940759, - -1 + -0.251439, - -1 + 0.695483, - -3 + 0.557767, - -3 + 0.26932, - 1 + 0.0599606, - -5 + -0.731488, - -3 + -0.559606, - -7 + -0.161615, - -7 + -0.269363, - -3 + 0.700813, - -5 + -0.598768, - -3 + 0.805228, - 5 + -0.856961, - -1 + -0.385613, - -3 + -0.323487, - -7 + 0.411967, - -5 + 0.21551, - -7 + 0.010317, - -3 + 0.573196, - 3 + -0.360943, - -1 + 0.564722, - 7 + 0.0449874, - 5 + -0.230872, - -3 + -0.394789, - -3 + 0.992717, - 5 + 0.241152, - -1 + -0.849168, - 5 + 0.828781, - 5 + -0.408953, - -1 + -0.289148, - -1 + 0.222295, - 1 + -0.537086, - 3 + 0.306834, - -1 + -0.585661, - -7 + 0.538775, - 3 + -0.204193, - 7 + -0.77022, - 1 + -0.540422, - -5 + 0.104483, - 3 + 0.0113785, - -3 + 0.358089, - 7 + 0.83108, - 7 + -0.810261, - -1 + 0.0540461, - -1 + 0.87434, - -7 + -0.379698, - 5 + -0.722662, - -7 + -0.587491, - 3 + -0.152501, - 1 + -0.137736, - -1 + 0.137048, - -7 + -0.993715, - -5 + -0.817584, - -7 + 0.192652, - -7 + 0.965716, - 3 + -0.497121, - -3 + -0.583623, - 3 + 0.724106, - 3 + 0.906286, - 3 + 0.369401, - -5 + -0.333858, - -7 + 0.201107, - 1 + -0.481391, - 3 + 0.214079, - 1 + -0.634333, - 3 + 0.32668, - -5 + 0.438198, - 3 + 0.0183425, - -7 + -0.854446, - -3 + -0.749623, - 5 + 0.260525, - -3 + -0.246166, - 7 + -0.256046, - 5 + -0.0506104, - -5 + -0.546944, - -3 + 0.70895, - 7 + 0.671615, - -7 + -0.178744, - -7 + -0.296848, - 3 + -0.786894, - 1 + 0.486466, - 5 + 0.984005, - -3 + 0.755768, - -3 + 0.60431, - -7 + -0.658241, - 7 + -0.99308, - -7 + 0.730603, - 1 + -0.147345, - 3 + -0.914348, - -5 + 0.176437, - -5 + -0.883513, - -5 + -0.746214, - 1 + 0.599807, - -1 + -0.826388, - -1 + -0.231019, - 7 + -0.427187, - 3 + 0.436418, - -5 + -0.0296006, - 3 + 0.342193, - 5 + -0.02255, - -1 + 0.332447, - 1 + 0.627013, - -7 + -0.257934, - -5 + -0.61819, - -7 + 0.660406, - 7 + -0.749068, - -1 + -0.826357, - 7 + 0.259934, - 1 + 0.624619, - -5 + -0.409846, - -7 + 0.175771, - 7 + 0.841248, - -7 + -0.182872, - 7 + 0.728087, - 3 + -0.272224, - -1 + 0.694387, - 1 + 0.87123, - -7 + -0.36121, - -3 + 0.231829, - -3 + -0.288232, - -1 + 0.860921, - 3 + -0.667815, - -1 + -0.9711, - 3 + -0.778314, - 3 + -0.298502, - 7 + 0.460686, - -7 + -0.972103, - 1 + -0.791205, - -7 + -0.527057, - 3 + 0.680872, - 1 + 0.854739, - -7 + -0.673826, - -1 + 0.137268, - -1 + 0.333986, - -1 + 0.901741, - -1 + -0.202348, - -3 + -0.774122, - 1 + 0.589625, - 3 + -0.849021, - 7 + -0.456618, - 5 + 0.567717, - 5 + -0.636284, - 1 + 0.365766, - 1 + -0.511727, - -7 + 0.166757, - 5 + 0.919885, - 1 + -0.642062, - 5 + -0.296797, - -7 + -0.385574, - 7 + 0.591877, - -7 + 0.436025, - 3 + 0.451077, - -1 + -0.716762, - -3 + 0.374155, - 5 + 0.337632, - -7 + 0.723804, - -5 + 0.383933, - -3 + -0.0862489, - 3 + 0.990362, - 5 + 0.133119, - 1 + -0.12971, - 3 + 0.044241, - 3 + -0.964742, - -5 + 0.702827, - -5 + 0.52507, - 7 + 0.813182, - 7 + 0.456129, - -7 + -0.564425, - -3 + 0.681494, - -1 + 0.503007, - 1 + 0.488921, - -5 + -0.978964, - 5 + -0.978504, - -5 + 0.458051, - -7 + 0.0654869, - 3 + -0.245564, - -1 + -0.337528, - -5 + -0.55446, - -5 + 0.273099, - -7 + 0.215733, - 1 + -0.138924, - 7 + -0.219671, - 3 + -0.887201, - -7 + -0.516248, - -5 + -0.396037, - -5 + 0.818756, - 3 + -0.712209, - 7 + -0.282743, - -3 + 0.707385, - 7 + 0.359774, - -5 + -0.845302, - 1 + -0.1686, - -7 + -0.483578, - 1 + 0.720247, - 1 + 0.626128, - 7 + -0.2298, - -7 + -0.491252, - -1 + 0.568972, - 1 + 0.348875, - 5 + -0.21767, - 5 + -0.844788, - -7 + 0.212711, - -5 + -0.728646, - 5 + -0.257998, - -3 + 0.91577, - 3 + -0.356945, - -5 + -0.727851, - 3 + -0.839908, - -5 + -0.87513, - 5 + 0.492427, - 7 + 0.859239, - 5 + 0.63738, - 7 + -0.567552, - 7 + -0.311746, - -5 + -0.293624, - -5 + -0.0892278, - -1 + 0.68692, - -3 + -0.584071, - -7 + -0.368564, - 3 + 0.685985, - 1 + -0.443952, - 5 + -0.799968, - -5 + 0.849293, - 7 + 0.419622, - 7 + -0.719699, - -5 + 0.776349, - 7 + 0.353652, - -3 + -0.957607, - 7 + -0.233657, - -3 + 0.110137, - -5 + -0.825374, - -5 + 0.936229, - 3 + 0.611605, - -5 + 0.598961, - 3 + 0.914424, - -5 + 0.185668, - 1 + -0.506371, - -1 + 0.19368, - -3 + 0.135954, - 5 + 0.0317122, - -3 + 0.926598, - 3 + 0.841409, - -7 + -0.995628, - 7 + -0.516938, - 1 + -0.327213, - -7 + -0.988622, - 7 + 0.0436381, - -1 + -0.736482, - 3 + 0.0252206, - -7 + -0.999107, - 1 + 0.287324, - 3 + -0.710148, - -3 + -0.863982, - 5 + -0.110109, - -1 + -0.382303, - 1 + -0.00955381, - 7 + 0.574434, - 3 + 0.772632, - -3 + 0.427061, - -3 + -0.47615, - 1 + 0.159639, - -1 + 0.0973485, - -7 + 0.670094, - -3 + 0.66009, - 3 + -0.966069, - 5 + 0.729848, - -1 + -0.165828, - -5 + -0.991247, - 3 + -0.796155, - -3 + -0.665567, - 1 + 0.705734, - -3 + -0.0729422, - -5 + 0.569012, - -5 + 0.532164, - -3 + 0.114169, - -3 + -0.79896, - 5 + -0.434429, - 3 + 0.0409003, - 5 + -0.656138, - 1 + 0.80331, - -1 + -0.832592, - 1 + -0.512036, - 5 + 0.821594, - -5 + 0.153262, - -7 + 0.742653, - 7 + 0.775938, - 7 + 0.794682, - -1 + 0.436735, - 1 + 0.232814, - 5 + 0.173647, - -7 + 0.0346826, - -5 + -0.764013, - -3 + 0.414464, - -7 + -0.107918, - -5 + -0.909358, - -3 + -0.855809, - 3 + 0.321112, - -7 + -0.853217, - -1 + 0.240779, - -5 + 0.308181, - -3 + -0.101137, - -3 + 0.0592809, - 1 + -0.475771, - 1 + -0.805118, - 1 + -0.497502, - 1 + 0.0533702, - 1 + 0.256822, - 1 + 0.943496, - 5 + 0.195682, - 3 + 0.84158, - -7 + 0.691885, - 7 + 0.702398, - -5 + -0.0240126, - 3 + 0.0729154, - 1 + 0.683697, - -5 + 0.261411, - 5 + 0.953329, - 5 + -0.728981, - -5 + -0.635009, - 5 + -0.630682, - -7 + 0.122834, - -3 + 0.959923, - -1 + 0.374435, - 1 + 0.720612, - 5 + 0.664998, - 1 + 0.00891615, - -7 + 0.432124, - -3 + 0.0339184, - -1 + -0.257549, - 7 + 0.584476, - -3 + 0.0935045, - -1 + -0.804627, - 1 + -0.992967, - -3 + 0.538947, - 7 + 0.180181, - -5 + -0.90103, - -3 + -0.368599, - 7 + 0.775146, - -3 + -0.990663, - 5 + -0.991429, - 3 + 0.229796, - 3 + 0.933547, - -7 + 0.629628, - 7 + -0.128119, - -3 + 0.993864, - 3 + -0.518632, - 1 + 0.431409, - 5 + 0.162359, - -1 + 0.340156, - 7 + 0.99834, - -1 + -0.37602, - 7 + 0.798388, - -5 + -0.977304, - -1 + -0.714549, - -7 + 0.371461, - -3 + 0.429763, - -5 + -0.176519, - 1 + 0.130875, - 3 + -0.192991, - -3 + 0.926126, - 3 + -0.756796, - -3 + 0.0799201, - -5 + -0.885874, - -5 + -0.922719, - -1 + 0.788957, - 1 + 0.876735, - 1 + 0.505541, - 1 + 0.0568082, - 5 + -0.546276, - -5 + 0.987925, - 1 + 0.559679, - -5 + 0.240393, - 7 + 0.460363, - 5 + 0.194578, - 3 + 0.987203, - 7 + 0.781711, - -7 + -0.0489823, - -1 + -0.776679, - -7 + -0.496617, - 5 + -0.488827, - -3 + -0.501392, - 5 + 0.703741, - 7 + -0.0924905, - 5 + -0.948555, - -3 + -0.508697, - -5 + -0.211705, - -1 + -0.0656021, - 1 + 0.526428, - 3 + 0.977313, - 7 + 0.717488, - 1 + 0.987358, - -1 + -0.492118, - -1 + 0.765235, - 1 + -0.576154, - 3 + 0.52365, - -7 + 0.253303, - 1 + -0.492177, - 5 + 0.865942, - 5 + 0.977195, - 7 + 0.161001, - 5 + -0.907593, - -7 + -0.557902, - -7 + 0.825849, - 7 + -0.120301, - -5 + 0.531996, - 1 + 0.80755, - 7 + 0.969872, - -7 + -0.738685, - -3 + 0.636749, - 1 + -0.655666, - -3 + 0.999979, - 7 + -0.843387, - -3 + 0.693217, - 7 + 0.615595, - -3 + -0.585734, - 5 + -0.349962, - -5 + -0.708827, - 5 + 0.767043, - -3 + -0.561155, - 5 + 0.0547506, - 7 + -0.00058388, - 5 + 0.683614, - -5 + 0.933133, - -7 + -0.705963, - -1 + 0.432718, - -5 + -0.745574, - -1 + 0.578781, - -3 + 0.265256, - -1 + -0.723166, - 3 + -0.609362, - -3 + 0.897704, - -1 + 0.630349, - -5 + 0.582721, - -5 + -0.0955401, - 5 + -0.235266, - -1 + 0.829279, - -5 + -0.824548, - 3 + -0.803079, - 3 + -0.505004, - -1 + -0.492252, - 1 + -0.92866, - 1 + -0.193727, - 7 + 0.855165, - -5 + -0.409258, - 3 + 0.483943, - 5 + -0.711778, - 1 + -0.291856, - -1 + -0.309453, - -1 + -0.961907, - 3 + 0.239915, - 3 + 0.333033, - -5 + -0.520074, - 7 + 0.80808, - 7 + -0.392463, - -5 + -0.268562, - 7 + 0.963694, - -5 + -0.27416, - -3 + 0.136372, - -3 + -0.533467, - 5 + 0.0336407, - 5 + 0.269954, - -1 + 0.481331, - -5 + 0.883264, - -5 + 0.917248, - -5 + 0.841082, - 7 + -0.272449, - -1 + 0.612493, - -7 + -0.0456689, - 3 + -0.468522, - -5 + -0.783857, - -5 + -0.963398, - -7 + 0.0600612, - -3 + 0.80801, - -3 + -0.969476, - -5 + 0.949233, - 7 + -0.954761, - 7 + -0.0774834, - 5 + -0.245508, - 5 + 0.345368, - 3 + -0.476338, - -5 + -0.322511, - -3 + 0.450538, - -7 + -0.678719, - -3 + -0.172123, - -5 + -0.209171, - -3 + -0.420884, - -1 + 0.00383168, - -3 + -0.312955, - -7 + -0.0884187, - -7 + 0.201349, - 5 + -0.601248, - 5 + -0.413319, - 3 + -0.246626, - 5 + 0.977104, - -5 + 0.0133906, - 7 + 0.349431, - 5 + 0.216145, - -1 + -0.529927, - 1 + -0.249291, - 1 + 0.658874, - 7 + 0.43074, - 5 + 0.124815, - 7 + -0.553229, - 1 + 0.116857, - -5 + 0.734356, - -1 + -0.647581, - 5 + -0.323226, - -5 + -0.810003, - -3 + 0.822276, - -1 + -0.591676, - -5 + -0.434047, - 1 + 0.15821, - 7 + 0.165069, - 3 + 0.253866, - 3 + 0.973848, - -7 + 0.713996, - -5 + 0.215808, - -1 + 0.0812883, - -3 + 0.846565, - -5 + -0.947667, - 3 + 0.409641, - 5 + -0.385462, - -3 + 0.787733, - 1 + 0.844418, - 1 + 0.349241, - 5 + -0.586969, - 7 + 0.257519, - 1 + -0.315586, - -1 + -0.327033, - 1 + 0.767669, - -1 + -0.292183, - 3 + 0.389264, - -7 + 0.339534, - -3 + 0.477526, - -3 + 0.11475, - -7 + -0.119439, - 3 + 0.406966, - 5 + 0.419678, - 1 + 0.76062, - -7 + 0.536916, - -7 + -0.510681, - -5 + 0.905296, - 7 + 0.13423, - -5 + 0.748596, - 3 + -0.431882, - 7 + 0.33909, - 3 + 0.341309, - 5 + -0.172616, - -7 + -0.778667, - -5 + -0.984483, - 7 + 0.04289, - -3 + 0.791158, - -1 + -0.606419, - -3 + 0.939034, - 5 + -0.688122, - 7 + -0.0797096, - -3 + -0.176378, - 3 + -0.200208, - -3 + 0.539966, - -5 + 0.55811, - -1 + -0.965644, - -7 + -0.62776, - 3 + -0.327998, - 3 + -0.518732, - 3 + 0.713363, - 5 + 0.082287, - -7 + -0.799949, - 5 + -0.144101, - -7 + -0.416404, - 3 + 0.926589, - -3 + -0.0426248, - -3 + 0.823828, - 3 + -0.899492, - -1 + 0.925421, - -5 + -0.987104, - -3 + -0.667032, - -1 + -0.376583, - -1 + 0.776434, - 5 + 0.838315, - -3 + -0.411202, - -7 + -0.918427, - -5 + 0.627889, - 7 + -0.542975, - -3 + -0.0689918, - -5 + -0.55104, - -5 + 0.829815, - 7 + 0.466128, - -7 + -0.910729, - -3 + 0.587943, - -5 + -0.989778, - 3 + 0.429693, - -5 + 0.363276, - 5 + 0.48865, - -1 + 0.462889, - -1 + 0.933537, - -1 + -0.237365, - 7 + -0.503287, - 3 + 0.898831, - 5 + -0.88925, - 1 + 0.491187, - -3 + 0.819494, - 7 + -0.841093, - 5 + -0.172405, - -3 + 0.296082, - -5 + 0.230588, - 1 + -0.135964, - -7 + -0.24852, - 7 + 0.779819, - 1 + -0.0197039, - 3 + 0.690689, - 5 + 0.201188, - -3 + 0.316178, - 3 + -0.790151, - -3 + 0.353513, - 1 + 0.482168, - -7 + 0.5088, - 5 + -0.619387, - 3 + -0.572638, - -1 + 0.737113, - -3 + -0.330907, - 3 + -0.642647, - 7 + -0.587751, - 7 + 0.705296, - -1 + 0.765705, - -7 + 0.342622, - 1 + -0.443867, - -7 + 0.64285, - 5 + 0.119933, - 1 + 0.146719, - -3 + 0.808331, - 5 + 0.362826, - -5 + 0.649288, - -5 + -0.919914, - 5 + 0.530805, - 7 + 0.836641, - -1 + -0.33567, - 7 + -0.814941, - -3 + 0.521328, - -7 + -0.0633902, - 3 + 0.637973, - 5 + -0.448024, - -7 + 0.529787, - -1 + 0.158647, - 1 + -0.343875, - 5 + 0.862299, - -7 + 0.269423, - -3 + 0.205924, - -3 + 0.543444, - -1 + -0.0442747, - -1 + -0.514346, - -7 + -0.538346, - 5 + -0.134437, - 3 + -0.242908, - -3 + 0.960616, - -3 + 0.613265, - 5 + -0.578398, - 5 + -0.196621, - -1 + 0.99966, - -7 + -0.206926, - -7 + 0.149597, - 1 + -0.618079, - 7 + -0.779085, - 5 + 0.78756, - -3 + -0.461424, - 1 + -0.8271, - 7 + -0.779893, - 1 + -0.034591, - 3 + -0.618594, - 7 + -0.508509, - 3 + 0.858569, - -3 + -0.292217, - -3 + 0.638647, - 7 + 0.429429, - -3 + 0.0850469, - 3 + 0.840684, - -5 + -0.361285, - -1 + -0.0439304, - -5 + -0.464768, - 5 + 0.814776, - -7 + 0.838205, - -1 + 0.932473, - 3 + 0.0800499, - 3 + 0.430625, - -1 + -0.379486, - -5 + 0.566269, - 1 + -0.191075, - 1 + 0.426799, - -3 + -0.865195, - -1 + -0.286844, - -5 + -0.347813, - -1 + 0.254653, - -5 + -0.0217081, - -7 + 0.712565, - -5 + 0.626585, - -3 + 0.407399, - -1 + -0.495544, - 7 + 0.988263, - 5 + 0.752268, - 7 + -0.57751, - 1 + -0.699522, - -3 + -0.559222, - -5 + -0.142211, - -5 + -0.984406, - -7 + 0.478908, - 3 + -0.492842, - -1 + -0.75382, - 1 + 0.00969996, - 1 + -0.893656, - -7 + 0.928332, - 7 + -0.310557, - 3 + -0.203997, - -3 + -0.119623, - -3 + 0.23919, - -5 + 0.89898, - 3 + -0.000236075, - -1 + -0.75715, - 5 + -0.946444, - 5 + 0.830343, - 5 + 0.170209, - -5 + 0.0682683, - 7 + 0.490712, - 3 + 0.0912319, - 7 + -0.939061, - -5 + -0.27871, - 3 + 0.292512, - 3 + 0.7815, - 3 + 0.780423, - 3 + -0.995218, - 1 + -0.971244, - 5 + 0.863878, - 3 + 0.605471, - 1 + 0.615707, - -1 + -0.430001, - 7 + 0.137532, - -7 + 0.420738, - 5 + -0.511889, - -7 + -0.894203, - -1 + -0.442678, - 7 + 0.58245, - -1 + -0.302989, - -7 + 0.046658, - -1 + 0.213312, - -3 + -0.40466, - 3 + 0.119842, - -3 + -0.209236, - 1 + 0.489636, - -1 + 0.0750853, - 1 + -0.138393, - 3 + 0.197677, - 1 + 0.801, - 5 + -0.737093, - 5 + 0.0908536, - -7 + -0.604504, - -5 + 0.56203, - -3 + 0.309546, - 1 + -0.966521, - 5 + 0.977852, - 7 + 0.73063, - -5 + -0.256762, - -3 + -0.431265, - 5 + 0.661912, - -1 + 0.865871, - -3 + 0.10026, - -3 + 0.979883, - -3 + -0.50973, - 7 + -0.387004, - -5 + 0.872216, - -1 + -0.552574, - 3 + -0.00281111, - -5 + -0.433458, - 3 + 0.228333, - -5 + -0.784953, - 5 + 0.571488, - -5 + -0.107047, - 3 + 0.598395, - 7 + -0.209076, - 7 + 0.968037, - -7 + 0.133602, - -3 + 0.197601, - -1 + -0.737348, - -7 + -0.0987225, - -1 + -0.680374, - -5 + 0.902133, - 5 + -0.065214, - 7 + 0.820436, - -1 + -0.994703, - 5 + 0.928257, - 3 + 0.387782, - -1 + -0.867014, - -1 + -0.343716, - -3 + -0.0119044, - 5 + -0.882348, - 3 + -0.349223, - -3 + -0.423901, - -1 + -0.358375, - -7 + 0.877898, - -1 + -0.0346012, - -3 + -0.731243, - 1 + -0.0103546, - -1 + -0.662776, - 1 + 0.486511, - -1 + -0.0129122, - -5 + 0.0121863, - -3 + 0.550817, - -3 + 0.0375324, - 5 + 0.371006, - 5 + -0.111812, - 5 + 0.963243, - 1 + 0.36354, - -3 + -0.0390213, - -7 + -0.512331, - -3 + 0.530897, - -1 + -0.961326, - 1 + -0.128698, - 5 + -0.0345879, - 7 + -0.724934, - -7 + -0.990395, - 7 + -0.0956077, - 5 + 0.998217, - -1 + -0.38503, - -5 + 0.431693, - 3 + -0.322315, - 1 + -0.520076, - -3 + -0.403514, - 3 + -0.638799, - -1 + -0.665616, - -7 + 0.866326, - 7 + -0.314543, - -3 + -0.752403, - 7 + 0.180847, - 7 + -0.924565, - 3 + 0.431162, - -7 + -0.844134, - 5 + -0.621084, - 1 + 0.678683, - 7 + -0.643627, - -1 + 0.464485, - 3 + 0.311484, - 1 + 0.61938, - 1 + -0.362697, - -1 + -0.545854, - -7 + -0.693428, - 3 + -0.162961, - 3 + 0.362332, - -5 + -0.0418496, - -3 + -0.790282, - 1 + -0.362329, - -5 + -0.679632, - -7 + 0.193632, - 7 + 0.169699, - 5 + -0.0276975, - 3 + 0.145423, - 7 + -0.526892, - 7 + 0.23963, - -5 + -0.0191274, - 3 + 0.267953, - 5 + -0.963432, - 7 + 0.72934, - 5 + -0.0415711, - 3 + -0.0615771, - -1 + -0.441843, - 5 + -0.196666, - -5 + 0.656983, - 5 + 0.764159, - -7 + -0.0188419, - -1 + 0.515285, - -5 + 0.77527, - -1 + -0.362528, - 1 + 0.360052, - 3 + 0.134359, - -5 + 0.37625, - 7 + -0.511201, - 7 + -0.846493, - 5 + 0.94168, - 1 + -0.100134, - 5 + -0.157002, - 3 + -0.374631, - -7 + -0.364117, - -1 + -0.142558, - -7 + 0.0265685, - -3 + 0.138828, - -5 + -0.289868, - 1 + 0.664193, - -7 + 0.887828, - 1 + -0.652588, - 3 + -0.527631, - -1 + 0.284251, - -5 + 0.278712, - 1 + -0.105013, - -1 + 0.853542, - 1 + -0.436623, - -5 + -0.867476, - 3 + 0.96232, - 7 + 0.427617, - 3 + -0.501165, - -5 + 0.411637, - 7 + 0.891616, - -7 + 0.664072, - -1 + -0.888475, - 5 + 0.548079, - 3 + 0.503912, - -5 + -0.612317, - -1 + -0.180983, - 1 + -0.239876, - 1 + 0.596635, - -3 + -0.0827705, - -7 + 0.277359, - 5 + -0.941413, - -5 + 0.697875, - 3 + 0.714356, - 1 + -0.558584, - 1 + -0.0174082, - 5 + -0.587225, - -5 + -0.512741, - 7 + -0.434388, - 7 + -0.473811, - -1 + 0.285865, - 5 + 0.988991, - -5 + -0.991867, - -3 + 0.864291, - -5 + 0.661288, - 5 + -0.460111, - 7 + 0.366331, - -7 + 0.784093, - 5 + 0.918848, - 7 + 0.965396, - -3 + -0.161624, - 7 + -0.476323, - -5 + 0.501047, - 7 + 0.964268, - 1 + -0.388995, - -1 + 0.308069, - 7 + 0.449621, - -3 + 0.517261, - -1 + -0.931887, - -3 + -0.314139, - -1 + -0.88269, - 1 + -0.641202, - -7 + 0.426506, - -7 + 0.765908, - 3 + -0.839435, - -1 + 0.85062, - -5 + -0.068266, - 7 + -0.336073, - 5 + -0.552052, - 7 + 0.968225, - 5 + -0.489061, - -1 + 0.549817, - 7 + 0.155363, - 7 + 0.287813, - 5 + -0.0712527, - 7 + -0.539294, - 3 + 0.515963, - -7 + 0.309448, - 5 + -0.400565, - -3 + 0.772515, - -3 + 0.47223, - -5 + -0.377265, - -3 + -0.277457, - 3 + -0.0481647, - 1 + 0.253072, - 7 + -0.701416, - 3 + -0.983524, - -1 + 0.859256, - 3 + 0.684439, - 7 + -0.715583, - 1 + -0.927083, - 5 + -0.820364, - 3 + -0.818987, - -1 + 0.0484889, - -5 + 0.88172, - -1 + 0.642372, - 7 + -0.486761, - 1 + -0.154892, - -3 + 0.620922, - -7 + -0.307461, - -5 + 0.958143, - -5 + -0.945751, - -7 + 0.420205, - 3 + 0.212257, - -7 + 0.343969, - -7 + -0.56883, - -7 + 0.542757, - 1 + 0.338133, - -1 + 0.205287, - 3 + -0.678275, - -3 + 0.162556, - 7 + 0.7356, - -1 + -0.366469, - -5 + 0.818684, - 1 + -0.375059, - -7 + -0.326917, - -1 + 0.21386, - -1 + 0.933421, - -5 + -0.0965871, - -1 + -0.327707, - -3 + -0.293112, - 5 + -0.399372, - -1 + -0.243464, - -1 + -0.477791, - 5 + 0.160018, - 3 + 0.0379489, - -7 + -0.468135, - -5 + -0.924231, - 7 + -0.559268, - -1 + -0.869929, - 1 + 0.644987, - 7 + -0.416144, - -3 + -0.64862, - 1 + 0.0932449, - -1 + -0.941752, - -7 + -0.448205, - 5 + 0.816932, - -1 + -0.010022, - -3 + -0.611324, - 5 + -0.688206, - 1 + 0.868089, - -3 + -0.454031, - 3 + -0.633225, - 5 + -0.11036, - 7 + 0.119173, - -7 + -0.663239, - -7 + 0.86954, - 7 + 0.335132, - -1 + 0.512855, - 1 + -0.130088, - 3 + -0.225548, - 5 + -0.745615, - 7 + 0.963223, - -3 + -0.678778, - -7 + -0.430329, - -3 + 0.964206, - 7 + 0.808534, - 5 + -0.632605, - -5 + -0.728056, - -5 + -0.0283051, - -1 + -0.292853, - 3 + -0.960114, - 1 + 0.266249, - 7 + -0.94076, - 7 + -0.680042, - -1 + 0.678469, - 3 + 0.553279, - 7 + 0.392802, - 1 + -0.308376, - 7 + -0.588163, - 5 + -0.235282, - 7 + -0.490381, - 5 + 0.412499, - -7 + -0.148118, - 7 + -0.20069, - -1 + -0.256974, - 1 + -0.946528, - -5 + -0.190544, - 1 + -0.774484, - -1 + 0.939011, - 3 + 0.401197, - 7 + 0.763682, - -7 + 0.970152, - 5 + -0.471915, - -3 + -0.0230657, - -1 + 0.666549, - 3 + -0.312851, - 5 + 0.909774, - -5 + 0.608703, - -1 + -0.398985, - -1 + -0.579955, - -3 + 0.427466, - -3 + -0.406024, - 5 + -0.923879, - 5 + -0.124516, - -7 + 0.389177, - -1 + 0.978163, - 7 + 0.321733, - -5 + -0.401276, - -3 + -0.669763, - 5 + 0.837051, - -3 + -0.507979, - -5 + 0.650163, - 5 + -0.533125, - -7 + -0.352708, - -3 + 0.975917, - -1 + 0.333199, - 1 + 0.786429, - 7 + 0.588826, - -3 + -0.254794, - -5 + 0.577074, - 3 + -0.445216, - -3 + -0.913091, - 1 + 0.833436, - 3 + 0.879009, - 7 + -0.420452, - -7 + -0.841488, - 3 + 0.941771, - -5 + -0.516194, - 1 + -0.111796, - 1 + 0.913016, - -3 + 0.831405, - 7 + -0.456459, - 5 + 0.52518, - 7 + 0.407003, - 5 + 0.477567, - -1 + 0.420401, - -1 + 0.437449, - -7 + -0.0206778, - -3 + 0.132506, - 3 + -0.0369548, - -3 + -0.66723, - 3 + 0.639026, - -5 + 0.818826, - -3 + 0.521142, - -7 + 0.239988, - 7 + 0.798847, - 3 + 0.568449, - -7 + -0.322325, - 1 + 0.74602, - 5 + -0.820488, - 5 + 0.422569, - -5 + 0.154974, - 3 + -0.598438, - -3 + -0.0493216, - 5 + -0.437171, - -7 + 0.91565, - 1 + -0.76322, - -7 + 0.655683, - 1 + -0.221855, - 3 + 0.499042, - 7 + -0.551781, - -1 + 0.776521, - 3 + 0.364049, - 7 + 0.76778, - 1 + 0.98362, - 1 + 0.901754, - -7 + -0.301171, - -7 + -0.154012, - -3 + -0.967804, - -1 + 0.205987, - 7 + -0.231608, - 1 + 0.577335, - -5 + 0.133768, - -5 + 0.959646, - -3 + -0.0372217, - -3 + 0.404834, - -1 + 0.457923, - 1 + 0.0552233, - -3 + 0.2, - 5 + -0.787169, - -1 + 0.572437, - 7 + -0.18741, - -1 + 0.0523727, - -1 + -0.804208, - 7 + -0.303471, - 7 + 0.73635, - -3 + -0.804122, - 1 + 0.962955, - 7 + 0.065147, - -7 + -0.464851, - 7 + 0.410402, - -1 + -0.213138, - 7 + 0.323269, - 5 + -0.812589, - 1 + -0.924136, - 3 + -0.0515391, - 5 + -0.942719, - -7 + 0.0813437, - -5 + -0.919358, - -3 + 0.09817, - -3 + 0.204768, - -3 + 0.895305, - -5 + 0.426145, - -1 + -0.654514, - 1 + -0.527968, - 1 + -0.93447, - 7 + -0.259295, - -5 + -0.357566, - -3 + 0.820761, - 3 + 0.061946, - 1 + -0.365104, - -1 + -0.484186, - 5 + -0.0747202, - 7 + 0.373292, - 3 + -0.225615, - 1 + 0.387072, - -1 + 0.0964885, - 5 + 0.318965, - -5 + -0.574407, - -1 + -0.5876, - 3 + -0.0651205, - -7 + -0.131517, - -5 + -0.700999, - -1 + 0.431009, - -5 + -0.378572, - -5 + -0.438665, - 3 + -0.0663064, - -1 + 0.303877, - 7 + 0.252822, - -5 + 0.127981, - -5 + -0.979741, - -7 + -0.977809, - 1 + -0.939208, - -5 + -0.619289, - -3 + -0.817288, - -7 + -0.682975, - 5 + 0.945473, - 3 + 0.696275, - -1 + 0.466816, - 3 + -0.632966, - -3 + 0.078222, - 5 + 0.546507, - -1 + 0.977089, - 7 + -0.133295, - -5 + -0.604371, - -3 + 0.365631, - -3 + 0.673212, - -1 + 0.180141, - 5 + 0.223484, - -1 + 0.146777, - 1 + -0.319683, - -1 + 0.857262, - 5 + -0.356152, - 5 + -0.598653, - 1 + 0.975409, - -5 + -0.881246, - -7 + -0.472377, - -3 + 0.0214979, - 7 + -0.788032, - 7 + -0.333508, - 7 + -0.750094, - -3 + -0.814424, - 7 + -0.965833, - 5 + -0.36787, - 3 + -0.612635, - -5 + 0.236003, - -5 + -0.785485, - -5 + 0.745934, - 3 + 0.841095, - 3 + 0.331357, - 3 + -0.341722, - 1 + 0.0449292, - 7 + -0.256584, - -3 + -0.666529, - 7 + -0.203782, - 1 + -0.442113, - 5 + 0.281735, - -7 + -0.600958, - 5 + -0.297631, - 7 + 0.834514, - 1 + -0.965433, - -7 + 0.980322, - -5 + -0.275104, - -5 + 0.501189, - 1 + 0.861033, - 3 + -0.186388, - -7 + -0.783021, - -3 + -0.331772, - -7 + -0.923864, - 7 + 0.981171, - -7 + 0.677146, - 5 + -0.764622, - 7 + 0.544671, - 3 + -0.149741, - -1 + -0.115158, - 5 + 0.315554, - 3 + -0.0435786, - -7 + -0.198421, - 3 + 0.728623, - 3 + 0.917598, - -7 + -0.222429, - -1 + -0.839337, - 1 + -0.837996, - 5 + 0.7184, - 3 + 0.279682, - 5 + 0.89931, - 1 + -0.0903269, - -3 + 0.311248, - -3 + -0.0615842, - -5 + 0.978228, - 5 + -0.0288547, - -7 + -0.319235, - 1 + 0.459872, - -7 + -0.762583, - 1 + 0.430673, - 7 + -0.202576, - 7 + -0.508028, - 5 + -0.563939, - 7 + 0.431253, - 3 + 0.924691, - -7 + -0.929823, - -7 + -0.745149, - -3 + -0.54763, - 7 + -0.233056, - -3 + 0.0728049, - 3 + 0.173541, - 5 + -0.99085, - -5 + -0.509606, - -7 + -0.0573629, - -5 + 0.146235, - 7 + -0.530049, - 5 + -0.92378, - 5 + -0.150627, - 7 + -0.632136, - 3 + -0.544558, - -1 + -0.559563, - -5 + -0.183858, - -3 + -0.0823922, - 3 + -0.845123, - -5 + 0.740183, - -1 + -0.864943, - -7 + -0.517753, - -7 + 0.273158, - -7 + 0.597718, - 7 + -0.960088, - -1 + 0.628689, - 5 + -0.100486, - 5 + -0.28978, - -3 + 0.591832, - 5 + -0.225949, - 1 + 0.434438, - 3 + 0.701275, - -5 + -0.110868, - 3 + -0.993528, - -1 + -0.279674, - -7 + -0.695508, - 3 + 0.208776, - 5 + 0.280286, - -7 + 0.098819, - 1 + -0.270841, - -3 + 0.163315, - 7 + -0.339504, - -1 + 0.503129, - -5 + -0.42331, - -5 + 0.289597, - 5 + -0.48842, - -1 + -0.301035, - -7 + 0.307344, - 3 + 0.149469, - -7 + -0.91815, - -7 + 0.735915, - -7 + 0.651662, - -5 + -0.367747, - 3 + 0.571618, - 3 + -0.0886024, - 7 + -0.287501, - 3 + -0.332199, - -3 + 0.103811, - 1 + 0.281067, - 1 + -0.380718, - -1 + 0.343006, - -7 + -0.940098, - -3 + 0.722196, - 5 + 0.874495, - 1 + 0.990522, - 3 + -0.915597, - -5 + -0.278943, - -7 + 0.203699, - -5 + 0.170043, - 7 + 0.536621, - -5 + 0.824829, - 5 + -0.832656, - -7 + 0.333, - -3 + -0.667407, - 7 + 0.105231, - 7 + -0.905234, - -1 + -0.810245, - 3 + 0.294136, - -1 + -0.514902, - 3 + -0.2467, - 3 + -0.587121, - 3 + 0.60538, - -3 + 0.0694657, - -5 + 0.0962229, - 7 + -0.291999, - -5 + 0.450209, - 3 + -0.147034, - -1 + -0.0838816, - 3 + 0.112086, - -5 + 0.194085, - 5 + -0.0903105, - -7 + -0.919954, - -5 + -0.967825, - -1 + -0.441373, - 5 + 0.768526, - 5 + 0.38484, - 3 + -0.947454, - 5 + -0.262922, - 7 + -0.593716, - -3 + 0.219333, - 3 + 0.076773, - 7 + 0.192425, - 1 + 0.970687, - 7 + -0.00340885, - 3 + -0.199764, - -3 + 0.255666, - -5 + 0.439951, - 1 + 0.505418, - 3 + -0.356007, - 5 + -0.318271, - -3 + 0.788047, - 5 + -0.924415, - -1 + 0.394691, - 1 + 0.972997, - 1 + 0.357046, - 3 + 0.419342, - -5 + -0.774465, - -7 + 0.0996104, - 5 + -0.458399, - -3 + -0.133173, - -1 + -0.671463, - 7 + -0.916153, - -7 + 0.110461, - 3 + 0.409689, - -3 + -0.355372, - -5 + -0.896134, - -7 + -0.950039, - 7 + 0.386037, - 3 + -0.798405, - -3 + -0.744455, - 1 + -0.572819, - -1 + 0.839239, - -3 + 0.570676, - 3 + -0.835377, - -7 + 0.034378, - 5 + 0.724415, - 5 + -0.252927, - -3 + 0.287315, - -3 + 0.334237, - 5 + -0.118203, - -1 + 0.502825, - -5 + -0.154511, - 5 + -0.127665, - 7 + 0.0817964, - 1 + 0.132329, - -5 + -0.546248, - -3 + 0.874254, - -3 + 0.421468, - 3 + -0.928829, - 5 + 0.620968, - 7 + 0.0580643, - -7 + -0.687253, - -7 + -0.628005, - 5 + -0.883083, - -5 + -0.270135, - 1 + -0.623219, - -7 + 0.277921, - 3 + 0.116588, - -5 + 0.264649, - -1 + -0.593871, - -7 + 0.329278, - -1 + -0.0926952, - -1 + 0.64349, - 1 + -0.10689, - 3 + -0.541441, - 1 + 0.499186, - -3 + 0.920398, - -1 + 0.381933, - 5 + -0.518618, - -5 + 0.618314, - 1 + 0.110954, - -1 + 0.576074, - 3 + 0.45385, - -5 + -0.917242, - 5 + -0.451152, - 5 + -0.705703, - -5 + -0.97524, - -5 + -0.732996, - 5 + 0.702813, - 3 + -0.229341, - 7 + -0.13257, - 7 + 0.994484, - 7 + -0.0231948, - 5 + 0.538224, - 1 + -0.838791, - 7 + 0.848763, - -7 + -0.539283, - -3 + 0.321736, - 5 + 0.22943, - 1 + -0.626804, - 5 + 0.209983, - -5 + 0.977037, - 3 + 0.448198, - 5 + -0.419565, - 7 + 0.666147, - -7 + 0.412532, - 7 + -0.0260039, - 1 + 0.545681, - 1 + 0.657399, - -5 + 0.275525, - 5 + 0.563082, - 1 + 0.88785, - -5 + 0.855898, - -1 + -0.758617, - -1 + 0.0505126, - 5 + 0.0387102, - 5 + 0.574784, - 1 + 0.1487, - 7 + -0.234118, - -1 + 0.458783, - 5 + -0.798949, - -7 + -0.300432, - 3 + -0.455072, - 1 + 0.24667, - -3 + 0.034758, - 1 + -0.491485, - 1 + 0.27987, - -5 + -0.92334, - 1 + 0.486993, - 5 + -0.624284, - -3 + 0.259474, - 3 + 0.384827, - 7 + -0.744943, - 3 + 0.669036, - -7 + -0.171024, - 1 + -0.963747, - -3 + -0.457945, - -1 + -0.271542, - 3 + -0.642662, - 5 + 0.867933, - -7 + 0.872486, - -5 + -0.0610653, - -3 + 0.0567537, - -5 + -0.384634, - -1 + -0.810843, - 1 + -0.210336, - 7 + -0.782186, - -3 + 0.206301, - 3 + -0.532726, - -1 + 0.792476, - 1 + -0.0254994, - 1 + -0.38317, - 5 + -0.444631, - -3 + 0.202259, - 7 + 0.906256, - -5 + -0.283238, - 1 + 0.761982, - -1 + 0.456456, - 7 + -0.213898, - 7 + -0.98443, - -7 + -0.984132, - -3 + -0.549083, - 7 + 0.946917, - 1 + -0.817794, - 3 + -0.902041, - -7 + 0.667457, - 7 + 0.476978, - -1 + 0.864841, - -1 + -0.100561, - -1 + 0.589944, - 1 + -0.417731, - -5 + -0.291668, - 3 + -0.341364, - 1 + -0.116372, - -5 + -0.678389, - 5 + -0.621016, - -7 + -0.557662, - 5 + -0.916104, - 1 + 0.416737, - -3 + -0.397013, - 3 + -0.767577, - 1 + 0.340769, - 7 + -0.54333, - -5 + 0.825698, - -7 + -0.0227328, - 1 + 0.688705, - -5 + 0.783876, - -5 + 0.36354, - 3 + -0.405894, - -1 + -0.505203, - 3 + -0.280375, - -7 + -0.0717587, - -5 + 0.254936, - -5 + -0.792482, - 7 + -0.425804, - 3 + 0.295604, - -5 + 0.294844, - -3 + 0.730185, - 3 + 0.0271969, - 5 + -0.303161, - -3 + 0.883759, - 3 + 0.827756, - -7 + 0.450664, - 5 + 0.435759, - 3 + 0.360285, - -7 + 0.409698, - 1 + 0.230758, - 7 + -0.352144, - 1 + -0.389721, - 7 + -0.718911, - 3 + 0.41957, - -3 + 0.620353, - -7 + 0.254944, - -1 + 0.81995, - 3 + -0.280774, - 3 + 0.906947, - 7 + -0.349169, - -1 + -0.00793728, - -5 + -0.64104, - -7 + 0.445183, - 3 + 0.914473, - 3 + -0.570084, - -1 + 0.594879, - -5 + -0.521969, - 1 + 0.0416743, - -3 + -0.799298, - 5 + -0.041766, - -7 + -0.218755, - 1 + 0.173665, - 7 + -0.880771, - -7 + 0.339146, - -1 + 0.961946, - 1 + 0.859441, - -5 + 0.0599979, - -3 + -0.243646, - 1 + 0.642304, - 5 + 0.427633, - -3 + 0.337803, - 5 + -0.876868, - -5 + 0.124084, - 7 + -0.390476, - 5 + -0.889517, - 7 + -0.0881519, - -5 + -0.985327, - -1 + 0.364205, - -1 + 0.481156, - 1 + 0.878136, - 3 + 0.270873, - -1 + -0.133771, - 7 + -0.599314, - 7 + 0.784159, - 1 + 0.555296, - 7 + -0.974226, - 5 + 0.520163, - -5 + 0.046348, - -5 + -0.487602, - 3 + 0.0383354, - -7 + -0.969134, - 5 + -0.00830264, - 5 + 0.582434, - -5 + 0.498667, - -5 + 0.0475678, - 7 + -0.011481, - -5 + 0.0134767, - 1 + 0.897857, - -1 + 0.859261, - 3 + -0.741447, - -5 + 0.61813, - 3 + 0.976057, - -5 + 0.671342, - -1 + -0.480269, - -7 + -0.183415, - 3 + -0.955847, - 3 + 0.770801, - -3 + 0.470981, - -7 + -0.778816, - 3 + -0.906343, - -1 + -0.727997, - 7 + -0.39431, - 7 + 0.80919, - 7 + -0.973433, - -3 + -0.627311, - 3 + 0.373299, - 5 + 0.907636, - -5 + 0.658848, - 7 + 0.681815, - 5 + 0.589045, - -5 + 0.0950571, - -7 + 0.112081, - 5 + 0.34511, - -3 + 0.315859, - 5 + -0.181386, - -3 + -0.714938, - 1 + 0.308135, - 7 + 0.535557, - 7 + -0.0709868, - -1 + 0.552407, - -7 + -0.847801, - 7 + 0.160415, - 5 + -0.51117, - 3 + -0.951139, - -3 + 0.0406191, - 5 + -0.895575, - 5 + 0.0746354, - -3 + 0.915248, - -3 + 0.842174, - -7 + 0.595946, - 3 + 0.700337, - -3 + -0.23779, - 3 + -0.655733, - -5 + -0.894634, - -3 + -0.695807, - 5 + -0.476673, - 7 + -0.279169, - -5 + 0.507948, - -5 + 0.499507, - 3 + 0.0916842, - 3 + -0.837399, - -5 + 0.143527, - 3 + 0.58052, - -7 + 0.378768, - 5 + 0.811361, - -1 + 0.0748057, - 3 + 0.453959, - -7 + 0.990606, - 3 + -0.450379, - 5 + 0.395584, - -7 + -0.114441, - 5 + 0.426232, - 1 + -0.711673, - 1 + 0.077825, - -5 + -0.584918, - 1 + -0.457057, - -3 + -0.366392, - -7 + 0.00484131, - -3 + 0.215838, - -3 + -0.19239, - -5 + 0.300349, - 5 + 0.925702, - 7 + 0.693147, - -3 + -0.771327, - 7 + 0.850479, - 7 + 0.55379, - -5 + -0.622361, - -7 + -0.797468, - -1 + 0.865325, - -1 + 0.594149, - -3 + 0.402537, - 3 + 0.5647, - -5 + 0.408661, - 7 + 0.434393, - -5 + 0.369053, - 7 + 0.193313, - 7 + 0.0768285, - -5 + -0.966767, - 7 + 0.316068, - 5 + 0.393416, - -1 + 0.678055, - -1 + -0.426397, - 7 + -0.0972791, - 5 + 0.863534, - 7 + 0.857534, - 3 + -0.591288, - -1 + -0.978807, - -5 + 0.47735, - 1 + -0.387742, - 7 + 0.418231, - -7 + -0.918646, - 3 + -0.487032, - -7 + 0.169229, - 5 + 0.963037, - 3 + -0.651308, - 1 + -0.963926, - -7 + -0.870113, - -1 + -0.598625, - 1 + 0.578904, - -1 + -0.0948276, - -5 + 0.227649, - 1 + 0.555606, - -1 + -0.668322, - 1 + 0.0749024, - -5 + -0.607571, - 5 + -0.349931, - -1 + -0.898107, - 5 + 0.312465, - 7 + 0.772347, - 5 + 0.0899041, - -1 + -0.741034, - -3 + 0.26158, - 1 + -0.539694, - 7 + -0.115106, - -1 + -0.411724, - 3 + 0.0316011, - -7 + -0.810337, - -5 + 0.181813, - 5 + 0.318575, - -5 + -0.176396, - -1 + -0.639559, - 1 + 0.966577, - 7 + -0.685124, - -3 + -0.036449, - -5 + -0.456288, - -1 + 0.80942, - 1 + -0.842449, - -7 + 0.390273, - 3 + -0.931459, - 5 + 0.693488, - -7 + 0.247743, - -3 + -0.848713, - -3 + 0.137249, - -7 + -0.213185, - -7 + -0.755191, - 7 + -0.639001, - 5 + 0.91416, - 5 + -0.193425, - -5 + 0.80731, - -1 + -0.716912, - 5 + -0.503475, - 5 + -0.0585372, - 5 + -0.0209306, - 5 + -0.150028, - -3 + 0.634776, - 5 + 0.538764, - 7 + 0.704398, - -1 + -0.61061, - -7 + -0.624288, - 1 + -0.926651, - -7 + 0.580724, - 3 + 0.24162, - 1 + 0.447202, - 7 + -0.76537, - 7 + -0.753749, - 7 + -0.93289, - 7 + 0.570568, - -1 + 0.901893, - -1 + -0.297356, - 5 + -0.189813, - -3 + 0.21001, - -3 + 0.541859, - -5 + -0.73421, - 7 + 0.928552, - -7 + -0.355678, - -5 + -0.221657, - -5 + -0.0512875, - 3 + -0.298442, - -1 + -0.820576, - 7 + -0.771328, - 1 + -0.961217, - 5 + -0.161851, - -1 + -0.405209, - 3 + -0.662432, - -3 + 0.528404, - 1 + -0.226934, - -3 + 0.0363932, - 7 + 0.886687, - 3 + 0.393918, - -5 + -0.507128, - 1 + -0.189558, - -7 + -0.823271, - 7 + -0.180617, - -1 + 0.321553, - -1 + 0.989206, - -7 + -0.874277, - 1 + -0.113906, - 7 + 0.161257, - 3 + 0.670416, - -3 + -0.763578, - -1 + 0.424893, - 3 + -0.0447045, - -5 + -0.957789, - -1 + 0.196626, - -5 + 0.00535004, - 3 + 0.254757, - -7 + -0.927024, - 3 + -0.959979, - 1 + -0.949363, - -5 + 0.674222, - 1 + -0.848884, - -7 + 0.0919615, - 1 + -0.58394, - -1 + -0.515551, - -7 + -0.961024, - 7 + -0.978422, - 7 + 0.86705, - 7 + -0.323448, - -5 + -0.916549, - -3 + -0.512443, - -3 + -0.892435, - -1 + 0.0811992, - 7 + -0.1951, - 1 + -0.31832, - 7 + 0.389861, - -7 + -0.429737, - 7 + 0.14079, - -7 + -0.306634, - 1 + -0.0533624, - 1 + -0.438584, - -7 + -0.63111, - -7 + -0.559344, - -5 + 0.783094, - -7 + -0.735777, - 7 + -0.58636, - -7 + -0.116192, - -5 + -0.801831, - -5 + 0.969511, - -5 + 0.144718, - -5 + 0.363059, - -1 + -0.667404, - 3 + -0.134134, - -1 + 0.734085, - 5 + -0.165216, - 1 + 0.149468, - -5 + -0.15301, - -3 + 0.83035, - -3 + -0.27281, - -1 + 0.688733, - 5 + -0.406828, - -5 + -0.018298, - 5 + 0.219722, - -5 + 0.840822, - -7 + 0.256695, - -1 + -0.300632, - -5 + 0.403999, - -5 + 0.574885, - -3 + -0.92988, - 1 + -0.837794, - 3 + 0.510347, - 1 + 0.946242, - 1 + -0.558269, - 7 + -0.945935, - -7 + -0.106771, - 3 + -0.383966, - -5 + 0.370004, - -7 + 0.428693, - 5 + 0.936122, - 1 + -0.782085, - -7 + 0.528864, - 1 + 0.697761, - -7 + -0.681381, - -5 + 0.152231, - 5 + -0.900638, - 5 + -0.334353, - 1 + 0.862458, - -5 + -0.694343, - -7 + -0.938721, - -5 + 0.119729, - -7 + -0.874769, - -5 + -0.120494, - -3 + 0.506938, - 5 + 0.965172, - -1 + -0.888394, - -3 + -0.595798, - -5 + 0.802503, - -3 + -0.789257, - -3 + 0.351862, - 3 + -0.750966, - -1 + 0.584273, - -3 + -0.0831131, - -7 + -0.28384, - -3 + 0.806411, - 7 + -0.200101, - 3 + 0.640918, - -1 + 0.977479, - 1 + 0.865009, - -3 + -0.368203, - 7 + 0.556652, - -1 + -0.991885, - -5 + 0.332904, - 3 + 0.470344, - -7 + 0.205081, - -7 + -0.314842, - -3 + -0.62, - 3 + 0.34363, - 1 + -0.425907, - -7 + -0.702084, - -3 + -0.288143, - -7 + 0.243932, - -1 + 0.0855131, - -5 + -0.139345, - 3 + -0.959163, - 3 + 0.431497, - -7 + 0.261823, - -3 + 0.914225, - -1 + 0.325961, - 3 + -0.359881, - 7 + -0.468639, - 7 + -0.803865, - -1 + 0.343444, - 1 + 0.736499, - 5 + 0.382909, - -1 + -0.721058, - -1 + -0.823382, - 3 + -0.176144, - 5 + 0.251272, - -1 + -0.786581, - -5 + 0.273133, - 7 + -0.41622, - 3 + 0.121719, - 7 + 0.620911, - -1 + 0.237504, - 1 + -0.335624, - -7 + 0.42324, - -3 + 0.729575, - -7 + -0.723781, - 3 + 0.273075, - 3 + -0.229695, - 3 + 0.507748, - -5 + 0.294614, - -7 + -0.490011, - 3 + 0.297713, - -3 + -0.330685, - -7 + 0.441233, - 5 + -0.622061, - 5 + -0.208099, - 5 + -0.710362, - -1 + 0.154774, - -5 + 0.486696, - 5 + -0.168477, - 7 + -0.653855, - 7 + -0.0172002, - -1 + -0.1059, - 3 + 0.654305, - 1 + -0.459053, - 7 + 0.751362, - 7 + 0.407269, - 7 + 0.871658, - 7 + 0.654213, - 7 + 0.0624889, - 7 + -0.583527, - 1 + -0.252231, - 1 + -0.320237, - 5 + -0.0136125, - 7 + -0.729181, - -5 + -0.0353086, - 5 + -0.0951113, - 3 + -0.0836304, - -1 + -0.11923, - 7 + 0.962136, - -5 + -0.830669, - 1 + 0.29644, - 5 + 0.045498, - 1 + 0.76292, - -5 + -0.929796, - 5 + -0.083544, - -7 + 0.472663, - 7 + -0.746787, - 3 + 0.662228, - -5 + -0.41748, - -7 + 0.850784, - -7 + -0.130054, - -1 + 0.432904, - 7 + -0.787268, - -3 + -0.248262, - 5 + 0.406222, - 5 + -0.775207, - 7 + -0.0549824, - -1 + 0.930082, - -3 + 0.651628, - -7 + -0.373963, - 7 + -0.38767, - -5 + -0.199335, - 3 + -0.0845591, - -3 + -0.400573, - -1 + -0.423932, - 3 + 0.496079, - 3 + -0.0049753, - 5 + -0.937373, - -1 + 0.00805519, - 7 + -0.387026, - -7 + 0.379173, - 3 + -0.509631, - -3 + 0.0652572, - -7 + 0.292195, - -3 + -0.0630124, - -3 + 0.210706, - -7 + 0.0474516, - -3 + 0.088253, - 5 + -0.729131, - -1 + -0.118407, - 5 + 0.587638, - -7 + 0.963741, - -3 + 0.912494, - -7 + 0.723939, - 5 + 0.977461, - 3 + 0.230908, - -7 + 0.0875093, - -5 + 0.827526, - 7 + -0.821136, - -3 + 0.402932, - -7 + 0.441547, - 7 + 0.416953, - 5 + 0.70044, - 3 + 0.973559, - 3 + 0.407091, - -5 + -0.826277, - 3 + -0.389221, - 5 + -0.583906, - 1 + -0.0841909, - -7 + 0.530444, - -1 + -0.918261, - 3 + -0.638232, - 1 + -0.776938, - -7 + 0.706762, - -1 + 0.16429, - -7 + -0.306863, - -3 + -0.670615, - 1 + -0.819745, - 1 + -0.014878, - -3 + 0.178679, - 1 + 0.441678, - -1 + -0.193108, - -3 + -0.33399, - 5 + 0.275276, - -7 + 0.167054, - -5 + 0.134306, - 7 + -0.394252, - 3 + 0.941986, - -7 + -0.878877, - -5 + 0.770656, - -5 + 0.730814, - -1 + 0.143592, - -3 + 0.442492, - -1 + -0.712593, - 5 + 0.599122, - 1 + 0.263907, - -7 + 0.47737, - -7 + 0.0559669, - -3 + 0.208639, - 1 + 0.827161, - 1 + 0.886639, - 1 + 0.598246, - -7 + -0.191541, - 3 + 0.511962, - 3 + -0.645528, - 1 + -0.593154, - -5 + 0.52999, - 5 + -0.653963, - 1 + 0.574099, - -5 + -0.0896155, - 1 + -0.636268, - 7 + 0.343794, - -7 + 0.155548, - -1 + -0.121609, - -1 + -0.297629, - -5 + -0.468962, - 5 + -0.555227, - -1 + -0.296793, - -3 + -0.855934, - 7 + -0.739775, - 1 + -0.756048, - 1 + -0.46236, - -7 + -0.179736, - 3 + 0.125628, - 1 + 0.10038, - -5 + -0.380856, - 7 + 0.450066, - 7 + 0.959734, - -3 + 0.796831, - -1 + 0.23315, - -3 + 0.298099, - -5 + -0.383893, - -3 + -0.296636, - -5 + 0.138614, - 1 + -0.114746, - 7 + 0.555051, - 1 + -0.950471, - -1 + 0.124465, - 1 + 0.037862, - 1 + 0.719934, - 7 + -0.0167727, - -7 + -0.983453, - -5 + -0.418557, - 7 + -0.192828, - 7 + -0.0814223, - 1 + 0.224621, - 5 + -0.597524, - 5 + 0.415634, - 1 + -0.954608, - -3 + 0.227498, - -5 + -0.108549, - 7 + 0.0881721, - 3 + 0.845206, - 3 + -0.913562, - -7 + 0.24586, - -7 + 0.289418, - -1 + 0.194941, - 3 + 0.793157, - 7 + -0.434518, - -7 + 0.820917, - 5 + 0.2382, - 5 + -0.946464, - 1 + 0.686291, - 3 + -0.265611, - -1 + -0.215793, - 1 + 0.247293, - 3 + 0.370775, - -1 + -0.1934, - 5 + 0.306202, - 5 + -0.454743, - -1 + -0.529622, - 1 + 0.856026, - -5 + -0.672594, - -5 + -0.429688, - 7 + -0.898493, - 3 + -0.296784, - -7 + -0.839249, - 7 + -0.238149, - -3 + 0.87197, - 7 + -0.985437, - -3 + 0.243879, - 1 + -0.0590569, - -7 + 0.3087, - -7 + -0.415904, - -3 + 0.238146, - -3 + -0.00380364, - 7 + -0.524692, - -1 + 0.715206, - -1 + -0.382632, - 7 + -0.433315, - -3 + 0.671116, - 5 + 0.319951, - -5 + -0.467809, - 1 + -0.914862, - -1 + -0.848039, - -7 + 0.916399, - -3 + 0.158824, - -7 + 0.432194, - 5 + 0.939947, - -3 + -0.938313, - -1 + 0.111712, - 1 + -0.830159, - -1 + 0.269145, - -3 + -0.282773, - -7 + 0.397815, - -7 + 0.312644, - 7 + 0.101858, - 5 + 0.398991, - 7 + 0.931748, - 5 + -0.216404, - 5 + -0.739909, - -3 + 0.837449, - 5 + -0.292918, - 3 + -0.811216, - 3 + -0.54535, - 3 + -0.206546, - 7 + 0.287012, - 5 + 0.416343, - -7 + 0.226965, - 3 + 0.650639, - 7 + -0.513567, - 3 + 0.35494, - 7 + 0.251297, - 3 + 0.222854, - -3 + 0.631017, - 1 + -0.834925, - -5 + 0.302606, - 5 + -0.161238, - -1 + -0.717755, - -1 + 0.163733, - 7 + 0.683634, - -3 + -0.0890416, - 5 + -0.0241376, - -7 + -0.331885, - -1 + -0.566607, - 5 + -0.0680727, - -1 + 0.69374, - -5 + -0.441671, - 3 + -0.917287, - 5 + -0.447226, - 5 + 0.530121, - 3 + -0.393156, - 7 + -0.625747, - 1 + 0.660945, - 1 + 0.0093144, - 7 + -0.198812, - 5 + 0.442133, - 1 + -0.569587, - -1 + 0.969233, - -3 + 0.831887, - 7 + -0.129281, - -5 + 0.790104, - -3 + -0.329582, - 3 + -0.846209, - 5 + 0.921283, - 5 + 0.0625507, - -3 + 0.292014, - -5 + 0.833173, - -7 + -0.674783, - -3 + -0.846611, - 1 + 0.893338, - -7 + 0.983207, - -7 + -0.776993, - -7 + 0.250987, - -5 + 0.0683537, - 7 + -0.183423, - 1 + -0.0923144, - 3 + 0.316882, - 3 + 0.436083, - -1 + 0.561959, - 5 + 0.199397, - 3 + 0.998894, - -5 + -0.762317, - 1 + -0.264652, - -1 + 0.000935957, - -5 + -0.737429, - 5 + -0.449802, - -3 + -0.153005, - -7 + -0.825486, - -3 + 0.381528, - -3 + -0.834704, - 1 + -0.869081, - -5 + 0.658949, - -7 + 0.538412, - 1 + -0.274676, - -3 + -0.131948, - -5 + -0.89239, - 5 + -0.216419, - 5 + 0.0464617, - -5 + -0.202859, - -5 + 0.937449, - 5 + 0.424624, - 1 + 0.22882, - 7 + 0.683182, - 1 + -0.649762, - 3 + -0.764787, - 7 + -0.573145, - -5 + 0.304541, - 3 + 0.3929, - -7 + -0.210616, - -3 + 0.373165, - -7 + -0.21229, - -7 + 0.897832, - -7 + 0.909656, - 1 + 0.948898, - 3 + -0.42523, - 3 + 0.567772, - -3 + -0.527982, - 3 + -0.189502, - 5 + 0.970517, - 7 + 0.282051, - -3 + 0.430664, - 3 + -0.793949, - -7 + 0.545716, - -3 + 0.35154, - -3 + -0.821351, - 5 + -0.395689, - -5 + -0.620034, - 5 + -0.608408, - -3 + 0.94029, - -1 + 0.0666049, - 5 + -0.51607, - 1 + 0.991041, - 7 + 0.172753, - 5 + -0.0221328, - 5 + -0.193889, - -5 + -0.13076, - 3 + 0.138734, - 3 + 0.59089, - 3 + -0.887206, - -3 + 0.845891, - -1 + -0.347074, - 5 + -0.0834612, - 3 + -0.876824, - -1 + -0.810422, - -1 + -0.231434, - 1 + -0.239487, - -5 + 0.0323537, - 1 + -0.581238, - 5 + 0.00602403, - 5 + 0.0905542, - 3 + 0.498012, - -5 + 0.254225, - 3 + 0.314102, - 5 + 0.0299345, - 5 + -0.45939, - -1 + 0.448653, - -3 + 0.647585, - 1 + 0.318478, - 5 + 0.455767, - -1 + 0.133022, - 1 + 0.614847, - 1 + 0.120892, - -5 + 0.224634, - 5 + 0.132055, - -1 + 0.743952, - -5 + 0.425553, - 5 + -0.111105, - 1 + 0.174118, - 1 + 0.221772, - -7 + -0.845315, - -3 + 0.19196, - 7 + -0.840461, - 5 + -0.129635, - 1 + -0.596764, - 3 + -0.955832, - 1 + 0.585824, - 5 + 0.0742671, - 5 + -0.517633, - -1 + 0.48289, - 7 + 0.0644312, - 1 + -0.795109, - -7 + -0.782286, - -1 + 0.0230929, - 1 + -0.718512, - -1 + 0.764088, - 5 + 0.510258, - -5 + 0.657883, - -7 + -0.345766, - -3 + 0.430414, - 5 + 0.0833478, - -5 + -0.264892, - 3 + 0.710985, - 1 + 0.150336, - 5 + -0.861506, - 3 + -0.0429562, - -1 + 0.434927, - 7 + 0.815823, - -5 + -0.824405, - 7 + -0.262346, - -7 + -0.164051, - -5 + -0.646918, - 3 + -0.147091, - 3 + 0.13859, - -1 + -0.575533, - -3 + 0.103353, - -5 + 0.992246, - -1 + -0.611302, - 7 + -0.0318776, - 1 + 0.460203, - -3 + 0.548152, - -7 + 0.0172631, - -3 + -0.485489, - -7 + -0.980713, - -7 + -0.827265, - -1 + -0.864176, - -7 + 0.851271, - 7 + -0.466744, - -7 + 0.436088, - -3 + 0.576107, - -7 + -0.637538, - 7 + 0.655137, - 5 + -0.826798, - -5 + 0.848056, - 3 + 0.666798, - -1 + -0.180115, - 7 + 0.419637, - 5 + -0.0167801, - 3 + -0.68837, - 3 + 0.946745, - 3 + -0.0950071, - -7 + -0.827281, - -1 + 0.78343, - -5 + -0.582113, - 7 + 0.299523, - 1 + -0.488113, - 5 + -0.341736, - 7 + 0.530617, - 7 + -0.326339, - -7 + -0.817531, - -3 + -0.221869, - -5 + 0.416757, - 1 + 0.506333, - 1 + -0.2654, - 7 + 0.763487, - -5 + -0.943085, - 7 + 0.791527, - -5 + 0.0668543, - -7 + 0.938847, - -3 + 0.143887, - -3 + 0.381707, - -3 + 0.19505, - -3 + -0.920517, - -5 + 0.145063, - -5 + 0.237513, - -7 + -0.120207, - -7 + -0.0991134, - -5 + 0.0680013, - 1 + -0.0638738, - 5 + 0.970159, - 5 + 0.213576, - 1 + -0.263613, - -7 + -0.544301, - -5 + -0.828692, - -5 + 0.166918, - -5 + -0.761728, - 5 + 0.120694, - 5 + 0.903705, - -5 + 0.211521, - 3 + 0.290967, - 7 + -0.464751, - -7 + 0.186847, - 7 + 0.32524, - -7 + 0.111797, - 1 + -0.788556, - 1 + -0.14745, - -3 + -0.968889, - 3 + -0.37981, - 5 + 0.00729347, - 7 + 0.504821, - 1 + -0.961113, - 3 + 0.710415, - -5 + -0.613475, - 5 + -0.895771, - -1 + -0.895503, - 5 + -0.461719, - 5 + 0.0161815, - -5 + -0.24625, - -7 + -0.572922, - -1 + -0.459816, - 7 + -0.419624, - -5 + 0.696952, - -5 + 0.927165, - -5 + 0.243638, - 7 + 0.360799, - 3 + 0.347879, - -3 + -0.0232377, - 3 + 0.712201, - -1 + 0.759489, - -7 + 0.438561, - -7 + -0.572822, - 1 + -0.737766, - 3 + 0.0680258, - -1 + 0.686509, - 5 + -0.262713, - -5 + -0.79966, - 5 + -0.236232, - -7 + -0.0260004, - -7 + 0.218216, - -3 + 0.370607, - 3 + 0.816354, - 7 + 0.452291, - -3 + -0.822625, - 3 + 0.848817, - 7 + 0.365835, - 1 + -0.676283, - 1 + -0.0594598, - -5 + 0.521534, - 1 + -0.486592, - 7 + -0.986362, - -7 + 0.0779941, - -3 + -0.08751, - 7 + -0.491647, - 7 + -0.270531, - -1 + -0.204778, - 1 + -0.231377, - -7 + -0.469895, - -1 + -0.844354, - -7 + -0.264911, - -1 + -0.1599, - -7 + -0.44972, - -1 + 0.194789, - 1 + -0.104809, - 3 + -0.228419, - -7 + -0.803297, - -7 + 0.625464, - -1 + -0.352292, - -1 + -0.755153, - -1 + -0.67635, - 7 + 0.297913, - 5 + 0.57017, - 5 + -0.173484, - 5 + 0.668881, - 1 + 0.277459, - -3 + -0.784868, - 5 + -0.499577, - 3 + -0.10745, - 7 + 0.92074, - -3 + -0.987991, - 7 + 0.915782, - 3 + -0.98239, - 1 + -0.781632, - -5 + 0.853114, - 5 + -0.13405, - -5 + 0.870097, - 7 + -0.696323, - 7 + -0.94934, - -3 + -0.398685, - -7 + 0.869119, - -5 + -0.903581, - -7 + 0.131423, - -3 + 0.834563, - 7 + 0.143985, - 3 + 0.145958, - -3 + 0.536994, - -5 + -0.691582, - 5 + 0.556042, - 7 + -0.58014, - -5 + -0.103551, - -1 + 0.15221, - 3 + -0.757364, - -5 + 0.580815, - 5 + 0.852026, - -7 + -0.470408, - -3 + 0.0561844, - 5 + -0.515549, - 1 + 0.173103, - -3 + -0.168945, - 5 + -0.762956, - -3 + 0.793081, - -1 + -0.676991, - 3 + 0.665824, - 5 + 0.121066, - -5 + 0.731384, - -5 + 0.671191, - -7 + -0.175862, - -7 + 0.486734, - 5 + 0.163906, - -3 + -0.529629, - -3 + -0.741516, - -5 + 0.780671, - -7 + -0.230291, - -3 + 0.302234, - 7 + -0.987584, - -7 + 0.429419, - 7 + -0.123349, - -3 + -0.693596, - 1 + 0.156304, - -7 + -0.070418, - -5 + 0.939389, - 3 + -0.282077, - 7 + -0.461724, - -7 + -0.266467, - -3 + 0.973726, - 5 + 0.324534, - 1 + 0.798357, - -3 + -0.225007, - -3 + 0.326469, - 1 + 0.217389, - -7 + 0.771884, - 1 + -0.448262, - 1 + 0.834186, - 5 + -0.8447, - 7 + 0.265382, - 7 + 0.882236, - 7 + 0.951853, - 3 + -0.212489, - 7 + -0.900493, - -1 + 0.827988, - 5 + -0.96957, - 5 + -0.794382, - 1 + -0.360357, - -7 + 0.686111, - -5 + -0.770717, - -3 + 0.777591, - 1 + -0.164214, - -1 + 0.85202, - -1 + -0.838606, - 5 + 0.727194, - 3 + 0.628267, - 3 + 0.94657, - 3 + 0.664833, - -1 + -0.545169, - 1 + -0.791937, - 5 + -0.863989, - 1 + -0.433051, - 7 + 0.604505, - -5 + 0.469176, - 5 + 0.521661, - 5 + -0.652277, - 5 + -0.956757, - -1 + 0.179364, - 3 + 0.0835185, - 5 + 0.379708, - -5 + -0.00418501, - -3 + 0.802623, - -1 + 0.127959, - 3 + 0.740128, - 7 + 0.0877058, - -3 + -0.644691, - -7 + 0.803557, - -3 + 0.35763, - 7 + -0.896354, - 5 + -0.985988, - -5 + -0.475576, - -7 + -0.837911, - -5 + 0.399102, - -1 + 0.180557, - 7 + -0.257409, - -3 + 0.748304, - 1 + 0.488153, - 1 + -0.528074, - -7 + -0.568786, - -1 + -0.209861, - 7 + 0.758874, - -7 + 0.690599, - -5 + 0.29666, - -7 + 0.14263, - -5 + -0.580595, - -5 + 0.436222, - -7 + -0.230854, - 1 + -0.0199466, - 7 + 0.0582533, - 1 + -0.241347, - -7 + 0.120772, - -5 + 0.158568, - -7 + 0.590528, - 1 + 0.26066, - 7 + 0.696681, - -3 + 0.343628, - -1 + -0.341235, - -1 + 0.426748, - -5 + -0.39029, - -3 + 0.0793041, - -1 + 0.240872, - -7 + -0.986816, - 5 + -0.546091, - 7 + -0.435825, - -5 + 0.631116, - 5 + 0.793044, - -3 + -0.219459, - 7 + 0.140597, - 5 + 0.447243, - 1 + -0.968491, - 5 + 0.843524, - -5 + -0.860415, - 5 + -0.620946, - 1 + -0.41902, - 7 + -0.81125, - 5 + 0.753432, - -3 + -0.727435, - -1 + -0.141588, - -3 + -0.551413, - -5 + 0.381663, - 5 + -0.0711982, - -5 + 0.390526, - 1 + 0.783724, - -7 + 0.573399, - -3 + -0.939007, - -7 + 0.238314, - -1 + -0.521158, - 5 + 0.779281, - -7 + -0.53298, - 3 + 0.21555, - 3 + 0.482487, - 7 + -0.514751, - -1 + -0.800237, - 1 + -0.764197, - -3 + 0.647617, - 7 + 0.0499004, - -5 + 0.979748, - -3 + 0.67735, - -7 + 0.183253, - -5 + 0.362151, - 5 + -0.545888, - 3 + 0.771438, - -3 + 0.255733, - -7 + 0.115492, - 3 + 0.469995, - -1 + 0.129762, - 3 + -0.767167, - -1 + 0.59735, - -7 + 0.999858, - -5 + -0.412252, - -5 + -0.240744, - -7 + -0.94988, - 7 + -0.533656, - 3 + 0.842152, - 5 + -0.0103345, - 7 + 0.0454008, - 3 + 0.333439, - 3 + -0.456548, - -3 + -0.295064, - 1 + -0.0291067, - 3 + -0.980701, - 5 + 0.0998633, - -7 + -0.236756, - -1 + -0.209321, - 3 + -0.238139, - -1 + 0.873939, - 3 + -0.723713, - -5 + 0.814455, - 3 + 0.679885, - -5 + -0.309287, - 1 + 0.911921, - -5 + -0.330781, - 5 + 0.780826, - 1 + 0.715838, - 3 + -0.334343, - -1 + 0.986761, - -1 + -0.439617, - -3 + -0.590452, - 1 + -0.263775, - 7 + 0.667562, - -5 + -0.76034, - -5 + 0.362745, - 1 + -0.472352, - -7 + 0.206034, - -3 + 0.376895, - 5 + 0.551758, - -3 + 0.0431443, - 5 + -0.310862, - -3 + -0.430074, - 5 + 0.275111, - 7 + -0.912242, - 5 + -0.535872, - 3 + 0.320622, - 3 + 0.381784, - 5 + 0.39575, - -5 + 0.419947, - -1 + 0.632249, - 7 + 0.699329, - 5 + -0.53677, - -7 + 0.160241, - 5 + -0.293807, - -5 + 0.291076, - -5 + 0.691705, - 1 + 0.759055, - 3 + -0.907042, - -5 + -0.23742, - -1 + -0.718808, - -3 + 0.324324, - -5 + 0.768603, - -1 + -0.765854, - 3 + -0.270759, - -3 + -0.780064, - 7 + 0.530695, - 5 + -0.923683, - -1 + -0.209208, - 5 + -0.3521, - 7 + -0.81082, - 7 + -0.472168, - 7 + 0.56371, - 5 + -0.87698, - 3 + -0.0658053, - -3 + 0.646983, - 1 + -0.603423, - 7 + 0.458566, - 7 + 0.32752, - -7 + 0.852152, - 1 + 0.996179, - -1 + 0.686456, - -3 + -0.484814, - 5 + -0.675017, - 5 + -0.458211, - 3 + -0.984357, - -1 + 0.266912, - -7 + -0.589247, - -5 + 0.082882, - -5 + -0.885084, - -3 + -0.560765, - 5 + -0.942018, - 7 + 0.572901, - 7 + -0.171902, - -3 + 0.895929, - -7 + -0.655681, - 5 + -0.029179, - 1 + -0.978318, - 1 + -0.0494022, - -3 + 0.315903, - -7 + -0.249841, - 7 + -0.960858, - -3 + 0.444645, - 3 + -0.725221, - -1 + -0.250617, - 5 + 0.072717, - 3 + -0.348692, - -7 + 0.465731, - 7 + 0.770554, - -1 + 0.161133, - 3 + 0.0440529, - -1 + -0.245592, - -1 + -0.286838, - 1 + 0.710223, - 7 + -0.744359, - -7 + 0.754745, - -3 + 0.268595, - -7 + -0.952184, - 5 + -0.12754, - 1 + -0.113531, - 3 + -0.965244, - 3 + -0.295564, - 5 + -0.589246, - -5 + 0.901493, - 7 + 0.499927, - -1 + 0.205479, - -1 + 0.799496, - 7 + 0.159986, - 1 + 0.0494691, - 5 + 0.414586, - 1 + 0.160234, - 5 + -0.754135, - 7 + 0.533292, - 3 + 0.20959, - -3 + 0.265984, - -1 + -0.596171, - -3 + 0.59227, - -5 + 0.809165, - -3 + 0.731077, - -5 + 0.77249, - -3 + 0.114624, - 7 + -0.612689, - -3 + -0.226237, - -1 + -0.491637, - 5 + -0.902752, - 7 + -0.340862, - 7 + -0.764615, - 1 + 0.361337, - 5 + 0.907293, - -1 + -0.207671, - -7 + 0.749045, - 7 + -0.736116, - 7 + 0.331618, - -5 + -0.0821605, - 3 + -0.784978, - 3 + -0.962937, - 5 + 0.0240877, - -7 + -0.357058, - 7 + 0.582812, - -1 + 0.300038, - 3 + 0.442207, - 1 + 0.311886, - 1 + -0.0907658, - -3 + -0.190202, - 3 + 0.752307, - -5 + 0.110897, - -3 + -0.130689, - 3 + 0.604778, - -5 + 0.832513, - -5 + 0.20769, - 1 + 0.918947, - 7 + 0.635097, - -3 + -0.250696, - -5 + -0.673562, - -7 + 0.188827, - -7 + 0.859836, - -5 + -0.553663, - -1 + -0.693482, - -3 + -0.0370091, - -5 + -0.945403, - -3 + -0.0942642, - 5 + -0.788987, - 7 + 0.130865, - -3 + -0.0568169, - 1 + 0.469934, - -3 + 0.236228, - -3 + 0.969961, - -7 + 0.777844, - -1 + -0.863909, - 1 + -0.0100366, - 3 + -0.901984, - 7 + -0.188674, - -3 + -0.0859814, - -7 + 0.289988, - -5 + 0.216434, - 5 + 0.373371, - -3 + 0.756403, - -3 + -0.327696, - -1 + 0.500791, - 5 + 0.577182, - 1 + 0.846249, - 7 + -0.851769, - -7 + 0.957447, - -3 + -0.351796, - -1 + -0.985339, - -7 + -0.840053, - 7 + -0.911335, - 3 + 0.856743, - 3 + -0.901107, - 3 + -0.966849, - 7 + -0.885129, - -5 + -0.284155, - 7 + -0.344691, - -5 + 0.355503, - 7 + 0.752017, - 5 + -0.243656, - 3 + -0.928544, - 5 + 0.782105, - -7 + -0.759649, - 1 + -0.0744518, - -3 + 0.609258, - 5 + -0.125631, - 5 + 0.25112, - -7 + -0.339128, - 7 + 0.412046, - -5 + 0.555857, - 7 + -0.635087, - 7 + 0.516426, - -1 + 0.74659, - 3 + 0.969918, - -1 + 0.436694, - -5 + 0.0135384, - -3 + 0.340553, - 1 + -0.333334, - 5 + -0.401135, - 3 + 0.217065, - 5 + -0.585701, - 7 + 0.283774, - 1 + 0.436392, - 7 + 0.636664, - 5 + -0.0233952, - 5 + 0.966634, - -5 + 0.792896, - 5 + 0.946402, - -1 + -0.831078, - -7 + -0.944117, - 7 + 0.832928, - -3 + -0.37542, - -7 + -0.951767, - -7 + -0.414159, - 3 + -0.440777, - 5 + -0.591346, - -3 + -0.942129, - 1 + -0.475855, - -1 + -0.452418, - -7 + 0.0502203, - -1 + -0.715986, - 5 + -0.39207, - -1 + 0.00692897, - 1 + -0.305166, - -3 + -0.469096, - -1 + 0.214434, - -7 + 0.0882326, - -7 + -0.311931, - 7 + 0.289892, - 5 + 0.529032, - -3 + 0.543897, - -7 + 0.734108, - 5 + 0.760244, - 7 + -0.921361, - -7 + -0.499923, - 5 + 0.932586, - 3 + -0.492252, - -5 + 0.29961, - 3 + 0.40997, - 1 + 0.607012, - -1 + 0.0977883, - 7 + -0.666918, - 1 + 0.092606, - -3 + 0.48582, - -7 + -0.413194, - -1 + 0.657655, - 7 + -0.790176, - 3 + -0.79396, - 5 + -0.401432, - 3 + 0.241941, - -7 + -0.0372352, - 1 + -0.422785, - -7 + 0.412112, - 3 + -0.649941, - 5 + -0.885332, - -1 + 0.918587, - 5 + 0.580861, - 5 + -0.56943, - 7 + -0.313623, - 1 + 0.508329, - -7 + -0.311971, - -1 + 0.384163, - 7 + -0.407872, - 5 + 0.252608, - -5 + -0.748733, - 7 + -0.766854, - 7 + 0.963027, - 7 + 0.370056, - 7 + 0.91614, - 5 + -0.10655, - 5 + 0.114024, - 3 + 0.6354, - -3 + 0.526766, - -3 + 0.0656808, - -1 + 0.273656, - 3 + -0.518891, - 5 + 0.602608, - -3 + 0.14799, - -5 + -0.304276, - 5 + 0.282315, - -5 + 0.525241, - 3 + 0.917138, - 1 + -0.407829, - 1 + 0.148744, - 7 + 0.374387, - 1 + 0.719541, - 5 + -0.845279, - -7 + -0.271885, - -3 + 0.498453, - -3 + -0.108517, - 7 + -0.916167, - 1 + -0.00524844, - 3 + 0.230628, - 1 + 0.928817, - 5 + 0.961846, - 3 + -0.970376, - -5 + -0.991187, - 1 + -0.988078, - -3 + -0.321644, - 7 + 0.299365, - -1 + 0.260651, - -5 + 0.901838, - -7 + 0.905185, - -7 + -0.998068, - -1 + -0.717301, - 3 + -0.448447, - -5 + 0.853505, - 1 + 0.691012, - -5 + 0.858187, - -7 + 0.744305, - -1 + -0.546463, - -5 + 0.0513083, - -5 + 0.113148, - 1 + 0.753596, - -1 + 0.453985, - 1 + -0.558975, - -3 + -0.931769, - -7 + -0.421414, - -7 + -0.61578, - 3 + -0.601418, - -1 + 0.384031, - 1 + 0.180447, - -1 + 0.160505, - 7 + -0.14269, - 3 + 0.553436, - 3 + 0.842422, - -1 + -0.298941, - -3 + -0.704512, - 1 + -0.817883, - -5 + 0.689056, - 3 + 0.54275, - -7 + -0.244876, - -7 + 0.497505, - -3 + -0.385801, - -7 + -0.228079, - 1 + 0.607185, - 7 + -0.625709, - 5 + -0.851795, - -3 + 0.657661, - 7 + 0.568546, - 1 + -0.0359739, - 1 + 0.836243, - 1 + -0.747603, - -5 + 0.463366, - 7 + -0.62775, - -5 + -0.129517, - 7 + -0.0784853, - -5 + -0.338617, - 1 + -0.0951821, - -3 + -0.0586496, - 1 + 0.548171, - -5 + -0.142791, - 1 + -0.137619, - -5 + 0.86615, - 3 + 0.337578, - -7 + -0.0597365, - -5 + -0.843939, - -3 + -0.607342, - -1 + -0.630138, - -3 + -0.393534, - 7 + 0.354908, - -5 + 0.184251, - 5 + -0.154522, - -5 + 0.828516, - 5 + 0.817169, - -5 + 0.833938, - -5 + 0.689288, - 5 + -0.995259, - -1 + -0.932191, - -7 + 0.964076, - 1 + -0.85304, - -3 + -0.0782913, - 7 + -0.696813, - 5 + 0.231297, - 7 + 0.688421, - 7 + 0.0322752, - 1 + 0.839409, - 1 + -0.362455, - -3 + 0.561378, - 3 + -0.496498, - 1 + 0.841212, - -7 + -0.299443, - 7 + 0.527505, - -1 + 0.51827, - 5 + -0.348049, - -3 + -0.983604, - -1 + 0.694304, - 1 + -0.31786, - -3 + 0.643969, - -1 + -0.650723, - -7 + -0.14479, - -3 + 0.455813, - 7 + -0.627596, - -3 + -0.245695, - -5 + 0.0893783, - 3 + -0.236629, - 5 + -0.277597, - 7 + 0.481512, - -7 + 0.143052, - 3 + 0.615401, - 7 + -0.975698, - -1 + 0.50143, - -3 + 0.0737497, - 1 + 0.345961, - -1 + 0.944933, - -1 + 0.00710848, - 3 + -0.908855, - 3 + -0.104037, - -1 + -0.0996714, - -1 + 0.480154, - -5 + -0.684452, - -3 + -0.104955, - -1 + -0.972497, - 5 + 0.619405, - -5 + -0.361996, - 1 + -0.780079, - -7 + 0.443635, - 7 + 0.527956, - -1 + 0.927314, - 3 + 0.606136, - 3 + -0.22611, - 1 + -0.288871, - -3 + 0.683856, - 5 + 0.486252, - -7 + -0.781706, - 5 + 0.348522, - -7 + -0.743252, - 5 + 0.790582, - -1 + -0.417564, - 1 + 0.971814, - 1 + -0.394633, - 3 + -0.538042, - 7 + -0.82342, - -5 + 0.46215, - -3 + -0.725289, - -1 + -0.248699, - 3 + 0.194388, - -1 + 0.572686, - -1 + 0.57203, - -1 + -0.73258, - 3 + -0.841193, - 3 + 0.846292, - 7 + -0.106951, - -1 + -0.82125, - 5 + -0.565781, - -7 + -0.178221, - 3 + -0.396988, - -1 + -0.194377, - -7 + -0.184276, - 3 + 0.530178, - -1 + 0.0792818, - 3 + 0.698151, - 7 + 0.540132, - 5 + -0.0324876, - -5 + -0.539282, - 1 + -0.0612176, - 1 + -0.00825787, - -5 + -0.594088, - 5 + -0.720534, - -3 + -0.726017, - 3 + -0.247803, - -5 + -0.0351876, - -3 + -0.485217, - 7 + -0.711281, - 1 + -0.143779, - 5 + 0.830104, - -1 + -0.680937, - -5 + -0.406956, - -7 + -0.572693, - 1 + -0.916711, - -7 + -0.361021, - 5 + -0.669143, - -7 + 0.0977001, - -1 + -0.351618, - -3 + -0.292778, - -3 + 0.94385, - -5 + 0.64688, - -5 + 0.462901, - -7 + 0.139473, - 5 + -0.923586, - -7 + 0.100025, - 7 + 0.762592, - 5 + -0.669251, - -5 + 0.552417, - 3 + 0.578362, - -3 + 0.286511, - -5 + -0.819517, - 5 + -0.174663, - 1 + 0.898405, - -3 + 0.276757, - -5 + -0.860502, - -3 + -0.508774, - -7 + -0.619703, - -1 + -0.576515, - 7 + 0.442863, - 1 + -0.792524, - 1 + -0.967062, - -7 + 0.495375, - -7 + -0.497338, - -5 + -0.649645, - -1 + -0.692724, - -7 + -0.681675, - 5 + 0.80008, - -1 + -0.476369, - -3 + 0.102149, - -3 + -0.595665, - -5 + -0.961165, - 7 + -0.990363, - -5 + 0.716457, - -7 + -0.404208, - -1 + -0.483432, - 1 + 0.236347, - -1 + 0.376305, - 1 + -0.0533286, - -7 + -0.610223, - 3 + 0.843043, - -1 + -0.609047, - 1 + 0.725496, - -1 + -0.31617, - -5 + -0.0189003, - -3 + -0.425178, - -7 + -0.321938, - 3 + 0.0120751, - -1 + 0.315381, - -3 + -0.324733, - -3 + -0.571329, - 5 + -0.30955, - 3 + -0.997293, - 3 + 0.105692, - 1 + 0.0166829, - -7 + 0.295209, - -5 + 0.0396503, - -7 + -0.698527, - 1 + -0.983116, - 7 + 0.659054, - -1 + 0.33142, - -7 + -0.0377453, - -5 + -0.0574753, - -1 + 0.852526, - -1 + 0.983994, - -5 + 0.938022, - 1 + 0.513438, - 3 + 0.0546758, - -5 + 0.0823434, - -7 + 0.166195, - -3 + -0.852176, - 1 + 0.366113, - 1 + -0.397224, - -7 + 0.665549, - 1 + -0.0446258, - 3 + 0.702024, - 5 + -0.733169, - -1 + -0.0454769, - -7 + -0.668073, - 1 + 0.27592, - 7 + -0.323333, - 5 + -0.674522, - 7 + 0.0814798, - 7 + -0.782666, - 3 + -0.0710991, - 5 + 0.773968, - -1 + 0.803732, - -1 + 0.142462, - -3 + -0.243322, - -3 + -0.958958, - 5 + 0.308394, - 7 + -0.500096, - -7 + 0.914925, - 7 + 0.150591, - -5 + 0.58597, - 7 + 0.251341, - -3 + -0.636188, - 7 + 0.909046, - 3 + -0.577617, - -7 + -0.903661, - 7 + -0.275888, - 1 + -0.21705, - -5 + 0.736324, - -1 + -0.820161, - -1 + -0.545268, - 3 + -0.0618935, - 7 + -0.126791, - 1 + -0.792842, - -7 + -0.398747, - 3 + -0.583208, - -5 + -0.325178, - 7 + -0.0370357, - -5 + -0.083306, - 5 + 0.819585, - -7 + 0.0991425, - -3 + -0.130402, - -5 + -0.157376, - 7 + 0.691842, - 5 + -0.748137, - -1 + 0.758925, - 1 + -0.312916, - 3 + -0.820843, - 7 + -0.261816, - 7 + -0.172358, - 7 + 0.536986, - 7 + 0.759576, - 7 + -0.754446, - -7 + 0.567095, - -1 + -0.524981, - -3 + -0.802519, - -3 + 0.3109, - 3 + -0.248219, - 5 + 0.0748601, - 7 + 0.960564, - 1 + 0.667926, - -7 + -0.706296, - -3 + 0.635725, - 7 + 0.978146, - -1 + -0.574543, - 5 + -0.430696, - 1 + 0.0996064, - 1 + -0.00163434, - 3 + 0.14937, - 3 + -0.0844981, - 3 + -0.136261, - 5 + 0.973049, - 3 + 0.282247, - 7 + 0.579739, - 5 + -0.0823847, - 5 + -0.0467881, - 5 + 0.596636, - -1 + -0.297972, - -5 + 0.706257, - -7 + 0.604586, - -3 + 0.0669439, - -1 + -0.453354, - 5 + -0.477196, - 5 + 0.311931, - 5 + 0.166079, - 3 + 0.412152, - 7 + 0.474994, - 5 + -0.771076, - 5 + 0.536177, - -5 + -0.0305953, - -3 + 0.580228, - -3 + 0.284461, - -7 + -0.726361, - -3 + -0.726564, - 1 + -0.345421, - 3 + 0.80056, - 1 + 0.878273, - -5 + 0.654627, - -1 + 0.295187, - 7 + 0.591756, - 3 + 0.260911, - 3 + 0.481528, - -3 + -0.77778, - 3 + -0.683316, - -7 + -0.658198, - -3 + -0.74585, - 1 + 0.938157, - 1 + 0.192402, - 5 + 0.361699, - 3 + -0.163265, - -3 + 0.783476, - -5 + 0.737259, - 1 + -0.569672, - 7 + 0.10586, - -1 + -0.173976, - 1 + 0.935026, - -7 + 0.356488, - -1 + 0.0017309, - 5 + -0.675919, - -1 + 0.0665381, - -1 + -0.307875, - 7 + 0.0983045, - 5 + 0.963101, - 3 + -0.519587, - -5 + 0.899631, - 1 + 0.31666, - 7 + -0.756871, - 7 + 0.333545, - -3 + -0.168074, - 7 + 0.87813, - -1 + 0.779471, - -5 + 0.754198, - 7 + -0.868269, - 1 + 0.333521, - 7 + -0.731973, - -1 + 0.33527, - -3 + -0.467703, - -1 + 0.234056, - -3 + -0.237028, - 3 + 0.74204, - 7 + -0.257894, - -7 + 0.690854, - -1 + 0.652636, - 3 + 0.0301753, - -7 + 0.814373, - -1 + -0.951698, - -5 + 0.976247, - -3 + 0.431324, - -3 + 0.192437, - 3 + 0.31289, - -3 + 0.422132, - 3 + -0.00384281, - 3 + 0.72445, - -5 + 0.920278, - -3 + -0.324996, - 3 + 0.181187, - 7 + 0.658717, - -5 + -0.977313, - -1 + 0.378038, - 1 + 0.615551, - -1 + 0.475454, - 3 + 0.735309, - 7 + -0.398705, - 7 + 0.0674037, - -1 + 0.273941, - 5 + -0.376697, - 1 + -0.934663, - 3 + 0.764279, - -5 + -0.67983, - -5 + -0.951744, - -7 + 0.559239, - -7 + 0.123601, - -1 + 0.279154, - 7 + -0.349745, - -1 + 0.881504, - 5 + 0.743417, - -7 + -0.126299, - -3 + 0.129631, - -7 + -0.248369, - 3 + -0.582388, - 7 + 0.606937, - -1 + -0.766819, - -1 + -0.887898, - -3 + 0.628891, - -3 + 0.797051, - 1 + 0.258235, - 1 + -0.289372, - -7 + -0.689227, - -5 + -0.223412, - -5 + -0.0717334, - 5 + 0.444987, - 3 + -0.47443, - 5 + -0.622907, - 1 + 0.231064, - 7 + 0.0643792, - -5 + -0.545879, - -3 + 0.881704, - 7 + 0.421487, - 7 + -0.163227, - 1 + -0.19334, - 5 + 0.754454, - -7 + -0.173896, - -1 + -0.148776, - -5 + 0.342022, - -3 + 0.00779013, - 7 + -0.959293, - 5 + 0.888742, - 1 + -0.0373372, - 3 + 0.154647, - 7 + 0.522902, - -1 + -0.91692, - 1 + -0.762814, - 1 + -0.308587, - -5 + 0.252501, - 3 + 0.186752, - 7 + -0.897854, - 3 + -0.314141, - 7 + -0.123752, - 5 + -0.986531, - 7 + 0.89791, - 1 + -0.133572, - -7 + -0.828677, - -7 + -0.362269, - 1 + -0.231981, - 1 + 0.6903, - 5 + 0.212784, - -1 + 0.790468, - -7 + -0.822496, - 1 + -0.215268, - 5 + -0.232525, - -1 + -0.479589, - 3 + -0.79679, - -5 + -0.604188, - 7 + -0.201313, - -1 + -0.525663, - -7 + -0.155085, - 1 + -0.820419, - -3 + -0.37499, - -3 + -0.983146, - -5 + -0.793733, - -1 + -0.0931721, - 5 + -0.601751, - 3 + 0.0783009, - -1 + 0.768638, - 1 + 0.492399, - -5 + -0.0098969, - -1 + 0.19191, - -7 + -0.979377, - -7 + -0.0178371, - -5 + -0.329518, - 1 + 0.373382, - -7 + -0.845312, - 3 + -0.922893, - 3 + 0.315986, - 3 + 0.486665, - 1 + -0.263414, - -5 + 0.375741, - 3 + 0.909047, - 1 + -0.905982, - 1 + -0.887325, - 1 + -0.20989, - 5 + -0.476245, - 1 + -0.937806, - 3 + -0.749343, - 3 + -0.786876, - -3 + -0.67605, - -1 + 0.0446474, - -5 + 0.652167, - 1 + 0.543258, - -5 + 0.15279, - -5 + 0.148326, - 5 + 0.254656, - -3 + 0.856795, - -7 + 0.751831, - -3 + 0.630068, - 5 + 0.0417778, - -5 + -0.789099, - -7 + 0.741281, - -3 + 0.391712, - -3 + -0.134653, - -1 + 0.326939, - 7 + -0.0234458, - -3 + -0.23408, - -5 + -0.239154, - -5 + -0.832932, - 5 + -0.305414, - 7 + 0.447744, - -3 + -0.729455, - 7 + 0.48413, - 5 + 0.236162, - 5 + -0.534741, - 5 + 0.00340226, - -5 + -0.92795, - 5 + -0.802271, - 5 + -0.486955, - -3 + -0.958796, - 5 + -0.576444, - -1 + 0.107654, - -5 + -0.759059, - -5 + 0.292163, - 1 + -0.785662, - 3 + -0.374019, - 7 + -0.0159586, - -1 + 0.70116, - -5 + 0.0846993, - 1 + 0.401001, - 7 + 0.0279956, - -7 + -0.394888, - 5 + 0.505212, - 7 + 0.786975, - 3 + 0.532436, - -7 + 0.204459, - 3 + -0.615921, - -3 + 0.0758607, - -5 + 0.130031, - -5 + -0.772899, - 3 + -0.274121, - 5 + 0.056024, - -1 + -0.218418, - -7 + -0.183809, - -5 + 0.109609, - 5 + -0.821093, - 7 + -0.353014, - 3 + 0.228901, - 1 + -0.594237, - -3 + 0.39832, - -5 + 0.575415, - -1 + 0.398899, - -5 + -0.239754, - 3 + -0.535948, - 5 + -0.487767, - 5 + 0.282845, - 1 + -0.720766, - -7 + 0.678491, - -3 + 0.389419, - 5 + -0.862186, - 7 + -0.942864, - 7 + -0.341864, - 7 + -0.332763, - -7 + 0.290539, - -5 + -0.076314, - -3 + 0.14099, - 1 + -0.0547188, - 3 + 0.735025, - 3 + -0.197414, - 5 + 0.690544, - 5 + 0.630046, - -3 + -0.117688, - 7 + 0.656909, - 7 + 0.417193, - -3 + -0.489404, - -1 + 0.66448, - 3 + 0.109689, - 1 + -0.601325, - 5 + 0.930691, - 1 + 0.122041, - -3 + 0.991223, - -5 + -0.700354, - -1 + 0.0347951, - 7 + 0.122125, - 1 + 0.218395, - -7 + -0.177617, - 5 + 0.209456, - -5 + -0.976741, - -5 + -0.41843, - -3 + -0.580374, - -1 + -0.424389, - -5 + -0.183439, - 1 + 0.159905, - 1 + -0.825052, - -1 + -0.783269, - 3 + 0.150836, - -5 + 0.385557, - -1 + -0.657701, - -5 + 0.739214, - 7 + -0.990613, - -5 + 0.787245, - -5 + 0.604144, - -5 + -0.871588, - 5 + 0.721765, - 5 + 0.118939, - -5 + -0.859039, - -3 + 0.111408, - -1 + -0.479201, - 1 + -0.470303, - -1 + -0.136117, - 5 + 0.956995, - 1 + -0.39388, - -1 + 0.614385, - 1 + 0.556813, - 7 + 0.844387, - 1 + -0.436025, - -5 + -0.108634, - 5 + -0.100592, - -7 + -0.723946, - 1 + 0.0688398, - 7 + 0.180889, - -3 + 0.628736, - 1 + 0.112598, - 3 + 0.318029, - -3 + 0.634139, - 7 + -0.691032, - 1 + 0.356673, - 5 + 0.0566803, - 1 + -0.351812, - 5 + 0.531286, - -7 + -0.157417, - 7 + -0.99541, - 7 + -0.681986, - 5 + -0.997084, - -7 + 0.741155, - 1 + -0.622678, - 1 + 0.705248, - -5 + 0.711669, - 7 + 0.377357, - -5 + -0.62871, - -5 + 0.0214289, - -1 + -0.997903, - 5 + 0.0933239, - 3 + -0.526274, - -7 + -0.951203, - -1 + -0.755676, - 5 + 0.339232, - -1 + 0.773219, - -3 + 0.426269, - 3 + -0.396471, - 7 + 0.567064, - 5 + 0.633394, - -7 + 0.791714, - 3 + 0.787449, - 3 + -0.472383, - -5 + -0.155762, - -5 + -0.0783671, - -5 + -0.338965, - 3 + -0.793645, - -5 + 0.876857, - -5 + -0.02886, - -1 + 0.566931, - 5 + 0.623439, - 5 + 0.50836, - 7 + -0.3025, - 7 + -0.714796, - -7 + 0.179475, - 7 + -0.662018, - 1 + -0.348355, - 3 + -0.794334, - -3 + -0.157082, - 7 + 0.149085, - 1 + 0.640906, - -3 + 0.349559, - -3 + 0.857413, - -1 + -0.0283983, - -1 + 0.693171, - -3 + -0.214092, - -5 + -0.98936, - 1 + 0.639767, - 3 + -0.194655, - -5 + 0.940209, - -3 + 0.20604, - -3 + -0.564045, - 3 + -0.590761, - 5 + 0.685986, - 3 + -0.764822, - -1 + 0.42185, - -3 + -0.295677, - 1 + 0.216797, - 1 + -0.814246, - -1 + 0.206404, - -3 + 0.328757, - 7 + -0.566083, - 3 + 0.597134, - -3 + 0.642763, - -7 + -0.395769, - 7 + -0.935252, - -7 + 0.626113, - -3 + -0.849858, - 5 + 0.917923, - 5 + -0.376758, - 3 + 0.849631, - -5 + -0.327594, - -7 + -0.0529906, - -3 + -0.923709, - 1 + 0.0692206, - -5 + 0.056296, - 3 + 0.467438, - -1 + -0.814233, - -5 + -0.302013, - -3 + 0.695497, - 7 + 0.651437, - 3 + 0.168943, - 5 + 0.605341, - -1 + -0.372329, - 1 + 0.765342, - 1 + 0.947534, - -5 + 0.116956, - -3 + 0.577997, - 5 + 0.810715, - 1 + -0.779946, - -7 + -0.370998, - 3 + 0.558406, - -1 + -0.233575, - 1 + 0.77588, - -7 + -0.311882, - 5 + -0.910265, - 5 + -0.992932, - 5 + -0.760745, - 1 + 0.318678, - 5 + -0.210387, - 1 + 0.872963, - 3 + 0.220112, - -5 + -0.811578, - 5 + -0.711665, - 5 + -0.150111, - -1 + 0.641725, - 1 + 0.898414, - -3 + -0.650104, - 7 + -0.14629, - 7 + 0.865109, - -1 + -0.347701, - -1 + 0.921759, - 1 + 0.697452, - 1 + 0.0354798, - 5 + -0.176528, - -7 + 0.664795, - -3 + 0.896781, - 3 + -0.958731, - 5 + -0.141991, - 7 + 0.120368, - -5 + 0.485083, - 7 + -0.376901, - -5 + -0.43829, - -5 + -0.586847, - 1 + -0.959211, - 7 + 0.0708796, - -3 + 0.0492324, - -3 + -0.993246, - -1 + 0.650188, - -1 + -0.865149, - -5 + 0.37034, - 7 + -0.338674, - 3 + 0.623087, - -7 + -0.321175, - 7 + -0.764244, - -1 + 0.378604, - 1 + -0.812146, - 3 + 0.444655, - -5 + 0.253273, - 7 + 0.481744, - 3 + 0.455208, - 5 + 0.908443, - 1 + 0.0686094, - -7 + 0.844868, - -5 + -0.976591, - 7 + -0.72575, - 5 + 0.675135, - -7 + 0.274097, - -3 + 0.409609, - 3 + -0.175133, - -3 + 0.796693, - 3 + -0.247288, - -1 + -0.549564, - -7 + 0.967288, - -1 + -0.839667, - 3 + -0.681989, - -1 + -0.523145, - -5 + 0.396439, - 5 + -0.120618, - 3 + 0.693885, - -1 + -0.816144, - -5 + -0.968818, - -3 + -0.390704, - 3 + -0.448062, - 1 + 0.569756, - 5 + -0.336729, - -1 + 0.136729, - 5 + 0.941006, - 5 + -0.465103, - 7 + 0.468966, - -1 + 0.355103, - -7 + 0.615847, - -1 + -0.692941, - -1 + -0.173114, - 3 + 0.594599, - 7 + 0.557483, - 3 + 0.997697, - -5 + 0.24401, - 1 + -0.00963287, - 5 + 0.0275448, - 5 + 0.659747, - -7 + -0.567272, - -5 + -0.405348, - -1 + -0.614457, - 1 + 0.19472, - -7 + 0.553533, - -3 + -0.612328, - 1 + -0.348393, - -3 + 0.771169, - -3 + 0.354427, - -5 + 0.785281, - 3 + -0.318974, - -5 + -0.170041, - -1 + -0.667593, - -1 + -0.514524, - -5 + -0.76729, - 3 + 0.924267, - 7 + -0.893804, - -7 + -0.250356, - 7 + -0.732358, - -7 + 0.490774, - 1 + -0.437992, - -3 + 0.469562, - 1 + 0.436426, - -3 + -0.400156, - 7 + -0.860264, - 1 + 0.0900252, - -1 + -0.754367, - 1 + -0.838147, - -5 + 0.404529, - -7 + -0.437069, - -5 + -0.496662, - 5 + 0.952867, - -3 + 0.894237, - -3 + -0.555447, - -1 + -0.354976, - 1 + -0.60926, - -7 + 0.759444, - 3 + 0.662752, - -7 + -0.815089, - -5 + 0.98253, - 3 + -0.817391, - 5 + -0.61243, - -5 + -0.456923, - -1 + -0.824931, - 7 + 0.514605, - -1 + 0.828664, - -5 + -0.195044, - -3 + -0.333318, - 3 + 0.164695, - -7 + 0.0349422, - 7 + 0.118845, - 5 + -0.174882, - 7 + -0.872202, - 7 + 0.710986, - 3 + 0.699916, - -5 + 0.066256, - 3 + -0.148756, - 7 + 0.508584, - 5 + 0.825367, - -5 + -0.729841, - -5 + -0.887612, - 5 + -0.758424, - -5 + 0.998181, - -7 + 0.65577, - 5 + -0.474471, - 7 + -0.269234, - 3 + 0.104569, - -5 + -0.102212, - -5 + 0.738547, - 5 + -0.94242, - -1 + 0.15571, - 7 + -0.421775, - -7 + 0.804305, - 3 + 0.770802, - 7 + 0.642568, - -7 + 0.971034, - 1 + -0.144741, - -7 + 0.902049, - 7 + 0.157032, - 7 + -0.710021, - 7 + 0.719006, - 1 + -0.119823, - -7 + 0.156298, - 3 + 0.970851, - -1 + -0.163907, - -7 + -0.353286, - -7 + 0.497258, - -7 + 0.283671, - 1 + 0.0405689, - -5 + -0.962454, - -3 + -0.219818, - 1 + -0.436599, - -3 + -0.651331, - 5 + 0.192501, - -5 + 0.627465, - 3 + -0.0387857, - -5 + 0.235464, - 3 + -0.0781319, - -1 + 0.372664, - -7 + 0.144817, - -3 + -0.981248, - -7 + -0.438408, - 5 + 0.851478, - -1 + -0.473764, - 1 + 0.00188464, - 3 + 0.433134, - -7 + -0.132385, - 7 + -0.0645663, - -1 + -0.202906, - -7 + -0.19273, - -5 + 0.490564, - 5 + -0.986688, - 3 + -0.259055, - -5 + -0.0975989, - -1 + -0.599443, - -1 + 0.313751, - -3 + 0.839625, - -3 + 0.0875769, - 7 + 0.531778, - 5 + 0.78374, - -7 + -0.568377, - -5 + -0.772801, - -5 + -0.0559519, - -5 + 0.945151, - -7 + 0.260123, - -7 + -0.909106, - -5 + 0.0617756, - -3 + -0.0675705, - 3 + 0.425518, - -3 + 0.0981296, - -1 + -0.137702, - 5 + 0.353555, - 7 + 0.895279, - -7 + 0.247132, - -1 + 0.346749, - -3 + 0.748198, - -5 + 0.584672, - 3 + -0.731422, - 3 + 0.0579248, - 5 + 0.212579, - 5 + 0.1419, - -1 + -0.51401, - 1 + -0.844899, - -1 + -0.478985, - -5 + 0.918879, - 3 + -0.0802303, - 5 + 0.995209, - 1 + 0.228169, - -3 + 0.580333, - -3 + -0.866062, - 7 + -0.978268, - -5 + 0.501526, - -7 + 0.334392, - -1 + 0.442487, - -5 + 0.0704108, - -5 + -0.711541, - -5 + 0.982968, - -7 + 0.722414, - 5 + -0.799889, - 1 + -0.853645, - -7 + 0.997917, - 5 + -0.513696, - 5 + 0.0364606, - 5 + -0.248071, - -7 + -0.387232, - 1 + -0.811699, - 1 + 0.732048, - 3 + -0.679307, - -1 + -0.978209, - -1 + -0.964028, - -5 + -0.611812, - -7 + -0.902063, - -3 + 0.398009, - 3 + 0.00542146, - 5 + 0.601782, - 5 + -0.104203, - 1 + 0.506752, - -5 + 0.436524, - 7 + 0.982469, - -1 + -0.0633421, - -7 + 0.446072, - -1 + 0.927761, - 1 + 0.658156, - -7 + 0.785148, - -1 + -0.591183, - -3 + 0.0137029, - -1 + -0.388246, - 7 + -0.675978, - 1 + 0.0143937, - -7 + 0.690042, - -5 + -0.693171, - -7 + -0.352858, - 3 + -0.970363, - -7 + -0.723423, - 3 + 0.724452, - -3 + 0.158585, - 7 + -0.175004, - 1 + -0.19285, - -1 + 0.992788, - 3 + -0.851952, - 5 + 0.81, - 3 + -0.0435364, - -1 + -0.0813053, - -1 + -0.765415, - -7 + -0.0372974, - -1 + 0.694064, - 1 + -0.136753, - 3 + 0.826244, - -7 + 0.140024, - 5 + -0.0882701, - 1 + 0.295136, - 7 + -0.5227, - -5 + -0.237363, - -3 + 0.709084, - -3 + 0.629578, - -5 + 0.643857, - 7 + -0.668263, - -5 + 0.249376, - -1 + -0.760648, - 1 + -0.927984, - 7 + -0.659877, - 7 + -0.567002, - -1 + 0.0565217, - -3 + 0.805679, - -3 + -0.528236, - -7 + -0.13752, - -3 + 0.887507, - 7 + 0.63262, - 3 + -0.119278, - 3 + 0.890306, - -1 + -0.274285, - -1 + 0.369489, - 7 + 0.0317755, - 3 + -0.856605, - 7 + 0.912634, - -7 + 0.0492215, - 1 + -0.276292, - -7 + -0.177337, - 3 + -0.787517, - -3 + -0.53, - -1 + -0.186417, - 3 + -0.949098, - -7 + -0.517213, - -1 + -0.986841, - 5 + 0.600896, - 7 + 0.48168, - -3 + -0.458465, - 5 + 0.321443, - -3 + -0.234238, - 1 + -0.954936, - 5 + -0.0275234, - -7 + 0.924262, - 1 + 0.977532, - -5 + -0.669258, - 3 + 0.364021, - 1 + 0.135028, - -3 + -0.473695, - -7 + -0.185051, - -7 + -0.232574, - 3 + -0.944187, - 3 + -0.0543526, - 5 + 0.673031, - 5 + 0.195805, - 1 + -0.45507, - 7 + 0.404971, - 3 + -0.610784, - 5 + 0.0659073, - -1 + -0.207704, - 7 + 0.644995, - -1 + 0.121214, - -3 + -0.483027, - -7 + 0.711033, - 5 + -0.673219, - -1 + -0.895776, - 3 + 0.951024, - -3 + 0.56215, - 3 + -0.329154, - -5 + -0.577541, - -7 + -0.309147, - -1 + -0.511309, - 7 + 0.499812, - -5 + -0.681876, - -1 + -0.801156, - 7 + 0.151605, - -3 + 0.241685, - 7 + 0.992835, - -3 + 0.982038, - -5 + 0.0631867, - -5 + 0.950436, - 7 + 0.31088, - 5 + -0.708879, - -7 + 0.460315, - 1 + 0.397522, - 3 + -0.830289, - -1 + -0.146992, - 3 + 0.667571, - -5 + 0.870575, - 5 + -0.692335, - 1 + -0.399896, - -7 + -0.421033, - 7 + -0.740574, - -3 + 0.0441913, - -5 + 0.000759854, - -1 + -0.526559, - 7 + -0.50311, - 3 + -0.00944866, - -7 + 0.250031, - -5 + 0.579793, - -3 + 0.554107, - 5 + 0.737397, - 1 + 0.434328, - -5 + -0.698991, - -7 + 0.0322755, - 5 + -0.995791, - -7 + 0.233862, - 3 + -0.201264, - 7 + -0.297969, - -5 + 0.377501, - 3 + -0.571389, - -1 + 0.530284, - 5 + -0.179379, - 7 + -0.356844, - -7 + 0.941165, - 1 + 0.339271, - 3 + -0.66842, - -5 + -0.423012, - 3 + 0.316588, - -1 + -0.984114, - 1 + -0.5428, - -1 + 0.766658, - 1 + -0.960606, - 5 + -0.620487, - 7 + 0.266202, - 7 + 0.901102, - 1 + -0.268669, - -5 + -0.607472, - -7 + -0.52709, - -3 + 0.0705389, - 1 + -0.608374, - -3 + -0.288577, - -5 + 0.843351, - -3 + 0.612135, - -5 + 0.230486, - 5 + -0.244291, - -1 + 0.576229, - -3 + 0.446377, - -3 + -0.106511, - -3 + 0.889909, - -5 + -0.918941, - 1 + 0.848997, - -5 + 0.10993, - -3 + 0.256356, - 1 + 0.504098, - 5 + -0.170462, - 1 + 0.835316, - 7 + 0.644516, - -7 + 0.90372, - -7 + 0.463742, - -5 + 0.349377, - -7 + -0.553437, - 1 + 0.330349, - 5 + 0.710921, - -3 + 0.654504, - -5 + -0.447801, - -5 + 0.0517276, - -1 + 0.975718, - 3 + 0.874352, - -1 + 0.678769, - -1 + -0.264881, - -3 + -0.0680661, - 1 + -0.824504, - -7 + -0.0992408, - -5 + -0.862084, - 3 + -0.805812, - 5 + 0.237566, - -3 + 0.888929, - 1 + -0.476846, - -1 + 0.621217, - 1 + 0.65046, - 1 + -0.177248, - -1 + 0.0533044, - 3 + -0.176522, - -1 + 0.676266, - 5 + 0.0818662, - 5 + -0.0801649, - 5 + -0.430938, - 3 + -0.763183, - -7 + -0.453813, - 3 + 0.555379, - -3 + 0.858594, - 3 + 0.227172, - -1 + -0.632746, - -7 + 0.627382, - 1 + -0.0489046, - 7 + -0.828429, - 3 + 0.555978, - -7 + -0.130752, - 1 + 0.978551, - 1 + 0.985192, - -3 + -0.601231, - -3 + 0.3876, - 1 + 0.907771, - -3 + -0.183183, - -5 + -0.297217, - -5 + 0.579173, - -5 + 0.751301, - 5 + 0.675477, - -7 + -0.700691, - 1 + 0.947316, - -7 + -0.635739, - -1 + -0.1091, - -5 + -0.655627, - -7 + -0.74121, - 1 + 0.334598, - 5 + -0.133385, - -5 + 0.364959, - 5 + -0.692856, - -7 + -0.432334, - -3 + 0.0911902, - -5 + 0.670209, - -7 + -0.0777559, - -3 + 0.769741, - 7 + 0.0235715, - 1 + 0.181115, - -7 + -0.688748, - -7 + -0.641734, - -1 + 0.972104, - 7 + -0.474228, - -7 + -0.984007, - 3 + 0.25339, - 3 + 0.87889, - 5 + 0.624509, - 5 + -0.896409, - 7 + -0.146804, - 5 + 0.79753, - -1 + 0.0419583, - -3 + -0.978575, - 5 + -0.799147, - 7 + -0.100029, - 5 + 0.34877, - 5 + 0.726533, - -3 + 0.902539, - -7 + -0.0300989, - 5 + 0.843366, - 7 + 0.98872, - 7 + -0.428589, - 1 + 0.644193, - -5 + 0.0228081, - 7 + -0.754224, - 7 + 0.805301, - 5 + 0.695254, - -7 + -0.188701, - 3 + -0.581044, - 5 + 0.799149, - 7 + 0.353339, - -1 + -0.9622, - -1 + -0.230887, - 5 + -0.787056, - -7 + -0.706222, - 3 + 0.0197935, - -1 + 0.805143, - 7 + 0.951379, - 5 + -0.333186, - -3 + -0.0693998, - -3 + 0.993613, - -5 + -0.548791, - -5 + -0.964111, - 3 + -0.584394, - 1 + 0.867385, - -7 + -0.480054, - 1 + -0.994699, - 7 + 0.090273, - -3 + 0.901709, - 1 + 0.715806, - 3 + 0.304813, - 7 + 0.403796, - 1 + -0.473723, - 5 + 0.475125, - -1 + 0.0271961, - 7 + -0.487227, - 7 + 0.229468, - -3 + -0.189796, - -3 + -0.625003, - 1 + -0.401116, - -7 + 0.67123, - -5 + -0.927091, - -7 + 0.270972, - 7 + -0.617139, - 1 + -0.91671, - -7 + -0.712691, - -3 + -0.840406, - 5 + -0.406998, - -1 + -0.849947, - 3 + -0.158653, - -1 + 0.0696663, - -1 + 0.758415, - 1 + 0.0694559, - 1 + 0.462296, - -5 + 0.217909, - 1 + 0.473663, - -3 + 0.473242, - -3 + -0.890317, - -3 + -0.397198, - -7 + -0.508332, - 5 + 0.990104, - 5 + -0.32464, - -1 + -0.869012, - 7 + 0.567209, - 1 + -0.495974, - 3 + -0.101183, - -7 + -0.74694, - -5 + -0.675854, - -1 + 0.110992, - -5 + 0.247456, - 7 + 0.840274, - -3 + 0.395728, - 5 + -0.362192, - -3 + -0.680363, - 5 + -0.602484, - -3 + 0.738772, - 1 + -0.644167, - -3 + 0.634913, - 3 + -0.384876, - 5 + -0.916855, - -5 + -0.227988, - -3 + -0.625356, - -5 + -0.740278, - -1 + -0.41118, - 3 + 0.443345, - 3 + 0.736942, - 1 + -0.354426, - -7 + -0.870946, - -3 + -0.546137, - -7 + 0.272889, - 1 + 0.0801028, - 5 + -0.274639, - -5 + -0.154875, - -3 + -0.580005, - -5 + -0.398665, - 3 + -0.385197, - 5 + -0.285359, - 1 + 0.362706, - -7 + -0.855772, - -7 + 0.0454971, - -5 + -0.424857, - -7 + -0.504577, - -5 + -0.00591926, - -5 + 0.149346, - 3 + -0.328489, - 7 + 0.015029, - 7 + 0.747577, - -5 + -0.714686, - 1 + -0.101717, - 3 + 0.656319, - 1 + 0.5271, - -7 + -0.64961, - -7 + -0.359428, - -3 + -0.298523, - -3 + -0.0788614, - 1 + 0.621573, - -1 + 0.0175043, - 3 + -0.579268, - 5 + 0.710546, - 7 + -0.511833, - 5 + 0.162637, - -7 + -0.226472, - 1 + 0.0095225, - 5 + 0.21144, - -5 + -0.582375, - 7 + 0.231257, - 1 + 0.248058, - -1 + 0.922646, - 5 + 0.00967738, - 7 + -0.00782117, - 1 + 0.930862, - 1 + 0.920455, - 7 + -0.994076, - -5 + -0.462763, - 1 + 0.627409, - 3 + 0.936991, - -7 + 0.800793, - -1 + 0.193107, - -7 + 0.703299, - -1 + 0.132479, - 1 + -0.152733, - 5 + -0.953622, - -7 + -0.997253, - 7 + 0.556477, - 3 + 0.272056, - -3 + -0.51489, - 5 + 0.398802, - 5 + 0.602265, - -5 + 0.274229, - -7 + -0.700344, - -7 + 0.0901991, - 5 + 0.0552389, - -7 + -0.536972, - -7 + -0.0797897, - 5 + 0.291342, - 3 + -0.846983, - 3 + 0.700542, - -7 + 0.192372, - 7 + -0.362972, - 5 + 0.180049, - -3 + 0.792655, - 7 + -0.662956, - 5 + -0.142891, - -3 + 0.244501, - -3 + -0.510171, - -3 + 0.321085, - -1 + 0.664982, - 7 + -0.905902, - -5 + 0.966882, - -7 + 0.735439, - 3 + 0.261407, - 3 + 0.963571, - -7 + -0.475502, - 7 + 0.78978, - 7 + 0.365208, - 3 + 0.820723, - 3 + -0.594815, - -1 + -0.942558, - -1 + -0.304459, - -3 + 0.391556, - -1 + -0.795303, - -7 + 0.136453, - -5 + -0.955505, - 1 + -0.534127, - 5 + -0.981382, - -3 + 0.557188, - -5 + -0.118641, - -3 + -0.621408, - -7 + -0.74375, - 7 + 0.0227463, - 5 + 0.112073, - -3 + 0.950711, - 5 + 0.643199, - 5 + -0.351889, - -1 + -0.221595, - -1 + 0.00700172, - 7 + 0.928086, - 5 + 0.0356548, - 3 + -0.370036, - -7 + -0.830755, - -5 + -0.222917, - 1 + -0.782772, - 1 + 0.237148, - -1 + 0.86974, - 5 + -0.537617, - -1 + -0.434889, - -7 + -0.0111739, - 7 + -0.715952, - 3 + -0.40804, - 3 + -0.360795, - 3 + 0.653046, - -3 + 0.706949, - 5 + -0.554727, - -1 + 0.183029, - -7 + -0.239732, - -5 + -0.658072, - 7 + -0.752212, - -5 + 0.293207, - 7 + -0.34722, - -7 + -0.326367, - -5 + -0.0589863, - 5 + -0.927616, - -1 + -0.866135, - 3 + 0.00235856, - -3 + -0.0437649, - -5 + -0.585851, - 1 + -0.481841, - -5 + 0.632601, - 3 + -0.874934, - -1 + -0.230124, - -5 + 0.403241, - -5 + -0.986698, - -1 + 0.968435, - -3 + -0.530127, - 1 + 0.919559, - -7 + 0.425743, - 7 + 0.123378, - 7 + -0.142707, - -7 + -0.494815, - 7 + 0.440976, - -5 + 0.890096, - -3 + -0.708126, - 7 + 0.943091, - -7 + -0.0667361, - 1 + 0.417654, - 7 + 0.25984, - -1 + 0.846645, - 3 + -0.416033, - -1 + -0.149707, - 1 + 0.889424, - 5 + 0.866725, - -3 + 0.625568, - -1 + -0.376365, - -7 + 0.362419, - -7 + 0.212156, - -1 + 0.898672, - 3 + -0.684527, - 3 + 0.350536, - -5 + -0.10858, - -7 + 0.363887, - 1 + 0.431342, - 7 + -0.426099, - -1 + -0.0357183, - 5 + 0.969688, - -7 + 0.436647, - 1 + 0.144824, - 7 + -0.689202, - -5 + -0.369132, - -7 + 0.447801, - 3 + 0.991838, - -5 + -0.95315, - -5 + -0.486236, - 7 + 0.635678, - 7 + -0.672488, - -5 + -0.134572, - -5 + -0.698523, - 3 + 0.0914014, - 5 + 0.826151, - 7 + 0.179363, - 3 + 0.905552, - 3 + 0.460779, - 3 + -0.195297, - -5 + 0.965511, - 1 + -0.98716, - 7 + 0.142015, - -7 + -0.156042, - 7 + 0.338355, - -3 + 0.630815, - -7 + -0.716086, - -5 + 0.30445, - -3 + -0.0663283, - -1 + 0.954605, - -7 + -0.516684, - -1 + 0.739518, - -5 + 0.0926331, - -1 + -0.964479, - -3 + 0.738004, - -1 + -0.0623072, - -3 + 0.994729, - -7 + -0.483703, - -5 + -0.116232, - -3 + 0.608111, - 5 + -0.169533, - 1 + 0.700974, - 7 + 0.344404, - 1 + -0.234486, - -5 + 0.753821, - 3 + 0.264031, - 1 + 0.365123, - -1 + 0.735946, - -3 + 0.075701, - 5 + 0.0457206, - -3 + 0.594172, - 1 + 0.144428, - 3 + -0.945545, - 7 + -0.49231, - -1 + 0.196516, - 7 + 0.397096, - -1 + 0.68979, - 3 + -0.283773, - -7 + -0.891651, - -7 + 0.0992016, - 3 + 0.364927, - 3 + 0.692215, - 1 + 0.902593, - -7 + 0.511356, - 1 + -0.329667, - 3 + 0.151807, - -3 + -0.469367, - -1 + 0.839886, - -3 + 0.990307, - 3 + 0.318869, - 5 + -0.74034, - -5 + -0.339204, - 1 + -0.452787, - 1 + -0.736788, - 1 + -0.248248, - 5 + 0.785201, - 7 + -0.243082, - 7 + -0.107551, - 1 + -0.729608, - -3 + -0.358678, - 1 + -0.786071, - -1 + 0.370913, - 3 + -0.398804, - 1 + 0.0692376, - -1 + -0.103113, - -1 + 0.153375, - 5 + 0.548651, - -1 + -0.306503, - 3 + -0.96292, - 5 + -0.221047, - 5 + 0.567843, - 5 + 0.41284, - 5 + 0.88284, - 1 + -0.629206, - -3 + -0.494796, - 3 + 0.424972, - 7 + 0.365256, - -5 + -0.739219, - 3 + 0.640667, - -5 + 0.633005, - -1 + 0.759701, - 5 + -0.0691017, - -5 + -0.0647394, - -5 + -0.348828, - -5 + 0.665346, - -1 + -0.135857, - 5 + 0.437672, - 5 + 0.381016, - -3 + -0.842788, - -1 + -0.85829, - -7 + 0.19863, - -5 + -0.877027, - 5 + -0.776832, - 3 + -0.591161, - 1 + 0.272311, - 1 + 0.729332, - -7 + -0.085479, - -1 + 0.867551, - -1 + 0.850484, - -7 + 0.688455, - -7 + 0.657501, - 1 + -0.781022, - 7 + -0.853813, - -5 + 0.963325, - 5 + -0.61377, - 1 + -0.946282, - -1 + -0.398061, - 7 + -0.618336, - -5 + 0.210241, - -7 + 0.245468, - 3 + -0.503244, - -7 + -0.991443, - -7 + -0.832428, - 3 + 0.633537, - 3 + -0.0513143, - -5 + -0.740331, - -5 + -0.571087, - -5 + 0.932409, - -1 + 0.310949, - 7 + 0.803959, - 1 + -0.37293, - 3 + 0.625741, - 3 + 0.335055, - -3 + -0.0665732, - -7 + -0.546747, - -3 + -0.824097, - 3 + 0.185571, - -5 + -0.963157, - 1 + -0.575186, - 5 + -0.380057, - -3 + -0.0146486, - -7 + 0.548562, - 7 + -0.294831, - 1 + 0.190966, - 3 + -0.200531, - 3 + 0.769514, - 1 + -0.758442, - 5 + -0.563297, - 3 + -0.268245, - 7 + 0.115331, - 7 + 0.635215, - 1 + -0.393521, - 1 + -0.618453, - -5 + 0.766947, - -5 + -0.89702, - 3 + -0.290726, - -1 + -0.146228, - -7 + -0.671038, - 1 + -0.598244, - 3 + -0.56863, - 7 + -0.501319, - -7 + 0.627518, - 3 + -0.389303, - -3 + 0.0746856, - 5 + -0.0666037, - 5 + -0.275337, - -5 + 0.132165, - 5 + -0.379456, - -3 + -0.232648, - -1 + -0.722393, - -3 + -0.848371, - -3 + -0.894514, - -3 + -0.52825, - -1 + 0.868408, - 5 + 0.305525, - -5 + -0.274425, - -5 + 0.22874, - 5 + 0.71816, - -1 + -0.744417, - -3 + 0.874223, - 1 + -0.0454682, - 3 + 0.998097, - -5 + 0.393407, - 5 + 0.187479, - 1 + 0.85875, - 3 + -0.930842, - 7 + -0.683711, - 3 + -0.625096, - 7 + -0.363623, - -3 + -0.478099, - 5 + 0.0397175, - -1 + 0.772844, - 1 + 0.0351828, - -5 + -0.450596, - 5 + -0.747949, - -1 + -0.901913, - 1 + -0.396489, - 7 + 0.266602, - -3 + -0.144345, - -7 + 0.357022, - -1 + 0.17734, - 3 + -0.490206, - 5 + -0.0589478, - -1 + 0.0215372, - -7 + 0.626992, - 3 + 0.805443, - 5 + -0.774861, - 7 + 0.548483, - -7 + -0.659366, - 5 + -0.399126, - 5 + 0.280639, - -1 + 0.382537, - 5 + 0.253533, - -3 + 0.484453, - -1 + -0.182041, - -7 + 0.403929, - 5 + 0.799799, - -1 + 0.872509, - -1 + 0.446505, - 1 + 0.072863, - 1 + 0.511757, - 5 + -0.0447141, - 7 + 0.418114, - 3 + -0.412815, - -7 + 0.270519, - 1 + -0.691355, - 3 + -0.197421, - 3 + -0.86134, - -5 + -0.0102158, - 1 + 0.35777, - 3 + 0.447566, - -1 + 0.0185418, - -7 + 0.78905, - 7 + 0.691196, - -5 + -0.980607, - 3 + 0.307422, - 1 + 0.612522, - 5 + -0.199466, - -1 + -0.459671, - 1 + 0.170203, - 5 + 0.345741, - -1 + 0.442178, - -5 + 0.431563, - 3 + -0.534043, - 5 + -0.76423, - 3 + 0.121284, - 3 + 0.645713, - 7 + 0.96808, - -7 + 0.488072, - 3 + -0.00669708, - 1 + -0.971889, - -1 + -0.315525, - 5 + 0.541525, - 3 + -0.787017, - -1 + 0.544075, - 3 + -0.0730717, - -5 + 0.522401, - -5 + -0.323174, - 7 + 0.526918, - 5 + -0.385761, - 5 + -0.895487, - -3 + 0.0897052, - -5 + -0.670281, - -5 + -0.182219, - -5 + 0.303178, - -5 + -0.947146, - -3 + -0.721791, - -5 + -0.626817, - 1 + -0.583032, - 3 + 0.641241, - -7 + -0.520007, - 1 + -0.425207, - -5 + 0.0712658, - 1 + 0.812682, - 1 + -0.143148, - 3 + 0.0762144, - 1 + 0.0785892, - 7 + -0.568785, - 1 + -0.59096, - 3 + 0.756584, - -1 + 0.128497, - 3 + -0.975302, - -1 + -0.757146, - 5 + 0.448678, - -7 + 0.00292395, - -3 + -0.0190117, - 7 + -0.211027, - -1 + -0.668733, - -5 + -0.447823, - 1 + -0.502645, - -7 + 0.47152, - -5 + -0.364533, - 7 + 0.745433, - -5 + 0.753726, - -1 + -0.307681, - -1 + 0.791775, - -5 + -0.151863, - -5 + 0.815651, - 7 + -0.0787568, - 1 + 0.901984, - 1 + 0.446558, - -5 + 0.035328, - 5 + -0.461488, - -5 + 0.702664, - 1 + 0.477797, - -1 + -0.0921929, - -3 + -0.231008, - 7 + 0.369765, - -7 + 0.0220315, - 5 + -0.0497525, - -7 + -0.0740606, - -1 + 0.885344, - 3 + 0.332343, - -3 + 0.220104, - -1 + 0.384649, - -5 + -0.196536, - -1 + 0.442901, - 5 + 0.226845, - -7 + 0.378706, - -7 + 0.165296, - 3 + 0.201761, - 1 + -0.666372, - -1 + -0.0523257, - 3 + 0.636851, - 5 + -0.717434, - 1 + -0.354993, - 3 + -0.720888, - -5 + -0.133448, - -5 + -0.12999, - 5 + -0.64646, - 1 + 0.66513, - 7 + 0.38796, - -3 + 0.983196, - 1 + 0.156689, - -1 + -0.598867, - 7 + 0.0891009, - -3 + 0.564803, - 5 + 0.647083, - 3 + 0.28552, - -5 + -0.550295, - 7 + -0.535946, - 3 + -0.323109, - 1 + 0.968116, - -5 + 0.670887, - 5 + 0.723851, - -7 + 0.14941, - 1 + 0.751713, - -3 + 0.379236, - -5 + 0.339108, - -5 + -0.301987, - 3 + -0.683341, - -5 + -0.359829, - 5 + -0.84713, - -3 + 0.304565, - -3 + 0.861481, - 7 + -0.877059, - -5 + 0.289428, - -7 + -0.434084, - -1 + -0.481805, - -3 + 0.932735, - -3 + -0.309733, - -3 + -0.656653, - -1 + 0.858222, - -5 + -0.945002, - -3 + -0.379574, - 1 + -0.329053, - -5 + -0.965912, - -7 + -0.0862743, - -3 + 0.564742, - 1 + 0.430712, - 7 + -0.134825, - 3 + -0.0142276, - -3 + 0.461407, - -3 + 0.237931, - 5 + 0.189721, - -5 + -0.164975, - 3 + 0.158177, - 5 + 0.761349, - 5 + -0.603701, - -1 + 0.343416, - -7 + 0.479708, - 5 + -0.54804, - 5 + 0.0522417, - -7 + -0.975275, - 3 + 0.908053, - 7 + -0.324028, - 1 + 0.20481, - -1 + 0.501097, - -3 + -0.562607, - -5 + 0.555231, - 1 + -0.158267, - 3 + -0.0687857, - 1 + 0.511831, - -5 + -0.607408, - 1 + 0.360143, - -1 + 0.437194, - -3 + -0.092719, - 7 + 0.66663, - -7 + 0.610324, - 1 + 0.477642, - -3 + -0.690053, - 5 + -0.239834, - 5 + 0.430824, - -1 + -0.74709, - -7 + 0.666542, - -3 + 0.787307, - 5 + 0.12119, - -5 + 0.468506, - -7 + -0.655536, - -3 + -0.362963, - -7 + -0.444575, - -5 + -0.813438, - 3 + -0.658917, - -7 + -0.846612, - -5 + 0.47478, - 1 + -0.486082, - -7 + 0.325601, - -3 + 0.10135, - 3 + 0.616988, - -5 + 0.030061, - 1 + 0.546106, - -3 + -0.107568, - 1 + -0.526698, - 1 + -0.402568, - 1 + 0.476488, - 5 + -0.876816, - -7 + -0.814004, - -5 + -0.742022, - 1 + 0.396799, - 3 + 0.302924, - 5 + -0.330856, - 3 + -0.20346, - 1 + -0.0134361, - 3 + 0.603609, - 5 + -0.531407, - 7 + 0.711484, - -1 + 0.520469, - -1 + 0.148813, - 3 + 0.0432309, - 1 + 0.669779, - 1 + -0.428549, - -3 + 0.260938, - -3 + 0.941317, - -5 + -0.780941, - -3 + -0.747831, - 1 + -0.998692, - -5 + 0.892504, - -1 + 0.62686, - 7 + 0.940684, - -1 + -0.157277, - -3 + -0.215904, - 3 + -0.149222, - -3 + -0.876603, - -7 + -0.20916, - 3 + -0.984649, - 7 + -0.60173, - -1 + -0.806134, - -1 + 0.209397, - 1 + 0.310198, - 5 + -0.348507, - -3 + 0.966827, - 1 + -0.781644, - -3 + -0.417686, - 1 + -0.618801, - 7 + 0.862017, - -3 + -0.405402, - -7 + 0.125069, - -7 + 0.815787, - -5 + 0.135567, - -5 + 0.652664, - -5 + 0.509215, - -3 + -0.247757, - -3 + -0.697007, - 7 + -0.760593, - 3 + -0.772638, - -5 + 0.870941, - -1 + 0.864873, - -1 + -0.695855, - 3 + -0.952328, - 7 + -0.984213, - -5 + -0.825547, - 7 + -0.937066, - 1 + -0.030252, - 7 + -0.370309, - -1 + 0.976445, - -1 + 0.105839, - -7 + -0.151788, - 5 + 0.329837, - 5 + 0.484323, - 3 + -0.185114, - 1 + -0.450171, - 7 + -0.174316, - 7 + -0.840168, - -3 + -0.188744, - 7 + 0.4487, - -5 + 0.0857224, - 7 + 0.836002, - -3 + -0.180574, - 7 + 0.933189, - -3 + 0.850465, - -3 + 0.217683, - 7 + -0.504985, - 3 + -0.244207, - -3 + 0.827852, - -3 + 0.231895, - -3 + -0.210397, - -5 + 0.225256, - -5 + -0.424323, - -3 + 0.584223, - 5 + -0.21417, - 7 + 0.0492111, - -5 + 0.717212, - 3 + 0.127463, - 5 + -0.412335, - -3 + -0.235105, - 1 + -0.142685, - 5 + -0.499895, - 3 + -0.081105, - -5 + -0.145618, - 7 + -0.823428, - 5 + -0.860577, - 3 + -0.433851, - 1 + -0.917788, - 1 + 0.0316082, - -7 + 0.825787, - -7 + -0.453454, - -7 + 0.00504467, - -3 + 0.495271, - 3 + 0.0318126, - 5 + -0.344928, - -1 + -0.550629, - -7 + -0.352606, - -1 + -0.122732, - -3 + 0.159171, - 3 + 0.261004, - 3 + -0.691171, - 3 + -0.746879, - 1 + 0.626657, - -3 + 0.0388675, - -1 + 0.51117, - 5 + -0.673213, - -3 + 0.864677, - -7 + -0.726019, - 7 + -0.729394, - -5 + 0.330155, - -7 + -0.0177368, - -7 + -0.300845, - 1 + 0.615713, - 5 + 0.00178831, - 1 + 0.0232089, - 7 + 0.0501066, - -5 + -0.620755, - 1 + -0.446627, - -1 + -0.417687, - 7 + 0.871591, - 7 + -0.750383, - 7 + 0.402812, - 1 + -0.147176, - -5 + 0.443187, - 3 + 0.286959, - 5 + 0.608735, - -3 + 0.380043, - 3 + -0.175819, - 7 + -0.829562, - -7 + -0.79598, - -1 + -0.192267, - -5 + -0.110678, - 1 + 0.6394, - 1 + -0.0846046, - 1 + 0.714054, - 5 + 0.811509, - 1 + -0.398193, - 7 + 0.760568, - -1 + -0.452345, - -5 + 0.687367, - 5 + -0.318674, - -3 + 0.324117, - -7 + 0.236211, - -5 + 0.649759, - 7 + -0.548562, - 3 + 0.0579074, - -3 + 0.967526, - 5 + 0.205966, - 3 + -0.575908, - -5 + -0.137605, - 7 + 0.927195, - -5 + 0.454236, - 5 + -0.445633, - 3 + 0.770301, - 7 + -0.281772, - -1 + -0.810031, - -5 + 0.104421, - -3 + 0.920684, - -1 + 0.868938, - 3 + -0.0053164, - -3 + -0.718631, - -5 + 0.455326, - 5 + -0.820026, - -5 + -0.768273, - 3 + 0.0752762, - 5 + 0.714693, - 7 + -0.17771, - -3 + 0.42292, - -1 + -0.0175617, - 5 + 0.528179, - 3 + 0.568353, - 5 + -0.587159, - 1 + 0.801071, - 7 + 0.0826319, - -3 + 0.0275306, - -5 + 0.676104, - -7 + 0.583124, - -3 + 0.218791, - -7 + 0.227567, - -3 + -0.430536, - 5 + 0.654163, - 3 + -0.467692, - 7 + -0.155845, - -7 + 0.089255, - -3 + 0.938383, - -3 + 0.906627, - 7 + 0.950595, - -5 + -0.489709, - 7 + 0.671718, - 7 + 0.164742, - 3 + -0.852821, - 7 + 0.582895, - -3 + -0.742699, - 1 + -0.0381558, - 1 + 0.752823, - 1 + 0.749102, - -1 + 0.403834, - -3 + -0.442988, - 3 + 0.769955, - -1 + 0.729227, - 3 + -0.464394, - -1 + 0.982971, - 5 + 0.32225, - 3 + 0.707018, - 7 + 0.284523, - -5 + -0.390641, - 7 + 0.838552, - 1 + -0.261646, - 7 + 0.763129, - -1 + 0.26582, - 7 + 0.47961, - 5 + 0.195016, - -1 + 0.442942, - 1 + -0.566928, - 1 + -0.885894, - 3 + 0.809517, - 7 + -0.794782, - 1 + 0.396051, - -1 + -0.717371, - -7 + -0.372855, - -3 + -0.435502, - -5 + 0.486243, - -7 + 0.226385, - -3 + -0.674962, - 5 + -0.818546, - -1 + 0.662066, - -3 + 0.371445, - 7 + -0.181262, - -7 + -0.96998, - 7 + -0.243668, - 1 + -0.622788, - -3 + -0.934349, - -7 + -0.531977, - 7 + 0.913129, - -5 + 0.0873188, - -5 + -0.802866, - 5 + 0.176445, - 7 + 0.931233, - -1 + -0.345816, - -7 + -0.698489, - 3 + -0.0641756, - -1 + 0.20042, - 3 + -0.225253, - 7 + 0.611709, - -3 + -0.526143, - 5 + -0.494852, - -7 + -0.543889, - 5 + -0.865676, - 7 + -0.361067, - -7 + 0.157247, - -1 + -0.148807, - -1 + 0.754306, - -3 + -0.232635, - 1 + 0.285416, - 5 + 0.977439, - 3 + -0.545843, - -5 + -0.684446, - 5 + 0.00538877, - -1 + -0.416723, - 1 + 0.455052, - -1 + -0.694408, - -5 + 0.5697, - -3 + 0.239728, - 7 + -0.157425, - -3 + 0.307093, - 3 + 0.598074, - -3 + -0.192316, - -5 + 0.683009, - 1 + -0.276813, - 7 + -0.0605859, - 7 + -0.160651, - 1 + 0.745574, - 5 + -0.595225, - -3 + 0.679057, - -7 + 0.681067, - -3 + 0.254237, - 3 + -0.309311, - -7 + 0.537294, - 7 + -0.527087, - -1 + -0.914636, - -5 + 0.3696, - -5 + 0.758544, - -3 + 0.615554, - -3 + -0.800559, - 5 + 0.857245, - -7 + 0.911095, - -7 + -0.476043, - 1 + 0.286482, - -7 + -0.106087, - -5 + 0.396264, - -5 + -0.897017, - 1 + -0.963821, - -7 + -0.566173, - -5 + 0.578676, - 1 + 0.813064, - 7 + 0.491473, - 7 + -0.270985, - 5 + 0.132949, - 5 + 0.0161494, - 1 + 0.474008, - -5 + 0.796655, - -3 + -0.63918, - 3 + -0.967985, - 7 + 0.879643, - -1 + 0.214509, - -5 + 0.00227151, - 5 + 0.0762274, - 3 + 0.59941, - 3 + 0.340686, - -5 + -0.518312, - -5 + -0.6534, - -3 + -0.133582, - 1 + 0.772737, - -3 + -0.796512, - -1 + -0.232784, - 7 + -0.567475, - -5 + -0.612535, - -5 + -0.743451, - -5 + 0.922795, - 7 + -0.360325, - -5 + 0.664416, - -7 + 0.537588, - -7 + 0.090611, - -1 + -0.411909, - 3 + -0.926915, - 7 + 0.395344, - -7 + -0.661518, - -3 + -0.170838, - 7 + -0.357837, - -5 + 0.471491, - -3 + -0.382249, - -3 + -0.52305, - -1 + -0.97666, - 3 + 0.0582765, - -1 + -0.0656394, - 7 + -0.406727, - 1 + 0.00918714, - -5 + -0.137935, - 7 + -0.614004, - 1 + -0.979364, - -7 + 0.416733, - -1 + -0.759126, - -7 + -0.370293, - -7 + -0.100497, - 1 + 0.869131, - -3 + 0.164885, - -1 + -0.0975662, - -7 + 0.186475, - 3 + -0.918565, - 3 + -0.0801415, - 7 + -0.100654, - -7 + -0.0564053, - -5 + -0.266266, - 1 + -0.250558, - -7 + 0.00064827, - 1 + 0.0900851, - -5 + -0.598895, - -3 + -0.300177, - -3 + -0.733429, - -1 + 0.644141, - -7 + 0.473614, - -1 + -0.641922, - 5 + -0.771156, - 1 + -0.408759, - 5 + 0.12316, - -5 + 0.293248, - 1 + -0.878825, - -7 + -0.414203, - 1 + -0.158712, - 7 + 0.739709, - -7 + -0.86936, - 3 + 0.642115, - 3 + -0.385535, - -7 + 0.143439, - -3 + 0.698413, - 5 + -0.678345, - 5 + 0.565038, - 5 + 0.815733, - 5 + -0.707831, - -7 + -0.849665, - 3 + -0.293231, - 3 + 0.511878, - -7 + 0.0476101, - -5 + -0.612903, - 5 + 0.912856, - -1 + -0.229084, - -1 + -0.228542, - -1 + 0.543728, - 7 + -0.254476, - 5 + -0.538093, - 7 + 0.873386, - -7 + -0.797387, - 1 + 0.472407, - -5 + 0.952256, - -7 + 0.795923, - -1 + -0.0898826, - -3 + 0.851045, - 3 + 0.649821, - -5 + -0.623912, - -1 + -0.232825, - -5 + -0.293336, - 3 + -0.175406, - 7 + -0.126623, - -3 + -0.458458, - -1 + -0.716308, - 3 + -0.442831, - 5 + -0.240306, - -3 + 0.62798, - 7 + -0.901771, - -1 + 0.980463, - 3 + -0.502372, - -7 + -0.861722, - -1 + 0.827093, - 1 + 0.12554, - -3 + 0.270311, - -5 + 0.348095, - -1 + 0.913085, - 7 + 0.957399, - 7 + 0.340458, - 5 + 0.0422461, - -1 + -0.369125, - -3 + 0.43044, - 7 + -0.632377, - -1 + -0.90659, - 1 + -0.89239, - 7 + 0.828316, - 5 + 0.824523, - -7 + -0.0536567, - 1 + -0.0399239, - 1 + 0.197041, - -1 + -0.554157, - -5 + 0.0431199, - -3 + -0.304071, - -3 + -0.331796, - 5 + 0.822257, - 3 + -0.638709, - 3 + 0.639501, - -1 + -0.549931, - -5 + 0.893208, - 3 + 0.791099, - 7 + 0.153618, - 3 + -0.838246, - -7 + 0.475597, - 1 + -0.354901, - -7 + -0.761264, - -1 + 0.106035, - -3 + -0.481434, - -1 + 0.234136, - 5 + 0.375285, - -7 + -0.539323, - -3 + -0.671027, - -3 + 0.212608, - -5 + 0.992672, - -3 + -0.655146, - -1 + -0.675066, - -1 + 0.944776, - 5 + 0.653261, - 7 + 0.703227, - -1 + -0.329846, - -3 + -0.29662, - 5 + 0.0306179, - 3 + 0.308382, - 5 + -0.37852, - 1 + 0.569875, - -1 + 0.262195, - -7 + 0.65172, - -1 + -0.324076, - -1 + -0.592955, - 3 + 0.330534, - -7 + 0.236835, - 7 + -0.16363, - 5 + -0.350766, - 7 + 0.33076, - -3 + 0.713702, - 7 + 0.986953, - 1 + -0.484957, - 1 + 0.232317, - 1 + -0.241183, - 1 + -0.652168, - -7 + -0.969083, - -3 + -0.00466762, - 7 + -0.643621, - 5 + -0.512406, - 3 + 0.559345, - -1 + 0.876841, - 1 + 0.0247327, - -5 + 0.579806, - -7 + -0.45585, - -1 + -0.978404, - -3 + -0.211921, - 3 + 0.0595151, - -5 + -0.772737, - 1 + 0.701463, - 7 + -0.055659, - 1 + -0.434081, - -7 + -0.748698, - 5 + -0.742137, - 5 + -0.0588123, - -5 + 0.446934, - -7 + -0.9576, - -1 + -0.910423, - -1 + -0.798973, - -7 + 0.643822, - -3 + -0.240149, - 1 + -0.366265, - 1 + -0.168219, - -7 + -0.030838, - 7 + -0.591915, - -3 + -0.92018, - 7 + 0.57597, - -1 + 0.351344, - -7 + 0.647625, - 5 + -0.537432, - -5 + -0.69753, - 3 + 0.489766, - -3 + -0.263308, - 1 + 0.40383, - -1 + 0.0716793, - -3 + 0.0739884, - 7 + -0.543397, - -5 + 0.313842, - -1 + -0.290457, - -3 + -0.84267, - -3 + -0.568324, - -3 + -0.18694, - 7 + 0.544842, - 5 + 0.340199, - -5 + -0.465435, - 5 + 0.386054, - 3 + -0.248471, - -1 + -0.536871, - -3 + -0.00456425, - 5 + 0.30784, - -7 + 0.567282, - -3 + -0.689596, - 7 + -0.973479, - -5 + -0.292588, - 1 + -0.0853992, - 1 + 0.54008, - 1 + 0.933126, - 7 + 0.308498, - -5 + 0.933511, - -1 + -0.616556, - 1 + 0.5256, - -3 + 0.11786, - -1 + 0.742156, - -1 + 0.169955, - -1 + -0.96657, - -3 + 0.556796, - -1 + -0.865691, - -3 + -0.238262, - -5 + 0.647911, - 3 + 0.359834, - 7 + 0.613736, - 1 + 0.507745, - -7 + -0.892512, - 3 + 0.444704, - 7 + -0.939748, - -1 + 0.672554, - -7 + 0.136662, - -7 + 0.565658, - 3 + 0.942443, - -1 + 0.0449975, - 1 + 0.92684, - 3 + -0.297685, - 5 + 0.568496, - 3 + -0.144333, - 1 + -0.166059, - 5 + 0.245617, - -7 + 0.0561295, - 5 + -0.053852, - 5 + 0.796947, - -5 + 0.352517, - -5 + 0.967329, - 5 + -0.892274, - 7 + -0.335576, - -1 + -0.545664, - 5 + 0.768217, - -7 + -0.188918, - -7 + 0.285642, - -3 + -0.467917, - -1 + 0.356141, - -7 + -0.382192, - -5 + 0.0410403, - -3 + 0.593099, - -1 + -0.407076, - 7 + 0.399012, - 3 + -0.215368, - 5 + 0.00567285, - 3 + 0.833758, - 7 + -0.469107, - -3 + 0.84339, - -1 + -0.648244, - -1 + 0.45709, - 5 + 0.221697, - -3 + 0.2979, - -1 + -0.801441, - 5 + 0.358525, - 5 + 0.0155232, - 7 + -0.613239, - -3 + 0.770038, - -3 + 0.386763, - -1 + -0.977012, - -5 + 0.0247041, - 3 + -0.774763, - 1 + -0.269862, - 3 + 0.598317, - -7 + -0.604919, - -5 + -0.295425, - -3 + -0.501016, - 5 + 0.893051, - -7 + 0.592268, - -1 + -0.135156, - 5 + -0.766252, - -3 + 0.445672, - 5 + 0.612924, - -5 + 0.107889, - -1 + 0.306333, - -3 + -0.720024, - 1 + -0.256542, - -5 + -0.644907, - -1 + -0.198375, - -1 + 0.530318, - 7 + 0.865427, - -5 + -0.186188, - 3 + 0.15118, - 5 + 0.652307, - 1 + 0.908472, - 3 + 0.747761, - -1 + -0.654492, - 1 + -0.454527, - 5 + 0.682724, - -5 + 0.372245, - 7 + 0.871819, - 3 + -0.80367, - -1 + 0.448117, - -1 + 0.948526, - -7 + -0.348271, - 7 + -0.927127, - 1 + 0.449701, - -1 + -0.680563, - 1 + 0.892784, - 1 + -0.0924386, - -1 + -0.959661, - 7 + -0.081394, - 5 + -0.963336, - -5 + 0.805157, - -7 + -0.285785, - -7 + -0.592211, - -5 + 0.413432, - -1 + -0.723101, - -3 + -0.0432179, - -3 + 0.357774, - 3 + -0.969629, - -7 + 0.840992, - 7 + -0.0670359, - 1 + -0.230027, - -7 + 0.00539775, - -1 + 0.992222, - -5 + 0.508197, - -1 + -0.0701932, - -7 + -0.916136, - 1 + 0.121754, - 3 + 0.979212, - 5 + 0.710977, - -3 + -0.444553, - 1 + 0.775755, - 1 + -0.731095, - -5 + -0.962054, - -7 + -0.137716, - 1 + 0.0744596, - -3 + -0.298853, - 3 + -0.287877, - 7 + -0.537653, - 7 + -0.370057, - 5 + 0.558642, - -1 + -0.306097, - 5 + 0.298301, - 5 + 0.890951, - 7 + 0.461226, - 5 + -0.273165, - -3 + 0.767864, - -1 + -0.427128, - -7 + 0.0742497, - 3 + -0.628171, - -1 + -0.383706, - -5 + 0.926895, - -3 + -0.111893, - -1 + -0.568481, - 3 + 0.982367, - 3 + -0.746265, - 7 + 0.602531, - 5 + 0.639663, - -5 + 0.640932, - 3 + -0.339199, - -7 + -0.872224, - 7 + 0.493771, - 5 + -0.0426846, - 7 + -0.222289, - 7 + -0.802753, - 5 + -0.998975, - 5 + 0.739618, - 5 + -0.949418, - -7 + -0.348646, - 7 + -0.122117, - -3 + -0.786274, - -1 + -0.910026, - 5 + -0.521515, - 5 + 0.786492, - -3 + -0.956601, - -7 + -0.935189, - -1 + 0.816024, - 5 + 0.675236, - 5 + 0.0495799, - -7 + 0.738648, - 7 + 0.424409, - 3 + -0.438266, - -7 + -0.491474, - 1 + 0.22495, - -5 + -0.0235629, - -3 + 0.479672, - -1 + 0.84058, - -5 + -0.166951, - 5 + -0.0577841, - -1 + -0.642721, - -1 + 0.723607, - 1 + -0.873909, - 3 + -0.888751, - -1 + -0.370589, - -3 + -0.0403842, - 3 + 0.564038, - 1 + -0.590923, - -1 + -0.301823, - 3 + -0.525907, - -7 + -0.700129, - -7 + -0.286343, - -1 + -0.746766, - -1 + 0.510312, - -7 + 0.68781, - -1 + -0.071507, - 5 + 0.20512, - 7 + 0.193939, - -3 + 0.0940258, - -1 + -0.815724, - 7 + 0.914182, - 3 + 0.582396, - -5 + 0.182791, - 5 + -0.169328, - 5 + -0.539398, - 1 + -0.544711, - -7 + -0.29523, - -7 + -0.220718, - -7 + -0.424836, - -1 + -0.583509, - 5 + -0.998364, - 7 + -0.624936, - -3 + 0.682019, - 7 + -0.0926723, - -3 + -0.596477, - -1 + -0.380871, - -3 + -0.215605, - 7 + -0.0981703, - -7 + -0.181927, - -1 + 0.668344, - 1 + 0.550972, - 1 + -0.362117, - -1 + 0.434212, - -7 + 0.529025, - 5 + -0.166071, - -3 + 0.473601, - 5 + 0.555215, - 7 + 0.878004, - 3 + 0.90408, - -5 + 0.504969, - -3 + -0.667642, - -5 + -0.538538, - 5 + 0.188161, - -1 + 0.914107, - 3 + 0.472097, - 7 + 0.510842, - -5 + 0.985461, - -7 + -0.394255, - -5 + 0.890095, - 5 + 0.634067, - -7 + -0.944812, - -1 + -0.199624, - -1 + -0.447444, - 3 + -0.228946, - 7 + 0.22322, - -5 + 0.654362, - -5 + -0.200935, - 3 + -0.833657, - -7 + 0.802499, - 1 + -0.704644, - 5 + -0.415231, - 5 + -0.488818, - -5 + -0.405574, - -3 + -0.551587, - 3 + -0.143344, - -5 + 0.992058, - 7 + 0.973004, - -1 + 0.899068, - -1 + -0.201666, - -5 + -0.327868, - 3 + -0.727053, - -7 + 0.268601, - -7 + 0.109424, - 7 + -0.950672, - 1 + 0.76586, - -3 + 0.875399, - 7 + 0.0168127, - -5 + -0.751942, - 1 + 0.455423, - 5 + -0.133098, - 5 + 0.576325, - -5 + -0.760309, - -7 + -0.273288, - -7 + -0.766843, - 1 + -0.862775, - 7 + -0.885211, - 7 + 0.696724, - -1 + 0.0780369, - 1 + 0.275855, - -5 + 0.21323, - -1 + 0.30191, - 5 + -0.129398, - -3 + -0.659394, - 7 + -0.537345, - -5 + 0.726379, - 1 + -0.351187, - 1 + 0.413273, - -7 + -0.460414, - -1 + 0.780082, - 7 + -0.750839, - 7 + 0.140123, - -1 + 0.431409, - -1 + 0.467309, - 7 + -0.189717, - -5 + -0.619566, - 1 + -0.664491, - 5 + -0.259023, - -3 + 0.956683, - -3 + -0.749516, - -5 + 0.131912, - -7 + 0.20736, - -7 + -0.370862, - 3 + -0.38448, - -7 + -0.0683076, - 5 + -0.0808511, - 3 + -0.716107, - -7 + 0.282494, - -5 + 0.690208, - 5 + -0.0140297, - 3 + -0.0253589, - -1 + -0.286539, - 1 + 0.632755, - 3 + 0.678366, - 7 + -0.298717, - 7 + 0.931446, - 3 + -0.000155271, - 5 + 0.593412, - -1 + -0.237465, - 3 + 0.495449, - 1 + 0.854041, - 7 + 0.417438, - 5 + 0.130533, - 3 + 0.11828, - 7 + -0.492641, - -3 + 0.31251, - -1 + -0.746348, - -3 + 0.00667295, - -7 + -0.849606, - -1 + -0.621633, - 5 + -0.780689, - -7 + 0.325068, - -1 + 0.14253, - -5 + -0.467373, - -7 + -0.215694, - -5 + 0.473324, - -5 + -0.0749665, - 1 + 0.0177372, - 1 + 0.874646, - -3 + -0.548775, - -5 + -0.644173, - 7 + 0.890543, - 1 + -0.258939, - -1 + -0.381203, - 7 + -0.989668, - 7 + -0.370075, - -7 + 0.0443089, - 7 + -0.655745, - -1 + 0.576317, - 1 + -0.867409, - -1 + -0.242211, - 3 + -0.414673, - -3 + -0.668824, - -7 + -0.880169, - -7 + -0.337623, - 3 + 0.421604, - 5 + 0.213655, - 5 + -0.797275, - 5 + 0.0784746, - -7 + 0.29279, - 5 + -0.266808, - 5 + -0.847968, - 3 + 0.627592, - 5 + 0.100925, - -7 + -0.836569, - -5 + -0.484448, - -7 + -0.260665, - 7 + 0.98659, - 5 + 0.811925, - 5 + -0.263092, - 3 + -0.423208, - 3 + -0.219005, - -7 + -0.0725037, - -1 + -0.814871, - 3 + 0.181891, - -3 + 0.309198, - 1 + 0.951535, - -7 + 0.694465, - -3 + 0.851734, - -3 + 0.240617, - 7 + -0.545582, - 7 + -0.582447, - -3 + -0.895393, - 1 + -0.607017, - 5 + 0.575812, - 7 + 0.0485804, - -5 + -0.609581, - 3 + -0.991071, - 1 + -0.69817, - -1 + 0.612983, - 7 + 0.124632, - 1 + -0.934992, - -5 + 0.629333, - -1 + -0.479678, - -7 + -0.690851, - 3 + 0.0123024, - 3 + 0.579883, - -7 + -0.797862, - 3 + 0.930494, - 5 + 0.0959856, - 5 + 0.799511, - 3 + -0.702544, - 3 + 0.863534, - -7 + 0.723902, - 3 + -0.925485, - -3 + 0.0838314, - 5 + -0.539124, - -7 + 0.795782, - -7 + -0.508871, - 3 + -0.666186, - -5 + -0.437818, - 1 + 0.430824, - -1 + 0.890288, - 3 + 0.0323077, - -5 + -0.451717, - 1 + -0.994217, - -5 + -0.889329, - 1 + -0.154296, - 3 + -0.139546, - 3 + 0.783946, - -1 + 0.843542, - -7 + 0.742655, - 3 + 0.0644047, - -3 + 0.707173, - 7 + -0.292937, - -1 + 0.978045, - 3 + -0.495493, - 1 + 0.576421, - -5 + 0.830068, - -7 + -0.7389, - -3 + 0.545496, - 5 + 0.525718, - -5 + 0.491613, - -5 + 0.0724149, - -5 + -0.581892, - -5 + 0.148299, - -3 + -0.0143521, - -7 + 0.224096, - -1 + -0.58379, - -7 + -0.746189, - 3 + 0.678161, - 5 + -0.60352, - 1 + -0.0123151, - -3 + 0.935789, - 7 + 0.146463, - 5 + 0.0833464, - -5 + 0.0973773, - 1 + -0.634221, - 5 + -0.199689, - -5 + -0.977316, - 1 + -0.468532, - -3 + 0.912407, - -1 + 0.618525, - -5 + 0.641828, - -3 + 0.161639, - 3 + -0.521444, - 1 + 0.217545, - -3 + 0.776886, - -5 + -0.0861521, - 7 + -0.684462, - 3 + 0.025459, - 5 + -0.588791, - 3 + -0.968869, - -5 + 0.936218, - 5 + -0.962381, - 1 + 0.102731, - 7 + 0.487412, - 5 + -0.586347, - -5 + 0.483033, - 3 + 0.147303, - 7 + 0.545176, - -1 + -0.346122, - -3 + -0.550012, - -3 + 0.175068, - 5 + -0.32015, - 1 + 0.524341, - -7 + 0.645118, - -5 + -0.940018, - -1 + -0.97908, - -7 + -0.515108, - -3 + 0.367395, - 1 + 0.545659, - 1 + -0.286328, - 5 + -0.58779, - 1 + 0.337098, - 7 + -0.330973, - -3 + 0.374149, - 7 + -0.0352384, - -3 + 0.100802, - -3 + -0.496571, - 5 + -0.780307, - 1 + -0.478443, - 5 + 0.67526, - 7 + -0.425565, - 7 + 0.754558, - -7 + -0.775828, - 5 + 0.655701, - 7 + -0.438407, - 3 + -0.775985, - 7 + -0.666725, - -1 + 0.797674, - 1 + -0.749333, - -7 + 0.194764, - -7 + 0.625181, - -5 + -0.060977, - -5 + 0.643178, - 3 + -0.933005, - -3 + -0.998434, - 3 + 0.713815, - -3 + -0.574046, - -3 + -0.0416154, - -7 + 0.296629, - 7 + 0.191779, - -7 + 0.833033, - -3 + 0.487987, - -3 + -0.575328, - 5 + 0.496461, - 3 + 0.589905, - 7 + -0.924183, - -1 + 0.696718, - 5 + -0.875373, - -3 + 0.0319824, - 5 + -0.207871, - 3 + 0.177233, - -3 + -0.761711, - 1 + 0.401589, - 7 + 0.538526, - 7 + -0.320289, - -3 + -0.281917, - -5 + -0.547839, - -7 + -0.322797, - -5 + -0.605992, - 5 + 0.785395, - -1 + 0.0550308, - -5 + 0.511285, - -7 + 0.402531, - -7 + -0.464181, - 5 + -0.160938, - -5 + -0.735561, - -5 + 0.0996571, - 7 + 0.593118, - 7 + -0.0328994, - -5 + -0.98964, - 3 + 0.205471, - -1 + 0.200857, - 7 + -0.771514, - 1 + -0.587245, - 3 + 0.26805, - -3 + 0.784424, - -5 + -0.963779, - 7 + -0.505932, - -1 + -0.171588, - -1 + 0.670593, - -7 + 0.301767, - 5 + 0.0138393, - -1 + -0.984387, - -1 + 0.0391519, - -3 + -0.222087, - 7 + 0.0864488, - 5 + -0.4927, - 7 + 0.257574, - -3 + 0.232144, - -7 + 0.327466, - 1 + -0.464061, - -3 + -0.275329, - -1 + -0.0648923, - -7 + 0.674159, - -7 + -0.413218, - -7 + -0.692417, - 1 + -0.762459, - -5 + -0.913253, - -7 + 0.36255, - -5 + 0.917413, - -7 + 0.556944, - 7 + 0.869794, - -5 + 0.599393, - -7 + -0.957509, - 3 + -0.0653876, - -3 + 0.542317, - 7 + -0.919778, - -1 + 0.389195, - 1 + -0.694826, - -1 + -0.684451, - 5 + -0.232338, - 7 + 0.107159, - 1 + -0.408376, - 3 + -0.669585, - 5 + 0.257082, - 5 + 0.831891, - -1 + 0.211606, - -5 + -0.384855, - 7 + 0.020007, - -5 + -0.428625, - -3 + -0.0360878, - 5 + -0.848203, - 3 + 0.0254734, - -3 + 0.749542, - -7 + -0.804563, - -1 + -0.0972806, - 1 + -0.248763, - -5 + -0.480906, - -7 + 0.494774, - -7 + 0.809284, - 1 + 0.892301, - 3 + -0.866702, - 7 + 0.549121, - -7 + -0.807113, - 5 + 0.817796, - -3 + -0.258985, - -3 + -0.652257, - 1 + 0.857754, - 1 + 0.602559, - -3 + 0.459551, - -5 + 0.12109, - 7 + 0.228169, - 3 + 0.268535, - -5 + -0.511365, - 3 + 0.473797, - -3 + 0.789188, - 5 + -0.233201, - -1 + 0.337202, - 3 + 0.0872898, - -5 + -0.577231, - -3 + -0.794605, - -3 + 0.948282, - 1 + 0.86739, - 7 + -0.853303, - 1 + 0.585277, - -5 + -0.0480538, - 3 + 0.131517, - -5 + 0.256086, - 3 + -0.220017, - -1 + 0.968746, - 1 + -0.866085, - 1 + -0.75045, - 3 + 0.103057, - 3 + -0.280213, - 7 + -0.915525, - 1 + 0.910469, - -1 + 0.122471, - 7 + 0.756213, - -1 + -0.979998, - -3 + -0.526045, - -3 + -0.515105, - -3 + 0.191857, - -5 + 0.861293, - -5 + 0.557644, - -7 + 0.955665, - -7 + -0.218954, - -5 + 0.843849, - 3 + 0.700339, - -5 + 0.308848, - 5 + -0.671504, - -7 + -0.977673, - -3 + -0.243973, - -7 + -0.21181, - 5 + -0.722984, - 1 + -0.679969, - 1 + -0.943541, - -5 + 0.705531, - -5 + -0.327772, - 3 + -0.462895, - -3 + 0.0536484, - -5 + -0.181505, - 1 + -0.89014, - 3 + -0.24572, - 3 + -0.890222, - -3 + 0.668824, - -1 + -0.785433, - -5 + -0.835302, - 7 + -0.464588, - -3 + -0.970526, - -7 + -0.881556, - 3 + -0.690873, - -7 + 0.627452, - 7 + 0.162041, - 1 + 0.574909, - -3 + -0.436167, - -7 + -0.415736, - -1 + -0.330565, - 3 + -0.0637465, - 1 + -0.952135, - 7 + 0.820211, - 1 + 0.670167, - 3 + -0.227245, - 3 + 0.784935, - -7 + -0.114356, - -7 + -0.79073, - -7 + -0.0845568, - -3 + 0.0352457, - -1 + 0.23913, - 3 + -0.319363, - -1 + -0.784674, - 7 + 0.182406, - -3 + -0.208943, - 1 + -0.0539068, - 5 + -0.793545, - 7 + -0.926668, - -3 + -0.327488, - -5 + 0.286006, - 5 + 0.755716, - -1 + 0.396711, - -5 + 0.50953, - -5 + 0.0396668, - -7 + 0.294158, - 7 + 0.191498, - 1 + -0.157408, - 1 + -0.341843, - 1 + 0.34502, - 1 + 0.892611, - 7 + 0.205394, - -3 + 0.558871, - -5 + 0.209696, - -1 + 0.119176, - 3 + -0.0071817, - -5 + -0.177535, - 3 + 0.909066, - -3 + -0.741923, - 1 + -0.539941, - -3 + -0.037078, - 1 + 0.791042, - -5 + 0.482362, - -5 + -0.0119576, - -3 + 0.52501, - -7 + 0.76094, - -7 + 0.813217, - 7 + 0.985842, - 3 + -0.529906, - 1 + -0.423377, - -3 + 0.0981717, - -3 + -0.223135, - -5 + -0.61793, - 5 + -0.559953, - 5 + -0.469591, - -1 + 0.342377, - 3 + -0.0782716, - 7 + -0.684588, - 7 + 0.389739, - 5 + 0.10658, - -5 + 0.922608, - 7 + 0.602939, - -1 + 0.464956, - 3 + -0.789037, - 5 + 0.429394, - 3 + -0.550469, - 1 + -0.900731, - -3 + -0.623247, - -7 + -0.650424, - -1 + 0.131661, - -1 + -0.806985, - 1 + 0.960326, - -1 + -0.193632, - 7 + 0.582939, - -1 + -0.468436, - 5 + 0.0584084, - -3 + 0.989501, - -7 + -0.836051, - -7 + 0.494241, - -3 + 0.338635, - -1 + -0.648491, - -3 + 0.319444, - 5 + -0.976509, - -7 + -0.560152, - 1 + 0.968145, - -3 + 0.506876, - 1 + -0.446687, - -3 + -0.557403, - -5 + 0.386343, - 7 + -0.26601, - 5 + 0.768097, - -1 + -0.862516, - 3 + 0.092811, - 1 + 0.688699, - -7 + 0.437148, - -7 + 0.819611, - -5 + 0.433439, - -3 + 0.0525214, - 7 + -0.875873, - -1 + -0.318693, - -7 + 0.941041, - 3 + -0.938497, - -5 + -0.700787, - -5 + -0.208713, - -1 + -0.926069, - 5 + 0.763435, - -3 + -0.753673, - -3 + -0.436892, - 5 + 0.25309, - 3 + 0.376517, - 7 + 0.234089, - -1 + 0.602584, - 7 + -0.729457, - -5 + 0.528713, - 5 + -0.0616122, - -5 + 0.485624, - -3 + 0.341517, - 3 + -0.364478, - 7 + 0.124957, - -1 + -0.27282, - 5 + 0.606241, - -7 + 0.409408, - -7 + 0.326685, - 1 + -0.778263, - -5 + -0.479604, - -5 + 0.454517, - 5 + -0.236371, - -5 + -0.208087, - -7 + -0.336902, - -3 + 0.704184, - -1 + -0.607403, - -1 + 0.790341, - -1 + -0.458402, - 3 + 0.29028, - -5 + 0.608615, - -5 + 0.064577, - 7 + -0.440438, - 7 + 0.518133, - 3 + -0.400959, - -5 + 0.957821, - -3 + 0.832433, - -7 + -0.941491, - -3 + -0.158894, - -3 + 0.735858, - -5 + -0.942659, - -7 + 0.362461, - -3 + 0.175003, - -3 + 0.756938, - 5 + -0.586989, - -3 + -0.867437, - -7 + 0.204605, - 7 + -0.447344, - 7 + 0.37656, - -7 + 0.548076, - 5 + -0.720016, - -7 + -0.533887, - -1 + 0.0948688, - -1 + 0.921622, - 5 + -0.363181, - 1 + 0.875163, - 1 + -0.975703, - -7 + -0.991177, - 3 + 0.142339, - -7 + -0.670125, - 7 + 0.835181, - -7 + -0.176508, - 7 + -0.391808, - -3 + 0.659639, - -7 + 0.311382, - -5 + 0.965804, - 3 + 0.127325, - 1 + -0.000208556, - -7 + -0.777168, - -3 + 0.467445, - -7 + -0.274472, - 7 + -0.125423, - -7 + -0.341567, - -7 + -0.152778, - 3 + 0.328462, - 3 + 0.96799, - 3 + -0.863599, diff --git a/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_output.dat b/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_output.dat deleted file mode 100644 index 462b664b5..000000000 --- a/gr-atsc/src/lib/qa_atsci_viterbi_decoder_t1_output.dat +++ /dev/null @@ -1,2484 +0,0 @@ -69, -35, -24, -72, -92, -92, -20, -88, -31, -124, -88, -87, -65, -30, -169, -225, -0, -98, -8, -39, -35, -233, -205, -67, -15, -37, -249, -114, -194, -215, -196, -7, -251, -93, -80, -215, -186, -228, -48, -217, -97, -137, -177, -163, -168, -90, -132, -168, -189, -140, -208, -224, -118, -158, -36, -134, -196, -29, -248, -134, -245, -189, -141, -240, -26, -221, -200, -212, -194, -248, -173, -35, -130, -95, -198, -42, -185, -74, -211, -119, -215, -164, -88, -78, -66, -124, -212, -6, -154, -204, -141, -143, -137, -27, -127, -164, -249, -72, -120, -187, -64, -38, -222, -195, -133, -165, -237, -63, -240, -193, -183, -199, -101, -15, -21, -168, -140, -233, -175, -38, -182, -60, -182, -64, -87, -53, -228, -80, -126, -93, -11, -191, -132, -234, -130, -10, -143, -112, -74, -127, -49, -2, -71, -150, -18, -93, -63, -158, -71, -238, -197, -253, -43, -123, -62, -130, -177, -35, -211, -47, -129, -223, -238, -6, -202, -112, -17, -89, -224, -91, -217, -17, -94, -33, -168, -112, -126, -231, -14, -197, -214, -212, -195, -1, -79, -1, -132, -1, -36, -87, -48, -165, -55, -30, -172, -1, -143, -189, -90, -112, -24, -52, -130, -119, -85, -42, -231, -211, -18, -246, -153, -232, -202, -92, -234, -26, -93, -110, -27, -130, -197, -75, -40, -253, -106, -212, -254, -250, -145, -89, -106, -170, -141, -236, -33, -227, -23, -9, -183, -41, -255, -80, -18, -201, -172, -252, -227, -10, -107, -255, -141, -49, -74, -181, -46, -181, -138, -44, -175, -27, -133, -26, -198, -19, -6, -232, -246, -29, -241, -174, -71, -240, -254, -90, -185, -171, -87, -157, -182, -194, -157, -67, -243, -232, -248, -34, -157, -130, -78, -77, -158, -212, -103, -100, -231, -110, -76, -222, -140, -61, -140, -211, -46, -138, -46, -232, -54, -133, -133, -236, -72, -35, -47, -59, -11, -40, -94, -168, -171, -172, -246, -74, -128, -93, -174, -104, -204, -251, -70, -88, -57, -210, -44, -103, -93, -90, -79, -148, -223, -213, -129, -39, -248, -177, -99, -4, -217, -193, -172, -133, -110, -162, -207, -239, -0, -126, -87, -205, -121, -158, -37, -179, -113, -81, -27, -207, -171, -107, -99, -139, -65, -228, -178, -58, -149, -22, -62, -111, -216, -234, -244, -70, -141, -195, -54, -142, -66, -141, -91, -187, -44, -129, -111, -157, -210, -138, -108, -126, -245, -208, -9, -55, -180, -188, -113, -74, -211, -175, -185, -171, -154, -174, -242, -40, -114, -40, -183, -180, -182, -19, -112, -226, -148, -223, -128, -103, -106, -237, -229, -96, -189, -239, -151, -114, -172, -8, -189, -127, -184, -118, -43, -83, -37, -29, -123, -151, -70, -50, -76, -252, -69, -188, -223, -218, -156, -96, -65, -6, -77, -39, -102, -11, -23, -254, -125, -195, -7, -59, -67, -191, -178, -111, -18, -215, -141, -142, -111, -211, -192, -187, -208, -6, -119, -176, -225, -19, -16, -34, -26, -94, -74, -128, -105, -97, -127, -231, -37, -134, -35, -104, -69, -213, -215, -88, -172, -101, -230, -27, -56, -167, -214, -9, -174, -78, -185, -143, -98, -202, -178, -124, -40, -253, -253, -146, -94, -124, -122, -131, -2, -157, -236, -72, -114, -196, -161, -31, -41, -136, -58, -98, -47, -17, -107, -222, -96, -37, -110, -194, -239, -32, -63, -24, -29, -60, -170, -124, -185, -37, -0, -188, -195, -237, -4, -53, -178, -165, -84, -219, -45, -143, -62, -93, -161, -169, -60, -1, -206, -170, -196, -190, -203, -4, -214, -232, -65, -129, -101, -250, -166, -102, -182, -105, -83, -186, -159, -5, -96, -244, -225, -142, -132, -31, -236, -37, -201, -40, -39, -152, -210, -236, -86, -157, -240, -44, -134, -49, -173, -235, -44, -83, -81, -226, -189, -165, -157, -93, -170, -254, -81, -140, -141, -213, -171, -121, -251, -117, -161, -35, -13, -116, -16, -99, -17, -0, -144, -152, -50, -61, -132, -95, -145, -214, -66, -79, -123, -223, -172, -38, -222, -254, -178, -107, -211, -94, -229, -207, -212, -134, -242, -225, -251, -2, -69, -12, -3, -214, -164, -54, -20, -40, -149, -165, -254, -215, -245, -122, -183, -162, -160, -150, -160, -83, -1, -116, -177, -230, -67, -133, -109, -54, -103, -104, -56, -173, -117, -60, -131, -26, -115, -151, -67, -9, -61, -65, -224, -50, -188, -152, -212, -92, -46, -116, -175, -48, -232, -97, -23, -44, -231, -132, -98, -78, -237, -155, -251, -98, -215, -126, -124, -74, -22, -191, -83, -83, -1, -52, -133, -189, -205, -90, -26, -252, -207, -202, -45, -183, -43, -68, -228, -19, -201, -70, -98, -182, -225, -93, -25, -185, -220, -150, -4, -243, -86, -88, -70, -88, -141, -203, -21, -90, -38, -48, -87, -245, -250, -132, -173, -38, -200, -145, -57, -145, -215, -156, -72, -185, -250, -98, -114, -215, -248, -119, -202, -78, -207, -16, -166, -92, -220, -188, -183, -2, -237, -14, -247, -231, -146, -164, -14, -91, -53, -72, -237, -13, -228, -53, -199, -222, -151, -57, -181, -144, -177, -127, -222, -128, -143, -133, -220, -107, -66, -147, -109, -47, -162, -101, -23, -52, -9, -37, -143, -63, -110, -125, -77, -82, -179, -20, -49, -75, -78, -230, -219, -255, -102, -186, -127, -246, -64, -92, -98, -130, -240, -208, -177, -146, -53, -200, -198, -63, -238, -86, -127, -92, -212, -204, -175, -135, -224, -224, -210, -47, -199, -173, -46, -45, -104, -174, -36, -168, -10, -134, -42, -250, -86, -220, -141, -139, -165, -83, -203, -148, -170, -74, -241, -126, -22, -160, -6, -247, -128, -216, -38, -72, -134, -85, -117, -238, -3, -153, -151, -13, -32, -194, -8, -118, -158, -149, -2, -68, -233, -205, -217, -148, -23, -202, -19, -46, -106, -25, -38, -235, -241, -76, -51, -120, -162, -169, -103, -165, -66, -254, -179, -98, -192, -188, -217, -95, -82, -219, -164, -59, -169, -125, -208, -193, -71, -227, -239, -177, -252, -22, -157, -238, -98, -208, -102, -5, -121, -206, -170, -188, -204, -94, -31, -141, -26, -248, -237, -108, -212, -146, -168, -125, -15, -120, -62, -87, -91, -46, -9, -88, -68, -166, -70, -167, -118, -173, -172, -240, -124, -87, -172, -72, -181, -203, -214, -207, -196, -196, -59, -152, -86, -228, -21, -102, -92, -84, -190, -183, -131, -199, -16, -199, -110, -86, -110, -229, -4, -27, -213, -128, -114, -129, -201, -39, -77, -160, -247, -17, -100, -51, -169, -187, -23, -191, -33, -115, -20, -223, -43, -151, -167, -59, -94, -21, -146, -205, -251, -150, -233, -208, -23, -91, -82, -224, -131, -159, -129, -122, -177, -229, -173, -91, -160, -196, -27, -194, -56, -47, -162, -99, -198, -74, -159, -37, -95, -49, -243, -91, -200, -220, -43, -223, -55, -126, -192, -187, -29, -65, -53, -207, -39, -226, -42, -200, -167, -69, -138, -223, -116, -45, -67, -59, -119, -226, -97, -215, -20, -84, -50, -221, -48, -94, -188, -104, -220, -125, -35, -249, -191, -89, -200, -230, -60, -243, -175, -227, -56, -57, -195, -173, -103, -7, -233, -222, -234, -74, -181, -254, -158, -232, -219, -207, -70, -152, -56, -34, -22, -92, -28, -213, -181, -229, -188, -241, -216, -107, -213, -17, -165, -153, -190, -12, -160, -167, -235, -139, -242, -161, -138, -144, -137, -101, -96, -208, -254, -152, -242, -20, -244, -14, -234, -170, -243, -167, -155, -204, -19, -113, -221, -184, -11, -156, -197, -171, -68, -177, -55, -54, -82, -193, -199, -220, -39, -39, -172, -37, -192, -158, -58, -180, -173, -37, -94, -161, -204, -250, -109, -224, -108, -75, -153, -119, -232, -94, -35, -45, -15, -90, -99, -98, -27, -43, -62, -66, -83, -234, -104, -20, -137, -162, -201, -54, -200, -39, -215, -149, -34, -69, -117, -142, -144, -14, -6, -121, -109, -41, -166, -125, -131, -10, -223, -159, -53, -29, -225, -137, -8, -74, -157, -145, -237, -102, -200, -181, -142, -159, -74, -177, -229, -192, -64, -118, -207, -70, -239, -60, -111, -149, -185, -243, -160, -153, -146, -214, -182, -116, -95, -191, -190, -253, -80, -171, -99, -25, -97, -242, -185, -172, -163, -158, -108, -228, -20, -59, -42, -4, -120, -154, -154, -49, -141, -58, -202, -32, -16, -129, -149, -112, -65, -83, -109, -146, -255, -209, -171, -96, -196, -100, -13, -103, -2, -121, -76, -23, -181, -118, -28, -45, -17, -183, -95, -158, -241, -42, -191, -2, -172, -84, -115, -237, -168, -224, -127, -168, -178, -42, -8, -118, -142, -22, -222, -145, -143, -42, -169, -69, -160, -197, -114, -177, -124, -210, -80, -110, -252, -16, -113, -168, -101, -228, -149, -13, -197, -20, -181, -119, -63, -190, -237, -206, -212, -203, -95, -100, -245, -9, -169, -150, -207, -28, -72, -76, -238, -153, -186, -234, -169, -44, -146, -14, -17, -40, -28, -214, -61, -209, -77, -125, -144, -59, -75, -100, -6, -171, -200, -252, -180, -114, -147, -131, -142, -219, -207, -124, -117, -138, -102, -31, -183, -249, -45, -200, -34, -74, -158, -96, -27, -236, -221, -172, -39, -40, -16, -46, -212, -217, -43, -136, -75, -190, -11, -217, -154, -219, -85, -15, -102, -188, -46, -29, -182, -92, -229, -217, -166, -131, -57, -194, -112, -22, -110, -151, -63, -127, -197, -19, -88, -241, -156, -163, -175, -168, -125, -73, -131, -211, -88, -233, -143, -135, -7, -70, -227, -236, -31, -138, -112, -88, -77, -224, -111, -187, -120, -174, -59, -62, -194, -147, -47, -94, -55, -222, -6, -180, -40, -138, -135, -129, -116, -23, -8, -123, -93, -236, -103, -125, -118, -216, -213, -195, -184, -69, -127, -49, -244, -187, -111, -182, -78, -158, -21, -134, -125, -27, -59, -165, -165, -195, -38, -25, -218, -47, -149, -56, -27, -252, -181, -146, -213, -139, -86, -142, -208, -213, -191, -196, -145, -46, -123, -223, -205, -144, -102, -75, -171, -161, -240, -81, -101, -23, -107, -64, -70, -0, -120, -98, -253, -46, -244, -210, -185, -74, -96, -138, -32, -32, -78, -177, -79, -201, -145, -28, -89, -248, -103, -5, -154, -88, -87, -255, -112, -195, -63, -183, -196, -184, -25, -193, -230, -14, -148, -160, -89, -245, -42, -122, -21, -121, -43, -100, -67, -189, -129, -157, -182, -233, -162, -80, -65, -250, -80, -178, -190, -143, -105, -130, -72, -131, -67, -47, -145, -216, -208, -235, -205, -251, -101, -227, -116, -145, -71, -183, -78, -201, -84, -4, -178, -247, -85, -244, -242, -165, -166, -176, -53, -16, -50, -126, -147, -118, -173, -37, -78, -125, -16, -28, -120, -117, -0, -237, -6, -71, -164, -85, -17, -249, -90, -195, -240, -175, -184, -227, -85, -94, -147, -138, -110, -197, -8, -2, -60, -182, -39, -139, -51, -55, -167, -172, -173, -167, -153, -179, -239, -62, -9, -1, -55, -99, -196, -40, -19, -124, -12, -104, -219, -159, -243, -74, -101, -251, -76, -161, -178, -115, -44, -230, -171, -212, -146, -88, -124, -44, -12, -108, -107, -21, -109, -163, -121, -50, -204, -140, -175, -216, -244, -138, -119, -232, -213, -221, -228, -33, -127, -150, -149, -172, -124, -64, -129, -15, -153, -253, -59, -166, -105, -167, -187, -215, -74, -53, -9, -22, -193, -184, -238, -182, -67, -102, -158, -24, -68, -130, -58, -195, -24, -207, -111, -149, -16, -240, -164, -170, -238, -224, -80, -88, -135, -12, -47, -209, -65, -57, -232, -2, -242, -215, -185, -53, -62, -87, -78, -130, -218, -136, -69, -243, -87, -181, -136, -104, -166, -44, -18, -148, -13, -99, -237, -148, -111, -28, -102, -176, -86, -79, -179, -72, -38, -109, -125, -100, -197, -203, -231, -159, -83, -44, -146, -171, -226, -27, -20, -137, -72, -39, -29, -85, -138, -10, -234, -249, -39, -81, -170, -125, -160, -94, -197, -198, -203, -67, -43, -145, -15, -18, -48, -98, -63, -195, -14, -34, -222, -35, -171, -39, -74, -201, -125, -212, -212, -103, -206, -251, -185, -121, -121, -89, -215, -63, -32, -163, -130, -75, -52, -145, -94, -101, -244, -158, -40, -3, -192, -7, -38, -107, -47, -113, -52, -172, -69, -8, -20, -20, -4, -205, -141, -126, -38, -101, -189, -71, -9, -64, -147, -62, -210, -241, -163, -198, -143, -204, -202, -80, -212, -241, -187, -4, -98, -240, -176, -168, -249, -197, -188, -254, -146, -73, -124, -185, -175, -57, -1, -184, -122, -148, -246, -76, -134, -154, -19, -21, -102, -222, -102, -59, -207, -33, -63, -49, -18, -240, -218, -11, -181, -150, -9, -72, -224, -134, -2, -143, -192, -3, -71, -58, -151, -62, -135, -29, -216, -154, -51, -63, -120, -153, -123, -72, -187, -187, -122, -206, -171, -84, -218, -97, -234, -228, -169, -203, -106, -172, -90, -42, -175, -162, -101, -71, -224, -236, -101, -185, -135, -153, -248, -0, -51, -116, -72, -238, -47, -194, -189, -218, -22, -151, -60, -1, -123, -230, -204, -230, -146, -38, -17, -66, -200, -118, -137, -169, -99, -239, -98, -234, -136, -91, -234, -187, -208, -51, -170, -255, -245, -103, -218, -11, -255, -22, -12, -123, -252, -217, -97, -142, -255, -115, -208, -200, -234, -90, -114, -77, -73, -212, -56, -209, -48, -35, -141, -0, -86, -55, -0, -75, -159, -218, -87, -159, -240, -100, -26, -237, -61, -124, -124, -61, -239, -77, -6, -218, -167, -120, -39, -241, -77, -96, -195, -125, -132, -80, -126, -218, -136, -126, -38, -40, -88, -126, -199, -73, -226, -225, -55, -32, -94, -179, -94, -78, -1, -100, -40, -168, -220, -80, -154, -41, -177, -93, -167, -53, -173, -37, -16, -54, -164, -55, -94, -253, -181, -37, -70, -152, -7, -126, -184, -102, -50, -22, -180, -51, -123, -221, -220, -87, -46, -118, -129, -223, -211, -41, -20, -129, -78, -37, -183, -243, -92, -21, -240, -17, -59, -55, -169, -67, -181, -98, -170, -231, -121, -94, -27, -244, -60, -247, -76, -106, -109, -206, -73, -64, -247, -94, -193, -70, -131, -121, -57, -223, -143, -41, -241, -203, -97, -155, -14, -23, -253, -184, -255, -119, -23, -26, -108, -83, -17, -184, -190, -127, -135, -7, -191, -126, -102, -129, -196, -233, -251, -254, -200, -138, -40, -186, -85, -137, -85, -100, -160, -83, -29, -159, -202, -53, -185, -54, -137, -203, -239, -71, -74, -119, -79, -10, -245, -181, -140, -186, -158, -135, -184, -103, -18, -224, -33, -103, -106, -118, -204, -10, -201, -234, -170, -147, -31, -99, -202, -168, -47, -186, -239, -121, -50, -62, -131, -39, -243, -15, -225, -146, -151, -154, -249, -169, -123, -26, -17, -229, -145, -221, -239, -90, -199, -153, -238, -230, -253, -185, -142, -44, -116, -126, -166, -166, -189, -41, -206, -176, -57, -176, -67, -208, -74, -60, -121, -197, -87, -138, -170, -232, -104, -154, -67, -48, -52, -50, -22, -49, -236, -165, -94, -96, -36, -4, -7, -225, -46, -213, -146, -104, -133, -213, -57, -207, -18, -178, -149, -105, -61, -63, -82, -166, -218, -150, -214, -14, -200, -237, -64, -180, -147, -159, -21, -183, -164, -28, -152, -210, -241, -42, -59, -118, -0, -116, -70, -18, diff --git a/gr-atsc/src/lib/qa_convolutional_interleaver.cc b/gr-atsc/src/lib/qa_convolutional_interleaver.cc deleted file mode 100644 index bfe86f0ea..000000000 --- a/gr-atsc/src/lib/qa_convolutional_interleaver.cc +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cppunit/TestAssert.h> -#include <qa_convolutional_interleaver.h> - -void -qa_convolutional_interleaver::t0 () -{ - static int input[16] = { - 1, 2, 3, 4, - 5, 6, 7, 8, - 9, 10, 11, 12, - 13, 14, 15, 16 - }; - - static int output[16] = { - 1, 0, 0, 0, - 5, 2, 0, 0, - 9, 6, 3, 0, - 13, 10, 7, 4 - }; - - // test interleaver - intl = new convolutional_interleaver<int>(true, 4, 1); - - for (int i = 0; i < 16; i++) - CPPUNIT_ASSERT_EQUAL (output[i], intl->transform (input[i])); -} - -void -qa_convolutional_interleaver::t1 () -{ - static int input[16] = { - 1, 0, 0, 0, - 5, 2, 0, 0, - 9, 6, 3, 0, - 13, 10, 7, 4 - }; - - static int output[16] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 2, 3, 4 - }; - - // test deinterleaver - intl = new convolutional_interleaver<int>(false, 4, 1); - - for (int i = 0; i < 16; i++) - CPPUNIT_ASSERT_EQUAL (output[i], intl->transform (input[i])); -} - -void -qa_convolutional_interleaver::t2 () -{ - intl = new convolutional_interleaver<int>(true, 4, 1); - deintl = new convolutional_interleaver<int>(false, 4, 1); - - int icount = 6000; - int dcount = 6000; - - int end_to_end_delay = intl->end_to_end_delay (); - for (int i = 0; i < end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (0, deintl->transform (intl->transform (icount++))); - } - - for (int i = 0; i < 3 * end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (dcount++, deintl->transform (intl->transform (icount++))); - } -} - -void -qa_convolutional_interleaver::t3 () -{ - intl = new convolutional_interleaver<int>(true, 4, 2); - deintl = new convolutional_interleaver<int>(false, 4, 2); - - int icount = 6000; - int dcount = 6000; - - int end_to_end_delay = intl->end_to_end_delay (); - for (int i = 0; i < end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (0, deintl->transform (intl->transform (icount++))); - } - - for (int i = 0; i < 3 * end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (dcount++, deintl->transform (intl->transform (icount++))); - } -} - -void -qa_convolutional_interleaver::t4 () -{ - intl = new convolutional_interleaver<int>(true, 52, 4); - deintl = new convolutional_interleaver<int>(false, 52, 4); - - int icount = 6000; - int dcount = 6000; - - int end_to_end_delay = intl->end_to_end_delay (); - CPPUNIT_ASSERT_EQUAL (10608, end_to_end_delay); - - for (int i = 0; i < end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (0, deintl->transform (intl->transform (icount++))); - } - - for (int i = 0; i < 3 * end_to_end_delay; i++){ - CPPUNIT_ASSERT_EQUAL (dcount++, deintl->transform (intl->transform (icount++))); - } -} diff --git a/gr-atsc/src/lib/qa_convolutional_interleaver.h b/gr-atsc/src/lib/qa_convolutional_interleaver.h deleted file mode 100644 index b60181d73..000000000 --- a/gr-atsc/src/lib/qa_convolutional_interleaver.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_CONVOLUTIONAL_INTERLEAVER_H_ -#define _QA_CONVOLUTIONAL_INTERLEAVER_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <convolutional_interleaver.h> - -class qa_convolutional_interleaver : public CppUnit::TestCase { - private: - convolutional_interleaver<int> *intl; - convolutional_interleaver<int> *deintl; - - CPPUNIT_TEST_SUITE (qa_convolutional_interleaver); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST (t3); - CPPUNIT_TEST (t4); - CPPUNIT_TEST_SUITE_END (); - - public: - - void setUp (){ - intl = 0; - deintl = 0; - } - - void tearDown (){ - delete intl; - intl = 0; - delete deintl; - deintl = 0; - } - - private: - - void t0 (); - void t1 (); - void t2 (); - void t3 (); - void t4 (); - -}; - - -#endif /* _QA_CONVOLUTIONAL_INTERLEAVER_H_ */ diff --git a/gr-atsc/src/lib/qa_interleaver_fifo.cc b/gr-atsc/src/lib/qa_interleaver_fifo.cc deleted file mode 100644 index a9de97ff3..000000000 --- a/gr-atsc/src/lib/qa_interleaver_fifo.cc +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <cppunit/TestAssert.h> -#include <qa_interleaver_fifo.h> - -void -qa_interleaver_fifo::t0 () -{ - fifo = new interleaver_fifo<int>(0); - - for (int i = 10; i < 20; i++) - CPPUNIT_ASSERT_EQUAL (i, fifo->stuff (i)); -} - -void -qa_interleaver_fifo::t1 () -{ - fifo = new interleaver_fifo<int>(1); - - CPPUNIT_ASSERT_EQUAL (0, fifo->stuff (2)); - - for (int i = 1; i < 10; i++) - CPPUNIT_ASSERT_EQUAL (i * 2, fifo->stuff ((i + 1) * 2)); -} - -void -qa_interleaver_fifo::t2 () -{ - fifo = new interleaver_fifo<int>(4); - - CPPUNIT_ASSERT_EQUAL (0, fifo->stuff (1)); - CPPUNIT_ASSERT_EQUAL (0, fifo->stuff (2)); - CPPUNIT_ASSERT_EQUAL (0, fifo->stuff (3)); - CPPUNIT_ASSERT_EQUAL (0, fifo->stuff (4)); - - for (int i = 5; i < 20; i++) - CPPUNIT_ASSERT_EQUAL (i - 4, fifo->stuff (i)); -} diff --git a/gr-atsc/src/lib/qa_interleaver_fifo.h b/gr-atsc/src/lib/qa_interleaver_fifo.h deleted file mode 100644 index 9783548ca..000000000 --- a/gr-atsc/src/lib/qa_interleaver_fifo.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _QA_INTERLEAVER_FIFO_H_ -#define _QA_INTERLEAVER_FIFO_H_ - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -#include <interleaver_fifo.h> - -class qa_interleaver_fifo : public CppUnit::TestCase { - private: - interleaver_fifo<int> *fifo; - - public: - - void tearDown (){ - delete fifo; - fifo = 0; - } - - CPPUNIT_TEST_SUITE (qa_interleaver_fifo); - CPPUNIT_TEST (t0); - CPPUNIT_TEST (t1); - CPPUNIT_TEST (t2); - CPPUNIT_TEST_SUITE_END (); - - private: - - void t0 (); - void t1 (); - void t2 (); - -}; - - -#endif /* _QA_INTERLEAVER_FIFO_H_ */ diff --git a/gr-atsc/src/lib/test_atsci.cc b/gr-atsc/src/lib/test_atsci.cc deleted file mode 100644 index bf0a7eafc..000000000 --- a/gr-atsc/src/lib/test_atsci.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2006,2010,2011 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <gr_unittests.h> -#include <cppunit/TextTestRunner.h> -#include <cppunit/XmlOutputter.h> -#include <qa_atsci.h> - -int -main (int argc, char **argv) -{ - CppUnit::TextTestRunner runner; - std::ofstream xmlfile(get_unittest_path("gr_atsc.xml").c_str()); - CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile); - - runner.addTest (qa_atsc::suite ()); - runner.setOutputter(xmlout); - - bool was_successful = runner.run ("", false); - - return was_successful ? 0 : 1; -} diff --git a/gr-atsc/src/python/CMakeLists.txt b/gr-atsc/src/python/CMakeLists.txt deleted file mode 100644 index fa9f91156..000000000 --- a/gr-atsc/src/python/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2011-2012 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. - -######################################################################## -# Install python examples -######################################################################## -include(GrPython) - -GR_PYTHON_INSTALL( - PROGRAMS - btl-fsd.py - fpll.py - interp.py - xlate.py - viterbi-out.py - DESTINATION ${GR_PKG_DATA_DIR}/examples/atsc - COMPONENT "atsc_examples" -) - -install( - FILES README - DESTINATION ${GR_PKG_DATA_DIR}/examples/atsc - COMPONENT "atsc_examples" -) - -######################################################################## -# Handle the unit tests -######################################################################## -if(ENABLE_TESTING) - -list(APPEND GR_TEST_PYTHON_DIRS - ${CMAKE_BINARY_DIR}/gr-atsc/src/lib -) -list(APPEND GR_TEST_TARGET_DEPS gnuradio-atsc) - -include(GrTest) -file(GLOB py_qa_test_files "qa_*.py") -foreach(py_qa_test_file ${py_qa_test_files}) - get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE) - GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file}) -endforeach(py_qa_test_file) -endif(ENABLE_TESTING) diff --git a/gr-atsc/src/python/README b/gr-atsc/src/python/README deleted file mode 100644 index 74d6ba134..000000000 --- a/gr-atsc/src/python/README +++ /dev/null @@ -1,34 +0,0 @@ -Decoding ATSC using 19.2MSps rate over 5 processes --------------------------------------------------- - -1) Verify signal, adjust antenna and find best gain setting using uhd_fft.py, -station frequency from the fcc video database, and sample rate to 6.4e6. - -2) Capture data - adjust gain (-g) frequency (-f) and which side -the tvrx is on to fit your local setup: - -uhd_rx_cfile.py -s --samp-rate=6.4e6 -g 65 -f 503e6 atsc_data_6-4m_complex - -You probably still need fast disks to take the data, like a raid-0 set of -striped sata drives. Make sure there are no or very few Ou overruns. Saving -the raw usrp data in 'short' form halves the disk space/bus bandwidth that -the usual complex form uses. - -3) Make pipes: - -mkfifo /tmp/atsc_pipe_1 -mkfifo /tmp/atsc_pipe_2 -mkfifo /tmp/atsc_pipe_3 -mkfifo /tmp/atsc_pipe_4 -mkfifo /tmp/atsc_pipe_5 - -4) In seperate windows run processes: - -./interp_short.py <input rf data at 6.4Msps> -./xlate.py -./fpll.py -./btl-fsd.py -./viterbi-out.py <output mpeg transport stream> - - - diff --git a/gr-atsc/src/python/all_atsc.py b/gr-atsc/src/python/all_atsc.py deleted file mode 100644 index 0137839bd..000000000 --- a/gr-atsc/src/python/all_atsc.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env /usr/bin/python -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# This module starts the atsc processing chain taking the captured -# off-air signal created with: -# -# uhd_rx_cfile.py --samp-rate=6.4e6 -# -f <center of tv signal channel freq> -# -g <appropriate gain for best signal / noise> -# -s output shorts -# -# All this module does is multiply the sample rate by 3, from 6.4e6 to -# 19.2e6 complex samples / sec, then lowpass filter with a cutoff of 3.2MHz -# and a transition band width of .5MHz. Center of the tv channels is -# then at 0 with edges at -3.2MHz and 3.2MHz. - -from gnuradio import gr, atsc -import sys, os, math - -def graph (args): - - nargs = len(args) - if nargs == 2: - infile = args[0] - outfile = args[1] - else: - raise ValueError('usage: interp.py input_file output_file\n') - - tb = gr.top_block () - - # Convert to a from shorts to a stream of complex numbers. - srcf = gr.file_source (gr.sizeof_short,infile) - s2ss = gr.stream_to_streams(gr.sizeof_short,2) - s2f1 = gr.short_to_float() - s2f2 = gr.short_to_float() - src0 = gr.float_to_complex() - tb.connect(srcf, s2ss) - tb.connect((s2ss, 0), s2f1, (src0, 0)) - tb.connect((s2ss, 1), s2f2, (src0, 1)) - - # Low pass filter it and increase sample rate by a factor of 3. - lp_coeffs = gr.firdes.low_pass ( 3, 19.2e6, 3.2e6, .5e6, gr.firdes.WIN_HAMMING ) - lp = gr.interp_fir_filter_ccf ( 3, lp_coeffs ) - tb.connect(src0, lp) - - # Upconvert it. - duc_coeffs = gr.firdes.low_pass ( 1, 19.2e6, 9e6, 1e6, gr.firdes.WIN_HAMMING ) - duc = gr.freq_xlating_fir_filter_ccf ( 1, duc_coeffs, 5.75e6, 19.2e6 ) - # Discard the imaginary component. - c2f = gr.complex_to_float() - tb.connect(lp, duc, c2f) - - # Frequency Phase Lock Loop - input_rate = 19.2e6 - IF_freq = 5.75e6 - # 1/2 as wide because we're designing lp filter - symbol_rate = atsc.ATSC_SYMBOL_RATE/2. - NTAPS = 279 - tt = gr.firdes.root_raised_cosine (1.0, input_rate, symbol_rate, .115, NTAPS) - # heterodyne the low pass coefficients up to the specified bandpass - # center frequency. Note that when we do this, the filter bandwidth - # is effectively twice the low pass (2.69 * 2 = 5.38) and hence - # matches the diagram in the ATSC spec. - arg = 2. * math.pi * IF_freq / input_rate - t=[] - for i in range(len(tt)): - t += [tt[i] * 2. * math.cos(arg * i)] - rrc = gr.fir_filter_fff(1, t) - - fpll = atsc.fpll() - - pilot_freq = IF_freq - 3e6 + 0.31e6 - lower_edge = 6e6 - 0.31e6 - upper_edge = IF_freq - 3e6 + pilot_freq - transition_width = upper_edge - lower_edge - lp_coeffs = gr.firdes.low_pass (1.0, - input_rate, - (lower_edge + upper_edge) * 0.5, - transition_width, - gr.firdes.WIN_HAMMING); - - lp_filter = gr.fir_filter_fff (1,lp_coeffs) - - alpha = 1e-5 - iir = gr.single_pole_iir_filter_ff(alpha) - remove_dc = gr.sub_ff() - - tb.connect(c2f, fpll, lp_filter) - tb.connect(lp_filter, iir) - tb.connect(lp_filter, (remove_dc,0)) - tb.connect(iir, (remove_dc,1)) - - # Bit Timing Loop, Field Sync Checker and Equalizer - - btl = atsc.bit_timing_loop() - fsc = atsc.fs_checker() - eq = atsc.equalizer() - fsd = atsc.field_sync_demux() - - tb.connect(remove_dc, btl) - tb.connect((btl, 0),(fsc, 0),(eq, 0),(fsd, 0)) - tb.connect((btl, 1),(fsc, 1),(eq, 1),(fsd, 1)) - - # Viterbi - - viterbi = atsc.viterbi_decoder() - deinter = atsc.deinterleaver() - rs_dec = atsc.rs_decoder() - derand = atsc.derandomizer() - depad = atsc.depad() - dst = gr.file_sink(gr.sizeof_char, outfile) - tb.connect(fsd, viterbi, deinter, rs_dec, derand, depad, dst) - - dst2 = gr.file_sink(gr.sizeof_gr_complex, "atsc_complex.data") - tb.connect(src0, dst2) - - tb.run () - -if __name__ == '__main__': - graph (sys.argv[1:]) - - diff --git a/gr-atsc/src/python/atsc_utils.py b/gr-atsc/src/python/atsc_utils.py deleted file mode 100644 index fced6d190..000000000 --- a/gr-atsc/src/python/atsc_utils.py +++ /dev/null @@ -1,74 +0,0 @@ -# -# Copyright 2006 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -import random -import sys - -MPEG_SYNC_BYTE = 0x47 - -def make_fake_transport_stream_packet(npkts): - """ - Return a sequence of 8-bit ints that represents an MPEG Transport Stream packet. - - @param npkts: how many 188-byte packets to return - - FYI, each ATSC Data Frame contains two Data Fields, each of which contains - 312 data segments. Each transport stream packet maps to a data segment. - """ - r = [0] * (npkts * 188) - i = 0 - for j in range(npkts): - r[i+0] = MPEG_SYNC_BYTE - r[i+1] = random.randint(0, 127) # top bit (transport error bit) clear - i = i + 2 - for n in range(186): - r[i + n] = random.randint(0, 255) - i = i + 186 - - return r - - -def pad_stream(src, sizeof_total, sizeof_pad): - sizeof_valid = sizeof_total - sizeof_pad - assert sizeof_valid > 0 - assert (len(src) % sizeof_valid) == 0 - npkts = len(src) // sizeof_valid - dst = [0] * (npkts * sizeof_total) - for i in range(npkts): - src_s = i * sizeof_valid - dst_s = i * sizeof_total - dst[dst_s:dst_s + sizeof_valid] = src[src_s:src_s + sizeof_valid] - return dst - - -def depad_stream(src, sizeof_total, sizeof_pad): - sizeof_valid = sizeof_total - sizeof_pad - assert sizeof_valid > 0 - assert (len(src) % sizeof_total) == 0 - npkts = len(src) // sizeof_total - dst = [0] * (npkts * sizeof_valid) - for i in range(npkts): - src_s = i * sizeof_total - dst_s = i * sizeof_valid - dst[dst_s:dst_s + sizeof_valid] = src[src_s:src_s + sizeof_valid] - return dst - - diff --git a/gr-atsc/src/python/btl-fsd.py b/gr-atsc/src/python/btl-fsd.py deleted file mode 100755 index 826e71016..000000000 --- a/gr-atsc/src/python/btl-fsd.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2005,2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# - -from gnuradio import gr -from gnuradio import atsc -import os - -print os.getpid() - -tb = gr.top_block() - -btl = atsc.bit_timing_loop() -fsc = atsc.fs_checker() -eq = atsc.equalizer() -fsd = atsc.field_sync_demux() - -out_data = gr.file_sink(atsc.sizeof_atsc_soft_data_segment,"/tmp/atsc_pipe_5") - -inp = gr.file_source(gr.sizeof_float,"/tmp/atsc_pipe_3") - -tb.connect(inp,btl) -tb.connect((btl,0),(fsc,0),(eq,0),(fsd,0)) -tb.connect((btl,1),(fsc,1),(eq,1),(fsd,1)) -tb.connect(fsd,out_data) - -tb.run() - - diff --git a/gr-atsc/src/python/fpll.py b/gr-atsc/src/python/fpll.py deleted file mode 100755 index aed975557..000000000 --- a/gr-atsc/src/python/fpll.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# - -from gnuradio import gr, atsc -import math, os - -def main(): - - print os.getpid() - - tb = gr.top_block() - - u = gr.file_source(gr.sizeof_float,"/tmp/atsc_pipe_2") - - input_rate = 19.2e6 - IF_freq = 5.75e6 - - - # 1/2 as wide because we're designing lp filter - symbol_rate = atsc.ATSC_SYMBOL_RATE/2. - NTAPS = 279 - tt = gr.firdes.root_raised_cosine (1.0, input_rate, symbol_rate, .115, NTAPS) - # heterodyne the low pass coefficients up to the specified bandpass - # center frequency. Note that when we do this, the filter bandwidth - # is effectively twice the low pass (2.69 * 2 = 5.38) and hence - # matches the diagram in the ATSC spec. - arg = 2. * math.pi * IF_freq / input_rate - t=[] - for i in range(len(tt)): - t += [tt[i] * 2. * math.cos(arg * i)] - rrc = gr.fir_filter_fff(1, t) - - fpll = atsc.fpll() - - pilot_freq = IF_freq - 3e6 + 0.31e6 - lower_edge = 6e6 - 0.31e6 - upper_edge = IF_freq - 3e6 + pilot_freq - transition_width = upper_edge - lower_edge - lp_coeffs = gr.firdes.low_pass (1.0, - input_rate, - (lower_edge + upper_edge) * 0.5, - transition_width, - gr.firdes.WIN_HAMMING); - - lp_filter = gr.fir_filter_fff (1,lp_coeffs) - - alpha = 1e-5 - iir = gr.single_pole_iir_filter_ff(alpha) - remove_dc = gr.sub_ff() - - out = gr.file_sink(gr.sizeof_float,"/tmp/atsc_pipe_3") - # out = gr.file_sink(gr.sizeof_float,"/mnt/sata/atsc_data_float") - - tb.connect(u, fpll, lp_filter) - tb.connect(lp_filter, iir) - tb.connect(lp_filter, (remove_dc,0)) - tb.connect(iir, (remove_dc,1)) - tb.connect(remove_dc, out) - - tb.run() - - -if __name__ == '__main__': - main () - - - diff --git a/gr-atsc/src/python/interp.py b/gr-atsc/src/python/interp.py deleted file mode 100755 index 8a3cc8d4c..000000000 --- a/gr-atsc/src/python/interp.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env /usr/bin/python -# -# Copyright 2004,2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# This module starts the atsc processing chain taking the captured -# off-air signal created with: -# -# uhd_rx_cfile.py --samp-rate=6.4e6 -# -f <center of tv signal channel freq> -# -g <appropriate gain for best signal / noise> -# -# All this module does is multiply the sample rate by 3, from 6.4e6 to -# 19.2e6 complex samples / sec, then lowpass filter with a cutoff of 3.2MHz -# and a transition band width of .5MHz. Center of the tv channels is -# then at 0 with edges at -3.2MHz and 3.2MHz. - -from gnuradio import gr -import sys - -def graph (args): - - nargs = len (args) - if nargs == 1: - infile = args[0] - else: - sys.stderr.write('usage: interp.py input_file\n') - sys.exit (1) - - tb = gr.top_block () - - src0 = gr.file_source (gr.sizeof_gr_complex,infile) - - lp_coeffs = gr.firdes.low_pass ( 3, 19.2e6, 3.2e6, .5e6, gr.firdes.WIN_HAMMING ) - lp = gr.interp_fir_filter_ccf ( 1, lp_coeffs ) - - file = gr.file_sink(gr.sizeof_gr_complex,"/tmp/atsc_pipe_1") - - tb.connect( src0, lp, file ) - - tb.start() - raw_input ('Head End: Press Enter to stop') - tb.stop() - -if __name__ == '__main__': - graph (sys.argv[1:]) - - diff --git a/gr-atsc/src/python/interp_short.py b/gr-atsc/src/python/interp_short.py deleted file mode 100755 index c5ea337f9..000000000 --- a/gr-atsc/src/python/interp_short.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env /usr/bin/python -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# This module starts the atsc processing chain taking the captured -# off-air signal created with: -# -# uhd_rx_cfile.py --samp-rate=6.4e6 -# -f <center of tv signal channel freq> -# -g <appropriate gain for best signal / noise> -# -s output shorts -# -# All this module does is multiply the sample rate by 3, from 6.4e6 to -# 19.2e6 complex samples / sec, then lowpass filter with a cutoff of 3.2MHz -# and a transition band width of .5MHz. Center of the tv channels is -# then at 0 with edges at -3.2MHz and 3.2MHz. - -from gnuradio import gr -import sys, os - -def graph (args): - - print os.getpid() - - nargs = len (args) - if nargs == 1: - infile = args[0] - else: - sys.stderr.write('usage: interp.py input_file\n') - sys.exit (1) - - tb = gr.top_block () - - srcf = gr.file_source (gr.sizeof_short,infile) - s2ss = gr.stream_to_streams(gr.sizeof_short,2) - s2f1 = gr.short_to_float() - s2f2 = gr.short_to_float() - src0 = gr.float_to_complex() - - - lp_coeffs = gr.firdes.low_pass ( 3, 19.2e6, 3.2e6, .5e6, gr.firdes.WIN_HAMMING ) - lp = gr.interp_fir_filter_ccf ( 3, lp_coeffs ) - - file = gr.file_sink(gr.sizeof_gr_complex,"/tmp/atsc_pipe_1") - - tb.connect( srcf, s2ss ) - tb.connect( (s2ss, 0), s2f1, (src0,0) ) - tb.connect( (s2ss, 1), s2f2, (src0,1) ) - tb.connect( src0, lp, file) - - tb.start() - raw_input ('Head End: Press Enter to stop') - tb.stop() - -if __name__ == '__main__': - graph (sys.argv[1:]) - - diff --git a/gr-atsc/src/python/qa_atsc.py b/gr-atsc/src/python/qa_atsc.py deleted file mode 100755 index c6b8d2e95..000000000 --- a/gr-atsc/src/python/qa_atsc.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2006,2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -from gnuradio import gr, gr_unittest -import atsc # qa code needs to run without being installed -#from gnuradio import atsc -from atsc_utils import * -import sys - - -class memoize(object): - def __init__(self, thunk): - self.thunk = thunk - self.cached = False - self.value = None - - def __call__(self): - if self.cached: - return self.value - self.value = self.thunk() - self.cached = True - return self.value - - -""" -Make a fake transport stream that's big enough for our purposes. -We generate 8 full fields. This is relatively expensive. It -takes about 2 seconds to execute. -""" -make_transport_stream = \ - memoize(lambda : tuple(make_fake_transport_stream_packet(8 * atsc.ATSC_DSEGS_PER_FIELD))) - - -def pad_transport_stream(src): - """ - An MPEG transport stream packet is 188 bytes long. Internally we use a packet - that is 256 bytes long to help with buffer alignment. This function adds the - appropriate trailing padding to convert each packet from 188 to 256 bytes. - """ - return pad_stream(src, atsc.sizeof_atsc_mpeg_packet, atsc.sizeof_atsc_mpeg_packet_pad) - - -def depad_transport_stream(src): - """ - An MPEG transport stream packet is 188 bytes long. Internally we use a packet - that is 256 bytes long to help with buffer alignment. This function removes the - trailing padding to convert each packet from 256 back to 188 bytes. - """ - return depad_stream(src, atsc.sizeof_atsc_mpeg_packet, atsc.sizeof_atsc_mpeg_packet_pad) - - -class vector_source_ts(gr.hier_block2): - """ - MPEG Transport stream source for testing. - """ - def __init__(self, ts): - """ - Pad tranport stream packets to 256 bytes and reformat appropriately. - - @param ts: MPEG transport stream. - @type ts: sequence of ints in [0,255]; len(ts) % 188 == 0 - """ - - src = gr.vector_source_b(pad_transport_stream(ts)) - s2v = gr.stream_to_vector(gr.sizeof_char, atsc.sizeof_atsc_mpeg_packet) - - gr.hier_block2.__init__(self, "vector_source_ts", - gr.io_signature(0, 0, 0), - s2v.output_signature()) - self.connect(src, s2v, self) - - -class vector_sink_ts(gr.hier_block2): - """ - MPEG Transport stream sink for testing. - """ - def __init__(self): - """ - """ - - v2s = gr.vector_to_stream(gr.sizeof_char, atsc.sizeof_atsc_mpeg_packet) - self.sink = gr.vector_sink_b() - gr.hier_block2.__init__(self, "vector_sink_ts", - v2s.input_signature(), - gr.io_signature(0, 0, 0)) - self.connect(self, v2s, self.sink) - - def data(self): - """ - Extracts tranport stream from sink and returns it to python. - - Depads tranport stream packets from 256 back to 188 bytes. - @rtype: tuple of ints in [0,255]; len(result) % 188 == 0 - """ - return tuple(depad_transport_stream(self.sink.data())) - - - -class qa_atsc(gr_unittest.TestCase): - - def setUp(self): - self.tb = gr.top_block() - - def tearDown(self): - self.tb = None - - - # The tests are run in alphabetical order - - def test_loopback_000(self): - """ - Loopback randomizer to derandomizer - """ - src_data = make_transport_stream() - expected_result = src_data - - src = vector_source_ts(src_data) - rand = atsc.randomizer() - derand = atsc.derandomizer() - dst = vector_sink_ts() - self.tb.connect(src, rand, derand, dst) - self.tb.run () - result_data = dst.data () - self.assertEqual (expected_result, result_data) - - def test_loopback_001(self): - """ - Loopback randomizer/rs_encoder to rs_decoder/derandomizer - """ - src_data = make_transport_stream() - expected_result = src_data - - src = vector_source_ts(src_data) - rand = atsc.randomizer() - rs_enc = atsc.rs_encoder() - rs_dec = atsc.rs_decoder() - derand = atsc.derandomizer() - dst = vector_sink_ts() - self.tb.connect(src, rand, rs_enc, rs_dec, derand, dst) - self.tb.run () - result_data = dst.data () - self.assertEqual (expected_result, result_data) - - def test_loopback_002(self): - """ - Loopback randomizer/rs_encoder/interleaver to - deinterleaver/rs_decoder/derandomizer - """ - src_data = make_transport_stream() - interleaver_delay = 52 - expected_result = src_data[0:len(src_data)-(interleaver_delay*atsc.ATSC_MPEG_PKT_LENGTH)] - - src = vector_source_ts(src_data) - rand = atsc.randomizer() - rs_enc = atsc.rs_encoder() - inter = atsc.interleaver() - deinter = atsc.deinterleaver() - rs_dec = atsc.rs_decoder() - derand = atsc.derandomizer() - dst = vector_sink_ts() - self.tb.connect(src, rand, rs_enc, inter, deinter, rs_dec, derand, dst) - self.tb.run () - result_data = dst.data () - result_data = result_data[(interleaver_delay*atsc.ATSC_MPEG_PKT_LENGTH):len(result_data)] - self.assertEqual (expected_result, result_data) - - - def test_loopback_003(self): - """ - Loopback randomizer/rs_encoder/interleaver/trellis_encoder - via ds_to_softds to - viterbi_decoder/deinterleaver/rs_decoder/derandomizer - """ - src_data = make_transport_stream() - interleaver_delay = 52 - viterbi_delay = 12 - expected_result = src_data[0:len(src_data)-((interleaver_delay+viterbi_delay)*atsc.ATSC_MPEG_PKT_LENGTH)] - - src = vector_source_ts(src_data) - rand = atsc.randomizer() - rs_enc = atsc.rs_encoder() - inter = atsc.interleaver() - trellis = atsc.trellis_encoder() - softds = atsc.ds_to_softds() - viterbi = atsc.viterbi_decoder() - deinter = atsc.deinterleaver() - rs_dec = atsc.rs_decoder() - derand = atsc.derandomizer() - dst = vector_sink_ts() - self.tb.connect(src, rand, rs_enc, inter, trellis, softds, viterbi, deinter, rs_dec, derand, dst) - self.tb.run () - result_data = dst.data ()[((interleaver_delay+viterbi_delay)*atsc.ATSC_MPEG_PKT_LENGTH):len(dst.data())] - self.assertEqual (expected_result, result_data) - - -if __name__ == '__main__': - gr_unittest.main() - - - - - - diff --git a/gr-atsc/src/python/viterbi-out.py b/gr-atsc/src/python/viterbi-out.py deleted file mode 100755 index 67edd99b2..000000000 --- a/gr-atsc/src/python/viterbi-out.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2006,2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# - -from gnuradio import gr, atsc -import sys, os - -def main(args): - - print os.getpid() - - nargs = len (args) - if nargs == 1: - outfile = args[0] - else: - sys.stderr.write ('usage: viterbi_out.py output_file\n') - sys.exit (1) - - tb = gr.top_block() - - src = gr.file_source(atsc.sizeof_atsc_soft_data_segment, "/tmp/atsc_pipe_5") - viterbi = atsc.viterbi_decoder() - deinter = atsc.deinterleaver() - rs_dec = atsc.rs_decoder() - derand = atsc.derandomizer() - depad = atsc.depad() - dst = gr.file_sink(gr.sizeof_char,outfile) - tb.connect(src, viterbi, deinter, rs_dec, derand, depad, dst) - tb.run () - - -if __name__ == '__main__': - main(sys.argv[1:]) - - - - - - diff --git a/gr-atsc/src/python/xlate.py b/gr-atsc/src/python/xlate.py deleted file mode 100755 index 68e280a8c..000000000 --- a/gr-atsc/src/python/xlate.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env /usr/bin/python -# -# Copyright 2004,2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# This module upconverts the 19.2e6 sample rate signal from a center -# of 0 to 5.75e6 and converts to float, to prepare the signal for -# the old gnuradio 0.9 block (bit timing loop, field sync checker, -# equalizer and field sync demux), effectively simulating an -# mc4020 card, except the sample rate is 19.2e6 instead of 20e6. -# -# The signal is then centered on 5.75e6 with edges at 5.75 + 3.2 = 8.95MHz -# and 5.75 - 3.2 = 2.55Mhz, low pass filtered with cutoff at 9Mhz and a -# transition band width of 1Mhz. -# -# Input complex -3.2 to 3.2Mhz, output float 2.55 to 8.95Mhz. - -from gnuradio import gr -import os - -def graph (): - print os.getpid() - sampling_freq = 19200000 - - tb = gr.top_block () - - src0 = gr.file_source (gr.sizeof_gr_complex,"/tmp/atsc_pipe_1") - - duc_coeffs = gr.firdes.low_pass ( 1, 19.2e6, 9e6, 1e6, gr.firdes.WIN_HAMMING ) - duc = gr.freq_xlating_fir_filter_ccf ( 1, duc_coeffs, 5.75e6, 19.2e6 ) - - c2f = gr.complex_to_float() - file = gr.file_sink(gr.sizeof_float,"/tmp/atsc_pipe_2") - - tb.connect( src0, duc, c2f, file ) - - tb.run() - -if __name__ == '__main__': - graph () |