commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5656 - in grc/branches/jblum_work: notes src src/Elem


From: jblum
Subject: [Commit-gnuradio] r5656 - in grc/branches/jblum_work: notes src src/Elements src/Graphics src/SignalBlockDefs
Date: Sun, 3 Jun 2007 20:14:43 -0600 (MDT)

Author: jblum
Date: 2007-06-03 20:14:43 -0600 (Sun, 03 Jun 2007)
New Revision: 5656

Removed:
   grc/branches/jblum_work/notes/stock_id.lst
Modified:
   grc/branches/jblum_work/notes/clean.sh
   grc/branches/jblum_work/notes/notes.txt
   grc/branches/jblum_work/src/Elements/Socket.py
   grc/branches/jblum_work/src/Graphics/Dialogs.py
   grc/branches/jblum_work/src/MathExprParser.py
   grc/branches/jblum_work/src/SignalBlockDefs/Conversions.py
   grc/branches/jblum_work/src/SignalBlockDefs/Filters.py
   grc/branches/jblum_work/src/SignalBlockDefs/Misc.py
   grc/branches/jblum_work/src/SignalBlockDefs/Modulators.py
   grc/branches/jblum_work/src/SignalBlockDefs/SignalBlockTree.py
Log:
added some pll blocks, added missing vlens in some blocks, skip head block, 
misc changes in math parser and help dialogs

Modified: grc/branches/jblum_work/notes/clean.sh
===================================================================
--- grc/branches/jblum_work/notes/clean.sh      2007-06-04 02:08:23 UTC (rev 
5655)
+++ grc/branches/jblum_work/notes/clean.sh      2007-06-04 02:14:43 UTC (rev 
5656)
@@ -1,6 +1,7 @@
 #!/bin/bash
+#clean up compliled python files, and temporary files from editing
 cd ..
 pwd
 rm -rf `find ./ -type f -name "*.pyc"`
-rm -rf `find ./ -type f -name "*py~"`
+rm -rf `find ./ -type f -name "*.py~"`
 rm -rf `find ./ -type f -name "*.bak"`

Modified: grc/branches/jblum_work/notes/notes.txt
===================================================================
--- grc/branches/jblum_work/notes/notes.txt     2007-06-04 02:08:23 UTC (rev 
5655)
+++ grc/branches/jblum_work/notes/notes.txt     2007-06-04 02:14:43 UTC (rev 
5656)
@@ -44,4 +44,6 @@
 -min/max in DataTypes can be other data types
 -press enter to close params
 
+############   Get GTK Stock IDs:      ####################
+       gtk.stock_list_ids()
        
\ No newline at end of file

Deleted: grc/branches/jblum_work/notes/stock_id.lst

Modified: grc/branches/jblum_work/src/Elements/Socket.py
===================================================================
--- grc/branches/jblum_work/src/Elements/Socket.py      2007-06-04 02:08:23 UTC 
(rev 5655)
+++ grc/branches/jblum_work/src/Elements/Socket.py      2007-06-04 02:14:43 UTC 
(rev 5656)
@@ -23,7 +23,7 @@
 """
 
 from Element import Element
-import Utils
+import Utils,DataType
 from Connection import TooManyConnectionsException
 
 class Socket(Element):
@@ -72,7 +72,7 @@
                
        def get_data_type(self):
                ''' Get the data type. If the parsed vlen > 1, then return the 
vectorized data type.'''
-               if self.vlen != None and self.vlen.is_valid() and 
self.vlen.parse() > 1: return vectorize(self.data_type)
+               if self.vlen != None and self.vlen.is_valid() and 
self.vlen.parse() > 1: return DataType.vectorize(self.data_type)
                return self.data_type
                        
        def get_index(self):

Modified: grc/branches/jblum_work/src/Graphics/Dialogs.py
===================================================================
--- grc/branches/jblum_work/src/Graphics/Dialogs.py     2007-06-04 02:08:23 UTC 
(rev 5655)
+++ grc/branches/jblum_work/src/Graphics/Dialogs.py     2007-06-04 02:14:43 UTC 
(rev 5656)
@@ -203,24 +203,18 @@
 class MathExprDialog(gtk.Dialog):
        """ A dialog to test math expressions for the parser.   """
        HELP_MSG = """\
-<span size="small">
 <b>Operators - Complex   <i>(complex arguments)</i></b> 
-       + - * / ^
-       
+       + - * / ^       
 <b>Trigonometric Functions   <i>(complex arguments, radians)</i></b> 
        sin(z) cos(z) tan(z) asin(z) acos(z) atan(z) 
-       sinh(z) cosh(z) tanh(z) asinh(z) acosh(z) atanh(z)
-       
+       sinh(z) cosh(z) tanh(z) asinh(z) acosh(z) atanh(z)      
+<b>Complex Components   <i>(complex arguments)</i></b>
+       mag(z*) real(z*) imag(z*) conj(z*) arg(z)
 <b>Misc Functions   <i>(complex arguments)</i></b> 
-       pow(b, p) sqrt(z)
-       abs(z*) mag(z*) real(z*) imag(z*) conj(z*) - z can be a vector
-       arg(z) - complex angle
-       log10(z) log(z, [b=e]) ln(z) exp(z) 
-
+       abs(z*) pow(b, p) sqrt(z) log10(z) log(z, [b=e]) ln(z) exp(z) 
 <b>Misc Functions   <i>(floating point arguments)</i></b> 
        floor(f) ceil(f) radians(deg) degrees(rad) mod(f1, f2) atan2(y, x) 
sgn(f)
-
-<b>Filter Taps Generators   <i>(floating point arguments)</i></b> 
+<b>Filter Taps Generators   <i>(floating point arguments, rates and 
frequencies in Hz)</i></b> 
        low_pass(gain, samp_rate, cutoff_freq, width, [window=hamming], 
[beta=6.76])
        high_pass(gain, samp_rate, cutoff_freq, width, [window=hamming], 
[beta=6.76])   
        band_pass(gain, samp_rate, low_cutoff_freq, high_cutoff_freq, width, 
[window=hamming], [beta=6.76])
@@ -229,16 +223,14 @@
        gaussian(gain, spb, bt, int ntaps)
        hilbert(int ntaps, [window=rectangular], [beta=6.76])
        root_raised_cosine(gain, samp_rate, symbol_rate, alpha, int ntaps) 
-       window(window, int ntaps, beta)
-       
+       window(window, int ntaps, beta) 
 <b>Window Types for Filters</b>
        hamming hann blackman rectangular kaiser
-       
+<b>Other Constants</b>
+       pi e j  
 <b>Using Vectors</b>
-       () (num1,) (num2, num2, ...)
-       
-<b>Test Your Expressions Below:</b>
-</span>\
+       () (num1,) (num2, num2, ...)    
+<b>Test Your Expressions Below:</b>\
 """
        def __init__(self):
                """     Create a new gtk Dialog with a close button, an extry 
box, and an output text box.      """             
@@ -249,7 +241,7 @@
                label.set_markup(self.HELP_MSG)
                label.show()
                self.vbox.pack_start(label, False)              
-               self.set_size_request(600, 600)
+               self.set_size_request(800, 600)
                # create the entry box and connect it to a new handler #
                self.param = GraphicalParam('Expression', RawExpr(''))
                self.input_obj = self.param.get_input_object()

Modified: grc/branches/jblum_work/src/MathExprParser.py
===================================================================
--- grc/branches/jblum_work/src/MathExprParser.py       2007-06-04 02:08:23 UTC 
(rev 5655)
+++ grc/branches/jblum_work/src/MathExprParser.py       2007-06-04 02:14:43 UTC 
(rev 5656)
@@ -202,7 +202,7 @@
        'degrees' : lambda f: math.degrees(verify_float(f)),
        'mod' : lambda f1, f2: math.fmod(verify_float(f1), verify_float(f2)),
        'atan2' : lambda y, x: math.atan2(verify_float(y), verify_float(x)),
-       'sgn' : lambda f: abs(f)/f
+       'sgn' : lambda f: abs(verify_float(f))/verify_float(f)
 }
 
 #########################################################
@@ -247,7 +247,7 @@
                ']' : '[',
                '{' : '}',
                '}' : '{',
-               None : None
+               '' : ''
        }[bracket]
        
 #########################################################
@@ -285,7 +285,7 @@
                elif op == '*':
                        return verify_number(arg1 * arg2)
                elif op == '/':
-                       try: return verify_number(arg1 / arg2)
+                       try: return verify_number(verify_complex(arg1) / 
verify_complex(arg2))  #make sure to use non-integer division
                        except ZeroDivisionError: raise 
ZeroDivisionError('Cannot divide "%s" by 0.'%(arg1,))
                elif op == '+':
                        return verify_number(arg1 + arg2)
@@ -339,7 +339,7 @@
                else: rectified_elements.append(element)        #non minus
        return rectified_elements
 
-def _nest_elements(elements, open_bracket=None):
+def _nest_elements(elements, open_bracket=''):
        '''     Read through the elements, recursing at each open bracket.
                Put elements inside bracket pairs into a list.  
                Raise an Error if bracket pairs do not match.   

Modified: grc/branches/jblum_work/src/SignalBlockDefs/Conversions.py
===================================================================
--- grc/branches/jblum_work/src/SignalBlockDefs/Conversions.py  2007-06-04 
02:08:23 UTC (rev 5655)
+++ grc/branches/jblum_work/src/SignalBlockDefs/Conversions.py  2007-06-04 
02:14:43 UTC (rev 5656)
@@ -27,14 +27,17 @@
 from SignalBlockConstants import all_choices,all_vector_choices
 from Constants import MAX_NUM_SOCKETS
 
-def ComplexComponents(sb):
-       sb.add_input_socket('in', Complex())
-       sb.add_output_socket('out', Float())
+def ComplexComponents(sb):             
+       vlen = Int(1, min=1)
+       sb.add_input_socket('in', Complex(), vlen=vlen)
+       sb.add_output_socket('out', Float(), vlen=vlen)
        sb.add_param('Output Type', Enum([('Real', gr.complex_to_real),
                                                                                
                ('Imaginary', gr.complex_to_imag),
                                                                                
                ('Magnitude', gr.complex_to_mag),
+                                                                               
                ('Magnitude Squared', gr.complex_to_mag_squared),
                                                                                
                ('Phase Angle', gr.complex_to_arg)]), type=True)        
-       return sb, lambda fg, type: type.parse()(1)
+       sb.add_param('Vector Length', vlen)
+       return sb, lambda fg, type, vlen: type.parse()(vlen.parse())
        
 def ComplexConjugate(sb):
        sb.add_input_socket('in', Complex())
@@ -48,12 +51,14 @@
        sb.set_docs('''The imaginary input socket (jin) can be unconnected.''')
        return sb, lambda fg: gr.float_to_complex()
        
-def ComplexToFloat(sb):
-       sb.add_output_socket('out', Float())
-       sb.add_output_socket('jout', Float(), optional=True)
+def ComplexToFloat(sb):        
+       vlen = Int(1, min=1)
+       sb.add_output_socket('out', Float(), vlen=vlen)
+       sb.add_output_socket('jout', Float(), vlen=vlen, optional=True)
        sb.add_input_socket('in', Complex())            
+       sb.add_param('Vector Length', vlen)
        sb.set_docs('''The imaginary output socket (jout) can be 
unconnected.''')
-       return sb, lambda fg: gr.complex_to_float()
+       return sb, lambda fg, vlen: gr.complex_to_float(vlen.parse())
        
 def ShortToFloat(sb):
        sb.add_input_socket('in', Short())

Modified: grc/branches/jblum_work/src/SignalBlockDefs/Filters.py
===================================================================
--- grc/branches/jblum_work/src/SignalBlockDefs/Filters.py      2007-06-04 
02:08:23 UTC (rev 5655)
+++ grc/branches/jblum_work/src/SignalBlockDefs/Filters.py      2007-06-04 
02:14:43 UTC (rev 5656)
@@ -310,23 +310,6 @@
        sb.set_docs('''Constant Modulus Adaptive Filter.''')
        return sb, lambda fg, num_taps, mod, mu: fcn(num_taps.parse(), 
mod.parse(), mu.parse())
        
-def CostasLoop(sb):
-       fcn = gr.costas_loop_cc
-       sb.add_input_socket('in', Complex())
-       sb.add_output_socket('bout', Complex())
-       sb.add_output_socket('nout', Complex(), optional=True)
-       sb.add_param('Alpha', Float())
-       sb.add_param('Beta', Float())
-       sb.add_param('Max Freq', Float())
-       sb.add_param('Min Freq', Float())
-       sb.add_param('Order', Enum([('2', 2), ('4', 4)]))
-       sb.set_docs('''\
-Carrier tracking PLL for QPSK input. \
-The Costas loop has two output streams: \
-"bout" is the baseband I stream, "nout" is the normalized frequency of the 
loop. \
-The "nout" may be left open. ''')
-       return sb, lambda fg, *args: fcn(*map(lambda a: a.parse(), args))
-       
 def ClockRecovery(sb):
        type = Enum([('Complex', (gr.clock_recovery_mm_cc, Complex())),
                                        ('Float', (gr.clock_recovery_mm_ff, 
Float())),])

Modified: grc/branches/jblum_work/src/SignalBlockDefs/Misc.py
===================================================================
--- grc/branches/jblum_work/src/SignalBlockDefs/Misc.py 2007-06-04 02:08:23 UTC 
(rev 5655)
+++ grc/branches/jblum_work/src/SignalBlockDefs/Misc.py 2007-06-04 02:14:43 UTC 
(rev 5656)
@@ -49,8 +49,20 @@
        sb.add_param('Num Items', Int(1000, min=0))     
        sb.add_param('Vector Length', vlen)
        sb.set_docs('''Copies the first num items to the output then signals 
done.''')  
-       return sb, lambda fg, type, samp_rate, vlen: 
fcn(type.parse().get_num_bytes()*vlen.parse(), samp_rate.parse())
+       return sb, lambda fg, type, num_items, vlen: 
fcn(type.parse().get_num_bytes()*vlen.parse(), num_items.parse())
        
+def SkipHead(sb):
+       fcn = gr.skiphead
+       type = Enum(all_choices, 1)     
+       vlen = Int(1, min=1)
+       sb.add_input_socket('in', Variable(type), vlen=vlen)
+       sb.add_output_socket('out', Variable(type), vlen=vlen)
+       sb.add_param('Type', type, False, type=True)
+       sb.add_param('Num Items', Int(1000, min=0))     
+       sb.add_param('Vector Length', vlen)
+       sb.set_docs('''Skips the first num items, and then copies input to 
output.''')  
+       return sb, lambda fg, type, num_items, vlen: 
fcn(type.parse().get_num_bytes()*vlen.parse(), num_items.parse())
+       
 def RMS(sb):
        type = Enum([('Complex', (gr.rms_cf, Complex())),
                                        ('Float', (gr.rms_ff, Float())),

Modified: grc/branches/jblum_work/src/SignalBlockDefs/Modulators.py
===================================================================
--- grc/branches/jblum_work/src/SignalBlockDefs/Modulators.py   2007-06-04 
02:08:23 UTC (rev 5655)
+++ grc/branches/jblum_work/src/SignalBlockDefs/Modulators.py   2007-06-04 
02:14:43 UTC (rev 5656)
@@ -192,4 +192,50 @@
        sb.set_docs('''Mu is the fractional delay between 0 and 1''')
        return sb, lambda fg, *args: fcn(fg, *map(lambda a: a.parse(), args))
        
+###########################################################################
+#      Phase Locked Loops
+###########################################################################    
+       
+def CostasLoop(sb):
+       fcn = gr.costas_loop_cc
+       sb.add_input_socket('in', Complex())
+       sb.add_output_socket('bout', Complex())
+       sb.add_output_socket('nout', Complex(), optional=True)
+       sb.add_param('Alpha', Float())
+       sb.add_param('Beta', Float())
+       sb.add_param('Max Freq', Float())
+       sb.add_param('Min Freq', Float())
+       sb.add_param('Order', Enum([('2', 2), ('4', 4)]))
+       sb.set_docs('''\
+Carrier tracking PLL for QPSK input. \
+The Costas loop has two output streams: \
+"bout" is the baseband I stream, "nout" is the normalized frequency of the 
loop. \
+The "nout" may be left open. ''')
+       return sb, lambda fg, *args: fcn(*map(lambda a: a.parse(), args))
+       
+def PLL(sb):
+       type = Enum([                                           #fcn, output 
type
+               ('Carrier Tracking', (gr.pll_carriertracking_cc, Complex())),
+               ('Freq Det', (gr.pll_freqdet_cf, Float())),
+               ('Ref Out', (gr.pll_refout_cc, Complex())),
+       ])
+       sb.add_input_socket('in', Complex())
+       sb.add_output_socket('out', Variable(type, index=1))
+       sb.add_param('Type', type, type=True)   
+       sb.add_param('Alpha', Float())
+       sb.add_param('Beta', Float())
+       sb.add_param('Max Freq', Float())
+       sb.add_param('Min Freq', Float())
+       sb.set_docs('''\
+All settings max_freq and min_freq are in terms of radians per sample, NOT 
HERTZ. \
+Alpha is the phase gain (first order, units of radians per radian), and \
+beta is the frequency gain (second order, units of radians per sample per 
radian).
+
+Carrier Tracking - This PLL locks onto a [possibly noisy] reference carrier on 
the input and outputs that signal, downconverted to DC.
+
+Freq Det - This PLL locks onto a [possibly noisy] reference carrier on the 
input and outputs an estimate of that frequency in radians per sample.
+
+Ref Out - This PLL locks onto a [possibly noisy] reference carrier on the 
input and outputs a clean version which is phase and frequency aligned to it.
+''')
+       return sb, lambda fg, type, *args: type.parse()[0](*map(lambda a: 
a.parse(), args))             
        
\ No newline at end of file

Modified: grc/branches/jblum_work/src/SignalBlockDefs/SignalBlockTree.py
===================================================================
--- grc/branches/jblum_work/src/SignalBlockDefs/SignalBlockTree.py      
2007-06-04 02:08:23 UTC (rev 5655)
+++ grc/branches/jblum_work/src/SignalBlockDefs/SignalBlockTree.py      
2007-06-04 02:14:43 UTC (rev 5656)
@@ -127,7 +127,6 @@
                                ('Automatic Gain Control', 
Filters.AutomaticGainControl),
                                ('Automatic Gain Control2', 
Filters.AutomaticGainControl2),
                                ('CMA Filter', Filters.CMAFilter),
-                               ('Costas Loop', Filters.CostasLoop),
                                ('Clock Recovery', Filters.ClockRecovery),
                                ('FFT', Filters.FFT),
                                ('IFFT', Filters.IFFT),
@@ -136,6 +135,8 @@
                                ('Frequency Modulation', 
Modulators.FrequencyModulation),
                                ('Phase Modulation', 
Modulators.PhaseModulation),
                                ('Quadrature Demodulation', 
Modulators.QuadratureDemodulation),
+                               ('Costas Loop', Modulators.CostasLoop),
+                               ('Phase Locked Loop', Modulators.PLL),
                                ('WFM Receive', Modulators.WFMReceive),         
        
                                ('WFM Transmit', Modulators.WFMTransmit),       
                                ('NBFM Receive', Modulators.NBFMReceive),       
                
@@ -166,7 +167,8 @@
          ]),
                        ('Misc', [      
                                ('Throttle', Misc.Throttle),
-                               ('Head', Misc.Head),                    
+                               ('Head', Misc.Head),    
+                               ('Skip Head', Misc.SkipHead),                   
                                ('RMS', Misc.RMS),      
                                ('About', Misc.About),
                                ('Note', Misc.Note),    





reply via email to

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