Source code for elasticai.hw_measurements.process.mxo4x

import h5py
import numpy as np
from pathlib import Path
from elasticai.hw_measurements import TransformSpectrum, FrequencyResponse, TransientData
from elasticai.hw_measurements.csv_handler import CsvHandler
from elasticai.hw_measurements.process.data import do_fft


[docs] def load_spectral_data(path: Path, file_name: str, begin_line: int=33) -> TransformSpectrum: """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: Dataclass TransformSpectrum """ data = CsvHandler( path=str(path), file_name=file_name, delimiter=',' ).read_data_from_csv( include_chapter_line=False, start_line=begin_line, type_load=float ) return TransformSpectrum( freq=data[:, 0], spec=data[:, 1], sampling_rate=1. )
[docs] def load_fra_data(path2file: Path, begin_line: int=2) -> FrequencyResponse: """Function for loading the csv files of Frequency Response Analysis (FRA) from R&S MXO44 :param path2file: Path to csv file :param begin_line: Integer of starting line to extract information from csv :return: Dataclass with FrequencyResponse """ data = CsvHandler( path=path2file.parent, file_name=path2file.stem, delimiter=',' ).read_data_from_csv( include_chapter_line=False, start_line=begin_line, type_load=float ) return FrequencyResponse( freq=data[:, 1], gain=data[:, 2], phase=data[:, 3], )
[docs] def load_transient_data(path2file: Path) -> TransientData: data = list() chan = list() samp_rate = 0. with h5py.File(path2file, 'r') as f: key_channels = list(f['Waveforms'].keys()) # --- Getting sampling rate for key, value in f['Waveforms'][key_channels[0]].attrs.items(): if key == "XInc": samp_rate = 1 / float(value) # --- Getting data for channel in key_channels: data.append(f['Waveforms'][channel][f'{channel} Data'][...]) chan.append(channel) f.close() data0 = np.array(data) if len(data0.shape) == 1: data0 = np.expand_dims(data0, axis=0) return TransientData( rawdata=data0, timestamps=np.array([idx/samp_rate for idx in range(len(data[0]))]), sampling_rate=samp_rate, channels=chan, )