diff options
author | Tom Rondeau <trondeau@vt.edu> | 2013-03-18 12:40:58 -0400 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2013-03-18 12:40:58 -0400 |
commit | d4e3aa83de313e6eb9f6c4e186d8f7a3b4bfcc64 (patch) | |
tree | 20f1e68059d14a02a1cc6c02481398e7caa3e8c7 | |
parent | 19e39553188395a4ee057fa8c5e0f92cbeda4f28 (diff) |
blocks: removing fxpt, nco, vco primitives from gr-blocks.
Have decided to keep all basic math functions in core.
-rw-r--r-- | gr-blocks/include/blocks/CMakeLists.txt | 5 | ||||
-rw-r--r-- | gr-blocks/include/blocks/fxpt.h | 112 | ||||
-rw-r--r-- | gr-blocks/include/blocks/fxpt_nco.h | 168 | ||||
-rw-r--r-- | gr-blocks/include/blocks/fxpt_vco.h | 94 | ||||
-rw-r--r-- | gr-blocks/include/blocks/nco.h | 210 | ||||
-rw-r--r-- | gr-blocks/include/blocks/vco.h | 113 | ||||
-rw-r--r-- | gr-blocks/lib/CMakeLists.txt | 4 | ||||
-rw-r--r-- | gr-blocks/lib/fxpt.cc | 40 | ||||
-rw-r--r-- | gr-blocks/lib/qa_blocks.cc | 6 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt.cc | 104 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt.h | 47 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt_nco.cc | 122 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt_nco.h | 47 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt_vco.cc | 112 | ||||
-rw-r--r-- | gr-blocks/lib/qa_fxpt_vco.h | 47 | ||||
-rw-r--r-- | gr-blocks/lib/vco_f_impl.h | 4 |
16 files changed, 2 insertions, 1233 deletions
diff --git a/gr-blocks/include/blocks/CMakeLists.txt b/gr-blocks/include/blocks/CMakeLists.txt index fcd31e31a8..bb9c1c79df 100644 --- a/gr-blocks/include/blocks/CMakeLists.txt +++ b/gr-blocks/include/blocks/CMakeLists.txt @@ -105,15 +105,10 @@ install(FILES control_loop.h count_bits.h file_sink_base.h - fxpt.h - fxpt_nco.h - fxpt_vco.h lfsr_15_1_0.h lfsr_32k.h log2_const.h rotator.h - nco.h - vco.h wavfile.h add_ff.h annotator_1to1.h diff --git a/gr-blocks/include/blocks/fxpt.h b/gr-blocks/include/blocks/fxpt.h deleted file mode 100644 index 37938eb14a..0000000000 --- a/gr-blocks/include/blocks/fxpt.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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_GR_FXPT_H -#define INCLUDED_GR_FXPT_H - -#include <blocks/api.h> -#include <stdint.h> -#include <cmath> - -namespace gr { - namespace blocks { - - /*! - * \brief fixed point sine and cosine and friends. - * \ingroup misc - * - * fixed pt radians - * --------- -------- - * -2**31 -pi - * 0 0 - * 2**31-1 pi - epsilon - * - */ - class BLOCKS_API fxpt - { - private: - static const int WORDBITS = 32; - static const int NBITS = 10; - static const float s_sine_table[1 << NBITS][2]; - static const float PI; - static const float TWO_TO_THE_31; - - public: - - static int32_t - float_to_fixed(float x) - { - // Fold x into -PI to PI. - int d = (int)floor(x/2/PI+0.5); - x -= d*2*PI; - // And convert to an integer. - return (int32_t)((float)x * TWO_TO_THE_31 / PI); - } - - static float - fixed_to_float(int32_t x) - { - return x * (PI / TWO_TO_THE_31); - } - - /*! - * \brief Given a fixed point angle x, return float sine (x) - */ - static float - sin(int32_t x) - { - uint32_t ux = x; - int index = ux >> (WORDBITS - NBITS); - return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1]; - } - - /* - * \brief Given a fixed point angle x, return float cosine (x) - */ - static float - cos(int32_t x) - { - uint32_t ux = x + 0x40000000; - int index = ux >> (WORDBITS - NBITS); - return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1]; - } - - /* - * \brief Given a fixedpoint angle x, return float cos(x) and sin (x) - */ - static void - sincos(int32_t x, float *s, float *c) - { - uint32_t ux = x; - int sin_index = ux >> (WORDBITS - NBITS); - *s = s_sine_table[sin_index][0] * (ux >> 1) + s_sine_table[sin_index][1]; - - ux = x + 0x40000000; - int cos_index = ux >> (WORDBITS - NBITS); - *c = s_sine_table[cos_index][0] * (ux >> 1) + s_sine_table[cos_index][1]; - } - }; - - } /* namespace blocks */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_FXPT_H */ diff --git a/gr-blocks/include/blocks/fxpt_nco.h b/gr-blocks/include/blocks/fxpt_nco.h deleted file mode 100644 index 7db20fbb3a..0000000000 --- a/gr-blocks/include/blocks/fxpt_nco.h +++ /dev/null @@ -1,168 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2004,2013 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_GR_FXPT_NCO_H -#define INCLUDED_GR_FXPT_NCO_H - -#include <blocks/api.h> -#include <blocks/fxpt.h> -#include <gr_complex.h> - -namespace gr { - namespace blocks { - - /*! - * \brief Numerically Controlled Oscillator (NCO) - * \ingroup misc - * - * Calculate sine and cosine based on the current phase. This - * class has multiple ways to calculate sin/cos and when - * requensting a range will increment the phase based on a - * frequency, which can be set using set_freq. Similar interfaces - * to the fxpt_vco can also be used to set or adjust the current - * phase. - */ - class fxpt_nco - { - private: - uint32_t d_phase; - int32_t d_phase_inc; - - public: - fxpt_nco() : d_phase(0), d_phase_inc(0) {} - - ~fxpt_nco() {} - - //! Set the current phase \p angle in radians - void set_phase(float angle) { - d_phase = fxpt::float_to_fixed(angle); - } - - //! Update the current phase in radians by \p delta_phase - void adjust_phase(float delta_phase) { - d_phase += fxpt::float_to_fixed(delta_phase); - } - - //! angle_rate is in radians / step - void set_freq(float angle_rate) { - d_phase_inc = fxpt::float_to_fixed(angle_rate); - } - - //! angle_rate is a delta in radians / step - void adjust_freq(float delta_angle_rate) { - d_phase_inc += fxpt::float_to_fixed(delta_angle_rate); - } - - //! increment current phase angle - void step() { - d_phase += d_phase_inc; - } - - //! increment current phase angle n times - void step(int n) { - d_phase += d_phase_inc * n; - } - - //! units are radians / step - float get_phase() const { return fxpt::fixed_to_float(d_phase); } - float get_freq() const { return fxpt::fixed_to_float(d_phase_inc); } - - //! compute sin and cos for current phase angle - void sincos(float *sinx, float *cosx) const - { - *sinx = fxpt::sin(d_phase); - *cosx = fxpt::cos(d_phase); - } - - //! compute cos and sin for a block of phase angles - void sincos(gr_complex *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = gr_complex(fxpt::cos(d_phase) * ampl, - fxpt::sin(d_phase) * ampl); - step(); - } - } - - //! compute sin for a block of phase angles - void sin(float *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (float)(fxpt::sin(d_phase) * ampl); - step(); - } - } - - //! compute cos for a block of phase angles - void cos(float *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (float)(fxpt::cos(d_phase) * ampl); - step(); - } - } - - //! compute sin for a block of phase angles - void sin(short *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (short)(fxpt::sin(d_phase) * ampl); - step(); - } - } - - //! compute cos for a block of phase angles - void cos(short *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (short)(fxpt::cos(d_phase) * ampl); - step(); - } - } - - //! compute sin for a block of phase angles - void sin(int *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (int)(fxpt::sin(d_phase) * ampl); - step(); - } - } - - //! compute cos for a block of phase angles - void cos(int *output, int noutput_items, double ampl=1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (int)(fxpt::cos(d_phase) * ampl); - step(); - } - } - - //! compute cos or sin for current phase angle - float cos() const { return fxpt::cos(d_phase); } - float sin() const { return fxpt::sin(d_phase); } - }; - - } /* namespace blocks */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_FXPT_NCO_H */ diff --git a/gr-blocks/include/blocks/fxpt_vco.h b/gr-blocks/include/blocks/fxpt_vco.h deleted file mode 100644 index c313a494fb..0000000000 --- a/gr-blocks/include/blocks/fxpt_vco.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2004,2005,2013 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_GR_FXPT_VCO_H -#define INCLUDED_GR_FXPT_VCO_H - -#include <blocks/api.h> -#include <blocks/fxpt.h> -#include <gr_complex.h> - -namespace gr { - namespace blocks { - - /*! - * \brief Voltage Controlled Oscillator (VCO) - * \ingroup misc - * - * Simple calculations of sine and cosine. Set the phase using - * set_phase or adjust it by some delta using adjust_phase. Sine - * and cosine can be retrieved together with sincos(sinx, cosx) - * where sinx and cosx are the returned values at the current - * phase. They can be retrieved individually using either sin() or - * cos(). - */ - class BLOCKS_API fxpt_vco - { - private: - int32_t d_phase; - - public: - fxpt_vco() : d_phase(0) {} - - ~fxpt_vco() {} - - //! Set the current phase \p angle in radians - void set_phase(float angle) { - d_phase = fxpt::float_to_fixed(angle); - } - - //! Update the current phase in radians by \p delta_phase - void adjust_phase(float delta_phase) { - d_phase += fxpt::float_to_fixed(delta_phase); - } - - //! Get the current phase in radians - float get_phase() const { - return fxpt::fixed_to_float(d_phase); - } - - //! compute sin and cos for current phase angle - void sincos(float *sinx, float *cosx) const - { - *sinx = fxpt::sin(d_phase); - *cosx = fxpt::cos(d_phase); - } - - //! compute a block at a time - void cos(float *output, const float *input, int noutput_items, - float k, float ampl = 1.0) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (float)(fxpt::cos(d_phase) * ampl); - adjust_phase(input[i] * k); - } - } - - //! compute cos or sin for current phase angle - float cos() const { return fxpt::cos(d_phase); } - float sin() const { return fxpt::sin(d_phase); } - }; - - } /* namespace blocks */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_FXPT_VCO_H */ diff --git a/gr-blocks/include/blocks/nco.h b/gr-blocks/include/blocks/nco.h deleted file mode 100644 index e6658a3572..0000000000 --- a/gr-blocks/include/blocks/nco.h +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002,2013 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 _GR_NCO_H_ -#define _GR_NCO_H_ - -#include <vector> -#include <gr_sincos.h> -#include <cmath> -#include <gr_complex.h> - -namespace gr { - namespace blocks { - - /*! - * \brief base class template for Numerically Controlled Oscillator (NCO) - * \ingroup misc - * - * Calculate sine and cosine based on the current phase. This - * class has multiple ways to calculate sin/cos and when - * requensting a range will increment the phase based on a - * frequency, which can be set using set_freq. Similar interfaces - * to the fxpt_vco can also be used to set or adjust the current - * phase. - * - * \sa fxpt_nco.h for fixed-point implementation. - */ - template<class o_type, class i_type> - class nco - { - public: - nco() : phase(0), phase_inc(0) {} - - virtual ~nco() {} - - //! Set the current phase \p angle in radians - void set_phase(double angle) { - phase = angle; - } - - //! Update the current phase in radians by \p delta_phase - void adjust_phase(double delta_phase) { - phase += delta_phase; - } - - //! angle_rate is in radians / step - void set_freq(double angle_rate) { - phase_inc = angle_rate; - } - - //! angle_rate is a delta in radians / step - void adjust_freq(double delta_angle_rate) { - phase_inc += delta_angle_rate; - } - - //! increment current phase angle - void step() - { - phase += phase_inc; - if(fabs (phase) > M_PI) { - - while(phase > M_PI) - phase -= 2*M_PI; - - while(phase < -M_PI) - phase += 2*M_PI; - } - } - - //! increment current phase angle n times - void step(int n) - { - phase += phase_inc * n; - if(fabs (phase) > M_PI) { - - while(phase > M_PI) - phase -= 2*M_PI; - - while(phase < -M_PI) - phase += 2*M_PI; - } - } - - //! units are radians / step - double get_phase() const { return phase; } - double get_freq() const { return phase_inc; } - - //! compute sin and cos for current phase angle - void sincos(float *sinx, float *cosx) const; - - //! compute cos or sin for current phase angle - float cos() const { return std::cos (phase); } - float sin() const { return std::sin (phase); } - - //! compute a block at a time - void sin(float *output, int noutput_items, double ampl = 1.0); - void cos(float *output, int noutput_items, double ampl = 1.0); - void sincos(gr_complex *output, int noutput_items, double ampl = 1.0); - void sin(short *output, int noutput_items, double ampl = 1.0); - void cos(short *output, int noutput_items, double ampl = 1.0); - void sin(int *output, int noutput_items, double ampl = 1.0); - void cos(int *output, int noutput_items, double ampl = 1.0); - - protected: - double phase; - double phase_inc; - }; - - template<class o_type, class i_type> - void - nco<o_type,i_type>::sincos(float *sinx, float *cosx) const - { - gr_sincosf(phase, sinx, cosx); - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::sin(float *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (float)(sin() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::cos(float *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++){ - output[i] = (float)(cos() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::sin(short *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (short)(sin() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::cos(short *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (short)(cos() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::sin(int *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (int)(sin() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::cos(int *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = (int)(cos() * ampl); - step(); - } - } - - template<class o_type, class i_type> - void - nco<o_type,i_type>::sincos(gr_complex *output, int noutput_items, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - float cosx, sinx; - sincos(&sinx, &cosx); - output[i] = gr_complex(cosx * ampl, sinx * ampl); - step(); - } - } - - } /* namespace blocks */ -} /* namespace gr */ - -#endif /* _NCO_H_ */ diff --git a/gr-blocks/include/blocks/vco.h b/gr-blocks/include/blocks/vco.h deleted file mode 100644 index 4417d588ae..0000000000 --- a/gr-blocks/include/blocks/vco.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005,2013 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 _GR_VCO_H_ -#define _GR_VCO_H_ - -#include <vector> -#include <gr_sincos.h> -#include <cmath> -#include <gr_complex.h> - -namespace gr { - namespace blocks { - - /*! - * \brief base class template for Voltage Controlled Oscillator (VCO) - * \ingroup misc - * - * Simple calculations of sine and cosine. Set the phase using - * set_phase or adjust it by some delta using adjust_phase. Sine - * and cosine can be retrieved together with sincos(sinx, cosx) - * where sinx and cosx are the returned values at the current - * phase. They can be retrieved individually using either sin() or - * cos(). - * - * \sa fxpt_nco.h for fixed-point implementation. - */ - - template<class o_type, class i_type> - class vco - { - public: - vco() : d_phase(0) {} - - virtual ~vco() {} - - //! Set the current phase \p angle in radians - void set_phase(double angle) { - d_phase = angle; - } - - //! Update the current phase in radians by \p delta_phase - void adjust_phase(double delta_phase) { - d_phase += delta_phase; - if(fabs(d_phase) > M_PI) { - - while(d_phase > M_PI) - d_phase -= 2*M_PI; - - while(d_phase < -M_PI) - d_phase += 2*M_PI; - } - } - - //! Get the current phase in radians - double get_phase() const { return d_phase; } - - //! compute sin and cos for current phase angle - void sincos(float *sinx, float *cosx) const; - - //! compute cos or sin for current phase angle - float cos() const { return std::cos(d_phase); } - float sin() const { return std::sin(d_phase); } - - //! compute a block at a time - void cos(float *output, const float *input, int noutput_items, - double k, double ampl = 1.0); - - protected: - double d_phase; - }; - - template<class o_type, class i_type> - void - vco<o_type,i_type>::sincos(float *sinx, float *cosx) const - { - gr_sincosf(d_phase, sinx, cosx); - } - - template<class o_type, class i_type> - void - vco<o_type,i_type>::cos(float *output, const float *input, int noutput_items, - double k, double ampl) - { - for(int i = 0; i < noutput_items; i++) { - output[i] = cos() * ampl; - adjust_phase(input[i] * k); - } - } - - } /* namespace blocks */ -} /* namespace gr */ - -#endif /* _VCO_H_ */ diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt index 76af61a906..67c44b2df9 100644 --- a/gr-blocks/lib/CMakeLists.txt +++ b/gr-blocks/lib/CMakeLists.txt @@ -142,7 +142,6 @@ list(APPEND gr_blocks_sources control_loop.cc count_bits.cc file_sink_base.cc - fxpt.cc wavfile.cc add_ff_impl.cc annotator_1to1_impl.cc @@ -287,9 +286,6 @@ if(ENABLE_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/test_gr_blocks.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_blocks.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_block_tags.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_fxpt.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_fxpt_nco.cc - ${CMAKE_CURRENT_SOURCE_DIR}/qa_fxpt_vco.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_rotator.cc ) diff --git a/gr-blocks/lib/fxpt.cc b/gr-blocks/lib/fxpt.cc deleted file mode 100644 index 4566f7c595..0000000000 --- a/gr-blocks/lib/fxpt.cc +++ /dev/null @@ -1,40 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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 <blocks/fxpt.h> - -namespace gr { - namespace blocks { - - const float fxpt::s_sine_table[1 << NBITS][2] = { - #include "sine_table.h" - }; - - const float fxpt::PI = 3.14159265358979323846; - const float fxpt::TWO_TO_THE_31 = 2147483648.0; - - } /* namespace blocks */ -} /* namespace gr */ diff --git a/gr-blocks/lib/qa_blocks.cc b/gr-blocks/lib/qa_blocks.cc index ebf5d3c349..409b5d5762 100644 --- a/gr-blocks/lib/qa_blocks.cc +++ b/gr-blocks/lib/qa_blocks.cc @@ -27,9 +27,6 @@ #include <qa_blocks.h> #include <qa_block_tags.h> -#include <qa_fxpt.h> -#include <qa_fxpt_nco.h> -#include <qa_fxpt_vco.h> #include <qa_rotator.h> CppUnit::TestSuite * @@ -38,9 +35,6 @@ qa_gr_blocks::suite() CppUnit::TestSuite *s = new CppUnit::TestSuite("gr-blocks"); s->addTest(qa_block_tags::suite()); - s->addTest(qa_fxpt::suite()); - s->addTest(qa_fxpt_nco::suite()); - s->addTest(qa_fxpt_vco::suite()); s->addTest(qa_rotator::suite()); return s; diff --git a/gr-blocks/lib/qa_fxpt.cc b/gr-blocks/lib/qa_fxpt.cc deleted file mode 100644 index 9ce26b240b..0000000000 --- a/gr-blocks/lib/qa_fxpt.cc +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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_fxpt.h> -#include <blocks/fxpt.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -static const float SIN_COS_TOLERANCE = 1e-5; - -using namespace gr::blocks; - -void -qa_fxpt::t0() -{ - CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/2, fxpt::fixed_to_float(0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, fxpt::fixed_to_float(0x00000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL(-M_PI, fxpt::fixed_to_float(0x80000000), SIN_COS_TOLERANCE); - - if(0) { - /* - * These are disabled because of some precision issues. - * - * Different compilers seem to have different opinions on whether - * the calulations are done single or double (or extended) - * precision. Any of the answers are fine for our real purpose, but - * sometimes the answer is off by a few bits at the bottom. - * Hence, the disabled check. - */ - CPPUNIT_ASSERT_EQUAL((int32_t) 0x40000000, fxpt::float_to_fixed(M_PI/2)); - CPPUNIT_ASSERT_EQUAL((int32_t) 0, fxpt::float_to_fixed(0)); - CPPUNIT_ASSERT_EQUAL((int32_t) 0x80000000, fxpt::float_to_fixed(-M_PI)); - } -} - -void -qa_fxpt::t1() -{ - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, fxpt::sin (0x00000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.707106781, fxpt::sin (0x20000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 1, fxpt::sin (0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.707106781, fxpt::sin (0x60000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, fxpt::sin (0x7fffffff), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, fxpt::sin (0x80000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, fxpt::sin (0x80000001), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL(-1, fxpt::sin (-0x40000000), SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.707106781, fxpt::sin (-0x20000000), SIN_COS_TOLERANCE); - - for(float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600) { - float expected = sin(p); - float actual = fxpt::sin(fxpt::float_to_fixed(p)); - CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, SIN_COS_TOLERANCE); - } -} - -void -qa_fxpt::t2() -{ - for(float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600) { - float expected = cos(p); - float actual = fxpt::cos(fxpt::float_to_fixed(p)); - CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, SIN_COS_TOLERANCE); - } -} - -void -qa_fxpt::t3() -{ - for(float p = -M_PI; p < M_PI; p += 2 * M_PI / 3600) { - float expected_sin = sin(p); - float expected_cos = cos(p); - float actual_sin; - float actual_cos; - fxpt::sincos(fxpt::float_to_fixed(p), &actual_sin, &actual_cos); - CPPUNIT_ASSERT_DOUBLES_EQUAL(expected_sin, actual_sin, SIN_COS_TOLERANCE); - CPPUNIT_ASSERT_DOUBLES_EQUAL(expected_cos, actual_cos, SIN_COS_TOLERANCE); - } -} diff --git a/gr-blocks/lib/qa_fxpt.h b/gr-blocks/lib/qa_fxpt.h deleted file mode 100644 index 7a9e2a86ed..0000000000 --- a/gr-blocks/lib/qa_fxpt.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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_QA_GR_FXPT_H -#define INCLUDED_QA_GR_FXPT_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_fxpt : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(qa_fxpt); - CPPUNIT_TEST(t0); - CPPUNIT_TEST(t1); - CPPUNIT_TEST(t2); - CPPUNIT_TEST(t3); - CPPUNIT_TEST_SUITE_END(); - - private: - void t0(); - void t1(); - void t2(); - void t3(); -}; - -#endif /* INCLUDED_QA_GR_FXPT_H */ - - diff --git a/gr-blocks/lib/qa_fxpt_nco.cc b/gr-blocks/lib/qa_fxpt_nco.cc deleted file mode 100644 index 63c0a92902..0000000000 --- a/gr-blocks/lib/qa_fxpt_nco.cc +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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_fxpt_nco.h> -#include <blocks/fxpt_nco.h> -#include <blocks/nco.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -using namespace gr::blocks; - -static const float SIN_COS_TOLERANCE = 1e-5; - -//static const float SIN_COS_FREQ = 5003; -static const float SIN_COS_FREQ = 4096; - -static const int SIN_COS_BLOCK_SIZE = 100000; - -static double max_d(double a, double b) -{ - return fabs(a) > fabs(b) ? a : b; -} - -void -qa_fxpt_nco::t0() -{ - nco<float,float> ref_nco; - fxpt_nco new_nco; - double max_error = 0, max_phase_error = 0; - - ref_nco.set_freq((float)(2 * M_PI / SIN_COS_FREQ)); - new_nco.set_freq((float)(2 * M_PI / SIN_COS_FREQ)); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_nco.get_freq(), new_nco.get_freq(), SIN_COS_TOLERANCE); - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - float ref_sin = ref_nco.sin(); - float new_sin = new_nco.sin(); - //printf ("i = %6d\n", i); - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_sin, new_sin, SIN_COS_TOLERANCE); - - max_error = max_d(max_error, ref_sin-new_sin); - - float ref_cos = ref_nco.cos(); - float new_cos = new_nco.cos(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_cos, new_cos, SIN_COS_TOLERANCE); - - max_error = max_d(max_error, ref_cos-new_cos); - - ref_nco.step(); - new_nco.step(); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_nco.get_phase(), new_nco.get_phase(), SIN_COS_TOLERANCE); - - max_phase_error = max_d(max_phase_error, ref_nco.get_phase()-new_nco.get_phase()); - } - // printf("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - -void -qa_fxpt_nco::t1() -{ - nco<float,float> ref_nco; - fxpt_nco new_nco; - gr_complex ref_block[SIN_COS_BLOCK_SIZE]; - gr_complex new_block[SIN_COS_BLOCK_SIZE]; - double max_error = 0; - - ref_nco.set_freq((float)(2 * M_PI / SIN_COS_FREQ)); - new_nco.set_freq((float)(2 * M_PI / SIN_COS_FREQ)); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_nco.get_freq(), new_nco.get_freq(), SIN_COS_TOLERANCE); - - ref_nco.sincos((gr_complex*)ref_block, SIN_COS_BLOCK_SIZE); - new_nco.sincos((gr_complex*)new_block, SIN_COS_BLOCK_SIZE); - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_block[i].real(), new_block[i].real(), SIN_COS_TOLERANCE); - max_error = max_d(max_error, ref_block[i].real()-new_block[i].real()); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_block[i].imag(), new_block[i].imag(), SIN_COS_TOLERANCE); - max_error = max_d(max_error, ref_block[i].imag()-new_block[i].imag()); - } - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_nco.get_phase(), new_nco.get_phase(), SIN_COS_TOLERANCE); - // printf("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - -void -qa_fxpt_nco::t2() -{ -} - -void -qa_fxpt_nco::t3() -{ -} diff --git a/gr-blocks/lib/qa_fxpt_nco.h b/gr-blocks/lib/qa_fxpt_nco.h deleted file mode 100644 index ac4e5d2ade..0000000000 --- a/gr-blocks/lib/qa_fxpt_nco.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2013 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_QA_GR_FXPT_NCO_H -#define INCLUDED_QA_GR_FXPT_NCO_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_fxpt_nco : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(qa_fxpt_nco); - CPPUNIT_TEST(t0); - CPPUNIT_TEST(t1); - CPPUNIT_TEST(t2); - CPPUNIT_TEST(t3); - CPPUNIT_TEST_SUITE_END(); - - private: - void t0(); - void t1(); - void t2(); - void t3(); -}; - -#endif /* INCLUDED_QA_GR_FXPT_NCO_H */ - - diff --git a/gr-blocks/lib/qa_fxpt_vco.cc b/gr-blocks/lib/qa_fxpt_vco.cc deleted file mode 100644 index 2efce0506b..0000000000 --- a/gr-blocks/lib/qa_fxpt_vco.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005,2013 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_fxpt_vco.h> -#include <blocks/fxpt_vco.h> -#include <blocks/vco.h> -#include <cppunit/TestAssert.h> -#include <iostream> -#include <stdio.h> -#include <unistd.h> -#include <math.h> - -using namespace gr::blocks; - -static const float SIN_COS_TOLERANCE = 1e-5; - -static const float SIN_COS_K = 0.42; -static const float SIN_COS_AMPL = 0.8; - -static const int SIN_COS_BLOCK_SIZE = 100000; - -static double max_d(double a, double b) -{ - return fabs(a) > fabs(b) ? a : b; -} - -void -qa_fxpt_vco::t0() -{ - vco<float,float> ref_vco; - fxpt_vco new_vco; - double max_error = 0, max_phase_error = 0; - float input[SIN_COS_BLOCK_SIZE]; - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - input[i] = sin(double(i)); - } - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - float ref_cos = ref_vco.cos(); - float new_cos = new_vco.cos(); - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_cos, new_cos, SIN_COS_TOLERANCE); - - max_error = max_d(max_error, ref_cos-new_cos); - - ref_vco.adjust_phase(input[i]); - new_vco.adjust_phase(input[i]); - - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_vco.get_phase(), new_vco.get_phase(), SIN_COS_TOLERANCE); - - max_phase_error = max_d(max_phase_error, ref_vco.get_phase()-new_vco.get_phase()); - } - // printf("Fxpt max error %.9f, max phase error %.9f\n", max_error, max_phase_error); -} - -void -qa_fxpt_vco::t1() -{ - vco<float,float> ref_vco; - fxpt_vco new_vco; - float ref_block[SIN_COS_BLOCK_SIZE]; - float new_block[SIN_COS_BLOCK_SIZE]; - float input[SIN_COS_BLOCK_SIZE]; - double max_error = 0; - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - input[i] = sin(double(i)); - } - - ref_vco.cos(ref_block, input, SIN_COS_BLOCK_SIZE, SIN_COS_K, SIN_COS_AMPL); - new_vco.cos(new_block, input, SIN_COS_BLOCK_SIZE, SIN_COS_K, SIN_COS_AMPL); - - for(int i = 0; i < SIN_COS_BLOCK_SIZE; i++) { - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_block[i], new_block[i], SIN_COS_TOLERANCE); - max_error = max_d(max_error, ref_block[i]-new_block[i]); - } - CPPUNIT_ASSERT_DOUBLES_EQUAL(ref_vco.get_phase(), new_vco.get_phase(), SIN_COS_TOLERANCE); - // printf("Fxpt max error %.9f, max phase error %.9f\n", max_error, ref_vco.get_phase()-new_vco.get_phase()); -} - -void -qa_fxpt_vco::t2() -{ -} - -void -qa_fxpt_vco::t3() -{ -} diff --git a/gr-blocks/lib/qa_fxpt_vco.h b/gr-blocks/lib/qa_fxpt_vco.h deleted file mode 100644 index 72693f32e2..0000000000 --- a/gr-blocks/lib/qa_fxpt_vco.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005,2013 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_QA_GR_FXPT_VCO_H -#define INCLUDED_QA_GR_FXPT_VCO_H - -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/TestCase.h> - -class qa_fxpt_vco : public CppUnit::TestCase -{ - CPPUNIT_TEST_SUITE(qa_fxpt_vco); - CPPUNIT_TEST(t0); - CPPUNIT_TEST(t1); - CPPUNIT_TEST(t2); - CPPUNIT_TEST(t3); - CPPUNIT_TEST_SUITE_END(); - -private: - void t0(); - void t1(); - void t2(); - void t3(); -}; - -#endif /* INCLUDED_QA_GR_FXPT_VCO_H */ - - diff --git a/gr-blocks/lib/vco_f_impl.h b/gr-blocks/lib/vco_f_impl.h index cecf72441f..37435b7736 100644 --- a/gr-blocks/lib/vco_f_impl.h +++ b/gr-blocks/lib/vco_f_impl.h @@ -24,7 +24,7 @@ #define INCLUDED_GR_VCO_F_IMPL_H #include <blocks/vco_f.h> -#include <blocks/fxpt_vco.h> +#include <gr_fxpt_vco.h> namespace gr { namespace blocks { @@ -36,7 +36,7 @@ namespace gr { double d_sensitivity; double d_amplitude; double d_k; - fxpt_vco d_vco; + gr_fxpt_vco d_vco; public: vco_f_impl(double sampling_rate, double sensitivity, double amplitude); |