Skip to content

HouJingChen99/Gearbox-3

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gearbox Simulation Model

Simulation of the vibration behaviour of a gearbox under degradation

Preliminary

Load Modules

# Build In
import os
from copy import deepcopy as dc
import sys
from IPython.display import display, HTML
# Third Party
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from scipy.stats import norm
# from gearbox_functions import gearbox_functions as gf
import gearbox_functions as gf

Define Directories

wd = os.getcwd()
hd = r'####' # Gearbox Toolbox directory  

Other

from matplotlib import rcParams
rcParams['figure.figsize'] = [7.4803*4, 4.62309*2]
sizefactor = 2
rcParams['ytick.labelsize'] = 8 * sizefactor
rcParams['xtick.labelsize'] = 8 * sizefactor
rcParams['axes.labelweight'] = 8 * sizefactor
rcParams['axes.titleweight'] = 8 * sizefactor
rcParams.update({'font.size': 8 * sizefactor})

Motivation


  • Gear Wheel Pitting
  • Degradation dominates at one tooth only
  • Operating Strategy [Gretzinger2017]
  • Local Stress reduction
  • Brief Introduction


  • Toolbox to simulate gearbox vibration
  • Virtual copy of an existing testbench
    • Match on Vibration Spectra
    • Match on Gear Degradation
  • No consideration of:
    • Transmission paths formulation (Structure Borne Acoustics)
    • Bearing Degradation (not seen in testbench)

    State Model


  • Acts as a state model:
  • Executes for a given load cycle (must be greater than the previous)
  • Optional: Setting a new torque signal at the given load cycle (effecting the following load cycles)

  • Inputs and main Methods()


    General Input Arguments:

  • fi: Rotational Frequency input shaft - in revolutions per second (float)
  • ti: Sample Interval - in seconds (float)
  • fs: Sample Rate - in Hz (float)
  • seed: Random Generator Seed (integer)
  • Input Arguments vibrations = model.run():

  • nlc: Current number of load cycle - in revolutions (float)
  • Input Arguments model.set():

  • nlc: Current number of load cycle - in revolutions (float)
  • torque: Input Torque - in Nm
  • Torque Definition


    Vibration/Degradation Output is calculated for previous given torquep-1 argument.

    Given Input Torque will be relevant for the next time steps nlc

    Definition:

  • Must be defined as array
  • Each value corresponds to a given time
  • Function 'get_sample_time_torque()' returns the time vector for torque
  • Length of the torque vector must be at least as long as it takes for running once every possible meshing
  • Which Torque Applies on which Gear Element

    Input Torque applies on:

  • Vibration Influence of Gear In, Bearing 1 and Bearing 2
  • Load Spectre Calculation of Gear In, Bearing 1, Bearing 2 and Gear Out
  • Output Torque applies on:

  • Vibration Influence of Gear Out, Bearing 3 and Bearing 4
  • Load Spectre Calculation of Bearing 3 and Bearing 4
  • Gear Degradation strongly depends on the Gearbox Design → Both Input and Output Gear Degradation are defined for input torque!!!

    Toolbox Running Example - Definition

    Complete High Level Example. Details and Theory will follow.

    Load Gearbox Simulation Toolbox:

    # os.chdir()
    os.chdir(hd)
    from gearbox import Gearbox
    os.chdir(wd)

    Define General Input Arguments:

    rotational_frequency_in = 5.2 # U/s | float
    number_of_load_cycle = 0 # | Must be float in .3f
    sample_interval = 1 # s | float
    sample_rate = 5000 # Hz | float
    seed = 4

    Define Vibration Elements

    GearIn = {'no_teeth': 11,                                         # Number of teeth
              'signal': 'gausspulse',                                 # Signal type for gear
              'ampl_method': 'gaussian_repeat',                       # Amplitude Method for inner gear
              'ampl_attributes': {'mu': 4, 'sigma': 0.5},             # Attributes regarding Amplitude Method for gear signal
              'noise_method': None,                             # Noise Method for inner gear
              'noise_attributes': {'mu': 0, 'sigma': 0.25},           # Attributes regarding Noise Method for gear signal
              'torq_method': None,                                    # Torque Influence Method for inner gear
              'torq_attributes': {'scale_min': 0,                     # Attributes regarding Torque Influence Method for gear signal
                                  'scale_max': 0.2,
                                   'value_min': 0,
                                   'value_max': 50,
                                  'norm_divisor': 200,
                                  'exponent': 2},           
              }
    
    GearOut = {'no_teeth': 21,                                        # Number of teeth
               'signal': 'gausspulse',                                # Signal type for gear
               'ampl_method': 'gaussian_repeat',                      # Amplitude Method for inner gear
               'ampl_attributes': {'mu': 3, 'sigma': 0.5},            # Attributes regarding Amplitude Method for gear signal
               'noise_method': None,                            # Noise Method for inner gear
               'noise_attributes': {'mu': 0, 'sigma': 0.25},          # Attributes regarding Noise Method for gear signal
               'torq_method': None,                                   # Torque Influence Method for inner gear
               'torq_attributes': {'scale_min': 0,                    # Attributes regarding Torque Influence Method for gear signal
                                   'scale_max': 0.2,
                                   'value_min': 0,
                                   'value_max': 50,
                                   'norm_divisor': 1,
                                   'exponent': 4},           
              }
    # General Definition of Amplitudes etc. (can be also defined separately for each Bearing)
    BearingI =   {# Inner Ring Rollover
                 'signal_iring': 'sine',                               # Signal type for inner cage
                 'ampl_method_iring': 'const',                         # Amplitude Method for inner cage signal (Repeat methods are not working for bearings)
                 'ampl_attributes_iring': {'constant': 2.5},           # Attributes regarding Amplitude Method for inner cage signal
                 'noise_method_iring': 'gaussian',                     # Noise Method for inner gear
                 'noise_attributes_iring': {'mu': 0, 'sigma': 0.05},   # Attributes regarding Noise Method for gear signal
                 'torq_method_iring': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_iring': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                           'scale_max': 0.1,
                                           'value_min': 0,
                                           'value_max': 50,
                                           'norm_divisor': 1,
                                           'exponent': 4},           
    
                 # Rolling Element:
                 'signal_relement': 'sine',                            # Signal type for rolling element
                 'ampl_method_relement': 'const',                      # Amplitude Method for rolling element signal (Repeat methods are not working for bearings)
                 'ampl_attributes_relement': {'constant': 1.2},        # Attributes regarding Amplitude Method for rolling element signal
                 'noise_method_relement': 'gaussian',                  # Noise Method for rolling element
                 'noise_attributes_relement': {'mu': 0, 'sigma': 0.05},# Attributes regarding Noise Method for gear signal
                 'torq_method_relement': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_relement': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                              'scale_max': 0.1,
                                              'value_min': 0,
                                              'value_max': 50,
                                              'norm_divisor': 1,
                                              'exponent': 4},
                 # Outer Ring Rollover
                 'signal_oring': 'sine',                               # Signal type for inner cage
                 'ampl_method_oring': 'const',                         # Amplitude Method for inner cage signal (Repeat methods are not working for bearings)
                 'ampl_attributes_oring': {'constant': 2.5},           # Attributes regarding Amplitude Method for inner cage signal
                 'noise_method_oring': 'gaussian',                     # Noise Method for inner gear
                 'noise_attributes_oring': {'mu': 0, 'sigma': 0.05},   # Attributes regarding Noise Method for gear signal
                 'torq_method_oring': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_oring': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                           'scale_max': 0.1,
                                           'value_min': 0,
                                           'value_max': 50,
                                           'norm_divisor': 1,
                                           'exponent': 4},          
                }
    Bearing1 = {**{'no_elements': 11}, **BearingI}                     # Number of rolling elements
    Bearing2 = {**{'no_elements': 9}, **BearingI}                     # Number of rolling elements
    Bearing3 = {**{'no_elements': 13}, **BearingI}                     # Number of rolling elements
    Bearing4 = {**{'no_elements': 12}, **BearingI}                     # Number of rolling elements

    Define Degradation Elements

    # Reference Value for PDFs is given for load defined 'Whoeler' 'torqp'
    
    Deg_GearIn = {'Failing_Teeth': 2,                                      # Number of Teeth falling at Gear
                  'Chances': {'neighbouring': 1,                           # Chance that multiple falling teeth are neighbouring
                              'opposite': 1,                               # Chance that multiple falling teeth are opposite to each other
                              'keeporder': 10},                            # Chance that multiple falling teeth are keeping order from init to eol
                  'PDF_Deg_Init': {'n': norm(loc=6.875e6, scale=1.053e6),  # P(n_0) n in Load Cycles (ref: input shaft)
                                   'a': norm(loc=0.450, scale=0.305)},     # P(a_0) a in %
                  'PDF_Deg_EOL': {'n': norm(loc=10390000, scale=1.053e6),  # P(n_eol) n in Load Cycles (ref: input shaft)
                                  'a': norm(loc=4.0, scale=0.)},           # P(a_eol) a in %
                  'Woehler': {'k': 8.5,                                   # Woehler Exponent
                              'np': 10390000,                              # Woehler Reference n in Load Cycles (ref: input shaft)
                              'torqp': 200},                               # Woehler Reference sigma in Nm
                  'GridSearch': {'slice_theta1': (0.0001, 0.0902, 0.01),   # Grid for function a = theta1 * exp(theta2 * n) + theta3 defined in slices
                                 'slice_theta2': (0.10/1e6, 1.51/1e6, 0.2/1e6), #tbd change step to 0.02/1e6
                                 'slice_theta3':(-2.0, 0.5, 0.1)}
                 }
    
    Deg_GearOut = {'Failing_Teeth': 3,                                      # Number of Teeth falling at Gear
                   'Chances': {'neighbouring': 2,                           # Chance that multiple falling teeth are neighbouring
                               'opposite': 2,                               # Chance that multiple falling teeth are opposite to each other
                               'keeporder': 10},                            # Chance that multiple falling teeth are keeping order from init to eol
                   'PDF_Deg_Init': {'n': norm(loc=6.875e6, scale=1.053e6),  # P(n_0) n in Load Cycles (ref: input shaft)
                                    'a': norm(loc=0.450, scale=0.305)},     # P(a_0) a in %
                   'PDF_Deg_EOL': {'n': norm(loc=10390000, scale=1.053e6),  # P(n_eol) n in Load Cycles (ref: input shaft)
                                   'a': norm(loc=4.0, scale=0.)},           # P(a_eol) a in %
                   'Woehler': {'k': 8.5,                                   # Woehler Exponent
                               'np': 10390000,                              # Woehler Reference n in Load Cycles (ref: input shaft)
                               'torqp': 200},                               # Woehler Reference sigma in Nm
                   'GridSearch': {'slice_theta1': (0.0001, 0.0902, 0.01),   # Grid for function a = theta1 * exp(theta2 * n) + theta3 defined in slices
                                  'slice_theta2': (0.10/1e6, 1.51/1e6, 0.2/1e6), #tbd change step to 0.02/1e6
                                  'slice_theta3':(-2.0, 0.5, 0.1)}
                  }
    Deg_Bearing1 = 'tbd'
    Deg_Bearing2 = 'tbd'
    Deg_Bearing3 = 'tbd'
    Deg_Bearing4 = 'tbd'

    Define Degradation-Vibration-Dependencie

    GearDegVibDictIn = {'signal': 'gausspulse',                                 # Signal type for gear
                           'fc_factor': 4*rotational_frequency_in,                                      # fc = frequency * fc_factor (see gauspulse definition)
                           'bw_factor': 0.5,                                    # see gauspulse definition
                           'bwr_factor': -6,                                    # see gauspulse definition
                           'scale_method': 'linear',                            # Scale Method (See Torque Influence Method)
                           'scale_attributes': {'scale_min': 0,                 # Attributes regarding Scale Method for gear signal (see Torque Influence Method)
                                               'scale_max': 10,
                                               'value_min': 0,
                                               'value_max': 2,
                                               'exponent': 2},
                           'torq_influence': True,                              # If True Torque Influence will be taken into account in the same way as in vibration definition
                           'noise_method': 'gaussian',                          # Noise Method
                           'noise_attributes': {'mu': 0, 'sigma': 0.005},       # Attributes regarding Noise Method for
                           't2t_factor': 1,
                           }
    
    GearDegVibDictOut = {'signal': 'gausspulse',                                # Signal type for gear
                           'fc_factor': 4**rotational_frequency_in,                                      # fc = frequency * fc_factor (see gauspulse definition)
                           'bw_factor': 0.5,                                    # see gauspulse definition
                           'bwr_factor': -6,                                    # see gauspulse definition
                           'scale_method': 'linear',                            # Scale Method (See Torque Influence Method)
                           'scale_attributes': {'scale_min': 0,                 # Attributes regarding Scale Method for gear signal (see Torque Influence Method)
                                               'scale_max': 10,
                                               'value_min': 0,
                                               'value_max': 2,
                                               'exponent': 2},
                           'torq_influence': True,                              # If True Torque Influence will be taken into account in the same way as in vibration definition
                           'noise_method': 'gaussian',                          # Noise Method
                           'noise_attributes': {'mu': 0, 'sigma': 0.005},       # Attributes regarding Noise Method for
                           't2t_factor': 1,
                           }

    Torque Definition (Workaround)

    sample_time = gf.get_sample_time_torque(rotational_frequency_in, sample_rate, GearIn['no_teeth'], GearOut['no_teeth'])
    torque_in = np.sin((2 * np.pi * rotational_frequency_in * sample_time)) * 5 + 200 # Nm | array

    Toolbox Running Example - Run

    Instance Initialization


    Initialize a new Instance:

    model = Gearbox(# Vibration Arguments
                    rotational_frequency_in,
                    sample_interval, sample_rate,
                    GearIn, GearOut,
                    Bearing1, Bearing2, Bearing3, Bearing4,
                    # Degradation Arguments
                    Deg_GearIn, Deg_GearOut,
                    Deg_Bearing1, Deg_Bearing2, Deg_Bearing3, Deg_Bearing4,
                    # Shared Arguments
                    seed=seed,
                    fixed_start=True,
                    GearDegVibDictIn=GearDegVibDictIn,
                    GearDegVibDictOut=GearDegVibDictOut)

    Run only Vibration


    Initialize Vibration Module: init_vibration(torque)

    Input Arguments:

  • Input Torque
  • Returns:

  • -
  • model.Vibration.init_vibration(torque_in)

    Get Loads from Torque: get_loads(torque)

    Input Arguments:

  • Input Torque
  • Returns:

  • Loads Dictionary
  • loads = model.Vibration.get_loads(torque_in)
    
    df_loads = pd.DataFrame(loads)
    df_loads.index = df_loads.index.astype(dtype='int32')
    df_loads = df_loads.sort_index()
    df_loads
    GearIn GearOut Bearing1 Bearing2 Bearing3 Bearing4
    1 [200.6817258938662, 199.98264304525793, 199.96... [200.6817258938662, 197.31505718393504, 195.49... tbd tbd tbd tbd
    2 [202.62853435886845, 202.64111177836386, 202.6... [202.62853435886845, 199.96528630540217, 197.3... tbd tbd tbd tbd
    3 [204.47605246180117, 204.46872938665337, 204.4... [204.47605246180117, 202.62643579473837, 199.9... tbd tbd tbd tbd
    4 [204.88825602091026, 204.8862356892104, 204.88... [204.88825602091026, 204.4750096988814, 202.65... tbd tbd tbd tbd
    5 [203.7417678604638, 203.75305523806313, 203.74... [203.7417678604638, 204.88858842058818, 204.47... tbd tbd tbd tbd
    6 [201.42261349854877, 201.40836172680946, 201.4... [201.42261349854877, 203.74338318244688, 204.8... tbd tbd tbd tbd
    7 [198.65592789803515, 198.64161950289116, 198.6... [198.65592789803515, 201.42498753929806, 203.7... tbd tbd tbd tbd
    8 [196.29073656906985, 196.3022018523581, 196.29... [196.29073656906985, 198.62732346333246, 201.4... tbd tbd tbd tbd
    9 [195.12340552714028, 195.12118534653806, 195.1... [195.12340552714028, 196.29237165842147, 198.6... tbd tbd tbd tbd
    10 [195.50333012295354, 195.49622128638393, 195.5... [195.50333012295354, 195.12377987024195, 196.2... tbd tbd tbd tbd
    11 [197.3025887660451, 197.31505718393504, 197.30... [197.3025887660451, 195.50231116440438, 195.12... tbd tbd tbd tbd
    12 NaN [199.98264304525793, 197.30051307870085, 195.5... tbd tbd tbd tbd
    13 NaN [202.64111177836386, 199.98016349282457, 197.2... tbd tbd tbd tbd
    14 NaN [204.46872938665337, 202.63901720696384, 199.9... tbd tbd tbd tbd
    15 NaN [204.8862356892104, 204.4676787146322, 202.636... tbd tbd tbd tbd
    16 NaN [203.75305523806313, 204.88657549807294, 204.4... tbd tbd tbd tbd
    17 NaN [201.40836172680946, 203.75466393081751, 204.8... tbd tbd tbd tbd
    18 NaN [198.64161950289116, 201.41073791519926, 203.7... tbd tbd tbd tbd
    19 NaN [196.3022018523581, 198.64400338090186, 201.41... tbd tbd tbd tbd
    20 NaN [195.12118534653806, 196.28257518840692, 198.6... tbd tbd tbd tbd
    21 NaN [195.49622128638393, 195.12155229545505, 196.2... tbd tbd tbd tbd

    Get Vibration Signal: run_vibration(nolc, torque, statei=None, output=True)

    Input Arguments:

  • nolc: current number of load cycle
  • torque: Input Torque
  • statei: current degradation state
  • output: if true method returns vibration signal
  • Returns:

  • vibration signal
  • vibration = model.Vibration.run_vibration(number_of_load_cycle, torque_in, statei=None, output=True)
    plt.plot(np.arange(0, sample_interval, 1/sample_rate), vibration)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Vibration Signal'])
    plt.show()

    png

    Summarize Vibration: summary_vibration()

    model.Vibration.summary_vibration()

    Controls

    png

    Accumulated Signal

    png

    Bearing 1 Signal

    png

    Bearing 2 Signal

    png

    Bearing 3 Signal

    png

    Bearing 4 Signal

    png

    Degradation Signal

    Degradation not available (probably no statei argument given)

    Gear Signals

    png

    Run only Degradation


    Initialize Degradation Module: init_degradation()

    Input Arguments:

    Returns:

  • statei: DataFrame containing the degradation states
  • statei = model.Degradation.init_degradation()

    Gear in:

    Running for tooth 7 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 3 failure

    [================================================================================] 2000/2000  
    
    \\imapc\benutzer\Mitarbeiterdaten\henss\_02_software\_08_github\Gearbox\gearbox\degradation\helper\__init__.py:181: RuntimeWarning: invalid value encountered in log
      x = np.log((y - theta3) / theta1) / theta2
    

    Gear out:

    Running for tooth 12 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 5 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 14 failure

    [================================================================================] 2000/2000  
    
    pd.DataFrame(statei['GearIn'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0
    $a_{0}$ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    $d_{0}$ NaN NaN NaN NaN NaN NaN -1.434069 NaN NaN NaN NaN
    pd.DataFrame(statei['GearOut'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ... 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0
    $a_{0}$ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    $d_{0}$ NaN NaN NaN NaN -1.671099 NaN NaN NaN NaN NaN ... -1.382792 NaN -0.391062 NaN NaN NaN NaN NaN NaN NaN

    2 rows × 21 columns

    Summarize Vibration: summary_vibration()

    model.Degradation.summary_degradation()

    Degradation Gear In

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.661548 5.161122e+06 7 8.760057e+06 4.0 0.0501 5.000000e-07 1.776357e-15 5.656872e+06 8.721440e+06
    1 0.100020 NaN 3 1.175231e+07 4.0 0.0101 5.000000e-07 4.000000e-01 5.839910e+06 1.112036e+07

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 0)

    0
    0 -1.434069
    1 NaN

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Pitting Growth (until load cycle 0)

    0
    0 NaN
    1 NaN

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Degradation Gear Out

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.579647 5.342086e+06 12 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 4.391948e+06 9.341308e+06
    1 0.551336 6.623250e+06 5 1.058666e+07 4.0 0.0201 5.000000e-07 1.776357e-15 5.441903e+06 1.073986e+07
    2 0.146248 2.587852e+06 14 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 5.601978e+06 9.354910e+06

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 0)

    0
    0 -1.382792
    1 -1.671099
    2 -0.391062

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    Pitting Growth (until load cycle 0)

    0
    0 NaN
    1 NaN
    2 NaN

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    Get Degradation Growth: run_degradation(nolc, loads)

    Input Arguments:

  • nolc: current number of load cycle (must be greater than the previous given nolc)
  • loads: Dictionary regarding get_loads(torque) return
  • Returns:

  • statei
  • loads = {'GearIn': {'7': [200], '3': [200]},
             'GearOut': {'12': [200], '5': [200], '14': [200]}}
    
    for nolc in np.linspace(1e6, 6e6, 50):
        statei = model.Degradation.run_degradation(nolc, loads)
    pd.DataFrame(statei['GearIn'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0
    $a_{6000000}$ NaN NaN NaN NaN NaN NaN 1.006265 NaN NaN NaN NaN
    $d_{6000000}$ NaN NaN NaN NaN NaN NaN 0.233080 NaN NaN NaN NaN
    pd.DataFrame(statei['GearOut'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ... 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0
    $a_{6000000}$ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN 0.193018 NaN NaN NaN NaN NaN NaN NaN
    $d_{6000000}$ NaN NaN NaN NaN -0.878143 NaN NaN NaN NaN NaN ... -0.56928 NaN 0.083862 NaN NaN NaN NaN NaN NaN NaN

    2 rows × 21 columns

    model.Degradation.summary_degradation()

    Degradation Gear In

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.661548 5.161122e+06 7 8.760057e+06 4.0 0.0501 5.000000e-07 1.776357e-15 5.656872e+06 8.721440e+06
    1 0.100020 NaN 3 1.175231e+07 4.0 0.0101 5.000000e-07 4.000000e-01 5.839910e+06 1.112036e+07

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 6000000)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 5.081633e+06 5.183673e+06 5.285714e+06 5.387755e+06 5.489796e+06 5.591837e+06 5.693878e+06 5.795918e+06 5.897959e+06 6.000000e+06
    0 -1.434069 -1.156209 -1.127856 -1.099503 -1.071151 -1.042798 -1.014445 -0.986092 -0.957739 -0.929386 ... -0.022096 0.006257 0.03461 0.062963 0.091315 0.119668 0.148021 0.176374 0.204727 0.23308
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

    2 rows × 51 columns

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Pitting Growth (until load cycle 6000000)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 5.081633e+06 5.183673e+06 5.285714e+06 5.387755e+06 5.489796e+06 5.591837e+06 5.693878e+06 5.795918e+06 5.897959e+06 6.000000e+06
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN 0.669038 0.704058 0.740911 0.779694 0.820506 0.863454 0.908651 0.956213 1.006265
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

    2 rows × 51 columns

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Degradation Gear Out

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.579647 5.342086e+06 12 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 4.391948e+06 9.341308e+06
    1 0.551336 6.623250e+06 5 1.058666e+07 4.0 0.0201 5.000000e-07 1.776357e-15 5.441903e+06 1.073986e+07
    2 0.146248 2.587852e+06 14 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 5.601978e+06 9.354910e+06

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 3142857)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 5.081633e+06 5.183673e+06 5.285714e+06 5.387755e+06 5.489796e+06 5.591837e+06 5.693878e+06 5.795918e+06 5.897959e+06 6.000000e+06
    0 -1.382792 -1.247205 -1.233370 -1.219534 -1.205699 -1.191864 -1.178029 -1.164194 -1.150358 -1.136523 ... -0.693797 -0.679961 -0.666126 -0.652291 -0.638456 -0.624621 -0.610785 -0.596950 -0.583115 -0.569280
    1 -1.671099 -1.538938 -1.525452 -1.511967 -1.498481 -1.484995 -1.471510 -1.458024 -1.444539 -1.431053 ... -0.999513 -0.986028 -0.972542 -0.959057 -0.945571 -0.932085 -0.918600 -0.905114 -0.891629 -0.878143
    2 -0.391062 -0.311907 -0.303830 -0.295753 -0.287676 -0.279599 -0.271522 -0.263445 -0.255369 -0.247292 ... 0.011170 0.019247 0.027324 0.035401 0.043478 0.051555 0.059631 0.067708 0.075785 0.083862

    3 rows × 51 columns

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    Pitting Growth (until load cycle 3142857)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 5.081633e+06 5.183673e+06 5.285714e+06 5.387755e+06 5.489796e+06 5.591837e+06 5.693878e+06 5.795918e+06 5.897959e+06 6.000000e+06
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 0.151754 0.155864 0.160086 0.164422 0.168875 0.173449 0.178147 0.182972 0.187928 0.193018

    3 rows × 51 columns

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    loads = {'GearIn': {'7': [200], '3': [200]},
             'GearOut': {'12': [188], '5': [194], '14': [200]}}
    
    for nolc in np.linspace(6.1e6, 10e6, 40):
        statei = model.Degradation.run_degradation(nolc, loads)
    pd.DataFrame(statei['GearIn'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0
    $a_{10000000}$ NaN NaN NaN NaN NaN NaN 7.435351 NaN NaN NaN NaN
    $d_{10000000}$ NaN NaN NaN NaN NaN NaN 1.344519 NaN NaN NaN NaN
    pd.DataFrame(statei['GearOut'])
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ... 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0
    $a_{10000000}$ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN 0.550255 NaN NaN NaN NaN NaN NaN NaN
    $d_{10000000}$ NaN NaN NaN NaN -0.494206 NaN NaN NaN NaN NaN ... -0.286066 NaN 0.400478 NaN NaN NaN NaN NaN NaN NaN

    2 rows × 21 columns

    model.Degradation.summary_degradation()

    Degradation Gear In

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.661548 5.161122e+06 7 8.760057e+06 4.0 0.0501 5.000000e-07 1.776357e-15 5.656872e+06 8.721440e+06
    1 0.100020 NaN 3 1.175231e+07 4.0 0.0101 5.000000e-07 4.000000e-01 5.839910e+06 1.112036e+07

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 10000000)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 9.100000e+06 9.200000e+06 9.300000e+06 9.400000e+06 9.500000e+06 9.600000e+06 9.700000e+06 9.800000e+06 9.900000e+06 1.000000e+07
    0 -1.434069 -1.156209 -1.127856 -1.099503 -1.071151 -1.042798 -1.014445 -0.986092 -0.957739 -0.929386 ... 1.094445 1.122231 1.150017 1.177803 1.205589 1.233375 1.261161 1.288947 1.316733 1.344519
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

    2 rows × 91 columns

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Pitting Growth (until load cycle 10000000)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 9.100000e+06 9.200000e+06 9.300000e+06 9.400000e+06 9.500000e+06 9.600000e+06 9.700000e+06 9.800000e+06 9.900000e+06 1.000000e+07
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 4.740989 4.984065 5.239603 5.508243 5.790657 6.08755 6.399666 6.727783 7.072724 7.435351
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

    2 rows × 91 columns

    Legend: Row: 0 <=> Tooth: 7 | Row: 1 <=> Tooth: 3)

    png

    Degradation Gear Out

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.579647 5.342086e+06 12 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 4.391948e+06 9.341308e+06
    1 0.551336 6.623250e+06 5 1.058666e+07 4.0 0.0201 5.000000e-07 1.776357e-15 5.441903e+06 1.073986e+07
    2 0.146248 2.587852e+06 14 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 5.601978e+06 9.354910e+06

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 5238095)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 9.100000e+06 9.200000e+06 9.300000e+06 9.400000e+06 9.500000e+06 9.600000e+06 9.700000e+06 9.800000e+06 9.900000e+06 1.000000e+07
    0 -1.382792 -1.247205 -1.233370 -1.219534 -1.205699 -1.191864 -1.178029 -1.164194 -1.150358 -1.136523 ... -0.349789 -0.342709 -0.335629 -0.328548 -0.321468 -0.314388 -0.307307 -0.300227 -0.293147 -0.286066
    1 -1.671099 -1.538938 -1.525452 -1.511967 -1.498481 -1.484995 -1.471510 -1.458024 -1.444539 -1.431053 ... -0.580592 -0.570994 -0.561395 -0.551797 -0.542198 -0.532600 -0.523001 -0.513403 -0.503805 -0.494206
    2 -0.391062 -0.311907 -0.303830 -0.295753 -0.287676 -0.279599 -0.271522 -0.263445 -0.255369 -0.247292 ... 0.329239 0.337154 0.345070 0.352985 0.360901 0.368816 0.376731 0.384647 0.392562 0.400478

    3 rows × 91 columns

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    Pitting Growth (until load cycle 5238095)

    0.000000e+00 1.000000e+06 1.102041e+06 1.204082e+06 1.306122e+06 1.408163e+06 1.510204e+06 1.612245e+06 1.714286e+06 1.816327e+06 ... 9.100000e+06 9.200000e+06 9.300000e+06 9.400000e+06 9.500000e+06 9.600000e+06 9.700000e+06 9.800000e+06 9.900000e+06 1.000000e+07
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 0.434707 0.446242 0.458083 0.470239 0.482717 0.495527 0.508676 0.522174 0.536031 0.550255

    3 rows × 91 columns

    Legend: Row: 0 <=> Tooth: 12 | Row: 1 <=> Tooth: 5 | Row: 2 <=> Tooth: 14)

    png

    Run All Vibration and Degradation


    Initialize Degradation Module: initialize(torque)

    Input Arguments:

  • torque: input torque
  • Returns:

    model.initialize(torque_in)

    Initialize Degradation

    Gear in:

    Running for tooth 8 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 6 failure

    [================================================================================] 2000/2000  
    

    Gear out:

    Running for tooth 9 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 18 failure

    [================================================================================] 2000/2000  
    

    Running for tooth 21 failure

    [================================================================================] 2000/2000  
    

    Initialize Vibration

    Done

    Run Vibration and Degradation: run(nolc, output=True)

    Input Arguments:

  • nolc: current number of load cycle (must be greater than the previous given nolc)
  • output: if true returns vibration signal
  • Returns:

  • vibration (if output is True)
  • Set Torque for upcoming cycles: set(nolc, torque)

    Input Arguments:

  • nolc: current number of load cycle (must be equal to the previous nolc in run())
  • torque: input torque
  • Returns:

    for nolc in np.linspace(6.1e6, 9e6, 10):
        vibration = model.run(nolc, output=True)
        model.set(nolc, torque_in)

    Load Cycle 6100000 done

    Load Cycle 6422222 done

    Load Cycle 6744444 done

    Load Cycle 7066666 done

    Load Cycle 7388888 done

    Load Cycle 7711111 done

    Load Cycle 8033333 done

    Load Cycle 8355555 done

    Load Cycle 8677777 done

    Load Cycle 9000000 done

    Summarize Vibration and Degradation: summary()

    model.summary()

    Summary Degradation

    Degradation Gear In

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.661548 5.161122e+06 8 8.760057e+06 4.0 0.0501 5.000000e-07 1.776357e-15 5.656872e+06 8.721440e+06
    1 0.100020 1.827980e+06 6 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 5.839910e+06 9.181707e+06

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 9000000)

    0.000000e+00 6.100000e+06 6.422222e+06 6.744444e+06 7.066667e+06 7.388889e+06 7.711111e+06 8.033333e+06 8.355556e+06 8.677778e+06 9.000000e+06
    0 -1.434069 -0.041508 0.032052 0.105611 0.179171 0.252731 0.326290 0.399850 0.473410 0.546969 0.620529
    1 -0.247782 0.642824 0.689869 0.736914 0.783959 0.831003 0.878048 0.925093 0.972138 1.019182 1.066227

    Legend: Row: 0 <=> Tooth: 8 | Row: 1 <=> Tooth: 6)

    png

    Pitting Growth (until load cycle 9000000)

    0.000000e+00 6.100000e+06 6.422222e+06 6.744444e+06 7.066667e+06 7.388889e+06 7.711111e+06 8.033333e+06 8.355556e+06 8.677778e+06 9.000000e+06
    0 NaN NaN 0.700825 0.800012 0.913236 1.042485 1.190027 1.358449 1.550709 1.770178 2.020709
    1 NaN 1.071208 1.274202 1.515663 1.802882 2.144528 2.550916 3.034316 3.609319 4.293286 5.106864

    Legend: Row: 0 <=> Tooth: 8 | Row: 1 <=> Tooth: 6)

    png

    Degradation Gear Out

    State 0 Parameter (Ref. Torque: 200.000 Nm)

    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.579647 4.518059e+06 9 8.709422e+06 4.0 0.0501 5.000000e-07 1.000000e-01 4.391948e+06 8.721440e+06
    1 0.551336 6.623250e+06 18 1.058666e+07 4.0 0.0201 5.000000e-07 1.776357e-15 5.441903e+06 1.073986e+07
    2 0.146248 2.587852e+06 21 9.205347e+06 4.0 0.0401 5.000000e-07 1.776357e-15 5.601978e+06 9.181707e+06

    State 0 Degradation Model Plot (Ref. Torque: 200.000 Nm)

    png

    Damage Accumulation (until load cycle 4714285)

    0.000000e+00 6.100000e+06 6.422222e+06 6.744444e+06 7.066667e+06 7.388889e+06 7.711111e+06 8.033333e+06 8.355556e+06 8.677778e+06 9.000000e+06
    0 -1.077945 -0.304016 -0.263134 -0.222253 -0.181371 -0.140489 -0.099608 -0.058726 -0.017845 0.023037 0.063918
    1 -1.671099 -0.852686 -0.809455 -0.766223 -0.722992 -0.679761 -0.636530 -0.593298 -0.550067 -0.506836 -0.463604
    2 -0.391062 0.099115 0.125008 0.150900 0.176793 0.202686 0.228579 0.254471 0.280364 0.306257 0.332150

    Legend: Row: 0 <=> Tooth: 9 | Row: 1 <=> Tooth: 18 | Row: 2 <=> Tooth: 21)

    png

    Pitting Growth (until load cycle 4714285)

    0.000000e+00 6.100000e+06 6.422222e+06 6.744444e+06 7.066667e+06 7.388889e+06 7.711111e+06 8.033333e+06 8.355556e+06 8.677778e+06 9.000000e+06
    0 NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.603372 0.648399
    1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2 NaN 0.203009 0.221168 0.240951 0.262504 0.285985 0.311566 0.339436 0.369798 0.402876 0.438913

    Legend: Row: 0 <=> Tooth: 9 | Row: 1 <=> Tooth: 18 | Row: 2 <=> Tooth: 21)

    png

    Summary Vibration

    Controls

    png

    Accumulated Signal

    png

    Bearing 1 Signal

    png

    Bearing 2 Signal

    png

    Bearing 3 Signal

    png

    Bearing 4 Signal

    png

    Degradation Signal

    png

    Gear Signals

    png

    Details and Theory

    Module Structure


  • GearBox Simulation Toolbox is structured in Modules
  • Top Modules are accessing lower Modules
  • Helper-Module is used by Modules on the same level
  • Modules consisting of several Module Methods
  • Vibration Element Definition


    Gear Element

    Keyword Attributes:

    1. no_teeth: Number of teeth
    2. signal: Nonstationary Signals
    3. ampl_method: Method to create Signal Amplitude
    4. ampl_attributes: Attributes regarding the Method to create Signal Amplitude
    5. noise_method: Method to create Signal Noise (repeat methods are not working)
    6. noise_attributes: Attributes regarding the Method to create Signal Noise
    7. torq_method: Method to create Signal Noise (repeat methods are not working)
    8. torq_attributes: Attributes regarding the Method to create Signal Noise

    Gear Element:

    Gear = {'no_teeth': 10,                                         # Number of teeth
            'signal': 'gausspulse',                                 # Signal type for gear
            'ampl_method': 'gaussian_repeat',                       # Amplitude Method for inner gear
            'ampl_attributes': {'mu': 4, 'sigma': 0.5},             # Attributes regarding Amplitude Method for gear signal
            'noise_method': None,                                   # Noise Method for inner gear
            'noise_attributes': {'mu': 0, 'sigma': 0.25},           # Attributes regarding Noise Method for gear signal
            'torq_method': None,                                    # Torque Influence Method for inner gear
            'torq_attributes': {'scale_min': 0,
                                'scale_max': 0.2,
                                'value_min': 0,
                                'value_max': 50,
                                'norm_divisor': 200,
                                'exponent': 2},
            }

    Modelling:

  • The chosen Non-Stationary Signal is repeated every tooth mesh
  • Repeat Methods are modeling the same amplitude at tooth i
  • Using const_repeat argument constant must be a list of length no_teeth
  • Bearing Element

    Keyword Attributes:

    1. no_elements: Number of rolling elements
    2. signal_*: Nonstationary Signals
    3. ampl_method_*: Method to create Signal Amplitude
    4. ampl_attributes_*: Attributes regarding the Method to create Signal Amplitude
    5. noise_method_*: Method to create Signal Noise (repeat methods are not working)
    6. noise_attributes_*: Attributes regarding the Method to create Signal Noise
    7. torq_method_*: Method to create Signal Noise (repeat methods are not working)
    8. torq_attributes_*: Attributes regarding the Method to create Signal Noise

    *: Can be 'iring' (inner ring), 'relement' (rolling element) or 'oring' (outer ring)

    Bearing =   {'no_elements': 11,                                    # Number of Rolling Elements
                 # Inner Ring Rollover
                 'signal_iring': 'sine',                               # Signal type for inner cage
                 'ampl_method_iring': 'const',                         # Amplitude Method for inner cage signal (Repeat methods are not working for bearings)
                 'ampl_attributes_iring': {'constant': 2.5},           # Attributes regarding Amplitude Method for inner cage signal
                 'noise_method_iring': 'gaussian',                     # Noise Method for inner gear
                 'noise_attributes_iring': {'mu': 0, 'sigma': 0.05},   # Attributes regarding Noise Method for gear signal
                 'torq_method_iring': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_iring': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                           'scale_max': 0.1,
                                           'value_min': 0,
                                           'value_max': 50,
                                           'norm_divisor': 1,
                                           'exponent': 4},           
    
                 # Rolling Element:
                 'signal_relement': 'sine',                            # Signal type for rolling element
                 'ampl_method_relement': 'const',                      # Amplitude Method for rolling element signal (Repeat methods are not working for bearings)
                 'ampl_attributes_relement': {'constant': 1.2},        # Attributes regarding Amplitude Method for rolling element signal
                 'noise_method_relement': 'gaussian',                  # Noise Method for rolling element
                 'noise_attributes_relement': {'mu': 0, 'sigma': 0.05},# Attributes regarding Noise Method for gear signal
                 'torq_method_relement': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_relement': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                              'scale_max': 0.1,
                                              'value_min': 0,
                                              'value_max': 50,
                                              'norm_divisor': 1,
                                              'exponent': 4},
                 # Outer Ring Rollover
                 'signal_oring': 'sine',                               # Signal type for inner cage
                 'ampl_method_oring': 'const',                         # Amplitude Method for inner cage signal (Repeat methods are not working for bearings)
                 'ampl_attributes_oring': {'constant': 2.5},           # Attributes regarding Amplitude Method for inner cage signal
                 'noise_method_oring': 'gaussian',                     # Noise Method for inner gear
                 'noise_attributes_oring': {'mu': 0, 'sigma': 0.05},   # Attributes regarding Noise Method for gear signal
                 'torq_method_oring': None,                         # Torque Influence Method for rolling element
                 'torq_attributes_oring': {'scale_min': 0,          # Attributes regarding Torque Influence Method for rolling element signal
                                           'scale_max': 0.1,
                                           'value_min': 0,
                                           'value_max': 50,
                                           'norm_divisor': 1,
                                           'exponent': 4},          
                }

    Modelling:

  • The frequencies for the chosen Stationary Signal are estimated by VDI 3832 (Estimation without geometrical dimensions)
  • Repeat Methods are not working
  • As approximation factor 0.425 is chosen

  • Vibration Methods and Theory


    Module Methods Structure:

    Required Inputs:

  • General Input Arguments (previous slides)
  • Vibration Method Definition for each Element (see following slides)
  • State of Degradation (given by degradation model)
  • Methods and Returns:

  • run(): Vibration Signal (for state sp = nlc based on previous torquep-1)
  • set(): Loads per tooth/bearing (based on current torquep)
  • Element Method


  • Creating Base Signals for Bearing and Gear Elements
  • Amplitude of +-1
  • For Bearing choose any stationary signal: 'sine'
  • For Gear choose any non-stationary signal: 'gausspulse'
  • Example Non-Stationary Sine Signal

    from scipy.signal import gausspulse
    fi, fs = 5, 100
    time_vector = gf.get_sample_time_torque(fi, fs, 21, 41)
    element_signal = gausspulse(np.linspace(-max(time_vector)/2, max(time_vector)/2, time_vector.size), fc=fi, bw=0.5, bwr=-6, tpr=-60, retquad=False, retenv=False) # Nm | array
    
    plt.plot(time_vector, element_signal)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Example Element Signal'])
    plt.show()

    png

    Example Stationary Sine Signal

    fi, fs = 5, 100
    time_vector = gf.get_sample_time_torque(fi, fs, 21, 41)
    element_signal = np.sin((2 * np.pi * fi * time_vector)) # Nm | array
    
    plt.plot(time_vector, element_signal)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Example Element Signal'])
    plt.show()

    png

    Amplitude Method


  • Scaling the Base Signals
  • Various methods can be chosen (depending on Element)
  • Depending on the chosen Method, different Attributes must be given
  • 'repeat' Methods create a pattern which will be repeated
  • Methods:

  • None: Method not used
  • 'const': Constant Amplitude for all teeth and all tooth mesh repetitions (attributes: 'constant' (scalar))
  • 'const_repeat': Constant Amplitude for each tooth (list), and unchanging over all tooth mesh repetitions (attributes: 'constant' (list, tuple))
  • 'gaussian': Gaussian Random Amplitude for all teeth and all tooth mesh repetitions (attributes: 'mu' (scalar), 'sigma' (scalar))
  • 'gaussian_repeat': Gaussian Random Amplitude for each tooth, and unchanging over all tooth mesh repetitions (attributes: 'mu' (scalar), 'sigma' (scalar))
  • Example Stationary Sine Signal * const Amplitude

    const = 5
    amplitude_signal = element_signal * const
    
    plt.plot(time_vector, element_signal, time_vector, amplitude_signal)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Example Element Signal', 'Amplitude Signal'])
    plt.show()

    png

    Noise Method


  • Adds noise to the signal
  • Based on the Amplitude Methods Toolbox (repeat methods are not working)
  • General use: Adding Gaussian Noise
  • Methods:

  • None: Method not used
  • 'const': Constant Amplitude for all teeth and all tooth mesh repetitions (attributes: 'constant' (scalar))
  • 'const_repeat': Constant Amplitude for each tooth (list), and unchanging over all tooth mesh repetitions (attributes: 'constant' (list, tuple))
  • 'gaussian': Gaussian Random Amplitude for all teeth and all tooth mesh repetitions (attributes: 'mu' (scalar), 'sigma' (scalar))
  • 'gaussian_repeat': Gaussian Random Amplitude for each tooth, and unchanging over all tooth mesh repetitions (attributes: 'mu' (scalar), 'sigma' (scalar))
  • Example Stationary Sine Signal * const Amplitude + noise

    noise = np.random.randn(time_vector.size)*0.5
    noised_signal = amplitude_signal + noise
    
    plt.plot(time_vector, element_signal, time_vector, amplitude_signal, time_vector, noised_signal)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Example Element Signal', 'Amplitude Signal', 'Noised Signal'])
    plt.show()

    png

    Torque Method


  • Scales Signal s regarding the torque st
  • 1. st = st/snorm, norm signal by snorm
  • 2. st = f(st), while f can be linear, polynomial and exponential
  • 3. st = scale(st), scale into range scale_min-scale_max while scale_min corresponds to value_min and scale_max to value_max
  • 4. st = st + 1, add one to retain original signal and add torque on top
  • 5. s = s * st
  • Methods:

  • None: Method not used
  • 'linear': f in step 2 is a linear transformation (no transformation)
  • 'polynomial': f in step 2 is polynomial with given exponent argument
  • 'exponential': f in step 2 is exponential
  • Example Torque Signal 200 Nm +- 5 Nm

    torque = np.sin((2 * np.pi * fi /10 * time_vector))*5 + 200 # Nm | array
    
    plt.plot(time_vector, torque)
    plt.xlabel('Time in seconds'), plt.ylabel('Torque in Nm'), plt.legend(['Torque'])
    plt.show()

    png

    Define Scale Arguments

    scale_min = 0                   
    scale_max = 0.2
    value_min = 1-0.01
    value_max = 1.01
    norm_divisor = 200
    exponent = 2

    1. st = st/snorm, norm signal by snorm

    torque_1 = torque / norm_divisor
    
    plt.plot(time_vector, torque_1)
    plt.xlabel('Time in seconds'), plt.ylabel('Torque'), plt.legend(['Normed Torque'])
    plt.show()

    png

    2. st = f(st), while f can be linear, polynomial and exponential

    torque_2 = np.power(torque_1, exponent)
    
    plt.plot(time_vector, torque_1, time_vector, torque_2)
    plt.xlabel('Time in seconds'), plt.ylabel('Torque'), plt.legend(['Normed Torque', 'f(Torque)'])
    plt.show()

    png

    3. st = scale(st), scale into range scale_min-scale_max while scale_min corresponds to value_min and scale_max to value_max

    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler(feature_range=(scale_min, scale_max))
    scaler.fit(np.array([value_min, value_max]).reshape(-1, 1))
    torque_3 = scaler.transform(torque_2.reshape(-1, 1))
    
    plt.plot(time_vector, torque_1, time_vector, torque_2, time_vector, torque_3)
    plt.xlabel('Time in seconds'), plt.ylabel('Torque'), plt.legend(['Normed Torque', 'f(Torque)', 'scale(f(Torque))'])
    plt.show()

    png

    4. st = st + 1, add one to retain original signal and add torque on top

    torque_4 = torque_3 + 1
    
    plt.plot(time_vector, torque_1, time_vector, torque_2, time_vector, torque_3, time_vector, torque_4)
    plt.xlabel('Time in seconds'), plt.ylabel('Torque'), plt.legend(['Normed Torque', 'f(Torque)', 'scale(f(Torque))', '+1'])
    plt.show()

    png

    5. s = s * st

    (Example Stationary Sine Signal * const Amplitude + noise) * Torque

    final_signal = noised_signal * torque_4.reshape(-1)
    
    plt.plot(time_vector, element_signal, time_vector, amplitude_signal, time_vector, noised_signal, time_vector, final_signal)
    plt.xlabel('Time in seconds'), plt.ylabel('Acceleration in g'), plt.legend(['Example Element Signal', 'Amplitude Signal', 'Noised Signal', 'Final Signal'])
    plt.show()

    png

    Degradation Element Definition


    Gear Element

    Keyword Attributes:

    1. Failing Teeth: Number of teeth failing at given Gear
    2. Chances: Various chances influencing the teeth failing order
    3. PDF_Deg_Init: PDF for pitting_size and load_cycles @ pitting initialization
    4. PDF_Deg_EOL: PDF for pitting_size and load_cycles @ pitting end of life
    5. Woehler: Woehler Definition
    6. GridSearch: Slices for exp.-function Parameters to be determined in Gridsearch

    Deg_Gear = {'Failing_Teeth': 2,                                      # Number of Teeth falling at Gear
                'Chances': {'neighbouring': 1,                           # Chance that multiple falling teeth are neighbouring
                            'opposite': 1,                               # Chance that multiple falling teeth are opposite to each other
                            'keeporder': 10},                            # Chance that multiple falling teeth are keeping order from init to eol
                'PDF_Deg_Init': {'n': norm(loc=6.875e6, scale=1.053e6),  # P(n_0)
                                 'a': norm(loc=0.450, scale=0.305)},     # P(a_0)
                'PDF_Deg_EOL': {'n': norm(loc=10390000, scale=1.053e6),  # P(n_eol)
                                'a': norm(loc=4.0, scale=0.)},           # P(a_eol)
                'Woehler': {'k': 8.5,                                   # Woehler Exponent
                            'np': 10390000,                              # Woehler Reference n
                            'torqp': 200},                               # Woehler Reference sigma in Nm
                'GridSearch': {'slice_theta1': (0.0001, 0.0902, 0.01),   # Grid for function a = theta1 * exp(theta2 * n) + theta3 defined in slices
                               'slice_theta2': (0.10/1e6, 1.51/1e6, 0.2/1e6), #tbd change step to 0.02/1e6
                               'slice_theta3':(-2.0, 0.5, 0.1)}
               }

    Bearing Element

    Keyword Attributes:

    1. TBD

    Degradation Methods


    Module Methods Structure:

    Load the Gear Degradation Module for demonstration purposes

    # os.chdir()
    os.chdir(hd)
    from gearbox.degradation.gear import Gear_Degradation
    os.chdir(wd)

    Chances


    Chances are describing how many times more likely it is that an event occurs compared to the event does not occur

    Events:

  • neighbouring: The next failing tooth is a neighbour of an already fallen one
  • opposite: The next failing tooth is opposite of an already fallen one
  • keeporder: The teeth are keeping the same order in initialization and end of life (first tooth with initialization is also the first reaching end of life
  • Random Pitting Initialization

    Deg_Gear['Chances'] = {'neighbouring': 1, 'opposite': 1, 'keeporder': 1}  
    deg_model = Gear_Degradation(17, Deg_Gear, 1)
    deg_model.get_initial_values()
    
    deg_model.state0.head()
    a0 n0 tooth neol aeol
    0 0.122745 5.716048e+06 13 1.130127e+07 4.0
    1 0.895943 5.889635e+06 17 7.966480e+06 4.0
    2 0.945425 5.950615e+06 8 9.833835e+06 4.0
    3 0.397409 5.984998e+06 4 9.985591e+06 4.0
    4 0.332863 6.146681e+06 11 8.220672e+06 4.0

    Visualization of Pitting Size at Initialization

    gf.plot_gear_polar(deg_model.state0, kind='pitting', key='a0')

    png

    Pitting Order Visualization

    gf.plot_gear_polar(deg_model.state0, kind='order')

    png

    Neighbouring favoured Pitting Initialization

    Deg_Gear['Chances'] = {'neighbouring': 100, 'opposite': 1, 'keeporder': 1}  
    deg_model = Gear_Degradation(17, Deg_Gear, 1)
    deg_model.get_initial_values()
    gf.plot_gear_polar(deg_model.state0, kind='order')

    png

    Opposite favoured Pitting Initialization

    Deg_Gear['Chances'] = {'neighbouring': 1, 'opposite': 100, 'keeporder': 1}  
    deg_model = Gear_Degradation(17, Deg_Gear, 1)
    deg_model.get_initial_values()
    gf.plot_gear_polar(deg_model.state0, kind='order')

    png

    Neighbouring and Opposite favoured Pitting Initialization

    Deg_Gear['Chances'] = {'neighbouring': 100, 'opposite': 100, 'keeporder': 1}  
    deg_model = Gear_Degradation(17, Deg_Gear, 1)
    deg_model.get_initial_values()
    gf.plot_gear_polar(deg_model.state0, kind='order')

    png

    Keeporder favoured Initialization

    Deg_Gear['Chances'] = {'neighbouring': 1, 'opposite': 1, 'keeporder': 100}  
    deg_model = Gear_Degradation(17, Deg_Gear, 1)
    deg_model.get_initial_values()
    
    deg_model.state0.head()
    a0 n0 tooth neol aeol
    0 0.122745 5.716048e+06 13 7.966480e+06 4.0
    1 0.895943 5.889635e+06 17 8.220672e+06 4.0
    2 0.945425 5.950615e+06 8 9.231814e+06 4.0
    3 0.397409 5.984998e+06 4 9.260164e+06 4.0
    4 0.332863 6.146681e+06 11 1.222729e+07 4.0

    PDF Degradation


    Probability Density Function for Degradation Initialization

  • n: Initialization Load Cycle PDF - P(n0)
  • a: Initialization Pitting Size PDF - P(a0)
  • Probability Density Function for Degradation End of Life

  • n: EOL Load Cycle PDF - P(neol)
  • a: EOL Pitting Size PDF - P(aeol)
  • PDF can be defined as any continuous distribution function available on 'Scipy Stats'

    PDFs are valid for a reference torque, defined by woehler

    P(n0) and P(neol)

    P_n0, P_neol= norm(loc=6.875e6, scale=1.053e6), norm(loc=10390000, scale=1.053e6)
    n0, neol = np.linspace(P_n0.ppf(0.01), P_n0.ppf(0.99), 100), np.linspace(P_neol.ppf(0.01), P_neol.ppf(0.99), 100)
    
    plt.plot(n0, P_n0.pdf(n0), neol, P_neol.pdf(neol))
    plt.xlabel('Load Cycles N'), plt.ylabel('p(N)'), plt.legend(['PDF Initialization Load Cycle', 'PDF EOL Load Cycle'])
    plt.show()

    png

    P(a0) and P(aeol)

    P_a0, P_aeol= norm(loc=0.450, scale=0.305), norm(loc=4.0, scale=0.1)
    a0, aeol = np.linspace(P_a0.ppf(0.01), P_a0.ppf(0.99), 100), np.linspace(P_aeol.ppf(0.01), P_aeol.ppf(0.99), 100)
    
    plt.plot(a0, P_a0.pdf(a0), aeol, P_aeol.pdf(aeol))
    plt.xlabel('Pitting Size a'), plt.ylabel('p(a)'), plt.legend(['PDF Initialization Pitting Size', 'PDF EOL Pitting Size'])
    plt.show()

    png

    Woehler Curve


    Definition of Woehler Curve for EOL

  • k: Woehler exponent (measure for gradien)
  • np: Reference Load Cycle on Woehler Curve - pair (np, torquep)
  • torquep: Reference Torque on Woehler Curve - pair (np, torquep)
  • The definition of the reference points (np, torquep) also determines the probability of failure Px for which the Woehler line applies.

    Woehler Curve Plot

    k, n_p, torq_p = 10.5, 10390000., 200.
    torq = np.linspace(torq_p*0.5, torq_p*1.5, 10)
    N = n_p * np.power((torq / torq_p), -1*k)
    
    plt.plot(N, torq), plt.scatter(n_p, torq_p, c='r')
    plt.xscale('log'), plt.yscale('log'), plt.xlabel('Load Cyvles log(N)'), plt.ylabel('Torque log(T)'), plt.legend(['Woehler Curve', 'Reference'])
    plt.show()

    png

    GridSearch


    Definition of Slices for Exponential Function Parameters θ

  • Function: a = θ1 * exp(θ2 * n) + θ3
  • Two points Given: (a0, n0) and (aeol, neol)
  • GridSearch for best fit
  • Only failing teeth
  • The definition of the reference points (np, torquep) also determines the probability of failure Px for which the Woehler line applies.

    Deg_Gear['GridSearch'] = {'slice_theta1': (0.0001, 0.0902, 0.01),
                              'slice_theta2': (0.10/1e6, 1.51/1e6, 0.2/1e6),
                              'slice_theta3':(-2.0, 0.5, 0.1)}

    Degradation Theory


  • How Degradation Simulation Works
  • Running Example for one tooth
  • 1. Define Degradation Dictionary

    Deg_Gear = {'Failing_Teeth': 2,                                      # Number of Teeth falling at Gear
                'Chances': {'neighbouring': 1,                           # Chance that multiple falling teeth are neighbouring
                            'opposite': 10,                               # Chance that multiple falling teeth are opposite to each other
                            'keeporder': 1},                            # Chance that multiple falling teeth are keeping order from init to eol
                'PDF_Deg_Init': {'n': norm(loc=6.875e6, scale=1.053e6),  # P(n_0)
                                 'a': norm(loc=0.450, scale=0.305)},     # P(a_0)
                'PDF_Deg_EOL': {'n': norm(loc=10390000, scale=1.053e6),  # P(n_eol)
                                'a': norm(loc=4.0, scale=0.)},           # P(a_eol)
                'Woehler': {'k': 8.5,                                   # Woehler Exponent
                            'np': 10390000,                              # Woehler Reference n
                            'torqp': 200},                               # Woehler Reference sigma in Nm
                'GridSearch': {'slice_theta1': (0.00, 0.09, 0.01),   # Grid for function a = theta1 * exp(theta2 * n) + theta3 defined in slices
                               'slice_theta2': (0.30/1e6, 0.61/1e6, 0.005/1e6), #tbd change step to 0.02/1e6
                               'slice_theta3':(-.1, 0.4, 0.01)}
               }
    no_teeth = 10
    seed = 4

    2. Draw (tooth, a0, n0, aeol, neol) Pairs for all teeth considering chances

    deg_model = Gear_Degradation(no_teeth, Deg_Gear, seed)
    deg_model.get_initial_values()
    
    deg_model.state0.head()
    a0 n0 tooth neol aeol
    0 0.322418 5.656872e+06 6 1.102030e+07 4.0
    1 0.252449 6.235948e+06 1 9.181707e+06 4.0
    2 0.602485 6.782350e+06 8 8.721440e+06 4.0
    3 0.100020 6.923581e+06 3 1.044324e+07 4.0
    4 0.661548 7.224863e+06 2 9.707965e+06 4.0

    3. GridSearch for all failing teeth to get individual degradation function


  • If Failing_Teeth is n --> First n teeth are considered
  • !! Value Pairs will be adjusted to fit on Degradation Function !!
  • deg_model = Gear_Degradation(no_teeth, Deg_Gear, seed)
    deg_model.init_gear_degradation()

    Running for tooth 6 failure

    [================================================================================] 27900/27900  
    

    Running for tooth 1 failure

    [================================================================================] 27900/27900  
    
    1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
    $a_{0}$ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    $d_{0}$ -0.944191 NaN NaN NaN NaN -1.028415 NaN NaN NaN NaN

    Results:

    deg_model.state0
    a0 n0 tooth neol aeol theta1 theta2 theta3 n0_old neol_old
    0 0.322418 5.588442e+06 6 1.102248e+07 4.0 0.02 4.800000e-07 0.03 5.656872e+06 1.102030e+07
    1 0.252449 4.477089e+06 1 9.218807e+06 4.0 0.02 5.750000e-07 -0.01 6.235948e+06 9.181707e+06

    Gear Visualization:

    gf.plot_gear_polar(deg_model.state0, kind='pitting_growth', no_teeth=no_teeth, key1='a0', key2='aeol')

    png

    Degradation Function Visualization:

    deg_model.plot_state0()

    png

    4. Transform Degradation to Damage D


  • Under constant torque load degradation starts at n0 and ends at neol
  • D(n0) = 0
  • D(neol) = 1
  • Assumption: Linear Damage Accumulation
  • Draw D(n0) = 0 and D(neol) = 1

    fig = plt.figure()
    legend = []
    for i, row in deg_model.state0.iterrows():
        plt.scatter([row['n0'], row['neol']], [0, 1])
        legend.append('Tooth %i' % (row['tooth']))
    plt.xlabel('Load Cyvles N'), plt.ylabel('Damage (D)'), plt.legend(legend)
    plt.show()

    png

    Get Linear Damage over Load Cycle Dependency

    N = np.linspace(0, 1.5e7, 10)
    for i, row in deg_model.state0.iterrows():
        m = (1)/(row['neol'] - row['n0'])
        b = 0 - m * row['n0']
        plt.scatter([row['n0'], row['neol']], [0, 1])
        plt.plot(N, (m * N + b))
    plt.xlabel('Load Cyvles N'), plt.ylabel('Damage (D)'), plt.legend(legend)
    plt.show()

    png

    5. Pitting Size and Damage Dependency


  • Both Pitting Size a and Damage D are a function of Load Cycles N, so it follows:
  • D(a0) = 0
  • D(aeol) = 1
  • In General: a(D(N)) = ad
  • 6. Defining State0


  • Assumption: Linear Damage Accumulation
  • All values are valid for the reference load (torque) given in woehler curve definition
  • At State0 (Initialization) the following is known:
    • Degradation Function: a(N) = aN
    • Damage Function: D(N) = dN
    • Damage Pitting Dependency: a(D(N)) = ad

    Values @ State0

    print('Load Cycle:                 %i' % (deg_model.nolc[0]))
    print('Failing teeth:              %s' % ('|'.join(['   %i   ' % (tooth) for tooth in deg_model.state0['tooth']])))
    print('Corresponding Damage:       %s' % ('|'.join(['%.4f' % (damage) for damage in deg_model.damage[-1]])))
    print('Corresponding Pitting Size: %s' % ('|'.join(['  %.4f  ' % (ps) if np.isnan(ps) else '%.4f' % (ps) for ps in deg_model.pitting_size[-1]])))
    Load Cycle:                 0
    Failing teeth:                 6   |   1   
    Corresponding Damage:       -1.0284|-0.9442
    Corresponding Pitting Size:   nan  |  nan  
    

    7. Calculating ΔD


  • Given:
    • List of loads applied on tooth i
    • Load Cycles np and np-1
    • Previous Damage Dp-1, i
  • Searched:
    • ΔD = D(np - np-1)
    • Current Damage Dp, i

    ΔD will be computed for all full Load Cycles (e.g. considering gear_ratio for output gear -> 10,5 Load Cycles will be considered as 10 Load Cycles)

    Definition of Given

    loads = [195, 200, 205]
    curr_cycle = 73

    From State0

    idx = 0 # Tooth ID
    prev_cycle = deg_model.nolc[-1]
    tooth_i = deg_model.state0['tooth'].to_list()[idx]
    prev_damage = deg_model.damage[-1][idx]
    prev_pitting = deg_model.pitting_size[-1][idx]
    n0, neol = deg_model.state0['n0'][idx], deg_model.state0['neol'][idx]
    T1, k = Deg_Gear['Woehler']['torqp'], Deg_Gear['Woehler']['k']

    Define Woehler for Damage tooth_i

    N1 = neol - n0
    torq = np.linspace(T1*0.5, T1*1.5, 10)
    N = N1 * np.power((torq / T1), -1*k)
    
    plt.plot(N, torq), plt.scatter(N1, T1, c='r')
    plt.xscale('log'), plt.yscale('log'), plt.xlabel('$Load Cyvles log(N_{EOL}-N_0)$'), plt.ylabel('Torque log(T)'), plt.legend(['Woehler Curve', '$N_{EOL} - N_{0}$'])
    plt.show()

    png

    Get Damage Equivalent D* for all loads

    damage_equivalents = []
    for load in loads:
        N2 = N1 * np.power((load / T1), -1*k)
        damage = 1/N2
        damage_equivalents.append(damage)
    print('Loads:  %s' % ('|'.join(['  %.3f  ' % (load) for load in loads])))
    print('D\'s:    %s' % ('|'.join([' %.3e ' % (de) for de in damage_equivalents])))
    Loads:    195.000  |  200.000  |  205.000  
    D's:     1.411e-07 | 1.840e-07 | 2.385e-07
    

    Repeat Damage Equivalent D* for ΔN load cycle

    delta_n = int(np.floor(curr_cycle - prev_cycle))
    repeated_damage_equivalent = gf.repeat2no_values(np.array(damage_equivalents), delta_n)
    
    print('\u0394N = %i' % (delta_n))
    print('D* Shape: %s' % (str(repeated_damage_equivalent.shape)))
    ΔN = 73
    D* Shape: (73,)
    

    Calculate ΔD = ∑D*

    delta_d = np.sum(repeated_damage_equivalent)
    print('\u0394D = \u2211 D* = %.3e for \u0394N = %i load cycles' % (delta_d, delta_n))
    ΔD = ∑ D* = 1.367e-05 for ΔN = 73 load cycles
    

    8. Calculating current D


    Dp = Dp-1 + ΔD

    curr_damage = prev_damage + delta_d
    print('D(p) = D(p-1) + \u0394D = %.3e' % (curr_damage))
    D(p) = D(p-1) + ΔD = -1.028e+00
    

    9. Calculating ap


    Using: Damage Pitting Dependency: a(D(N))

    • a(D(N)) is given for each tooth

    Degradation-Vibration Dependency Element Definition


    Module Methods Connection Vibration and Degradtion:

  • Getting Loads from Torque Signal for Gear Degradation
  • Translating Pitting Size into Vibration
  • Gear Element

    Keyword Attributes:

    1. signal: Nonstationary Signals
    2. fc_factor: Nonstationary Signals
    3. bw_factor: Nonstationary Signals
    4. bwr_factor: Nonstationary Signals
    5. scale_method: Scale Method to scale Amplitude based on pitting size(see Torque Influence Method as reference)
    6. scale_attributes: Attributes regarding Scale Method to (see Torque Influence Attributes as reference)
    7. torq_influence: If True Torque Influence will be taken into account in the same way as in vibration definition
    8. noise_method: Method to create Signal Noise (repeat methods are not working)
    9. noise_attributes: Attributes regarding the Method to create Signal Noise
    10. t2t_factor: If 1 loads are calculated without any overlap between two tooh and all loads are considered. If t2t_factor > 1 there is a overlap of loads considered for each tooth

    GearDegVibDict = {'signal': 'gausspulse',                                # Signal type for gear
                       'fc_factor': 2*rotational_frequency_in,                                      # fc = frequency * fc_factor (see gauspulse definition)
                       'bw_factor': 0.5,                                    # see gauspulse definition
                       'bwr_factor': -6,                                    # see gauspulse definition
                       'scale_method': 'linear',                            # Scale Method (See Torque Influence Method)
                       'scale_attributes': {'scale_min': 0,                 # Attributes regarding Scale Method for gear signal (see Torque Influence Method)
                                           'scale_max': 1,
                                           'value_min': 0,
                                           'value_max': 4,
                                           'exponent': 2},
                       'torq_influence': True,                              # If True Torque Influence will be taken into account in the same way as in vibration definition
                       'noise_method': 'gaussian',                          # Noise Method
                       'noise_attributes': {'mu': 0, 'sigma': 0.005},       # Attributes regarding Noise Method for
                       't2t_factor': 1
                       }

    About

    Simulation of the vibration behaviour of a gearbox under degradation

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages

    • Python 100.0%