diff options
| author | dmlunar <root@lunar.sh> | 2025-01-22 16:47:21 +0200 |
|---|---|---|
| committer | dmlunar <root@lunar.sh> | 2025-10-15 23:42:50 +0200 |
| commit | 729f2a2c3ebfb2612d873caf453a1d7ca02180d9 (patch) | |
| tree | 7bab2fcc0c7f50eab3013348697bc06ddd71d551 /scripts/rms.py | |
| download | varpa-729f2a2c3ebfb2612d873caf453a1d7ca02180d9.tar.gz varpa-729f2a2c3ebfb2612d873caf453a1d7ca02180d9.zip | |
varpa: initial public commit
Diffstat (limited to 'scripts/rms.py')
| -rw-r--r-- | scripts/rms.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/scripts/rms.py b/scripts/rms.py new file mode 100644 index 0000000..9ae7c6a --- /dev/null +++ b/scripts/rms.py @@ -0,0 +1,118 @@ +# Author: Dylan Muller
+# Copyright (c) 2025
+# All rights reserved.
+#
+# - Commercial/IP use prohibited.
+# - Attribution required.
+# See License.txt
+
+# Script for RMS power calibration
+# using the Rigol DSA815.
+
+import serial
+import socket
+import time
+import math
+
+from setup import *
+from device import *
+
+rms_power_count = []
+rms_power_dbm = []
+
+rms_power_gradient_count = []
+rms_power_threshold = []
+rms_power_intercept = []
+
+drain_increment = 0
+drain_counter = 0
+
+steps = int(2*SETUP_CAL_POINTS)
+
+def dsa815_get_power(sa_socket):
+ sa_socket.send(':CALCulate:MARKer1:Y?\r\n'.encode('utf-8'))
+ power_dbm = float(sa_socket.recv(1024).strip().decode('utf-8'))
+ return power_dbm
+
+def print_response(data):
+ for i in data:
+ print(i)
+
+# Initialize connections
+sa_socket = socket.create_connection((SETUP_DSA815_IP, SETUP_DSA815_PORT))
+sys_serial = serial.Serial(port=SETUP_SERIAL_PORT, baudrate=SETUP_SERIAL_BAUD, timeout=SETUP_SERIAL_TIMEOUT)
+
+print("BATCH START")
+
+print ("EXEC SYSTEM RESET")
+response = sys_reset(sys_serial)
+print(response)
+time.sleep(SETUP_RESET_TIMEOUT)
+sys_serial.flushInput()
+
+print("EXEC GATE PROBE")
+response = sys_gate_probe(sys_serial)
+print_response(response)
+
+print("EXEC TX MODE")
+response = sys_si4468_tx(sys_serial)
+print(response)
+
+print("DATA ACQUISITION START")
+
+for i in range(steps):
+
+ if (i > SETUP_CAL_POINTS ):
+ drain_increment = SETUP_DRAIN_INC_CORASE
+ else:
+ drain_increment = SETUP_DRAIN_INC_FINE
+
+ sys_drain_set(drain_counter)
+ fw_power_count = sys_read_power(sys_serial)
+
+ time.sleep(SETUP_LOOP_DELAY)
+
+ fw_power_dbm = dsa815_get_power(sa_socket)
+ print(drain_counter, fw_power_count, fw_power_dbm)
+
+ rms_power_count.append(float(fw_power_count))
+ rms_power_dbm.append(float(fw_power_dbm))
+
+ drain_counter += drain_increment
+
+print("EXEC RX MODE")
+response = sys_si4468_rx(sys_serial)
+print(response)
+
+print("DATA ACQUISITION END")
+
+for i in range(0, steps, 2):
+ num_power_gradient = float(rms_power_count[i + 1] - rms_power_count[i])
+ den_power_gradient = float(rms_power_dbm[i + 1] - rms_power_dbm[i])
+
+ power_gradient = num_power_gradient / den_power_gradient
+ power_gradient_count = int(math.ceil((power_gradient * 10)))
+
+ power_intercept = float(rms_power_dbm[i + 1] - (float(1/power_gradient)*rms_power_count[i + 1]))
+
+ power_intercept = int(float(round(power_intercept, 2) * 100))
+
+ rms_power_gradient_count.append(power_gradient_count)
+ rms_power_intercept.append(power_intercept)
+ rms_power_threshold.append(int(rms_power_count[i + 1]))
+
+
+c_power_gradient = "{ " + ", ".join(map(str, rms_power_gradient_count)) + " };"
+c_power_intercept = "{ " + ", ".join(map(str, rms_power_intercept)) + " };"
+c_power_threshold = "{ " + ", ".join(map(str, rms_power_threshold)) + " };"
+
+print("C DUMP START")
+
+print("const uint16_t fw_pwr_gradient[] = " + c_power_gradient)
+print("const int16_t fw_pwr_intercept[] = " + c_power_intercept)
+print("const uint16_t fw_pwr_threshold[] = " + c_power_threshold)
+
+print("C DUMP END")
+
+print("BATCH END")
+
|
