[Top][All Lists]
[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),
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5656 - in grc/branches/jblum_work: notes src src/Elements src/Graphics src/SignalBlockDefs,
jblum <=