patch-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Patch-gnuradio] gr_rotator fix/optimization


From: Dan Halperin
Subject: [Patch-gnuradio] gr_rotator fix/optimization
Date: Thu, 06 Sep 2007 20:58:26 -0700
User-agent: Thunderbird 1.5.0.13 (X11/20070824)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Two changes:

1) Default phase increment changed from 1 to 0. This will not cause
faults and instead do nothing if the rotator phase is not initialized.

2) It seems like we can skip (expensive!) normalization of phase vector
if we simply normalize phase and increment upon setup. I suppose there
could be some lowest-order-bit precision errors that cause phase to
degrade over a super-long-running system, but we could surely at least
replace the current every-time normalization with normalization every K
calls, for large K (1 million+).

This change took about 12% off the runtime of my code and the results
are the same :)

- -Dan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFG4Mxiy9GYuuMoUJ4RAiD3AJ9/LbQmxAOUvttkYcwrfHTTsre9MwCgq3cP
j1zDqkE4CNIrQ3MKZHzwqUY=
=zSQM
-----END PGP SIGNATURE-----
/* -*- c++ -*- */
/*
 * Copyright 2003 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_ROTATOR_H_
#define _GR_ROTATOR_H_

#include <gr_complex.h>

class gr_rotator {
  gr_complex    d_phase;
  gr_complex    d_phase_incr;

 public:
  gr_rotator () : d_phase (1), d_phase_incr (1) { }

  void set_phase (gr_complex phase)     { d_phase = phase / abs(phase); }
  void set_phase_incr (gr_complex incr) { d_phase_incr = incr / abs(incr); }

  gr_complex rotate (gr_complex in){
    d_phase *= d_phase_incr;    // incr our phase (complex mult == add phases)

    return in * d_phase;        // rotate in by phase
  }

};

#endif /* _GR_ROTATOR_H_ */

reply via email to

[Prev in Thread] Current Thread [Next in Thread]