Código fuente para ruidaqan.gui.misc_functions

import numpy as np
from numpy.polynomial.polynomial import polyval
from scipy import signal


[documentos] def calculate_spectrum_gui(data, fs=1.0): """ Estimación espectral para la graficación """ f, psd = signal.periodogram(data, fs, detrend=False) return f, psd
[documentos] def int_to_volt(incoming_data, coeficientes): """ Convierte datos de I16 a voltaje con coeficientes de calibración incoming_data: list of numpy array (int16) coeficientes: list of numpy array (floats) Ambas entradas deben ser lista con igual tamaño """ # Array donde se guardarán los voltajes data_volts = np.ones_like(incoming_data, dtype=float) for k, (inc_data, coef) in enumerate(zip(incoming_data, coeficientes)): data_volts[k, :] = polyval(inc_data, coef) return data_volts
[documentos] def calculate_mean_value(data): return np.mean(data)
[documentos] def weighted_average(data, weights): """ ave(data) = sum(data*weights) / sum(weights) var(data) = var(data) * mean(weights**2) / mean(weights)**2 / n std(data) = sqrt(var(data)) """ if len(data) != len(weights): raise ValueError("Los datos y los pesos no tienen el mismo tamaño") mean_data = np.sum(data * weights) / np.sum(weights) if len(data) > 1: _var = np.var(data, ddof=1) * np.mean(weights**2) / np.mean(weights)**2 / len(data) else: _var = 1 / weights[0]**2 std_data = np.sqrt(_var) return mean_data, std_data
if __name__ == "__main__": a = np.asarray([12, 11, 10]) w = np.asarray([1, 2, 1.5]) mean, std = weighted_average(a, w) print(f"{mean} +/- {std}") print(np.std(a, ddof=1) / np.sqrt(len(a)))