[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5932 - in grc/trunk: notes src/SignalBlockDefs
From: |
jblum |
Subject: |
[Commit-gnuradio] r5932 - in grc/trunk: notes src/SignalBlockDefs |
Date: |
Wed, 11 Jul 2007 12:13:10 -0600 (MDT) |
Author: jblum
Date: 2007-07-11 12:13:09 -0600 (Wed, 11 Jul 2007)
New Revision: 5932
Added:
grc/trunk/src/SignalBlockDefs/Audio.py
Modified:
grc/trunk/notes/notes.txt
grc/trunk/src/SignalBlockDefs/Custom.py
grc/trunk/src/SignalBlockDefs/Misc.py
grc/trunk/src/SignalBlockDefs/SignalBlockConstants.py
grc/trunk/src/SignalBlockDefs/SignalBlockTree.py
grc/trunk/src/SignalBlockDefs/Sinks.py
grc/trunk/src/SignalBlockDefs/Sources.py
grc/trunk/src/SignalBlockDefs/USRP.py
Log:
audio block wrappers and trial usrp dual source
Modified: grc/trunk/notes/notes.txt
===================================================================
--- grc/trunk/notes/notes.txt 2007-07-11 03:35:13 UTC (rev 5931)
+++ grc/trunk/notes/notes.txt 2007-07-11 18:13:09 UTC (rev 5932)
@@ -1,7 +1,7 @@
############ Blocks to Add: ####################
-ofdm
-usrp misc settings
--usrp dual and quad souce
+-usrp quad souce, set z == 1 to ignore Q inputs
-blks blocks, add filesave for logging
-combine add/mult with add/mult vector
-tun/tap block (with input and output)
Added: grc/trunk/src/SignalBlockDefs/Audio.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Audio.py (rev 0)
+++ grc/trunk/src/SignalBlockDefs/Audio.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -0,0 +1,134 @@
+"""
+Copyright 2007 Free Software Foundation, Inc.
+This file is part of GNU Radio
+
+GNU Radio Companion is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+GNU Radio Companion is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+"""
address@hidden SignalBlockDefs.Audio
+#Wrappers and definitions for the audio source and sink.
address@hidden Josh Blum
+
+from DataTypes import *
+from gnuradio import gr
+
+##possible audio rates for audio source/sink
+audio_rates = [
+ ('16KHz', int(16e3)),
+ ('22.05KHz', int(22.05e3)),
+ ('24KHz', int(24e3)),
+ ('32KHz', int(32e3)),
+ ('44.1KHz', int(44.1e3)),
+ ('48KHz', int(48e3)),
+]
+
+##index of the default audio rate
+default_audio_rate_index = 3
+
+##type source
+SOURCE = 'source'
+
+##type sink
+SINK = 'sink'
+
+class AudioHelper(gr.hier_block2):
+ """This block deletes and creates an internal audio block
+ to avoid problems with stopping the audio device."""
+
+ def __init__(self, samp_rate, type):
+ """!
+ AudioHelper contructor.
+ @param samp_rate audio sampling rate
+ @param type SOURCE or SINK
+ """
+ self.type = type
+ assert(type in (SOURCE, SINK))
+ if self.type == SINK:
+ gr.hier_block2.__init__(
+ self, "audio_sink_helper",
+ gr.io_signature(1, 2, Float().get_num_bytes()),
+ gr.io_signature(0, 0, 0),
+ )
+ elif self.type == SOURCE:
+ gr.hier_block2.__init__(
+ self, "audio_source_helper",
+ gr.io_signature(0, 0, 0),
+ gr.io_signature(1, 2, Float().get_num_bytes()),
+ )
+ self.samp_rate = samp_rate
+ self._create_and_connect()
+
+ def _create_and_connect(self):
+ """Create a new audio block and connect its 2 ports"""
+ from gnuradio import audio
+ if self.type == SINK: #connect if sink
+ self.audio_block = audio.sink(self.samp_rate)
+ self.connect((self, 0), (self.audio_block, 0))
+ self.connect((self, 1), (self.audio_block, 1))
+ elif self.type == SOURCE: #connect if source
+ self.audio_block = audio.source(self.samp_rate)
+ self.connect((self.audio_block, 0), (self, 0))
+ self.connect((self.audio_block, 1), (self, 1))
+
+ def reconstruct(self, samp_rate):
+ """!
+ In a lock/unlock sequence:
+ disconnect the audio sink,
+ delete the audio sink,
+ and call create and connect.
+ @param samp_rate the new sampling rate
+ """
+ self._hb.lock()
+ self.samp_rate = samp_rate #set the new samp rate
+ if self.type == SINK: #disconnect if sink
+ self.disconnect((self, 0), (self.audio_block, 0))
+ self.disconnect((self, 1), (self.audio_block, 1))
+ elif self.type == SOURCE: #disconnect if source
+ self.disconnect((self.audio_block, 0), (self, 0))
+ self.disconnect((self.audio_block, 1), (self, 1))
+ del self.audio_block #must delete the block (file descriptor
is bad)
+ self._create_and_connect()
+ self._hb.unlock()
+
+#######################################################################################
+## Selector Defs for Audio Source and Audio Sink
+#######################################################################################
+
+def AudioSink(sb):
+ from gnuradio import audio #imports
+ sb.add_input_socket('lin', Float())
+ sb.add_input_socket('rin', Float(), optional=True)
+ sb.add_param('Sampling Rate', Enum(audio_rates,
default_audio_rate_index), type=True, variable=True)
+ sb.set_docs('''\
+The left input must be connected, The right input is optional. \
+If only one audio stream is connected, both channels will receive the
stream.''')
+ def make(fg, samp_rate):
+ block = AudioHelper(samp_rate.parse(), SINK)
+ fg.add_callback(block.reconstruct, samp_rate)
+ return block
+ return sb, make
+
+def AudioSource(sb):
+ from gnuradio import audio #imports
+ sb.add_output_socket('lout', Float())
+ sb.add_output_socket('rout', Float(), optional=True)
+ sb.add_param('Sampling Rate', Enum(audio_rates,
default_audio_rate_index), type=True, variable=True)
+ sb.set_docs('''The left output must be connected, The right output is
optional.''')
+ def make(fg, samp_rate):
+ block = AudioHelper(samp_rate.parse(), SOURCE)
+ fg.add_callback(block.reconstruct, samp_rate)
+ return block
+ return sb, make
+
+
\ No newline at end of file
Modified: grc/trunk/src/SignalBlockDefs/Custom.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Custom.py 2007-07-11 03:35:13 UTC (rev
5931)
+++ grc/trunk/src/SignalBlockDefs/Custom.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -31,7 +31,7 @@
#def CustomBlockDef1(sb):
#...
-#...
+#...z
###########################################################################
#Add custom blocks to the list below,
Modified: grc/trunk/src/SignalBlockDefs/Misc.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Misc.py 2007-07-11 03:35:13 UTC (rev
5931)
+++ grc/trunk/src/SignalBlockDefs/Misc.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -103,7 +103,7 @@
gr.hier_block2.__init__(
self, 'selector',
gr.io_signature(num_inputs, num_inputs, item_size),
- gr.io_signature(num_outputs, num_outputs, item_size)
+ gr.io_signature(num_outputs, num_outputs, item_size),
)
#terminator blocks for unused inputs and outputs
self.input_terminators = [gr.null_sink(item_size) for i in
range(num_inputs)]
Modified: grc/trunk/src/SignalBlockDefs/SignalBlockConstants.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/SignalBlockConstants.py 2007-07-11
03:35:13 UTC (rev 5931)
+++ grc/trunk/src/SignalBlockDefs/SignalBlockConstants.py 2007-07-11
18:13:09 UTC (rev 5932)
@@ -36,7 +36,7 @@
gr.hier_block2.__init__(
self, "throttle_helper",
gr.io_signature(1, 1, item_size),
- gr.io_signature(1, 1, item_size)
+ gr.io_signature(1, 1, item_size),
)
throttle = gr.throttle(item_size, samp_rate)
if position: self.connect(self, throttle, block, self)
@@ -90,19 +90,6 @@
##default sampling rate
default_samp_rate = '$samp_rate'
-##possible audio rates for audio source/sink
-audio_rates = [
- ('16KHz', int(16e3)),
- ('22.05KHz', int(22.05e3)),
- ('24KHz', int(24e3)),
- ('32KHz', int(32e3)),
- ('44.1KHz', int(44.1e3)),
- ('48KHz', int(48e3)),
-]
-
-##index of the default audio rate
-default_audio_rate_index = 3
-
##default udp port for udp source/sink
default_udp_port = 3456
Modified: grc/trunk/src/SignalBlockDefs/SignalBlockTree.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/SignalBlockTree.py 2007-07-11 03:35:13 UTC
(rev 5931)
+++ grc/trunk/src/SignalBlockDefs/SignalBlockTree.py 2007-07-11 18:13:09 UTC
(rev 5932)
@@ -23,6 +23,7 @@
from Elements import SignalBlock
import Sources
import Sinks
+import Audio
import GraphicalSinks
import Conversions
import Operators
@@ -45,15 +46,16 @@
('Null Source', Sources.NullSource),
('File Source', Sources.FileSource),
('UDP Source', Sources.UDPSource),
- ('Audio Source', Sources.AudioSource),
+ ('Audio Source', Audio.AudioSource),
('USRP Source', USRP.USRPSource),
+ ('USRP Dual Source', USRP.USRPDualSource),
]),
('Sinks', [
('Variable Sink', Sinks.VariableSink),
('Null Sink', Sinks.NullSink),
('File Sink', Sinks.FileSink),
('UDP Sink', Sinks.UDPSink),
- ('Audio Sink', Sinks.AudioSink),
+ ('Audio Sink', Audio.AudioSink),
('USRP Sink', USRP.USRPSink),
('USRP Dual Sink', USRP.USRPDualSink),
('Tun Sink', Packet.TunSink),
Modified: grc/trunk/src/SignalBlockDefs/Sinks.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Sinks.py 2007-07-11 03:35:13 UTC (rev
5931)
+++ grc/trunk/src/SignalBlockDefs/Sinks.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -48,16 +48,6 @@
Manually connect a throttle to the file sink to save the CPU.''')
return sb, lambda fg, type, file_path, vlen:
gr.file_sink(type.parse().get_num_bytes()*vlen.parse(), file_path.parse())
-def AudioSink(sb):
- from gnuradio import audio
- sb.add_input_socket('lin', Float())
- sb.add_input_socket('rin', Float(), optional=True)
- sb.add_param('Sampling Rate', Enum(audio_rates,
default_audio_rate_index), type=True)
- sb.set_docs('''\
-The left input must be connected, The right input is optional. \
-If only one audio stream is connected, both channels will receive the
stream.''')
- return sb, lambda fg, samp_rate: audio.sink(samp_rate.parse())
-
def UDPSink(sb):
fcn = gr.udp_sink
type = Enum(all_choices, 1)
Modified: grc/trunk/src/SignalBlockDefs/Sources.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Sources.py 2007-07-11 03:35:13 UTC (rev
5931)
+++ grc/trunk/src/SignalBlockDefs/Sources.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -97,14 +97,6 @@
sb.add_param('Vector Length', vlen)
return sb, lambda fg, type, file_path, repeat, vlen:
gr.file_source(type.parse().get_num_bytes()*vlen.parse(), file_path.parse(),
repeat.parse())
-def AudioSource(sb):
- from gnuradio import audio
- sb.add_output_socket('lout', Float())
- sb.add_output_socket('rout', Float(), optional=True)
- sb.add_param('Sampling Rate', Enum(audio_rates,
default_audio_rate_index), type=True)
- sb.set_docs('''The left input must be connected, The right input is
optional.''')
- return sb, lambda fg, samp_rate: audio.source(samp_rate.parse())
-
def VectorSource(sb):
enum_all_vector_data_types = Enum([
('Complex Vector', (gr.vector_source_c, ComplexVector(),
Complex())),
Modified: grc/trunk/src/SignalBlockDefs/USRP.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/USRP.py 2007-07-11 03:35:13 UTC (rev
5931)
+++ grc/trunk/src/SignalBlockDefs/USRP.py 2007-07-11 18:13:09 UTC (rev
5932)
@@ -92,7 +92,7 @@
('Side B', (1, 0)),
]))
sb.add_param('Frequency', Float(), variable=True)
- sb.add_param('Interpolation', Int(200, min=1))
+ sb.add_param('Interpolation', Int(400, min=1))
sb.add_param('Gain', Float(0), variable=True)
sb.add_param('Mux', Hex())
sb.set_docs('''\
@@ -127,7 +127,7 @@
sb.add_param('Unit Number', Int(0, min=0))
sb.add_param('FrequencyA', Float(), variable=True)
sb.add_param('FrequencyB', Float(), variable=True)
- sb.add_param('Interpolation', Int(200, min=1))
+ sb.add_param('Interpolation', Int(400, min=1))
sb.add_param('GainA', Float(0), variable=True)
sb.add_param('GainB', Float(0), variable=True)
sb.add_param('Mux', Hex(default_mux))
@@ -161,4 +161,61 @@
fg.connect(inter, u)
return inter
return sb, make
+
+def USRPDualSource(sb):
+ from gnuradio import usrp
+ default_mux = '0x3210'
+ type = Enum([('Complex', (usrp.source_c, Complex())), ('IShort',
(usrp.source_s, Short()))])
+ sb.add_output_socket('out0', Variable(type, index=1))
+ sb.add_output_socket('out1', Variable(type, index=1))
+ sb.add_param('Output Type', type, False, type=True)
+ sb.add_param('Unit Number', Int(0, min=0))
+ sb.add_param('Ch0: Side:Subdevice', Enum([
+ ('Side A:0', (0, 0)),
+ ('Side B:0', (1, 0)),
+ ('Side A:1', (0, 1)),
+ ('Side B:1', (1, 1)),
+ ]))
+ sb.add_param('Ch1: Side:Subdevice', Enum([
+ ('Side A:0', (0, 0)),
+ ('Side B:0', (1, 0)),
+ ('Side A:1', (0, 1)),
+ ('Side B:1', (1, 1)),
+ ]))
+ sb.add_param('Frequency0', Float(), variable=True)
+ sb.add_param('Frequency1', Float(), variable=True)
+ sb.add_param('Decimation', Int(200, min=1))
+ sb.add_param('Gain0', Float(0), variable=True)
+ sb.add_param('Gain1', Float(0), variable=True)
+ sb.add_param('Mux', Hex(default_mux))
+ sb.set_docs('''\
+The USRP source outputs 64 Megasamples per second / decimation. \
+Default mux is %s.
+Channel 0 (I & Q) will get ADC0 and ADC1
+Channel 1 (I & Q) will get ADC2 and ADC3'''%default_mux)
+ def make(fg, type, number, subdev_spec_0, subdev_spec_1, frequency_0,
frequency_1, decim, gain_0, gain_1, mux):
+ number = number.parse()
+ u = type.parse()[0](number, nchan=2)
+ u.set_decim_rate(decim.parse())
+ u.set_mux(mux.parse())
+ # setup 0 #
+ subdev_0 = usrp.selected_subdev(u, subdev_spec_0.parse())#get
the subdev
+ subdev_0.set_auto_tr(True)
+ subdev_0.set_gain(gain_0.parse())
+ set_freq(u, 0, subdev_0, frequency_0.parse(), verbose=True)
#use DDC0
+ fg.add_callback(lambda f: set_freq(u, 0, subdev_0, f),
frequency_0)
+ fg.add_callback(subdev_0.set_gain, gain_0) #callback for gain
setting
+ # setup 1 #
+ subdev_1 = usrp.selected_subdev(u, subdev_spec_1.parse())#get
the subdev
+ subdev_1.set_auto_tr(True)
+ subdev_1.set_gain(gain_1.parse())
+ set_freq(u, 1, subdev_1, frequency_1.parse(), verbose=True)
#use DDC1
+ fg.add_callback(lambda f: set_freq(u, 1, subdev_1, f),
frequency_1)
+ fg.add_callback(subdev_1.set_gain, gain_1) #callback for gain
setting
+ ### Create an interleaver for the 2 data streams ###
+ deinter = gr.deinterleave(type.parse()[1].get_num_bytes())
+ fg.connect(u, deinter)
+ return deinter
+ return sb, make
+
\ No newline at end of file
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5932 - in grc/trunk: notes src/SignalBlockDefs,
jblum <=