ADALM-PLUTO Python RSSI band scope
import adi
import iio
import serial
import pandas as pd
import matplotlib.pyplot as plt
import csv
from datetime import datetime
sdr = adi.Pluto('ip:192.168.2.1')
ctx = iio.Context('ip:192.168.2.1')
phy = sdr.ctx.find_device("ad9361-phy")
print(f"Product ID: {hex(phy.reg_read(0x37))}")
data = []
log_data = []
cols = ['Frequency', 'RSSI', 'Timestamp']
plt.xlabel("Frequency")
plt.ylabel("RSSI")
plt.xticks(rotation = 90)
plt.ion()
start_freq = 446.0e6 # Hz
freq = start_freq
freq_step = 12500.0 # Hz
counter = 0
num_steps = 16
sample_rate = 0.521e6 # Hz Minimum is 521 KSPS
num_samples = 2**16
rssi_add = 128
loop = True
sdr.rx_lo = int(freq)
sdr.gain_control_mode_chan0 = "fast_attack"
sdr.sample_rate = int(sample_rate)
sdr.rx_rf_bandwidth = int(sample_rate) # filter width, just set it to the same as sample rate for now
sdr.rx_buffer_size = num_samples
try:
while (loop == True):
rssi = sdr._ctrl.find_channel('voltage0').attrs['rssi'].value
rssi = -float(rssi.replace(" dB", ""))
rssi_bs = rssi + rssi_add
f = str(freq)
log_data.append([f, rssi, datetime.now().strftime("%Y%m%d%H%M%S")])
i = -1
b = False
for x in data:
i = i + 1
if (x[0] == f):
data[i][1] = rssi_bs
df = pd.DataFrame(data, columns = ['Frequency', 'RSSI'])
b = True
break
if (b == False):
data.append([f, rssi_bs])
df = pd.DataFrame(data, columns = ['Frequency', 'RSSI'])
df = df.sort_values("Frequency")
plt.cla()
plt.xticks(rotation = 90)
plt.bar('Frequency', 'RSSI', data = df)
plt.pause(0.03)
if counter < num_steps:
freq = freq + freq_step
counter = counter + 1
else:
freq = start_freq
counter = 0
sdr.rx_lo = int(freq)
num_samples = sdr.rx()
except KeyboardInterrupt:
loop = False
plt.close()
with open("c:\\temp\\plutoscope.csv", 'w', newline = '') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(cols)
csvwriter.writerows(log_data)
Comments
Post a Comment