-
Notifications
You must be signed in to change notification settings - Fork 0
/
calesg.py
executable file
·90 lines (73 loc) · 2.36 KB
/
calesg.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/python3
# python script to calibrate flatness of the electronic attenuator in
# ESG series signal generators.
import vxi11
import time
def read_cal_float(dev, calfile, idx):
return float(dev.ask(f'SERV:PROD:CAL? {calfile},{idx}'))
def read_lnf_flatness(dev, calfile):
l = []
for idx in range(0, 142):
freq = read_cal_float(dev, 65, idx) # ATTEN_INDEX
offset = read_cal_float(dev, calfile, idx) # LNF_ATTEN_FLATNESS
l.append({ "calfile":calfile, "index":idx, "freq":freq, "offset":offset })
return l
def cal_begin(dev):
dev.write("SERV:PROD:CAL:BEGIN;");
def cal_end(dev):
dev.write("SERV:PROD:CAL:END;");
def cal_store(dev, calfile):
dev.write(f'SERV:PROD:CAL:STORE {calfile};');
def write_cal_data(dev, calfile, idx, val):
dev.write(f'SERV:PROD:CAL {calfile},{idx},{val};')
def write_lnf_flatness(dev, calfile, idx, freq, offset):
write_cal_data(dev, 65, idx, freq)
write_cal_data(dev, calfile, idx, offset)
def pup(dev):
dev.write("SERV:PROD:PUP;");
def meas_power(pwr, freq):
pwr.write(f'SENS:FREQ {freq/1e6}MHZ')
return float(pwr.ask("MEAS1:POW:AC?"))
def reset_lnf_flatness(dev):
cal_begin(dev)
for idx in range(0, 142):
write_cal_data(dev, 207, idx, 0)
cal_end(dev)
cal_store(dev, 207)
def write_freq_index(dev):
cal_begin(dev)
i = 48
for freq in range(2020, 4020, 60):
write_cal_data(dev, 65, i, freq * 1e6)
i = i + 1
cal_end(dev)
cal_store(dev,65)
pup(esg)
def main():
esg = vxi11.Instrument("192.168.0.151", "gpib0,19")
pwr = vxi11.Instrument("192.168.0.151", "gpib0,13")
esg.write("POW:LEV 0dBm;")
reset_lnf_flatness(esg)
pup(esg)
l = read_lnf_flatness(esg, 207)
lastfreq = 0
caldata = []
for e in l:
freq = e["freq"]
idx = e["index"]
offset = e["offset"]
esg.write(f'FREQ:FIX {freq/1e6}MHz')
real = meas_power(pwr, freq)
caldata.append({ "index":idx, "real":-real });
print(f'{e["calfile"]:3d}/{e["index"]:2d}: {freq/1000000:6f} MHz = {offset:2.2f} dBm, real = {real:2.2f}dBm')
if lastfreq == freq:
break
lastfreq = freq
cal_begin(esg)
for e in caldata:
write_cal_data(esg, 207, e["index"], e["real"])
cal_end(esg)
cal_store(esg,207)
pup(esg)
if __name__ == "__main__":
main()