Index: gr_nco.h =================================================================== RCS file: /cvsroot/gnuradio/gnuradio-core/src/lib/general/gr_nco.h,v retrieving revision 1.3 diff -u -r1.3 gr_nco.h --- src/lib/general/gr_nco.h 31 Jul 2004 22:23:25 -0000 1.3 +++ src/lib/general/gr_nco.h 15 Jun 2005 22:07:48 -0000 @@ -42,22 +42,22 @@ virtual ~gr_nco () {} // radians - void set_phase (float angle) { + void set_phase (double angle) { phase = angle; } - void adjust_phase (float delta_phase) { + void adjust_phase (double delta_phase) { phase += delta_phase; } // angle_rate is in radians / step - void set_freq (float angle_rate){ + void set_freq (double angle_rate){ phase_inc = angle_rate; } // angle_rate is a delta in radians / step - void adjust_freq (float delta_angle_rate) + void adjust_freq (double delta_angle_rate) { phase_inc += delta_angle_rate; } @@ -77,11 +77,22 @@ } } - void step (int n) { phase += phase_inc * n; } + 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 - float get_phase () const { return phase; } - float get_freq () const { return phase_inc; } + 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; @@ -95,9 +104,9 @@ float sin () const { return std::sin (phase); } protected: - float phase; - float phase_inc; + double phase; + double phase_inc; }; template