Subversion Repositories svnkaklik

Rev

Rev 515 | Blame | Compare with Previous | Last modification | View Log | Download

#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Sonar
# Author: Kaklik
# Description: Sonar waform generator
# Generated: Sat Feb 21 11:50:42 2009
##################################################

from gnuradio import audio
from gnuradio import gr
from gnuradio.wxgui import scopesink2
from gnuradio.wxgui import waterfallsink2
from grc_gnuradio import wxgui as grc_wxgui
import wx

class Sonar(grc_wxgui.top_block_gui):

        def __init__(self):
                grc_wxgui.top_block_gui.__init__(
                        self,
                        title="GRC - Executing: Sonar",
                        icon="/usr/local/share/icons/hicolor/32x32/apps/gnuradio-grc.png",
                )

                ##################################################
                # Variables
                ##################################################
                self.samp_rate = samp_rate = 96000
                self.frequency = frequency = 20000
                self.ampl = ampl = .4

                ##################################################
                # Controls
                ##################################################
                _frequency_control = grc_wxgui.slider_horizontal_control(
                        window=self.GetWin(),
                        callback=self.set_frequency,
                        label='frequency',
                        value=frequency,
                        min=5000,
                        max=30000,
                        num_steps=1000,
                        slider_length=500,
                )
                self.Add(_frequency_control)
                _ampl_control = grc_wxgui.slider_horizontal_control(
                        window=self.GetWin(),
                        callback=self.set_ampl,
                        label="Volume",
                        value=ampl,
                        min=0,
                        max=.5,
                        num_steps=100,
                        slider_length=200,
                )
                self.GridAdd(_ampl_control, 0, 0, 1, 2)

                ##################################################
                # Blocks
                ##################################################
                self.audio_sink = audio.sink(48000, "hw:1,0", True)
                self.audio_source_0 = audio.source(48000, "hw:1,0", True)
                self.gr_sig_source_x = gr.sig_source_f(samp_rate, gr.GR_SIN_WAVE, frequency, ampl, 0)
                self.wxgui_scopesink2_0 = scopesink2.scope_sink_f(
                        self.GetWin(),
                        title="Scope Plot",
                        sample_rate=samp_rate*2,
                        frame_decim=15,
                        v_scale=None,
                        t_scale=.0001,
                        num_inputs=2,
                )
                self.wxgui_scopesink2_0.win.set_format_line()
                self.Add(self.wxgui_scopesink2_0.win)
                self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_f(
                        self.GetWin(),
                        baseband_freq=0,
                        y_per_div=10,
                        ref_level=50,
                        sample_rate=samp_rate,
                        fft_size=512,
                        fft_rate=15,
                        average=True,
                        avg_alpha=None,
                        title="Waterfall Plot",
                )
                self.Add(self.wxgui_waterfallsink2_0.win)

                ##################################################
                # Connections
                ##################################################
                self.connect((self.gr_sig_source_x, 0), (self.audio_sink, 0))
                self.connect((self.gr_sig_source_x, 0), (self.wxgui_scopesink2_0, 0))
                self.connect((self.audio_source_0, 0), (self.wxgui_scopesink2_0, 1))
                self.connect((self.audio_source_0, 0), (self.wxgui_waterfallsink2_0, 0))

        def set_samp_rate(self, samp_rate):
                self.samp_rate = samp_rate
                self.gr_sig_source_x.set_sampling_freq(self.samp_rate)
                self.wxgui_scopesink2_0.set_sample_rate(self.samp_rate*2)
                self.wxgui_waterfallsink2_0.set_sample_rate(self.samp_rate)

        def set_frequency(self, frequency):
                self.frequency = frequency
                self.gr_sig_source_x.set_frequency(self.frequency)

        def set_ampl(self, ampl):
                self.ampl = ampl
                self.gr_sig_source_x.set_amplitude(self.ampl)

if __name__ == '__main__':
        if gr.enable_realtime_scheduling() != gr.RT_OK:
                print "Error: failed to enable realtime scheduling."
        tb = Sonar()
        tb.Run()