def get_power_scan(start, end, step, gain=0, num_samples=16384):
  freqs = []
  signlu = []
  signll = []
  pwru = []
  pwrl = []
  pwr = []
  for freq in arange(start,end,step): # MHz
    cf = rtlsdr.set_freq(int(freq*1000000))
    freqs.append(cf/1e6-0.25*step)
    freqs.append(cf/1e6+0.25*step)
    status = rtlsdr.reset_buffer()
    sleep(0.01)
    rawdata = rtlsdr.synch_read(num=num_samples)
    if rawdata.min() < -120 or rawdata.max() > 120:
      mylogger.warning("%7.2f MHz, min=%d, max=%d",
                       cf/1.e6, rawdata.min(), rawdata.max())
    data = unpack_to_complex(rawdata)
    mylogger.info("%7.2f MHz, min=%s, max=%s",
                  cf/1.e6, str(data.min()),str(data.max()))
    datalen = len(data)
    lsb,usb = sideband_separate(data)
    signll += list(lsb)
    signlu += list(usb)
    LSB = (lsb**2).sum()/datalen
    USB = (usb**2).sum()/datalen
    pwrl.append(LSB)
    pwru.append(USB)
    pwr.append(LSB)
    pwr.append(USB)
  return freqs,pwrl,pwru,pwr,signll,signlu
to bar graph spectra taken with various resolutions from 4 to 16 channels.
"""
from rtlsdr import *
from pylab import *

from Data_Reduction import sideband_separate, unpack_to_complex


rawdata = get_sdr_samples()

# Now do something with the data
colors = ["y", "r", "g", "b", "m", "c", "w"]
fig = figure()
data = unpack_to_complex(rawdata)
datalen = len(data)
lsb, usb = sideband_separate(data)
factor = 1024.0 / datalen
bar([0, 500], [(lsb ** 2).sum() * factor, (usb ** 2).sum() * factor], width=500, color=colors[0], label="LSB,USB")
for num_bins in [4, 8, 16]:
    avg = zeros(num_bins)
    for index in range(0, 64, num_bins):
        dataslice = data[index : index + num_bins]
        xform = fft(dataslice)
        spectrum = fftshift(xform)
        avg += abs(spectrum * conj(spectrum))
    avg *= 64.0 / num_bins
    print avg
    freqs = arange(0, 1000, 1000.0 / num_bins)
    bar(freqs, avg, width=1000.0 / num_bins, color=colors[int(log2(num_bins))], label=str(num_bins))
legend(numpoints=1)
xlabel("Frequency (kHz)")