[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Help with Code
From: |
Tom Rondeau |
Subject: |
Re: [Discuss-gnuradio] Help with Code |
Date: |
Fri, 3 Dec 2010 16:26:18 -0500 |
On Fri, Dec 3, 2010 at 1:37 PM, ish13 <address@hidden> wrote:
>
> Can someone please help and tell me what is wrong with my code. My idea is
> to create a sine wave->modulate->demodulate->display on scope. I get the
> following error below. Can some explain why? Also is my idea of my flow
> graph a correct way to see if I get back the signal that was created?
>
> Thanks
> Ismael
>
>
> RuntimeError: iir_filter_ffd(14): insufficient connected output ports (1
> needed, 0 connected)
I ran your code on my machine and do not get this error. One thing you
need to change, though, is that the output of wfm_rcv is floats, so
you have to use a scope_sink_f, not scope_sink_c. Also, the sample
rate in the scope sink is wrong, but that won't prevent it from
running.
My only guess is that there is a bug in the version you are running
with either wfm_tx or wfm_rcv where a block wasn't properly connected
up inside.
Tom
> """
> Transmit 1 signal.
>
> Outputs SSB (USB) signals on side A and side B at frequencies
> specified on command line.
>
> Side B is 350 + 440 Hz tones.
> """
>
> from gnuradio import gr
> from gnuradio.eng_notation import num_to_str, str_to_num
> from gnuradio import usrp
> from gnuradio import audio
> from gnuradio import blks2
> from gnuradio.eng_option import eng_option
> from optparse import OptionParser
> from usrpm import usrp_dbid
> from gnuradio.wxgui import stdgui2, scopesink2, form, slider
> import wx
> import math
> import sys
>
> class dialtone_signal1(gr.hier_block2):
> """
> tone (440 Hz).
> """
> def __init__(self, sample_rate):
> gr.hier_block2.__init__(self, "dialtone_signal1",
> gr.io_signature(0, 0, gr.sizeof_float),
> # Input signature
> gr.io_signature(1, 1, gr.sizeof_float)) #
> Output signature
>
> src1 = gr.sig_source_f (sample_rate, # sample rate
> gr.GR_SIN_WAVE, # waveform type
> 440, # frequency
> 1.0, # amplitude
> 0) # DC Offset
>
> self.connect(src1,self)
>
>
> class my_top_block(stdgui2.std_top_block):
>
> def __init__(self, frame, panel, vbox, argv):
> stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
>
> self.frame = frame
> self.panel = panel
>
> usage="%prog: [options] side-A-tx-freq side-B-tx-freq"
> parser = OptionParser (option_class=eng_option, usage=usage)
> parser.add_option("-T", "--tx-subdev-spec", type="subdev",
> default=None,
> help="select USRP Tx side A or B")
> parser.add_option("-r", "--sample-rate", type="eng_float",
> default=48000,
> help="set sample rate to RATE (48000)")
> parser.add_option("-O", "--audio-output", type="string", default="",
> help="pcm output device name. E.g., hw:0,0 or
> /dev/dsp")
> parser.add_option("-n", "--frame-decim", type="int", default=1,
> help="set oscope frame decimation factor to n
> [default=1]")
> parser.add_option("-v", "--v-scale", type="eng_float", default=1000,
> help="set oscope initial V/div to SCALE
> [default=%default]")
> parser.add_option("-t", "--t-scale", type="eng_float",
> default=49e-6,
> help="set oscope initial s/div to SCALE
> [default=50us]")
> (options, args) = parser.parse_args ()
>
> sample_rate = int(options.sample_rate)
> self.audio_rate = 320e3 // 10
> print "Enter Carrier frequency: (XXX.X)"
> freq= float(raw_input())*1e6
>
> self.source1 = dialtone_signal1(sample_rate)
> dst = audio.sink (sample_rate, options.audio_output)
> self.modulator = blks2.wfm_tx(self.audio_rate, 320e3)
> self.demodulator = blks2.wfm_rcv(320e3,int(self.audio_rate))
>
> self.scope = scopesink2.scope_sink_c(panel, sample_rate=48e3,
> frame_decim=options.frame_decim,
> v_scale=options.v_scale,
> t_scale=options.t_scale,
> num_inputs=1)
>
> self.connect(self.source1,self.modulator,self.demodulator,self.scope)
>
> vbox.Add(self.scope.win, 10, wx.EXPAND)
>
> def set_freq(self, target_freq):
> """
> Set the center frequency we're interested in.
>
> address@hidden side: 0 = side A, 1 = side B
> address@hidden target_freq: frequency in Hz
> address@hidden: 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.
> """
>
> print "Tuning side A to %sHz" % num_to_str(target_freq)
> r = self.u.tune(self.subdev.which(), self.subdev, target_freq)
> if r:
> print " r.baseband_freq =", num_to_str(r.baseband_freq)
> print " r.dxc_freq =", num_to_str(r.dxc_freq)
> print " r.residual_freq =", num_to_str(r.residual_freq)
> print " r.inverted =", r.inverted
> print " OK"
> return True
>
> else:
> print " Failed!"
>
> return False
>
>
> if __name__ == '__main__':
> try:
> app = stdgui2.stdapp(my_top_block, "USRP O'scope", nstatus=1)
> app.MainLoop()
> except KeyboardInterrupt:
> pass
> --
> View this message in context:
> http://old.nabble.com/Help-with-Code-tp30366569p30366569.html
> Sent from the GnuRadio mailing list archive at Nabble.com.
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>