Imported Upstream version 3.0
[debian/gnuradio] / gnuradio-examples / python / usrp / test_dft_analysis.py
1 #!/usr/bin/env python
2
3 from gnuradio import gr, gru, blks
4 from gnuradio.wxgui import stdgui, fftsink, slider
5 from gnuradio.eng_option import eng_option
6 from optparse import OptionParser
7 import wx
8
9 class test_graph (stdgui.gui_flow_graph):
10     def __init__(self, frame, panel, vbox, argv):
11         stdgui.gui_flow_graph.__init__(self, frame, panel, vbox, argv)
12
13         parser = OptionParser (option_class=eng_option)
14         (options, args) = parser.parse_args ()
15
16         sample_rate = 16e3
17         mpoints = 4
18         ampl = 1000
19         freq = 0
20
21         lo_freq = 1e6
22         lo_ampl = 1
23         
24         vbox.Add(slider.slider(panel,
25                                -sample_rate/2, sample_rate/2,
26                                self.set_lo_freq), 0, wx.ALIGN_CENTER)
27
28
29         src = gr.sig_source_c(sample_rate, gr.GR_CONST_WAVE,
30                               freq, ampl, 0)
31
32         self.lo = gr.sig_source_c(sample_rate, gr.GR_SIN_WAVE,
33                                   lo_freq, lo_ampl, 0)
34
35         mixer = gr.multiply_cc()
36         self.connect(src, (mixer, 0))
37         self.connect(self.lo, (mixer, 1))
38         
39         # We add these throttle blocks so that this demo doesn't
40         # suck down all the CPU available.  Normally you wouldn't use these.
41         thr = gr.throttle(gr.sizeof_gr_complex, sample_rate)
42
43         taps = gr.firdes.low_pass(1,   # gain
44                                   1,   # rate
45                                   1.0/mpoints * 0.4,  # cutoff
46                                   1.0/mpoints * 0.1,  # trans width
47                                   gr.firdes.WIN_HANN)
48         print len(taps)
49         analysis = blks.analysis_filterbank(self, mpoints, taps)
50         
51         self.connect(mixer, thr)
52         self.connect(thr, analysis)
53
54         for i in range(mpoints):
55             fft = fftsink.fft_sink_c(self, frame, fft_size=128,
56                                      sample_rate=sample_rate/mpoints,
57                                      fft_rate=5,
58                                      title="Ch %d" % (i,))
59             self.connect((analysis, i), fft)
60             vbox.Add(fft.win, 1, wx.EXPAND)
61
62     def set_lo_freq(self, freq):
63         self.lo.set_frequency(freq)
64         
65                                      
66
67 def main ():
68     app = stdgui.stdapp (test_graph, "Test DFT filterbank")
69     app.MainLoop ()
70
71 if __name__ == '__main__':
72     main ()