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)")