lots of example and other useful code for use with the softronics msdd6000
[debian/gnuradio] / gr-msdd6000 / src / non_gr_snapshot_tool / spectrogram.py
1 #!/usr/bin/python
2
3 fft_bins = 1024;
4 stride = 256;
5
6 #filename = "output.dat";
7 #decim = 4;
8 #Fs = (102.4/decim) * 1e6;
9
10
11 from gnuradio import gr;
12 from Numeric import *;
13 import FFT;
14 import numpy.fft;
15 from numpy import *;
16 from pylab import *;
17 import sys;
18
19 if len(sys.argv) <2: 
20         print "usage:  %s <filename> (sample_rate_in_MSPS) (stride_samples)"%(sys.argv[0]);
21         sys.exit(-1);
22
23 filename = sys.argv[1];
24 fs = 0;
25 if(len(sys.argv)>2):
26         fs = float(sys.argv[2])*1000000;
27 print "opening %s.\n"%(filename);
28
29 if(len(sys.argv)>=4):
30         stride = int(sys.argv[3]);
31         print "using stride = %d"%(stride);
32
33
34 tb = gr.top_block();
35 src = gr.file_source(gr.sizeof_gr_complex, filename, False)
36 sink = gr.vector_sink_c();
37 tb.connect(src,sink);
38 tb.run();
39
40 data = sink.data();
41 dataa = array(data);
42 datalen = len( data );
43
44 time_bins = (datalen - fft_bins) / stride;
45
46 print "output vector :: fft_bins = %d, time_bins = %d\n"%(fft_bins,time_bins);
47
48 start_idx = 0;
49
50 b = numpy.zeros((time_bins, fft_bins), complex);
51 l = [];
52
53 window = numpy.blackman(fft_bins);
54
55 for i in range(0,time_bins):
56         
57         time_chunk = take( dataa, range(start_idx,start_idx + fft_bins), 0);
58         time_chunk = time_chunk * window;
59         fft_chunk = numpy.fft.fftshift(numpy.fft.fft(time_chunk));
60         psd = 10*log10(fft_chunk * conj(fft_chunk)+0.001);
61
62         b[i] = psd.real;
63         l.append( psd.real.tolist() );
64
65         start_idx = start_idx + stride;
66
67 #c = array(b, 10);
68
69 print b[0];
70 c = array(b);
71 #l = c.tolist();
72 print size(l);
73
74 x = range(0,time_bins);
75 print size(x);
76 y = range(0,fft_bins);
77 print size(y);
78
79 print size(l);
80
81 contourf(l);
82 #contourf([x,y], l);
83 colorbar();
84 show();
85
86 #print c[1,1];
87
88