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

Popular posts from this blog

Modifying old SDR# TETRA demod plug-in

Mods for SDR# TETRA demod plugin 1.0.14.0 - 2