[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r8788 - gnuradio/branches/developers/jblum/gr-wxglgui/src/python,
jblum <=