-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpectrumMeasure.py
More file actions
113 lines (82 loc) · 2.78 KB
/
Copy pathSpectrumMeasure.py
File metadata and controls
113 lines (82 loc) · 2.78 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import labrad
import numpy as np
import yaml
import time
import os
import scipy.io as sio
import matplotlib.pyplot as plt
from threading import Thread
class SpectrumMeasure(Thread):
def __init__(self,
params,
sr770,
save_data=False):
Thread.__init__(self)
self.daemon = True
self.params = params
self.sr770 = sr770
self.rootdir = params['ROOTDIR'][2:-1]
self.datadir = params['DATADIR']
self.datapath = self.rootdir+"\\"+self.datadir+".dir"
self.save_data = save_data
def set_datafile(self,dv):
self.dv = dv
def save_to_datavault(self,x,y):
data = np.column_stack((x,y))
self.dv.add(data)
def save_to_mat(self,x,y,config):
data = np.column_stack((x,y))
sio.savemat(self.datapath+"\\"+self.dv.get_name()+".mat",
{'data':data, 'config': config})
def set_span(self,s):
self.sr770.gpib_write('SPAN{:d}'.format(s))
def set_center_freq(self,f):
self.sr770.gpib_write('CRTF{:d}'.format(f))
def set_meas(self,m):
self.sr770.gpib_write('MEAS0,{:d}'.format(m))
def set_averaging(self,v,navg=2):
self.sr770.gpib_write('AVGO{:d}'.format(v))
if v:
self.sr770.gpib_write('NAVG{:d}'.format(navg))
def get_data(self):
self.sr770.start()
time.sleep(0.1)
y = self.sr770.gpib_query('SPEC?0').split()
y = y[0].split(',')
y = np.array([np.float64(y[i]) for i in range(400)])
x0 = np.float64(self.sr770.gpib_query('BVAL?0,0').split()[0])
x1 = np.float64(self.sr770.gpib_query('BVAL?0,399').split()[0])
x = np.linspace(x0,x1,400)
return x,y
def main():
# Load config file
CONFIG_FILENAME = 'SpectrumMeasureConfig.yml'
with open(os.path.realpath(CONFIG_FILENAME),'r') as f:
params = yaml.safe_load(f)
# Initialize labrad and servers
cxn = labrad.connect()
# SR 770 Spectrum Analyzer
sr770 = cxn.signal_analyzer_sr770()
sr770.select_device()
# Data vault
dv = cxn.data_vault()
# Change to data directory
dv.cd(params['DATADIR'])
# Create new data file
dv.new(params['FILENAME'], ['Freq [Hz]'], ['Y [dbV]'])
spec = SpectrumMeasure(params,
sr770,
save_data=True)
# DataVault File
spec.set_datafile(dv)
# Averaging
spec.set_span(params['SPAN'])
spec.set_averaging(1,params['NAVG'])
spec.set_center_freq(params['CENTER_F'])
# Measure
x,y = spec.get_data()
# Save data
spec.save_to_datavault(x,y)
spec.save_to_mat(x,y,params)
if __name__ == '__main__':
main()