mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-07 15:33:51 +00:00
SA/GEN integration tests + bugfixes
This commit is contained in:
parent
ec6fae5822
commit
0c17288ece
11 changed files with 171 additions and 15 deletions
|
|
@ -5,6 +5,8 @@ testmodules = [
|
|||
'tests.TestMode',
|
||||
'tests.TestVNASweep',
|
||||
'tests.TestCalibration',
|
||||
'tests.TestGenerator',
|
||||
'tests.TestSASweep',
|
||||
]
|
||||
|
||||
suite = unittest.TestSuite()
|
||||
|
|
|
|||
|
|
@ -149,10 +149,10 @@ class TestCalibration(TestBase):
|
|||
cal.reset()
|
||||
|
||||
# grab trace data
|
||||
S11 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
S12 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S12"))
|
||||
S21 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S21"))
|
||||
S22 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S22"))
|
||||
S11 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
S12 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S12"))
|
||||
S21 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S21"))
|
||||
S22 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S22"))
|
||||
|
||||
# Attenuation is frequency dependent, use excessively large limits
|
||||
# TODO: use smaller limits based on frequency
|
||||
|
|
|
|||
16
Software/Integrationtests/tests/TestGenerator.py
Normal file
16
Software/Integrationtests/tests/TestGenerator.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
from tests.TestBase import TestBase
|
||||
|
||||
class TestGenerator(TestBase):
|
||||
def test_Generator(self):
|
||||
self.vna.cmd(":DEV:MODE GEN")
|
||||
self.assertEqual(self.vna.query(":DEV:MODE?"), "GEN")
|
||||
|
||||
self.vna.cmd(":GEN:FREQ 2000000000")
|
||||
self.assertEqual(float(self.vna.query(":GEN:FREQ?")), 2000000000)
|
||||
|
||||
self.vna.cmd(":GEN:LVL -12.34")
|
||||
self.assertEqual(float(self.vna.query(":GEN:LVL?")), -12.34)
|
||||
|
||||
self.assertEqual(self.vna.query(":GEN:PORT?"), "0")
|
||||
self.vna.cmd(":GEN:PORT 2")
|
||||
self.assertEqual(self.vna.query(":GEN:PORT?"), "2")
|
||||
98
Software/Integrationtests/tests/TestSASweep.py
Normal file
98
Software/Integrationtests/tests/TestSASweep.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
from tests.TestBase import TestBase
|
||||
import time
|
||||
|
||||
class TestSASweep(TestBase):
|
||||
def waitSweepTimeout(self, timeout = 1):
|
||||
self.assertEqual(self.vna.query(":SA:ACQ:FIN?"), "FALSE")
|
||||
stoptime = time.time() + timeout
|
||||
while self.vna.query(":SA:ACQ:FIN?") == "FALSE":
|
||||
if time.time() > stoptime:
|
||||
raise AssertionError("Sweep timed out")
|
||||
|
||||
def assertTrace_dB(self, trace, dB_nominal, dB_deviation):
|
||||
for S in trace:
|
||||
self.assertLessEqual(S[1], dB_nominal + dB_deviation)
|
||||
self.assertGreaterEqual(S[1], dB_nominal - dB_deviation)
|
||||
|
||||
def test_sweep_frequency(self):
|
||||
self.vna.cmd(":DEV:MODE SA")
|
||||
self.vna.cmd(":SA:FREQ:CENT 2000000000")
|
||||
self.vna.cmd(":SA:FREQ:SPAN 200000")
|
||||
|
||||
self.assertEqual(float(self.vna.query(":SA:FREQ:START?")), 1999900000)
|
||||
self.assertEqual(float(self.vna.query(":SA:FREQ:STOP?")), 2000100000)
|
||||
|
||||
self.vna.cmd(":SA:ACQ:RBW 10000")
|
||||
self.waitSweepTimeout(10)
|
||||
|
||||
port1 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT1"))
|
||||
port2 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT2"))
|
||||
|
||||
self.assertEqual(port1[0][0], 1999900000)
|
||||
self.assertEqual(port1[-1][0], 2000100000)
|
||||
self.assertEqual(port2[0][0], 1999900000)
|
||||
self.assertEqual(port2[-1][0], 2000100000)
|
||||
|
||||
# No signal present, signal level should be very low
|
||||
self.assertTrace_dB(port1, -140, 60)
|
||||
self.assertTrace_dB(port2, -140, 60)
|
||||
|
||||
def test_sweep_zerospan(self):
|
||||
self.vna.cmd(":DEV:MODE SA")
|
||||
self.vna.cmd(":SA:FREQ:CENT 2000000000")
|
||||
self.vna.cmd(":SA:FREQ:SPAN 0")
|
||||
|
||||
self.assertEqual(float(self.vna.query(":SA:FREQ:START?")), 2000000000)
|
||||
self.assertEqual(float(self.vna.query(":SA:FREQ:STOP?")), 2000000000)
|
||||
|
||||
self.vna.cmd(":SA:ACQ:RBW 10000")
|
||||
self.waitSweepTimeout(10)
|
||||
|
||||
port1 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT1"))
|
||||
port2 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT2"))
|
||||
|
||||
self.assertEqual(port1[0][0], 0.0)
|
||||
self.assertGreater(port1[-1][0], 4.5)
|
||||
self.assertLess(port1[-1][0], 5)
|
||||
self.assertEqual(port2[0][0], 0.0)
|
||||
self.assertGreater(port2[-1][0], 4.5)
|
||||
self.assertLess(port2[-1][0], 5)
|
||||
|
||||
# No signal present, signal level should be very low
|
||||
self.assertTrace_dB(port1, -140, 60)
|
||||
self.assertTrace_dB(port2, -140, 60)
|
||||
|
||||
def test_tracking_generator(self):
|
||||
self.vna.cmd(":DEV:MODE SA")
|
||||
self.vna.cmd(":SA:FREQ:CENT 2000000000")
|
||||
self.vna.cmd(":SA:FREQ:SPAN 200000")
|
||||
self.vna.cmd(":SA:ACQ:RBW 10000")
|
||||
self.vna.cmd(":SA:TRACK:PORT 1")
|
||||
self.assertEqual(self.vna.query(":SA:TRACK:PORT?"), "1")
|
||||
self.vna.cmd(":SA:TRACK:LVL -20")
|
||||
self.vna.cmd(":SA:TRACK:OFFSET 0")
|
||||
self.vna.cmd(":SA:TRACK:EN TRUE")
|
||||
self.waitSweepTimeout(10)
|
||||
|
||||
port1 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT1"))
|
||||
|
||||
level = port1[0][1]
|
||||
self.assertGreater(level, -30)
|
||||
self.assertLess(level, -10)
|
||||
# check tracking generator signal
|
||||
self.assertTrace_dB(port1, level, 5)
|
||||
|
||||
# Enable normalization
|
||||
self.vna.cmd(":SA:TRACK:NORM:LVL -10")
|
||||
self.vna.cmd(":SA:TRACK:NORM:EN TRUE")
|
||||
# wait for normalization to finish
|
||||
self.waitSweepTimeout(10)
|
||||
|
||||
# trigger the next sweep
|
||||
self.vna.cmd(":SA:ACQ:SINGLE TRUE")
|
||||
self.waitSweepTimeout(10)
|
||||
|
||||
# Reported level on port1 should match normalization very closely now
|
||||
port1 = self.vna.parse_SA_trace_data(self.vna.query(":SA:TRACE:DATA? PORT1"))
|
||||
self.assertTrace_dB(port1, -10, 1)
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ class TestVNASweep(TestBase):
|
|||
self.vna.cmd(":VNA:FREQuency:STOP 6000000000")
|
||||
self.waitSweepTimeout(2)
|
||||
|
||||
S11 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
S11 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
self.assertEqual(S11[0][0], 1000000)
|
||||
self.assertEqual(S11[-1][0], 6000000000)
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ class TestVNASweep(TestBase):
|
|||
self.vna.cmd(":VNA:FREQuency:ZERO 1500000000")
|
||||
self.waitSweepTimeout(2)
|
||||
|
||||
S11 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
S11 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
self.assertEqual(S11[0][0], 0.0)
|
||||
# Sweep should take about 0.125 seconds
|
||||
self.assertGreater(S11[-1][0], 0.1)
|
||||
|
|
@ -53,7 +53,7 @@ class TestVNASweep(TestBase):
|
|||
self.vna.cmd(":VNA:POWER:STOP -10")
|
||||
self.waitSweepTimeout(2)
|
||||
|
||||
S11 = self.vna.parse_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
S11 = self.vna.parse_VNA_trace_data(self.vna.query(":VNA:TRACE:DATA? S11"))
|
||||
self.assertEqual(S11[0][0], -30)
|
||||
self.assertEqual(S11[-1][0], -10)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue