def storing_stream_with_windows(l, device_number, folder, subfolders, center_frequency, samplerate, gain, nsamples, freq_correction,
                   user_hash):
    l.acquire()
    print(device_number, center_frequency, samplerate, gain, nsamples, freq_correction)
    # configure device
    sdr = RtlSdr(device_index=device_number)
    sdr.center_freq = center_frequency
    sdr.sample_rate = samplerate
    if freq_correction:
        sdr.freq_correction = freq_correction   # PPM
    sdr.gain = gain
    print('hello world')
    timestamp = time.mktime(time.gmtime())
    samples = sdr.read_bytes(nsamples*2)
    sdr.close()
    l.release()

    print("save")
    basename = "{hash}_{freq}_{time:0.0f}".format(hash=user_hash, freq=center_frequency, time=timestamp)
    filename = path.join(folder, subfolders[0], "tmp_" + basename)
    # np.savez_compressed(filename, samples) # storing by numpy and copressing it
    '''np.save(filename, samples)
    os.rename(filename + ".npy",
              path.join(folder, subfolders[0], basename + ".npy"))'''

    f = open(filename, 'wb')
    f.write(samples)
    f.close()
    os.rename(filename,
              path.join(folder, subfolders[0], basename + ".dat"))

    del samples

    filename = path.join(folder, subfolders[1], basename + ".npy")
    sdrmeta(filename, device_number, folder, subfolders, center_frequency,
            samplerate, gain, nsamples, freq_correction, user_hash)

    return filename
Example #2
0
def storing_stream_with_windows(lock, rs, cf, gain, ns, device, path_storing):

    if 0==0:#librtlsdr.rtlsdr_get_device_count() > 0:
        lock.acquire(timeout=ns/rs*1.1)
        print("locked")
        sdr = RtlSdr(device_index = device)

        # some defaults
        sdr.rs = rs
        sdr.fc = cf
        sdr.gain = gain

        timestamp = time.time()
        samples = sdr.read_bytes(ns * 2)
        sdr.close()

        lock.release()
    #print("print")

        filename = get_groundstationid() + "_f" + str(cf) + "_d" + str(device) + "_t" + str(int(timestamp))
        f = open(path_storing + filename + ".tmp", 'wb')
        f.write(samples)
        f.close()
        os.rename(path_storing + filename + ".tmp", path_storing + filename + ".dat")
Example #3
0
        for sat_name in active_orbcomm_satellites:
            sat = active_orbcomm_satellites[sat_name]['sat_obj']
            sat.compute(obs)
            if degrees(sat.alt) > min_elevation:
                sats.append(sat_name)
                tles.append(active_orbcomm_satellites[sat_name]['tles'])

        if len(sats) > 0:
            print("\nSatellites overhead: ")
            for sat_name in sats:
                sat = active_orbcomm_satellites[sat_name]['sat_obj']
                sat.compute(obs)
                print('{:20}: {:3.1f} degrees elevation'.format(
                    sat_name, degrees(sat.alt)))
            record_time = time()
            samples = sdr.read_bytes(num_samples_per_recording * 2)
            complex_samples = np.frombuffer(samples, dtype=np.uint8)
            complex_samples = complex_samples.astype(np.float32) - 128
            complex_samples = complex_samples.astype(np.float32).view(
                np.complex64)
            filename = '{:.3f}'.format(record_time).replace('.', 'p') + '.mat'
            save_dict = {
                'samples': complex_samples,
                'timestamp': record_time,
                'sats': sats,
                'tles': tles,
                'fs': sample_rate,
                'fc': center_freq,
                'lat': lat,
                'lon': lon,
                'alt': alt,
sdr.sample_rate = Fs  # Hz
sdr.center_freq = Fc  # Hz
sdr.gain = 'auto'

# An FM broadcast signal has  a bandwidth of 200 kHz
f_bw = 200000
n_taps = 64

# Use Remez algorithm to design filter coefficients used for downscaling in frequency.
lpf = signal.remez(n_taps, [0, f_bw, f_bw + (Fs / 2 - f_bw) / 4, Fs / 2],
                   [1, 0],
                   Hz=Fs)

# Read samples
before = time.time()
samples = sdr.read_bytes(2 * N)
print time.time() - before

# Convert samples to a numpy array
x1 = sdr.packed_bytes_to_iq(samples)

# To mix the data down, generate a digital complex exponential
# (with the same length as x1) with phase -F_offset/Fs
fc1 = np.exp(-1.0j * 2.0 * np.pi * F_offset / Fs * np.arange(len(x1)))

# Now, just multiply x1 and the digital complex exponential
x2 = x1 * fc1

# Downsample the signal
x3 = signal.lfilter(lpf, 1.0, x2)