commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r8788 - gnuradio/branches/developers/jblum/gr-wxglgui/


From: jblum
Subject: [Commit-gnuradio] r8788 - gnuradio/branches/developers/jblum/gr-wxglgui/src/python
Date: Fri, 4 Jul 2008 01:58:49 -0600 (MDT)

Author: jblum
Date: 2008-07-04 01:58:49 -0600 (Fri, 04 Jul 2008)
New Revision: 8788

Modified:
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/common.py
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/constsink.py
   gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py
Log:
constsink with mpsk recv

Modified: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/common.py
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/common.py  
2008-07-04 05:07:15 UTC (rev 8787)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/common.py  
2008-07-04 07:58:49 UTC (rev 8788)
@@ -185,12 +185,12 @@
                font = self.GetFont()
                font.SetWeight(wx.FONTWEIGHT_BOLD)
                self.SetFont(font)
-               
+
 class IncrDecrButtons(wx.BoxSizer):
        """!
        A horizontal box sizer with a increment and a decrement button.
        """
-       
+
        def __init__(self, parent, on_incr, on_decr):
                """!
                @param parent the parent window
@@ -204,15 +204,43 @@
                self._decr_button = wx.Button(parent, -1, ' - ', 
style=wx.BU_EXACTFIT)
                self._decr_button.Bind(wx.EVT_BUTTON, on_decr)
                self.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL)
-       
+
        def Enable(self):
                self._incr_button.Enable()
                self._decr_button.Enable()
-               
+
        def Disable(self):
                self._incr_button.Disable()
                self._decr_button.Disable()
 
+       def _set_slider_value(self, real_value):
+               """!
+               Translate the real numerical value into a slider value and,
+               write the value to the slider.
+               @param real_value the numeric value the slider should represent
+               """
+               slider_value = (float(real_value) - 
self.min)*self.num_steps/(self.max - self.min)
+               self.slider.SetValue(slider_value)
+
+       def _handle_scroll(self, event=None):
+               """!
+               A scroll event is detected. Read the slider, call the callback.
+               """
+               slider_value = self.slider.GetValue()
+               new_value = slider_value*(self.max - self.min)/self.num_steps + 
self.min
+               self.text_box.SetValue(str(new_value))
+               self._value = new_value
+               self.callback(self._value)
+
+       def _handle_enter(self, event=None):
+               """!
+               An enter key was pressed. Read the text box, call the callback.
+               """
+               new_value = float(self.text_box.GetValue())
+               self._set_slider_value(new_value)
+               self._value = new_value
+               self.callback(self._value)
+
 ##################################################
 # Shared Functions
 ##################################################

Modified: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/constsink.py
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/constsink.py       
2008-07-04 05:07:15 UTC (rev 8787)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/constsink.py       
2008-07-04 07:58:49 UTC (rev 8788)
@@ -28,10 +28,14 @@
 import wx
 import numpy
 import time
+import math
 
 ##################################################
 # Constants
 ##################################################
+SLIDER_STEPS = 100
+ALPHA_MIN, ALPHA_MAX = 0, .02
+GAIN_MU_MIN, GAIN_MU_MAX = 0, .02
 DEFAULT_FRAME_RATE = 5
 DEFAULT_WIN_SIZE = (500, 400)
 DEFAULT_CONST_SIZE = 1024
@@ -59,20 +63,58 @@
                control_box = wx.BoxSizer(wx.VERTICAL)
 
                #begin control box
-               control_box.AddSpacer(2)
+               control_box.AddStretchSpacer()
                control_box.Add(common.LabelText(self, 'Options'), 0, 
wx.ALIGN_CENTER)
                control_box.AddSpacer(2)
+               #alpha
+               self.alpha_label = wx.StaticText(self, -1, '')
+               control_box.Add(self.alpha_label, 0, wx.EXPAND)
+               self.alpha_slider = wx.Slider(self, -1, 0, 0, SLIDER_STEPS, 
style=wx.SL_HORIZONTAL)
+               self.alpha_slider.Bind(wx.EVT_SCROLL, self._on_alpha)
+               control_box.Add(self.alpha_slider, 0, wx.EXPAND)
+               control_box.AddStretchSpacer()
+               #mu
+               hbox = wx.BoxSizer(wx.HORIZONTAL)
+               control_box.Add(hbox, 1, wx.EXPAND)
+               hbox.Add(wx.StaticText(self, -1, ' Mu: '), 0, 
wx.ALIGN_CENTER_VERTICAL)
+               self.mu_text_box = wx.TextCtrl(self, -1, '', 
style=wx.TE_PROCESS_ENTER)
+               self.mu_text_box.Bind(wx.EVT_TEXT_ENTER, self._on_mu)
+               hbox.Add(self.mu_text_box, 0, wx.ALIGN_CENTER_VERTICAL)
+               control_box.AddStretchSpacer()
+               #gain_mu
+               self.gain_mu_label = wx.StaticText(self, -1, '')
+               control_box.Add(self.gain_mu_label, 0, wx.EXPAND)
+               self.gain_mu_slider = wx.Slider(self, -1, 0, 0, SLIDER_STEPS, 
style=wx.SL_HORIZONTAL)
+               self.gain_mu_slider.Bind(wx.EVT_SCROLL, self._on_gain_mu)
+               control_box.Add(self.gain_mu_slider, 0, wx.EXPAND)
+               control_box.AddStretchSpacer()
+               #omega
+               hbox = wx.BoxSizer(wx.HORIZONTAL)
+               control_box.Add(hbox, 1, wx.EXPAND)
+               hbox.Add(wx.StaticText(self, -1, ' Omega: '), 0, 
wx.ALIGN_CENTER_VERTICAL)
+               self.omega_text_box = wx.TextCtrl(self, -1, '', 
style=wx.TE_PROCESS_ENTER)
+               self.omega_text_box.Bind(wx.EVT_TEXT_ENTER, self._on_omega)
+               hbox.Add(self.omega_text_box, 0, wx.ALIGN_CENTER_VERTICAL)
+               control_box.AddStretchSpacer()
+               #run/stop
                self.run_button = wx.Button(self, -1, '', style=wx.BU_EXACTFIT)
                self.run_button.Bind(wx.EVT_BUTTON, self._on_run)
                control_box.Add(self.run_button, 0, wx.EXPAND)
                #end control box
-               control_box.AddSpacer(2)
+               control_box.AddStretchSpacer()
                #set sizer
                self.SetSizerAndFit(control_box)
                #update
                self.update()
 
        def update(self):
+               #update mpsk params
+               self.alpha_label.SetLabel('Alpha: %g'%self.parent.alpha)
+               
self.alpha_slider.SetValue(SLIDER_STEPS*(self.parent.alpha-ALPHA_MIN)/(ALPHA_MAX-ALPHA_MIN))
+               self.mu_text_box.SetValue(str(self.parent.mu))
+               self.gain_mu_label.SetLabel('Gain Mu: %g'%self.parent.gain_mu)
+               
self.gain_mu_slider.SetValue(SLIDER_STEPS*(self.parent.gain_mu-GAIN_MU_MIN)/(GAIN_MU_MAX-GAIN_MU_MIN))
+               self.omega_text_box.SetValue(str(self.parent.omega))
                #update the run/stop button
                if self.parent.running: self.run_button.SetLabel('Stop')
                else: self.run_button.SetLabel('Run')
@@ -81,6 +123,12 @@
        # Event handlers
        ##################################################
        def _on_run(self, event): self.parent.set_run(not self.parent.running)
+       def _on_alpha(self, event):
+               
self.parent.set_alpha((ALPHA_MAX-ALPHA_MIN)*self.alpha_slider.GetValue()/SLIDER_STEPS
 + ALPHA_MIN)
+       def _on_mu(self, event): 
self.parent.set_mu(float(self.mu_text_box.GetValue()))
+       def _on_gain_mu(self, event):
+               
self.parent.set_gain_mu((GAIN_MU_MAX-GAIN_MU_MIN)*self.gain_mu_slider.GetValue()/SLIDER_STEPS
 + GAIN_MU_MIN)
+       def _on_omega(self, event): 
self.parent.set_omega(float(self.omega_text_box.GetValue()))
 
 ##################################################
 # Constellation window with plotter and control panel
@@ -93,12 +141,35 @@
                title,
                frame_rate,
                sample_rate,
+               alpha,
+               mu,
+               gain_mu,
+               omega,
+               #callbacks to mpsk recv
+               ext_set_alpha,
+               ext_set_beta,
+               ext_set_mu,
+               ext_set_gain_mu,
+               ext_set_omega,
+               ext_set_gain_omega,
        ):
                #setup
                self.running = True
                self.sample_rate = sample_rate
                self.x_divs = 8
                self.y_divs = 8
+               #mspk settings
+               self.alpha = alpha
+               self.mu = mu
+               self.gain_mu = gain_mu
+               self.omega = omega
+               #callbacks to mpsk recv
+               self.ext_set_alpha = ext_set_alpha
+               self.ext_set_beta = ext_set_beta
+               self.ext_set_mu = ext_set_mu
+               self.ext_set_gain_mu = ext_set_gain_mu
+               self.ext_set_omega = ext_set_omega
+               self.ext_set_gain_omega = ext_set_gain_omega
                #init panel and plot
                wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER)
                self.plotter = plotter.grid_plotter(self)
@@ -128,16 +199,25 @@
                        channel=0,
                        samples=(real, imag),
                        color_spec=CONST_PLOT_COLOR_SPEC,
-                       marker='+',
+                       marker='.',
                )
                #update the plotter
                self.plotter.update()
 
        def update(self):
+               #update mpsk
+               self.ext_set_alpha(self.alpha)
+               self.ext_set_beta(.25*self.alpha**2)
+               self.ext_set_mu(self.mu)
+               self.ext_set_gain_mu(self.gain_mu)
+               self.ext_set_omega(self.omega)
+               self.ext_set_gain_omega(.25*self.gain_mu**2)
                #update the x axis
-               self.plotter.set_x_grid(-1, 1, 
common.get_clean_num(2.0/self.x_divs))
+               x_max = 1.2
+               self.plotter.set_x_grid(-x_max, x_max, 
common.get_clean_num(2.0*x_max/self.x_divs))
                #update the y axis
-               self.plotter.set_y_grid(-1, 1, 
common.get_clean_num(2.0/self.y_divs))
+               y_max = 1.2
+               self.plotter.set_y_grid(-y_max, y_max, 
common.get_clean_num(2.0*y_max/self.y_divs))
                #update control panel and plotter
                self.control_panel.update()
                self.plotter.update()
@@ -145,17 +225,17 @@
        ##################################################
        # Set parameters on-the-fly
        ##################################################
-       def set_x_per_div(self, x_per_div):
-               self.x_per_div = x_per_div
+       def set_alpha(self, alpha):
+               self.alpha = alpha
                self.update()
-       def set_x_off(self, x_off):
-               self.x_off = x_off
+       def set_mu(self, mu):
+               self.mu = mu
                self.update()
-       def set_y_per_div(self, y_per_div):
-               self.y_per_div = y_per_div
+       def set_gain_mu(self, gain_mu):
+               self.gain_mu = gain_mu
                self.update()
-       def set_y_off(self, y_off):
-               self.y_off = y_off
+       def set_omega(self, omega):
+               self.omega = omega
                self.update()
        def set_run(self, running):
                self.running = running
@@ -177,6 +257,15 @@
                size=DEFAULT_WIN_SIZE,
                frame_rate=DEFAULT_FRAME_RATE,
                const_size=DEFAULT_CONST_SIZE,
+               #mpsk recv params
+               M=4,
+               theta=0,
+               alpha=0.005,
+               fmax=0.06,
+               mu=0.5,
+               gain_mu=0.005,
+               omega=2, #samples per symbol
+               omega_rel=0.005,
        ):
                #init
                gr.hier_block2.__init__(
@@ -192,10 +281,27 @@
                        vec_rate=frame_rate,
                        vec_len=const_size,
                )
+               beta = .25*alpha**2
+               fmin = -fmax
+               gain_omega = .25*gain_mu**2
+               sync = gr.mpsk_receiver_cc(
+                       M, #psk order
+                       theta,
+                       alpha,
+                       beta,
+                       fmin,
+                       fmax,
+                       mu,
+                       gain_mu,
+                       omega,
+                       gain_omega,
+                       omega_rel,
+               )
+               agc = gr.feedforward_agc_cc(16, 1)
                msgq = gr.msg_queue(2)
                sink = gr.message_sink(gr.sizeof_gr_complex*const_size, msgq, 
True)
                #connect
-               self.connect(self, sd, sink)
+               self.connect(self, sync, agc, sd, sink)
                #create window
                self.win = const_window(
                        parent=parent,
@@ -203,6 +309,17 @@
                        title=title,
                        frame_rate=frame_rate,
                        sample_rate=sample_rate,
+                       alpha=alpha,
+                       mu=mu,
+                       gain_mu=gain_mu,
+                       omega=omega,
+                       #callbacks to mpsk recv
+                       ext_set_alpha=sync.set_alpha,
+                       ext_set_beta=sync.set_beta,
+                       ext_set_mu=sync.set_mu,
+                       ext_set_gain_mu=sync.set_gain_mu,
+                       ext_set_omega=sync.set_omega,
+                       ext_set_gain_omega=sync.set_gain_omega,
                )
                #register callbacks from window for external use
                self.set_sample_rate = sd.set_sample_rate

Modified: gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py
===================================================================
--- gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py 
2008-07-04 05:07:15 UTC (rev 8787)
+++ gnuradio/branches/developers/jblum/gr-wxglgui/src/python/fftsink.py 
2008-07-04 07:58:49 UTC (rev 8788)
@@ -130,8 +130,8 @@
                ref_level,
                average,
                peak_hold,
-               set_average,
-               set_sample_rate,
+               ext_set_average,
+               ext_set_sample_rate,
        ):
                #ensure y_per_div
                if y_per_div not in DIV_LEVELS: y_per_div = DIV_LEVELS[0]
@@ -145,8 +145,8 @@
                self.ref_level = ref_level
                self.average = average
                self.peak_hold = peak_hold
-               self.fft_set_average = set_average
-               self.fft_set_sample_rate = set_sample_rate
+               self.ext_set_average = ext_set_average
+               self.ext_set_sample_rate = ext_set_sample_rate
                self.peak_vals = []
                #init panel and plot
                wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER)
@@ -190,8 +190,8 @@
 
        def update(self):
                #update fft block
-               self.fft_set_average(self.average)
-               self.fft_set_sample_rate(self.sample_rate)
+               self.ext_set_average(self.average)
+               self.ext_set_sample_rate(self.sample_rate)
                #update peak hold
                if not self.peak_hold: self.peak_vals = []
                #determine best fitting x_per_div
@@ -310,8 +310,8 @@
                        ref_level=ref_level,
                        average=average,
                        peak_hold=peak_hold,
-                       set_average=fft.set_average,
-                       set_sample_rate=fft.set_sample_rate,
+                       ext_set_average=fft.set_average,
+                       ext_set_sample_rate=fft.set_sample_rate,
                )
                #register callbacks from window for external use
                self.set_baseband_freq = self.win.set_baseband_freq





reply via email to

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