53 lines
1.2 KiB
Python
Executable File
53 lines
1.2 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
|
|
#
|
|
# Example script for interfacing with SDRPlay radio.
|
|
#
|
|
# Modified from: https://github.com/pothosware/SoapySDR/wiki/PythonSupport
|
|
#
|
|
|
|
import SoapySDR
|
|
from SoapySDR import * # SOAPY_SDR_ constants
|
|
import numpy as np
|
|
import sys
|
|
import struct
|
|
|
|
# enumerate devices
|
|
devices = [dict(device) for device in SoapySDR.Device.enumerate()]
|
|
|
|
for device in devices:
|
|
print(device)
|
|
|
|
if len(devices) == 0:
|
|
print("No SDR devices available.")
|
|
sys.exit(1)
|
|
|
|
# create device instance
|
|
sdr = SoapySDR.Device(devices[0])
|
|
|
|
# apply settings
|
|
sdr.setSampleRate(SOAPY_SDR_RX, 0, 1e6)
|
|
sdr.setFrequency(SOAPY_SDR_RX, 0, 912.3e6)
|
|
|
|
# setup a stream (complex floats)
|
|
rxStream = sdr.setupStream(SOAPY_SDR_RX, SOAPY_SDR_CF32)
|
|
sdr.activateStream(rxStream) # start streaming
|
|
|
|
# create a re-usable buffer for rx samples
|
|
samples = 1000
|
|
buff = np.array([0] * samples * 2, np.float32)
|
|
|
|
# receive some samples
|
|
for i in range(10):
|
|
sr = sdr.readStream(rxStream, [buff], samples)
|
|
|
|
print(
|
|
f"Samples: {sr.ret}, flags: {sr.flags}, timestamp {sr.timeNs}", file=sys.stderr
|
|
)
|
|
|
|
sys.stdout.buffer.write(struct.pack("=%df" % len(buff), *buff))
|
|
|
|
# shutdown the stream
|
|
sdr.deactivateStream(rxStream) # stop streaming
|
|
sdr.closeStream(rxStream)
|