feat: multisegment scan support in python script

This commit is contained in:
TT 2019-09-28 13:03:08 +09:00
parent dbfdad4fd9
commit 115047045c

View file

@ -3,9 +3,7 @@ import serial
import numpy as np import numpy as np
import pylab as pl import pylab as pl
import scipy.signal as signal import scipy.signal as signal
import time
import struct import struct
import os
from serial.tools import list_ports from serial.tools import list_ports
VID = 0x0483 #1155 VID = 0x0483 #1155
@ -44,7 +42,7 @@ class NanoVNA:
def frequencies(self): def frequencies(self):
return self._frequencies return self._frequencies
def set_sweep(self, start = 1e6, stop = 900e6, points = None): def set_frequencies(self, start = 1e6, stop = 900e6, points = None):
if points: if points:
self.points = points self.points = points
self._frequencies = np.linspace(start, stop, self.points) self._frequencies = np.linspace(start, stop, self.points)
@ -63,6 +61,12 @@ class NanoVNA:
self.serial.write(cmd.encode()) self.serial.write(cmd.encode())
self.serial.readline() # discard empty line self.serial.readline() # discard empty line
def set_sweep(self, start, stop):
if start is not None:
self.send_command("sweep start %d\r" % start)
if stop is not None:
self.send_command("sweep stop %d\r" % stop)
def set_frequency(self, freq): def set_frequency(self, freq):
if freq is not None: if freq is not None:
self.send_command("freq %d\r" % freq) self.send_command("freq %d\r" % freq)
@ -162,7 +166,7 @@ class NanoVNA:
def pause(self): def pause(self):
self.send_command("pause\r") self.send_command("pause\r")
def scan(self, port = None): def scan_gamma0(self, port = None):
self.set_port(port) self.set_port(port)
return np.vectorize(self.gamma)(self.frequencies) return np.vectorize(self.gamma)(self.frequencies)
@ -195,13 +199,12 @@ class NanoVNA:
else: else:
self.send_command("scan %d %d\r"%(start, stop)) self.send_command("scan %d %d\r"%(start, stop))
def scan_multisegment(self, start = 1e6, stop = 900e6, points = 201): def scan(self):
segment_length = 101 segment_length = 101
array0 = [] array0 = []
array1 = [] array1 = []
freqs = np.linspace(start, stop, points) freqs = self._frequencies
self._frequencies = freqs while len(freqs) > 0:
while len(freqs) > 1:
seg_start = freqs[0] seg_start = freqs[0]
seg_stop = freqs[segment_length-1] if len(freqs) >= segment_length else freqs[-1] seg_stop = freqs[segment_length-1] if len(freqs) >= segment_length else freqs[-1]
length = segment_length if len(freqs) >= segment_length else len(freqs) length = segment_length if len(freqs) >= segment_length else len(freqs)
@ -355,6 +358,15 @@ if __name__ == '__main__':
parser.add_option("-c", "--scan", dest="scan", parser.add_option("-c", "--scan", dest="scan",
action="store_true", default=False, action="store_true", default=False,
help="scan by script", metavar="SCAN") help="scan by script", metavar="SCAN")
parser.add_option("-S", "--start", dest="start",
type="float", default=1e6,
help="start frequency", metavar="START")
parser.add_option("-E", "--stop", dest="stop",
type="float", default=900e6,
help="stop frequency", metavar="STOP")
parser.add_option("-N", "--points", dest="points",
type="int", default=101,
help="scan points", metavar="POINTS")
parser.add_option("-P", "--port", type="int", dest="port", parser.add_option("-P", "--port", type="int", dest="port",
help="port", metavar="PORT") help="port", metavar="PORT")
parser.add_option("-d", "--dev", dest="device", parser.add_option("-d", "--dev", dest="device",
@ -365,7 +377,7 @@ if __name__ == '__main__':
help="gain (0-95)", metavar="GAIN") help="gain (0-95)", metavar="GAIN")
parser.add_option("-O", "--offset", type="int", dest="offset", parser.add_option("-O", "--offset", type="int", dest="offset",
help="offset frequency", metavar="OFFSET") help="offset frequency", metavar="OFFSET")
parser.add_option("-S", "--strength", type="int", dest="strength", parser.add_option("--strength", type="int", dest="strength",
help="drive strength(0-3)", metavar="STRENGTH") help="drive strength(0-3)", metavar="STRENGTH")
parser.add_option("-v", "--verbose", parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False, action="store_true", dest="verbose", default=False,
@ -403,16 +415,17 @@ if __name__ == '__main__':
print(np.average(samp[0::2] * samp[1::2])) print(np.average(samp[0::2] * samp[1::2]))
pl.show() pl.show()
exit(0) exit(0)
if opt.start or opt.stop or opt.points:
nv.set_frequencies(opt.start, opt.stop, opt.points)
plot = opt.phase or opt.plot or opt.vswr or opt.delay or opt.groupdelay or opt.smith or opt.unwrapphase or opt.polar or opt.tdr plot = opt.phase or opt.plot or opt.vswr or opt.delay or opt.groupdelay or opt.smith or opt.unwrapphase or opt.polar or opt.tdr
if plot: if plot:
if opt.scan: p = int(opt.port) if opt.port else 0
#s = nv.scan() if opt.scan or opt.points > 101:
s = nv.scan_multisegment() s = nv.scan()
s = s[0] s = s[p]
else: else:
p = 0 if opt.start or opt.stop:
if opt.port: nv.set_sweep(opt.start, opt.stop)
p = int(opt.port)
s = nv.data(p) s = nv.data(p)
if opt.smith: if opt.smith:
nv.smith(s) nv.smith(s)