E5080B sample: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
Use the following Python class to get data from E5080B:<pre> | |||
# -*- coding: utf-8 -*- | |||
""" | |||
Created on Fri Jul 19 13:46:26 2024 | |||
@author: lpd | |||
""" | |||
import pyvisa as visa | |||
rm = visa.ResourceManager() | |||
import pandas as pd | |||
import numpy as np | |||
import matplotlib.pyplot as plt | |||
class VNA: | |||
def __init__(self, ip_address = "TCPIP0::k-e5080b-00152::hislip0::INSTR", eth_com=False, usb_address = "USB0::0x2A8D::0x7901::MY59400152::INSTR", usb_com=False): | |||
usb_com = True | |||
if usb_com: | |||
self.vna = rm.open_resource(usb_address) | |||
elif eth_com: | |||
self.vna = rm.open_resource(ip_address) | |||
def get_data_single_channel(self, folderName_on_VNA, fileName): | |||
self.vna.write('MMEM:STOR:DATA "%s","%s","%s","%s",%d' % ("D:\\Data_LPD\\" + folderName_on_VNA + "\\" + fileName + ".csv", "CSV Formatted Data", "displayed", "DB", -1)) | |||
self.vna.write("MMEMory:TRANsfer?" + " 'D:\\Data_LPD\\" + folderName_on_VNA + '\\' + fileName + ".csv'" ) | |||
my_data_byte = self.vna.read_raw() | |||
my_data_string = my_data_byte.decode("utf-8") | |||
my_data_string = my_data_string.split("Freq(Hz),", 1)[1] | |||
my_data_string = my_data_string.split("END")[0] | |||
column_names = my_data_string.split("\r\n")[0].split(',') | |||
my_data_string = my_data_string.split("\r\n", 1)[1] | |||
my_data_array = np.array(my_data_string.split("\r\n")) | |||
my_data_array = np.array(list(filter(None, my_data_array))) | |||
data_array = np.zeros((len(my_data_array), 1+len(column_names))) | |||
for idx in range(0, len(my_data_array)): | |||
data_array[idx] = my_data_array[idx].split(',') | |||
for idx in range(0, len(column_names)): | |||
if "DEG" in column_names[idx]: | |||
data_array[:, 1+idx] = data_array[:, 1+idx]/180*np.pi | |||
column_names[idx] = column_names[idx].replace("DEG", "RAD") | |||
df = pd.DataFrame(data = data_array, | |||
columns = ["Freq [Hz]"] + column_names) | |||
self.df = df | |||
return df | |||
def plot_data(self): | |||
plt.plot(self.df['Freq [Hz]']/1e9, self.df['S21(DB)']) | |||
plt.xlabel("Frequency [GHz]") | |||
plt.ylabel("S21 [dB]") | |||
</pre> | |||
Revision as of 16:44, 3 December 2024
Use the following Python class to get data from E5080B:
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 19 13:46:26 2024
@author: lpd
"""
import pyvisa as visa
rm = visa.ResourceManager()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
class VNA:
def __init__(self, ip_address = "TCPIP0::k-e5080b-00152::hislip0::INSTR", eth_com=False, usb_address = "USB0::0x2A8D::0x7901::MY59400152::INSTR", usb_com=False):
usb_com = True
if usb_com:
self.vna = rm.open_resource(usb_address)
elif eth_com:
self.vna = rm.open_resource(ip_address)
def get_data_single_channel(self, folderName_on_VNA, fileName):
self.vna.write('MMEM:STOR:DATA "%s","%s","%s","%s",%d' % ("D:\\Data_LPD\\" + folderName_on_VNA + "\\" + fileName + ".csv", "CSV Formatted Data", "displayed", "DB", -1))
self.vna.write("MMEMory:TRANsfer?" + " 'D:\\Data_LPD\\" + folderName_on_VNA + '\\' + fileName + ".csv'" )
my_data_byte = self.vna.read_raw()
my_data_string = my_data_byte.decode("utf-8")
my_data_string = my_data_string.split("Freq(Hz),", 1)[1]
my_data_string = my_data_string.split("END")[0]
column_names = my_data_string.split("\r\n")[0].split(',')
my_data_string = my_data_string.split("\r\n", 1)[1]
my_data_array = np.array(my_data_string.split("\r\n"))
my_data_array = np.array(list(filter(None, my_data_array)))
data_array = np.zeros((len(my_data_array), 1+len(column_names)))
for idx in range(0, len(my_data_array)):
data_array[idx] = my_data_array[idx].split(',')
for idx in range(0, len(column_names)):
if "DEG" in column_names[idx]:
data_array[:, 1+idx] = data_array[:, 1+idx]/180*np.pi
column_names[idx] = column_names[idx].replace("DEG", "RAD")
df = pd.DataFrame(data = data_array,
columns = ["Freq [Hz]"] + column_names)
self.df = df
return df
def plot_data(self):
plt.plot(self.df['Freq [Hz]']/1e9, self.df['S21(DB)'])
plt.xlabel("Frequency [GHz]")
plt.ylabel("S21 [dB]")