Adding QA code for fir filter with buffer.
[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     nchans = 7
12
13     sigs = list()
14     fmtx = list()
15     for fi in freqs:
16         s = gr.sig_source_c(fs, gr.GR_SIN_WAVE, fi, 1)
17         fm = blks2.nbfm_tx (fs, 4*fs, max_dev=10000, tau=75e-6)
18         sigs.append(s)
19         fmtx.append(fm)
20
21     taps = gr.firdes.low_pass_2(len(freqs), fs, fs/float(nchans)/2, 100, 100)
22     print "Num. Taps = %d (taps per filter = %d)" % (len(taps), 
23                                                      len(taps)/nchans)
24     #filtbank = blks2.synthesis_filterbank(nchans, taps)
25     filtbank = gr.pfb_synthesis_filterbank_ccf(nchans, taps)
26
27     head = gr.head(gr.sizeof_gr_complex, N)
28     snk = gr.vector_sink_c()
29
30     tb = gr.top_block()
31     tb.connect(filtbank, head, snk)
32
33     for i,si in enumerate(sigs):
34         #tb.connect(si, fmtx[i], (filtbank, i))
35         tb.connect(si, (filtbank, i))
36     
37     tb.run()
38
39     if 0:
40         f1 = pylab.figure(1)
41         s1 = f1.add_subplot(1,1,1)
42         s1.plot(snk.data()[1000:])
43         
44         fftlen = 2048
45         f2 = pylab.figure(2)
46         s2 = f2.add_subplot(1,1,1)
47         winfunc = scipy.blackman
48         #winfunc = scipy.hamming
49         s2.psd(snk.data()[10000:], NFFT=fftlen,
50                Fs = nchans*fs,
51                noverlap=fftlen/4,
52                window = lambda d: d*winfunc(fftlen))
53
54         pylab.show()
55
56 if __name__ == "__main__":
57     main()