Jump to content

E5080B sample

From Photonicamp Wiki

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]")