Skip to content
Snippets Groups Projects
Commit eae3d4cf authored by David Verelst's avatar David Verelst
Browse files

fatigue_tools: cycle_matrix2 for different default binning strategy

parent d7eaefb3
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -106,7 +106,7 @@ def eq_load_and_cycles(signals, no_bins=46, m=[3, 4, 6, 8, 10, 12], neq=[10 ** 6
ampl_bin_mean = (ampl_bin_edges[:-1] + ampl_bin_edges[1:]) / 2
cycles, ampl_bin_mean = cycles.flatten(), ampl_bin_mean.flatten()
with warnings.catch_warnings():
warnings.simplefilter("ignore")
warnings.simplefilter("ignore")
eq_loads = [[((np.nansum(cycles * ampl_bin_mean ** _m) / _neq) ** (1. / _m)) for _m in np.atleast_1d(m)] for _neq in np.atleast_1d(neq)]
return eq_loads, cycles, ampl_bin_mean, ampl_bin_edges
......@@ -160,7 +160,7 @@ def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_win
ampl_bins = np.linspace(0, 1, num=ampl_bins + 1) * ampls[weights>0].max()
cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
warnings.simplefilter("ignore")
ampl_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * ampls)[0]
ampl_bin_mean = np.nanmean(ampl_bin_sum / np.where(cycles,cycles,np.nan),1)
mean_bin_sum = np.histogram2d(ampls, means, [ampl_bins, mean_bins], weights=weights * means)[0]
......@@ -169,6 +169,51 @@ def cycle_matrix(signals, ampl_bins=10, mean_bins=10, rainflow_func=rainflow_win
return cycles, ampl_bin_mean, ampl_edges, mean_bin_mean, mean_edges
def cycle_matrix2(signal, nrb_amp, nrb_mean, rainflow_func=rainflow_windap):
"""
Same as wetb.fatigue_tools.fatigue.cycle_matrix but bin from min_amp to
max_amp instead of 0 to max_amp.
Parameters
----------
Signal : ndarray(n)
1D Raw signal array
nrb_amp : int
Number of bins for the amplitudes
nrb_mean : int
Number of bins for the means
rainflow_func : {rainflow_windap, rainflow_astm}, optional
The rainflow counting function to use (default is rainflow_windap)
Returns
-------
cycles : ndarray, shape(ampl_bins, mean_bins)
A bi-dimensional histogram of load cycles(full cycles). Amplitudes are\
histogrammed along the first dimension and mean values are histogrammed
along the second dimension.
ampl_edges : ndarray, shape(no_bins+1,n)
The amplitude bin edges
mean_edges : ndarray, shape(no_bins+1,n)
The mean bin edges
"""
bins = [nrb_amp, nrb_mean]
ampls, means = rainflow_func(signal)
weights = np.ones_like(ampls)
cycles, ampl_edges, mean_edges = np.histogram2d(ampls, means, bins,
weights=weights)
cycles = cycles / 2 # to get full cycles
return cycles, ampl_edges, mean_edges
if __name__ == "__main__":
signal1 = np.array([-2.0, 0.0, 1.0, 0.0, -3.0, 0.0, 5.0, 0.0, -1.0, 0.0, 3.0, 0.0, -4.0, 0.0, 4.0, 0.0, -2.0])
signal2 = signal1 * 1.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment