Main Content

exponentialDegradationModel

Exponential degradation model for estimating remaining useful life

Description

Use exponentialDegradationModel to model an exponential degradation process for estimating the remaining useful life (RUL) of a component. Degradation models estimate the RUL by predicting when a monitored signal will cross a predefined threshold. Exponential degradation models are useful when the component experiences cumulative degradation. For more information on the degradation model, see Exponential Degradation Model.

To configure an exponentialDegradationModel object for a specific type of component, you can:

  • Estimate the model parameters using historical data regarding the health of an ensemble of similar components, such as multiple machines manufactured to the same specifications. To do so, use fit.

  • Specify the model parameters when you create the model based on your knowledge of the component degradation process.

Once you configure the parameters of your degradation model, you can then predict the remaining useful life of similar components using predictRUL. For a basic example illustrating RUL prediction with a degradation model, see Update RUL Prediction as Data Arrives.

For general information on predicting remaining useful life, see Models for Predicting Remaining Useful Life.

Creation

Description

example

mdl = exponentialDegradationModel creates an exponential degradation model for estimating RUL and initializes the model with default settings.

example

mdl = exponentialDegradationModel(Name,Value) specifies user-settable model properties using name-value pairs. For example, exponentialDegradationModel('NoiseVariance',0.5) creates an exponential degradation model with a model noise variance of 0.5. You can specify multiple name-value pairs. Enclose each property name in quotes.

Properties

expand all

This property is read-only.

Current mean value of the θ parameter in the degradation model, specified as a scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify Theta using a name-value pair argument when you:

  • Create the model.

  • Reset the model using the restart function.

Otherwise, the value of Theta changes when you use the update function.

This property is read-only.

Current variance of the θ parameter in the degradation model, specified as a nonnegative scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify ThetaVariance using a name-value pair argument when you:

  • Create the model.

  • Reset the model using the restart function.

Otherwise, the value of ThetaVariance changes when you use the update function.

This property is read-only.

Current mean value of the β parameter in the degradation model, specified as a scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify Beta using a name-value pair argument when you:

  • Create the model.

  • Reset the model using the restart function.

Otherwise, the value of Beta changes when you use the update function.

This property is read-only.

Current variance of the β parameter in the degradation model, specified as a nonnegative scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify BetaVariance using a name-value pair argument when you:

  • Create the model.

  • Reset the model using the restart function.

Otherwise, the value of BetaVariance changes when you use the update function.

This property is read-only.

Current correlation between θ and β, specified as a scalar value in the range [-1,1]. For more information on the degradation model, see Exponential Degradation Model.

You can specify Rho using a name-value pair argument when you:

  • Create the model.

  • Reset the model using the restart function.

Otherwise, the value of Rho changes when you use the update function.

Current intercept value ϕ in the degradation model, specified as a scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify Phi using a name-value pair argument when you create the model. Otherwise, the value of Phi changes when you estimate the model prior using the fit function.

Prior information about model parameters, specified as a structure with the following fields:

  • Theta — Mean value of θ

  • ThetaVariance — Variance of θ

  • Beta — Mean value of β

  • BetaVariance — Variance of β

  • Rho — Correlation between θ and β.

You can specify the fields of Prior:

  • When you create the model. When you specify Theta, ThetaVariance, Beta, BetaVariance, or Rho at model creation using name-value pairs, the corresponding field of Prior is also set.

  • Using the fit function. In this case, the prior values are derived from the data used to fit the model.

  • Using the restart function. In this case, the current values of Theta, ThetaVariance, Beta, BetaVariance, and Rho are copied to the corresponding fields of Prior.

  • Using dot notation after model creation.

For more information on the degradation model, see Exponential Degradation Model.

Variance of additive noise ε in the degradation model, specified as a nonnegative scalar. For more information on the degradation model, see Exponential Degradation Model.

You can specify NoiseVariance:

  • Using a name-value pair when you create the model

  • Using a name-value pair with the restart function

  • Using dot notation after model creation

Slope detection level for determining the start of the degradation process, specified as a scalar in the range [0,1]. This value corresponds to the alpha value in a t-test of slope significance.

To disable the slope detection test, set SlopeDetectionLevel to [].

You can specify SlopeDetectionLevel:

  • Using a name-value pair when you create the model

  • Using a name-value pair with the restart function

  • Using dot notation after model creation

This property is read-only.

Slope detection time, which is the instant when a significant slope is detected, specified as a scalar. The update function sets this value when SlopeDetectionLevel is not empty.

This property is read-only.

Latest degradation feature value supplied to the update function, specified as a scalar.

This property is read-only.

Initial lifetime variable value when the update function is first called on the model, specified as a scalar.

When the model detects a slope, the InitialLifeTime value is changed to match the SlopeDetectionInstant value.

This property is read-only.

Latest lifetime variable value supplied to the update function, specified as a scalar.

Lifetime variable, specified as a string that contains a valid MATLAB® variable name or "".

When you train the model using the fit function, if your training data is a:

  • table, then LifeTimeVariable must match one of the variable names in the table

  • timetable, then LifeTimeVariable one of the variable names in the table or the dimension name of the time variable, data.Properties.DimensionNames{1}

You can specify LifeTimeVariable:

  • Using a name-value pair when you create the model

  • As an argument when you call the fit function

  • Using dot notation after model creation

Lifetime variable units, specified as a string.

The units of the lifetime variable do not need to be time-based. The life of the test component can be measured in terms of a usage variable, such as distance traveled (miles) or fuel consumed (gallons).

Degradation variable name, specified as a string that contains a valid MATLAB variable name. Degradation models have only one data variable.

You can specify DataVariables:

  • Using a name-value pair when you create the model

  • As an argument when you call the fit function

  • Using dot notation after model creation

Flag for using parallel computing when fitting prior values from data, specified as either true or false.

You can specify UseParallel:

  • Using a name-value pair when you create the model

  • Using a name-value pair with the restart function

  • Using dot notation after model creation

Additional model information for bookkeeping purposes, specified as any data type or format. The model does not use this information.

You can specify UserData:

  • Using a name-value pair when you create the model

  • Using dot notation after model creation

Object Functions

fitEstimate parameters of remaining useful life model using historical data
predictRULEstimate remaining useful life for a test component
updateUpdate posterior parameter distribution of degradation remaining useful life model
restartReset remaining useful life degradation model

Examples

collapse all

Load training data.

load('expTrainVectors.mat')

The training data is a cell array of column vectors. Each column vector is a degradation feature profile for a component.

Create an exponential degradation model with default settings.

mdl = exponentialDegradationModel;

Train the degradation model using the training data.

fit(mdl,expTrainVectors)

Create an exponential degradation model, and configure it with a known prior distribution.

mdl = exponentialDegradationModel('Theta',0.5,'ThetaVariance',0.003,...
                                  'Beta',0.3,'BetaVariance',0.002,...
                                  'Rho',0.1);

The specified prior distribution parameters are stored in the Prior property of the model.

mdl.Prior
ans = struct with fields:
            Theta: 0.5000
    ThetaVariance: 0.0030
             Beta: 0.3000
     BetaVariance: 0.0020
              Rho: 0.1000

The current posterior distribution of the model is also set to match the specified prior distribution. For example, check the posterior value of the correlation parameter.

mdl.Rho 
ans = 0.1000

Load training data.

load('expTrainTables.mat')

The training data is a cell array of tables. Each table is a degradation feature profile for a component. Each profile consists of life time measurements in the "Time" variable and corresponding degradation feature measurements in the "Condition" variable.

Create a exponential degradation model with default settings.

mdl = exponentialDegradationModel;

Train the degradation model using the training data. Specify the names of the life time and data variables.

fit(mdl,expTrainTables,"Time","Condition")

Load training data.

load('expTrainTables.mat')

The training data is a cell array of tables. Each table is a degradation feature profile for a component. Each profile consists of life time measurements in the "Hours" variable and corresponding degradation feature measurements in the "Condition" variable.

Create an exponential degradation model, specifying the life time variable units.

mdl = exponentialDegradationModel('LifeTimeUnit',"hours");

Train the degradation model using the training data. Specify the names of the life time and data variables.

fit(mdl,expTrainTables,"Time","Condition")

Load testing data, which is a run-to-failure degradation profile for a test component. The test data is a table with the same life time and data variables as the training data.

load('expTestData.mat')

Based on knowledge of the degradation feature limits, define a threshold condition indicator value that indicates the end-of-life of a component.

threshold = 500;

Assume that you measure the component condition indicator every hour for 150 hours. Update the trained degradation model with each measurement. Then, predict the remaining useful life of the component at 150 hours. The RUL is the forecasted time at which the degradation feature will pass the specified threshold.

for t = 1:150 
 update(mdl,expTestData(t,:)) 
end 
estRUL = predictRUL(mdl,threshold) 
estRUL = duration
   136.45 hr

The estimated RUL is around 137 hours, which indicates a total predicted life span of 287 hours.

Load observation data.

load('expTestData.mat')

For this example, assume that the training data is not historical data, but rather real-time observations of the component condition.

Based on knowledge of the degradation feature limits, define a threshold condition indicator value that indicates the end-of-life of a component.

threshold = 500;

Create an exponential degradation model arbitrary prior distribution data and a specified noise variance. Also, specify the life time and data variable names for the observation data.

mdl = exponentialDegradationModel('Theta',1,'ThetaVariance',1e6,...
                                  'Beta',1,'BetaVariance',1e6,...
                                  'NoiseVariance',0.003,...
                                  'LifeTimeVariable',"Time",'DataVariables',"Condition",...
                                  'LifeTimeUnit',"hours");

Observe the component condition for 100 hours, updating the degradation model after each observation.

for i=1:100
    update(mdl,expTestData(i,:));
end

After 100 hours, predict the RUL of the component using the current life time value stored in the model. Also, obtain the confidence interval associated with the estimated RUL.

estRUL = predictRUL(mdl,threshold)
estRUL = duration
   221.38 hr

The estimated RUL is about 234 hours, which indicates a total predicted life span of 334 hours.

Algorithms

expand all

References

[1] Gebraeel, Nagi. "Sensory-Updated Residual Life Distributions for Components with Exponential Degradation Patterns." IEEE Transactions on Automation Science and Engineering. Vol. 3, Number 4, 2006, pp. 382–393.

Extended Capabilities

Version History

Introduced in R2018a