Eric Blossom wrote:
On Mon, Apr 30, 2007 at 02:17:38PM +1200, Jonas wrote:
Hello,

I have run into a problem using flow_graph stop(). To test the problem, I wrote a quick test script that simply sinks a tone to the USRP (test_tone.py).

Hi Jonas,

Can you send me the complete script off the list?
Hi Eric,

Thanks for your response! I have attached test_tone.py, which since my last post I have checked and changed slightly, but the problem doesn't seem to be there.
BTW, what are you really trying to accomplish?
I am developing a USRP Server computer that can be controlled from any client computer, (clients run Matlab under Windows). Clients require the ability to terminate running flow graphs, hence my requirement for stop(). To test the stop() functionality (independent of my threaded server code) I am running test_tone.py in the python interpreter.

from test_tone import *
tone = test_tone()
tone.start()

The only way I can get the USRP to actually stop transmitting something is to delete my instantiated test_tone object. Calling stop() stops the tone but the USRP still transmits something (difference between actually being off and pretending to be off is 40 dB).

Also, can you figure out how to get rid of this signature?
It's not appropriate for posting to what is obviously a public mailing
list.


I am sorry about the signature but unfortunately it is attached as it leaves. Maybe I should setup an external email address.
Eric

Thanks for your help,

Jonas

=======================================================================
This email, including any attachments, is only for the intended
addressee.  It is subject to copyright, is confidential and may be
the subject of legal or other privilege, none of which is waived or
lost by reason of this transmission.
If the receiver is not the intended addressee, please accept our
apologies, notify us by return, delete all copies and perform no
other act on the email.
Unfortunately, we cannot warrant that the email has not been
altered or corrupted during transmission.
=======================================================================

#!/usr/bin/env python

"""
Transmits a 800 Hz tone, as a narrow band FM signal.
"""
from gnuradio import gr
from gnuradio import usrp
from gnuradio import blks
from Numeric import convolve, array

class test_tone(gr.flow_graph):

	def __init__(self):
		gr.flow_graph.__init__(self)

		tone_freq = 800
		tx_freq = 440.1e6

		tone = transmit_path(self, None, tone_freq)
		tone.set_freq(tx_freq)
		tone.set_enable(True)


    
class transmit_path(gr.hier_block):
	def __init__(self, fg, subdev_spec, tone_freq):
		self.u = usrp.sink_c ()

		dac_rate = self.u.dac_rate();
		self.if_rate = 320e3                               # 320 kS/s
		self.usrp_interp = int(dac_rate // self.if_rate)
		self.u.set_interp_rate(self.usrp_interp)
		self.sw_interp = 10
		self.audio_rate = self.if_rate // self.sw_interp   #  32 kS/s

		self.audio_gain = 1
		self.normal_gain = 500

		self.audio = gr.sig_source_f (self.audio_rate,    	# sample rate
			                            gr.GR_SIN_WAVE, 	# waveform type
			                            tone_freq,     		# frequency
			                            1.0,            	# amplitude
			                            0)              	# DC Offset


		self.audio_amp = gr.multiply_const_ff(self.audio_gain)

		lpf = gr.firdes.low_pass (1,                # gain
		                            self.audio_rate,            # sampling rate
		                            3800,               # low pass cutoff freq
		                            300,                # width of trans. band
		                            gr.firdes.WIN_HANN) # filter type 

		hpf = gr.firdes.high_pass (1,                # gain
		                            self.audio_rate,            # sampling rate
		                            325,               # low pass cutoff freq
		                            50,                # width of trans. band
		                            gr.firdes.WIN_HANN) # filter type 

		audio_taps = convolve(array(lpf),array(hpf))
		self.audio_filt = gr.fir_filter_fff(1,audio_taps)

		self.pl = blks.ctcss_gen_f(fg, self.audio_rate,123.0)
		self.add_pl = gr.add_ff()
		fg.connect(self.pl,(self.add_pl,1))

		self.fmtx = blks.nbfm_tx(fg, self.audio_rate, self.if_rate)
		self.amp = gr.multiply_const_cc (self.normal_gain)

		# determine the daughterboard subdevice we're using
		if subdev_spec is None:
			subdev_spec = usrp.pick_tx_subdevice(self.u)
		self.u.set_mux(usrp.determine_tx_mux_value(self.u, subdev_spec))
		self.subdev = usrp.selected_subdev(self.u, subdev_spec)
		print "TX using", self.subdev.side_and_name()

		fg.connect(self.audio, self.audio_amp, self.audio_filt,
		            (self.add_pl,0), self.fmtx, self.amp, self.u)

		gr.hier_block.__init__(self, fg, None, None)

		self.set_gain(self.subdev.gain_range()[1])  # set max Tx gain


	def set_freq(self, target_freq):
		"""
		Set the center frequency we're interested in.

		@param target_freq: frequency in Hz
		@rypte: bool

		Tuning is a two step process.  First we ask the front-end to
		tune as close to the desired frequency as it can.  Then we use
		the result of that operation and our target_frequency to
		determine the value for the digital up converter.  Finally, we feed
		any residual_freq to the s/w freq translator.
		"""
		r = self.u.tune(self.subdev._which, self.subdev, target_freq)
		if r:
			# Use residual_freq in s/w freq translator
			return True

		return False

	def set_gain(self, gain):
		self.gain = gain
		self.subdev.set_gain(gain)

	def set_enable(self, enable):
		self.subdev.set_enable(enable)            # set H/W Tx enable
		if enable:
			self.amp.set_k (self.normal_gain)
		else:
			self.amp.set_k (0)

#t = test_tone()
#t.start()
#t.wait()
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to