kopia lustrzana https://github.com/cariboulabs/cariboulite
89 wiersze
2.2 KiB
Python
89 wiersze
2.2 KiB
Python
from PySimpleGUI.PySimpleGUI import Canvas, Column
|
|
from PySimpleGUI import Window, WIN_CLOSED, Slider, Button, theme, Text, Radio, Image, InputText, Canvas
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import time
|
|
import SoapySDR
|
|
from SoapySDR import SOAPY_SDR_RX, SOAPY_SDR_TX, SOAPY_SDR_CS16
|
|
|
|
"""
|
|
Build a dictionaly of parameters
|
|
"""
|
|
def MakeParameters():
|
|
params = { "DriverName": "CaribouLite",
|
|
"RxChannel": 0,
|
|
"NumOfComplexSample": 4*16384,
|
|
"RxFrequencyHz": 915e6,
|
|
"UseAGC": True,
|
|
"Gain": 50.0,
|
|
"RXBandwidth": 0.02e6,
|
|
#"Frontend": "TX/RX ANT2 LNA-Bypass"}
|
|
"Frontend": "TX/RX ANT2"}
|
|
|
|
return params
|
|
|
|
|
|
"""
|
|
Setup the RX channel
|
|
"""
|
|
def SetupReceiver(sdr, params):
|
|
# Gain mode
|
|
sdr.setGainMode(SOAPY_SDR_RX, params["RxChannel"], params["UseAGC"])
|
|
|
|
# Set RX gain (if not using AGC)
|
|
sdr.setGain(SOAPY_SDR_RX, params["RxChannel"], params["Gain"])
|
|
|
|
# Rx Frequency
|
|
sdr.setFrequency(SOAPY_SDR_RX, params["RxChannel"], params["RxFrequencyHz"])
|
|
|
|
# Rx BW
|
|
sdr.setBandwidth(SOAPY_SDR_RX, params["RxChannel"], params["RXBandwidth"])
|
|
|
|
# Frontend select
|
|
sdr.setAntenna(SOAPY_SDR_RX, params["RxChannel"], params["Frontend"])
|
|
|
|
# Make the stream
|
|
return sdr.setupStream(SOAPY_SDR_RX, SOAPY_SDR_CS16, [params["RxChannel"]]) # Setup data stream
|
|
|
|
|
|
"""
|
|
Main
|
|
"""
|
|
if __name__ == "__main__":
|
|
print("HermonSDR Sampling Test")
|
|
|
|
params = MakeParameters()
|
|
|
|
# Memory buffers
|
|
samples = np.empty(2 * params["NumOfComplexSample"], np.int16)
|
|
|
|
# Initialize Soapy
|
|
sdr = SoapySDR.Device(dict(driver=params["DriverName"]))
|
|
rxStream = SetupReceiver(sdr, params=params)
|
|
sdr.activateStream(rxStream)
|
|
|
|
# Read samples into buffer
|
|
for ii in range(1,10):
|
|
sr = sdr.readStream(rxStream, [samples], params["NumOfComplexSample"], timeoutUs=int(5e6))
|
|
rc = sr.ret
|
|
if (rc != params["NumOfComplexSample"]):
|
|
print("Error Reading Samples from Device (error code = %d)!" % rc)
|
|
exit
|
|
|
|
# convert to float complex
|
|
I = samples[::2].astype(np.float32)
|
|
Q = samples[1::2].astype(np.float32)
|
|
complexFloatSamples = I + 1j*Q
|
|
|
|
#for k in range(len(I)):
|
|
# if I[k] > 30 or I[k] < -30:
|
|
# print(I[k])
|
|
|
|
# plot samples
|
|
fig = plt.figure()
|
|
plt.plot(I)
|
|
plt.plot(Q)
|
|
plt.show()
|
|
|
|
print("Goodbye")
|