patch-gnuradio
[Top][All Lists]
Advanced

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

[Patch-gnuradio] gr_sig_source_X phase


From: Patrick Strasser
Subject: [Patch-gnuradio] gr_sig_source_X phase
Date: Tue, 06 Mar 2007 18:57:44 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.6) Gecko/20050602 Thunderbird/1.0.2 Mnenhy/0.7.2.0

Hello!

Added phase parameter to gr_sig_source_X. This should be compatible with Josh Blum's new wave forms.
Phase is in radians, like in the NCO.

Patrick
--
Engineers motto: cheap, good, fast: choose any two
Patrick Strasser <patrick dot strasser at  tugraz dot at>
Student of Telematik, Techn. University Graz, Austria
Index: gr_sig_source_X.cc.t
===================================================================
--- gr_sig_source_X.cc.t        (revision 4483)
+++ gr_sig_source_X.cc.t        (working copy)
@@ -33,21 +33,21 @@
 
 
 @NAME@::@NAME@ (double sampling_freq, gr_waveform_t waveform,
-               double frequency, double ampl, @TYPE@ offset)
+               double frequency, double ampl, @TYPE@ offset, double phase)
   : gr_sync_block ("@BASE_NAME@",
                   gr_make_io_signature (0, 0, 0),
                   gr_make_io_signature (1, 1, sizeof (@TYPE@))),
     d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency 
(frequency),
-    d_ampl (ampl), d_offset (offset)
+    d_ampl (ampl), d_offset (offset), d_phase (phase)
 {
   d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq);
 }
 
 @address@hidden
 address@hidden@ (double sampling_freq, gr_waveform_t waveform,
-                    double frequency, double ampl, @TYPE@ offset)
+                    double frequency, double ampl, @TYPE@ offset, double phase)
 {
-  return @address@hidden (new @NAME@ (sampling_freq, waveform, frequency, 
ampl, offset));
+  return @address@hidden (new @NAME@ (sampling_freq, waveform, frequency, 
ampl, offset, phase));
 }
 
 int
@@ -147,3 +147,12 @@
   d_offset = offset;
 }
 
+void 
address@hidden@::set_phase (double phase)
+{
+  double diff_phase = phase - d_phase;
+  d_phase = fmod ((d_phase + diff_phase),  M_PI);
+  // We want an absolute phase, gr_fxt_nco has only relative phase
+  // thus we adjust the phase of the running NCO
+  d_nco.adjust_phase (diff_phase);
+}
Index: gr_sig_source_X.h.t
===================================================================
--- gr_sig_source_X.h.t (revision 4483)
+++ gr_sig_source_X.h.t (working copy)
@@ -40,18 +40,19 @@
 class @NAME@ : public gr_sync_block {
   friend @address@hidden 
   address@hidden@ (double sampling_freq, gr_waveform_t waveform,
-                      double frequency, double ampl, @TYPE@ offset);
+                      double frequency, double ampl, @TYPE@ offset, double 
phase);
 
   double               d_sampling_freq;
   gr_waveform_t                d_waveform;
   double               d_frequency;
   double               d_ampl;
   @TYPE@               d_offset;
+  double               d_phase; /// Phase offset in radians
   gr_fxpt_nco          d_nco;
 
 
   @NAME@ (double sampling_freq, gr_waveform_t waveform,
-         double wave_freq, double ampl, @TYPE@ offset);
+         double wave_freq, double ampl, @TYPE@ offset, double phase);
 
  public:
   virtual int work (int noutput_items,
@@ -64,6 +65,7 @@
   double frequency () const { return d_frequency; }
   double amplitude () const { return d_ampl; }
   @TYPE@ offset () const { return d_offset; }
+  double phase () const {return d_phase; }
 
   // MANIPULATORS
   void set_sampling_freq (double sampling_freq);
@@ -71,11 +73,12 @@
   void set_frequency (double frequency);
   void set_amplitude (double ampl);
   void set_offset (@TYPE@ offset);
+  void set_phase (double phase);
 };
 
 @address@hidden
 address@hidden@ (double sampling_freq, gr_waveform_t waveform,
-                    double wave_freq, double ampl, @TYPE@ offset = 0);
+                    double wave_freq, double ampl, @TYPE@ offset = 0, double 
phase = 0);
 
 
 #endif
Index: gr_sig_source_X.i.t
===================================================================
--- gr_sig_source_X.i.t (revision 4483)
+++ gr_sig_source_X.i.t (working copy)
@@ -26,13 +26,13 @@
 
 @address@hidden
 address@hidden@ (double sampling_freq, gr_waveform_t waveform,
-                    double wave_freq, double ampl, @TYPE@ offset = 0);
+                    double wave_freq, double ampl, @TYPE@ offset = 0, double 
phase = 0);
 
 
 class @NAME@ : public gr_sync_block {
  private:
   @NAME@ (double sampling_freq, gr_waveform_t waveform,
-         double wave_freq, double ampl, @TYPE@ offset);
+         double wave_freq, double ampl, @TYPE@ offset, double phase);
 
  public:
 
@@ -42,6 +42,7 @@
   double frequency () const { return d_frequency; }
   double amplitude () const { return d_ampl; }
   @TYPE@ offset () const { return d_offset; }
+  double phase () const { return d_phase; }
 
   // MANIPULATORS
   void set_sampling_freq (double sampling_freq);
@@ -49,4 +50,5 @@
   void set_frequency (double frequency);
   void set_amplitude (double ampl);
   void set_offset (@TYPE@ offset);
+  void set_phase (double phase);
 };

reply via email to

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