Source code for lab_driver.process.mxo4x
import h5py
import numpy as np
from pathlib import Path
from lab_driver.csv_handler import CsvHandler
from lab_driver.process.data import do_fft
[docs]
def load_spectral_data(path: str, file_name: str, begin_line: int=33) -> dict:
"""Function for loading the csv files of spectrum analysis from R&S MXO44
:param path: path to csv file
:param file_name: name of csv file
:param begin_line: Integer of starting line to extract information from csv
:return: Dictionary with results [keys: 'f': frequency, 'Y': spectral info]
"""
data = CsvHandler(
path=path,
file_name=file_name,
delimiter=','
).read_data_from_csv(
include_chapter_line=False,
start_line=begin_line,
type_load=float
)
return {'f': data[:, 0], 'Y': data[:, 1]}
[docs]
def load_fra_data(path: str, file_name: str, begin_line: int=2) -> dict:
"""Function for loading the csv files of Frequency Response Analysis (FRA) from R&S MXO44
:param path: path to csv file
:param file_name: name of csv file
:param begin_line: Integer of starting line to extract information from csv
:return: Dictionary with results [keys: 'f': frequency, 'gain': amplitude, 'phase': phase information]
"""
data = CsvHandler(
path=path,
file_name=file_name,
delimiter=','
).read_data_from_csv(
include_chapter_line=False,
start_line=begin_line,
type_load=float
)
return {'f': data[:, 1], 'gain': data[:, 2], 'phase': data[:, 3]}
[docs]
def load_transient_data(path: str, file_name: str, freq_ref: float) -> dict:
data = dict()
with h5py.File(Path(path) / file_name, 'r') as f:
groups = list(f['Waveforms'].keys())
groups_meta = list(f['Waveforms'][groups[0]].keys())
for channel in groups:
data.update({channel: f['Waveforms'][channel][f'{channel} Data'][...]})
f, Y = do_fft(data[list(data.keys())[0]], 1., 'Hamming')
samp_rate = freq_ref / f[np.argmax(Y)] * f[-1]
data.update({"fs": samp_rate})
return data