b1708fde5b60996777e6c277e96da00a2728354e
[debian/gnuradio] / gnuradio-examples / python / pfb / synth_filter.py
1 #!/usr/bin/env python
2
3 from gnuradio import gr, blks2
4 import scipy, pylab
5
6 def main():
7     N = 1000000
8     fs = 8000
9
10     #freqs = [100, 200, 300, 400, 500]
11     freqs = [100,]
12     nchans = 7
13
14     sigs = list()
15     fmtx = list()
16     for fi in freqs:
17         s = gr.sig_source_c(fs, gr.GR_SIN_WAVE, fi, 1)
18         fm = blks2.nbfm_tx (fs, 4*fs, max_dev=10000, tau=75e-6)
19         sigs.append(s)
20         fmtx.append(fm)
21
22     taps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
23     print "Num. Taps = %d (taps per filter = %d)" % (len(taps), 
24                                                      len(taps)/nchans)
25     #filtbank = blks2.synthesis_filterbank(nchans, taps)
26     filtbank = gr.pfb_synthesis_filterbank_ccf(nchans, taps)
27
28     head = gr.head(gr.sizeof_gr_complex, N)
29     snk = gr.vector_sink_c()
30
31     tb = gr.top_block()
32     tb.connect(filtbank, head, snk)
33
34     for i,si in enumerate(sigs):
35         #tb.connect(si, fmtx[i], (filtbank, i))
36         tb.connect(si, (filtbank, i))
37     
38     tb.run()
39
40     if 0:
41         f1 = pylab.figure(1)
42         s1 = f1.add_subplot(1,1,1)
43         s1.plot(snk.data()[1000:])
44         
45         fftlen = 2048
46         f2 = pylab.figure(2)
47         s2 = f2.add_subplot(1,1,1)
48         winfunc = scipy.blackman
49         #winfunc = scipy.hamming
50         s2.psd(snk.data()[10000:], NFFT=fftlen,
51                Fs = nchans*fs,
52                noverlap=fftlen/4,
53                window = lambda d: d*winfunc(fftlen))
54
55         pylab.show()
56
57 if __name__ == "__main__":
58     main()