Esempio n. 1
0
 def initServer(self):
     self.dac = self.client.servers['laserdac_server']
     # first plug in slave dongle and then plug in supervisor dongle!!!!!!!!!!!
     sdr1 = RtlSdr(device_index=0)
     sdr2 = RtlSdr(device_index=1)
     self.supervisormodel = model.FreqShowModel(config.first, config.second, sdr1)
     self.slavemodel = model.FreqShowModel(config.first, config.second, sdr2)
     self.thread_supervisor = KThread(target=self.supervisor)
     self.thread_slave = KThread(target=self.slave)
Esempio n. 2
0
 def __init__(self, freq=0, rate=1200000, offset=250000):
     self.sdr = RtlSdr()
     self.freq = freq
     self.rate = rate
     self.offset = offset
     self.sdr.gain = 'auto'
     self.sdr.sample_rate = self.rate
Esempio n. 3
0
def read_frequency(fq):
    sdr = RtlSdr()

    # Set parameters
    sampling_rate = 2400000
    center_freq = fq * 1.000e6
    # print(sdr.valid_gains_db)
    gain = 40.2

    sdr.set_sample_rate(sampling_rate)
    sdr.set_center_freq(center_freq)
    sdr.set_gain(gain)

    time_duration = 1  # if noisy plot try longer duration
    N_Samples = sampling_rate * time_duration
    y = sdr.read_samples(N_Samples)  # comment out after collecting data
    # y = np.load(str(int(center_freq)) + ".npy")	# uncomment after collecting data
    sdr.close()

    interval = 2048
    chunks = N_Samples // interval
    N = interval * chunks

    y = y[:N]
    # np.save(str(int(center_freq)), y)	# comment out after collecting data

    # Calculate average power spectrum
    y = y[:len(y // interval * interval)]
    y = y.reshape(N // interval, interval)
    y_windowed = y * np.kaiser(interval, 6)
    Y = fftshift(fft(y_windowed, axis=1), axes=1)

    Pspect = mean(abs(Y) * abs(Y), axis=0)
    return Pspect
async def streaming():
    sdr = RtlSdr()
    sdr.sample_rate = 1.2e6
    sdr.center_freq = 91.8e6

    prev = None

    device.write(np.array([0] * 100000).astype('int16'))

    async for samples in sdr.stream():
        samples = np.array(samples).astype('complex64')
        samples = signal.decimate(samples, int(1.2e6 / 200e3))

        if prev is not None:
            samples = np.insert(samples, 0, prev)
        prev = samples[-1]
        samples = np.angle(samples[1:] * np.conj(samples[:-1]))

        x = np.exp(-1 / (200e3 * 75e-6))
        samples = signal.lfilter([1 - x], [1, -x], samples)

        samples = signal.decimate(samples, int(200e3 / 50e3))
        samples *= 10000

        device.write(samples.astype('int16'))

    await sdr.stop()
    sdr.close()
Esempio n. 5
0
async def streaming():
    sdr = RtlSdr()
    # configure device
    Fs = 2.4e6  # Hz
    sdr.sample_rate = Fs  # Hz
    sdr.center_freq = 98e6  # Hz
    sdr.freq_correction = 60  # PPM
    sdr.gain = 'auto'
    # Sampling for 1 sec
    t_sampling = 1
    N_samples = round(Fs * t_sampling)
    samples = sdr.read_samples(N_samples)

    fig = plt.figure(1)
    plt.xlabel('Frequency (MHz)')
    plt.ylabel('Relative power (dB)')
    fig.show()

    async for samples in sdr.stream():

        plt.psd(samples,
                NFFT=1024,
                Fs=sdr.sample_rate / 1e6,
                Fc=sdr.center_freq / 1e6)
        plt.title("Dynamic Plot")
        plt.draw()
        plt.pause(0.1)
        fig.clear()

    # to stop streaming:
    await sdr.stop()

    # done
    sdr.close()
Esempio n. 6
0
 def __loadDevice(self):
     # self.radio = RtlSdr()
     try:
         self.radio = RtlSdr()
         return True
     except:
         return False
Esempio n. 7
0
    def run(self):
        #Import here so that a working RtlSdr isn't required to work with recordings
        from rtlsdr import RtlSdr, RtlSdrTcpClient

        self.sdr = RtlSdr()
        #self.sdr = RtlSdrTcpClient(hostname='192.168.0.6', port=1234)

        # configure device
        self.sdr.center_freq = self.center_freq
        self.sdr.sample_rate = self.sample_rate
        self.sdr.gain = self.gain
        if self.freq_correction != 0:
            self.sdr.freq_correction = self.freq_correction

        #try for some extra filtering
        try:
            #self.sdr.bandwidth = (.350 * 1e6)
            pass
        except IOError:
            print("No bandwidth adjustment availible.")

        print("SDR Frequency: {}MHz".format(self.sdr.get_center_freq() / 1e6))
        print("SDR Sample Rate: {}MS/s".format(self.sdr.get_sample_rate() /
                                               1e6))

        self.sdr.read_samples_async(self.send_samples, self.async_sample_size)

        print("Radio closing...")
Esempio n. 8
0
def main():
    sdr = RtlSdr()

    print 'Configuring SDR...'
    sdr.rs = 2.4e6
    sdr.fc = 100e6
    sdr.gain = 10
    print '  sample rate: %0.6f MHz' % (sdr.rs / 1e6)
    print '  center frequency %0.6f MHz' % (sdr.fc / 1e6)
    print '  gain: %d dB' % sdr.gain

    print 'Reading samples...'
    samples = sdr.read_samples(256 * 1024)
    print '  signal mean:', sum(samples) / len(samples)

    print 'Testing callback...'
    sdr.read_samples_async(test_callback, 256 * 1024)

    try:
        import pylab as mpl

        print 'Testing spectrum plotting...'
        mpl.figure()
        mpl.psd(samples, NFFT=1024, Fc=sdr.fc / 1e6, Fs=sdr.rs / 1e6)

        mpl.show()
    except:
        # matplotlib not installed/working
        pass

    print 'Done\n'
    sdr.close()
Esempio n. 9
0
 def connect(self, device_index: int = 0):
     try:
         self._sdr = RtlSdr(device_index=device_index)
         self._connected = True
     except:
         self._sdr = None
         self._connected = False
    def __init__(self, sdr=None, fig=None):

        self.fig = fig if fig else pyl.figure()

        self.sdr = sdr if sdr else RtlSdr()

        self.init_plot()
Esempio n. 11
0
def get_muestras(n_samples):
	sdr = RtlSdr()
	sdr.sample_rate = Fs
	sdr.center_freq = Fo
	sdr.freq_correction = 60
	sdr.gain = 'auto'
	return sdr.read_samples(n_samples)
Esempio n. 12
0
def configure_sdr(frequency, offset, sample_rate):
    sdr = RtlSdr()
    center_frequency = frequency - offset 
    sdr.sample_rate = sample_rate
    sdr.center_freq = center_frequency
    sdr.gain = 'auto'
    return sdr
Esempio n. 13
0
 def __init__(self, sampleRate, carrierFreq, demodulator):
     self.sampleRate = sampleRate
     self.carrierFreq = carrierFreq
     self.rtl = RtlSdr()
     self.rtl.sample_rate = self.sampleRate
     self.rtl.center_freq = self.carrierFreq
     self.demodulator = demodulator
Esempio n. 14
0
async def main():
    import math

    sdr = RtlSdr()

    print('Configuring SDR...')
    sdr.rs = 2.4e6
    sdr.fc = 100e6
    sdr.gain = 10
    print('  sample rate: %0.6f MHz' % (sdr.rs / 1e6))
    print('  center frequency %0.6f MHz' % (sdr.fc / 1e6))
    print('  gain: %d dB' % sdr.gain)

    print('Streaming samples...')

    i = 0
    async for samples in sdr.stream():
        power = sum(abs(s)**2 for s in samples) / len(samples)
        print('Relative power:', 10 * math.log10(power), 'dB')

        i += 1

        if i > 100:
            sdr.stop()
            break

    print('Done')

    sdr.close()
def __main__(sdr=None, read_event=None, collect_event=None):
	global Radio_Data

	# Initialize SDR Component
	if sdr == None:
		sdr = RtlSdr()
		sdr.set_bandwidth(.2e6) # Hz
		sdr.sample_rate = 2.4e6
		sdr.freq_correction = 60   # PPM
		sdr.gain = 0.0

	# Load initial data for all stations
	start = time.time()
	Collect_Data(sdr, read_event)
	end = time.time()
	print('All stations initialized in', end - start, 'seconds')

	# Eliminate Dead Stations
	# TODO: Re-enable call once it actually works
	# Determine_Available_Stations()

	# Clear event prior to its availability
	if collect_event != None:
		collect_event.clear()

	# Infinite Runtime Loop
	while True:
		# TODO: Add interface for messages (remove station from search, terminate, ect)
		if collect_event != None and collect_event.is_set():
			Collect_Data(sdr, read_event)
			collect_event.clear()
Esempio n. 16
0
 def _open_sdr_local(self):
     serial_number = self.scanner.device_config.serial_number
     try:
         sdr = RtlSdr(serial_number=serial_number)
     except IOError:
         sdr = None
     return sdr
Esempio n. 17
0
def get_muestras(n_samples, sample_rate, center_freq):
    sdr = RtlSdr()
    sdr.sample_rate = sample_rate
    sdr.center_freq = center_freq
    sdr.freq_correction = 60
    sdr.gain = 20
    return sdr.read_samples(n_samples)
Esempio n. 18
0
async def streaming():
    size = 256
    x_vec = np.linspace(0, 5, size + 1)[0:-1]
    y_vec = np.random.randn(len(x_vec))
    line1 = []
    sdr = RtlSdr()
    sdr.sample_rate = 2.048e6  # Hz
    sdr.center_freq = 101e6  # Hz
    sdr.freq_correction = 60  # PPM
    sdr.gain = 4
    i = 0

    async for samples in sdr.stream(256):
        i = i + 1
        print("{i} sample")
        print(samples)
        for sample in samples:
            rand_val = sample * 10000
            y_vec[-1] = rand_val
            line1 = live_plotter(x_vec, y_vec, line1)
            y_vec = np.append(y_vec[1:], 0.0)
            print(rand_val)

    # to stop streaming:
    await sdr.stop()

    # done
    sdr.close()
Esempio n. 19
0
def check_rtl_device(device):
    try:
        sdr = RtlSdr(device_index = device)
        sdr.close()
        print("rtlsdr device", device, "ready")
    except:
        print("rtlsdr device", device, "not found")
Esempio n. 20
0
def main():

    ### setting up sdr streaming
    srate = 2400000 #sampling rate
    samplesperbit = 1000000 / 38400 / (1000000 / srate)
    sdr = RtlSdr()
    # Just like in URH
    sdr.freq_correction = 1
    sdr.sample_rate = srate
    sdr.center_freq = 100.000e6
    sdr.gain = 'auto'
    # Run check_samples in another thread to make sure we don't miss any samples
    
    ### setting up TCP server
    # Create a TCP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Bind the socket to the port
    server_address = (ipAddress, portNum)

    print('starting up on {} port {}'.format(*server_address))

    sock.bind(server_address)
    
    # Listen for incoming connections
    sock.listen(1)

    t1 = threading.Thread(target=server_run, args=(sock,q2))
    t1.start()

    # This is the main loop
    loop = asyncio.get_event_loop()
    loop.run_until_complete(get_samples(sdr, q1, q2))
Esempio n. 21
0
def capture(fc=94.3e6,
            fs=int(1e6),
            gain='auto',
            seconds_dwell=.4
            #offset_dc=5e4
            ):

    N = int(seconds_dwell * fs)
    with closing(RtlSdr()) as sdr:
        sdr.sample_rate = fs
        sdr.center_freq = fc  # + int(offset_dc)
        sdr.gain = gain
        t = datetime.now()
        stamp = datetime.timestamp(t)

        loop = asyncio.get_event_loop()
        samples_buffer = loop.run_until_complete(stream(sdr, N))

    iq_samples = np.hstack(np.array(list(
        samples_buffer.queue)))[:N].astype("complex64")
    #iq_samples = shift_mix(iq_samples, -offset_dc, fs)
    #path = os.path.join(out_dir, f'{stamp}.png')
    meta = dict(fs=fs,
                fc=fc,
                gain=gain,
                seconds_dwell=seconds_dwell,
                dt_start=stamp)

    return iq_samples, meta
def collectSignal(freq, freq_file_path, mag_file_path):
    # Define function for writing signal data into file
    def write_data(data_points, magnitudeData, frequencyData, mag_file,
                   freq_file):
        i = 0
        mag_file.write('[')
        freq_file.write('[')
        while i < data_points - 1:
            mag_file.write("%s, " % magnitudeData[i])
            freq_file.write("%s, " % frequencyData[i])
            i += 1
        mag_file.write('%s]\n' % magnitudeData[i])
        freq_file.write('%s]\n' % frequencyData[i])

    sdr = RtlSdr()

    # Configure SDR
    sdr.sample_rate = 2.4e6  # Hz
    sdr.center_freq = freq  # Hz
    sdr.freq_correction = 60  # PPM
    sdr.gain = 4  # 'auto'

    # Initialize
    data_points = 1024
    samples = sdr.read_samples(256 * data_points)
    mag_file_path = mag_file_path + "magdata.txt"
    freq_file_path = freq_file_path + "freqdata.txt"

    ### *** IMPORTANT *** (for later, when optimizing)
    ### I'm not sure if we should leave this outside of the function
    ### and move it to the end of the main code, after the flight path
    ### ends. Idk the impact of leaving the SDR open/on for an extended
    ### period of time. If we move sdr.close() outside, we have to
    ### remember to also move the above code outside as well.
    ### Leaving this line within this function should be fine for now.
    sdr.close()

    # PSD plot data
    psddata = psd(samples,
                  NFFT=data_points,
                  Fs=sdr.sample_rate / 1e6,
                  Fc=sdr.center_freq / 1e6)

    # Extracting pertinent information from the PSD plot calculation
    magnitudeData = psddata[0]
    frequencyData = psddata[1]

    # Check for .txt file and write data
    # Magnitude has not been converted to dB yet. To convert, 10*log(magnitude). This comment is for Ron.
    if Path(mag_file_path).is_file() and Path(freq_file_path).is_file():
        with open(mag_file_path, 'a') as mag_file, open(freq_file_path,
                                                        'a') as freq_file:
            write_data(data_points, magnitudeData, frequencyData, mag_file,
                       freq_file)
    else:
        with open(mag_file_path, 'w') as mag_file, open(freq_file_path,
                                                        'w') as freq_file:
            write_data(data_points, magnitudeData, frequencyData, mag_file,
                       freq_file)
Esempio n. 23
0
 def get_info_from_device_index(self, device_index):
     self.device_index = device_index
     if self.device_serial is None:
         self.device_serial = RtlSdr.get_device_serial_addresses(
         )[device_index]
     sdr = RtlSdr(device_index)
     self._get_info_from_device(sdr)
     sdr.close()
Esempio n. 24
0
 def get_info_from_device_serial(self, device_serial):
     self.device_serial = device_serial
     if self.device_index is None:
         self.device_index = RtlSdr.get_device_index_by_serial(
             device_serial)
     sdr = RtlSdr(device_serial=device_serial)
     self._get_info_from_device(sdr)
     sdr.close()
Esempio n. 25
0
 def __init__(self):
     self.sdr = RtlSdr()
     # Sampling rate
     self.sdr.rs = Demod.SAMP_RATE
     # Pins 1 and 2
     self.sdr.set_direct_sampling(1)
     # I don't think this is used?
     self.sdr.gain = 1
Esempio n. 26
0
 def capture_samples(self):
     sdr = RtlSdr()
     sdr.sample_rate = self.sample_rate
     sdr.center_freq = self.freq - self.dc_offset
     sdr.gain = 'auto'
     self.samples = sdr.read_samples(self.sample_count)
     self.samples_to_np()
     sdr.close()
Esempio n. 27
0
def sdr_init(index, freq, gain, sample_rate=2.4e6):
    sdr = RtlSdr(device_index=index)
    sdr.sample_rate = 2.4e6
    sdr.center_freq = freq * 1e6
    sdr.gain = gain
    sdr.set_agc_mode(0)
    sdr_get_power(sdr)  #First read doesn't work
    return sdr
Esempio n. 28
0
def main():
    sdr = RtlSdr()

    # some defaults
    sdr.rs = 2.4e6
    sdr.fc = 146e6
    sdr.gain = 50

    noiseWindowLength = 20
    noiseWindow = []

    rampWindowLength = 5
    rampWindow = []
    rampPercent = 1.2

    backgroundNoise = False
    pulseFound = False

    results = []

    # Loop enough times to collect 3 seconds of data
    sampleLoops = int(sdr.rs * 3 / 1024)

    for i in range(0, sampleLoops):
        samples = sdr.read_samples(1024)
        curMag, freqs = magnitude_spectrum(samples, Fs=sdr.rs)
        maxSignal = max(curMag)

        noiseWindow.append(maxSignal)
        if len(noiseWindow) > noiseWindowLength:
            noiseWindow.pop(0)
            backgroundNoise = sum(noiseWindow) / noiseWindowLength
            rampWindow.append(backgroundNoise)

            if len(rampWindow) > rampWindowLength:
                rampWindow.pop(0)

                if rampWindow[rampWindowLength -
                              1] > rampWindow[0] * rampPercent:
                    pulseFound = True
                else:
                    pulseFound = False

        results.append([maxSignal, backgroundNoise, pulseFound])

    sdr.close()

    f = open("data.csv", "w")
    for result in results:
        f.write(str(result[0]))
        f.write(",")
        f.write(str(result[1]))
        f.write(",")
        f.write(str(result[2]))
        f.write("\n")
    f.close()
Esempio n. 29
0
    def loadDevice(self):
        try:
            self.radio = RtlSdr()

            self.radio.sample_rate = self.sample_rate
            self.radio.center_freq = self.center_freq
            self.radio.freq_correction = self.freq_correction
            self.radio.gain = self.gain
            return True
        except:
            return False
Esempio n. 30
0
    def __init__(self, **kwargs):
        super(RtlReader, self).__init__()
        self.signal_buffer = []  # amplitude of the sample only
        self.sdr = RtlSdr()
        self.sdr.sample_rate = sampling_rate
        self.sdr.center_freq = modes_frequency
        self.sdr.gain = "auto"

        self.debug = kwargs.get("debug", False)
        self.raw_pipe_in = None
        self.stop_flag = False
        self.noise_floor = 1e6