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
creates an exponential degradation model for estimating RUL and initializes the
model with default settings.mdl
= exponentialDegradationModel
specifies user-settable model properties using name-value pairs. For example,
mdl
= exponentialDegradationModel(Name,Value
)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
Theta
— Current mean value of the θ parameter
scalar
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.
ThetaVariance
— Current variance of the θ parameter
nonnegative scalar
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.
Beta
— Current mean value of the β parameter
scalar
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.
BetaVariance
— Current variance of the β parameter
nonnegative scalar
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.
Rho
— Current correlation between θ and β
0
(default) | scalar value in the range [-1,1]
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.
Phi
— Current intercept value
scalar
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
— Prior information about model parameters
structure
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
, orRho
at model creation using name-value pairs, the corresponding field ofPrior
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 ofTheta
,ThetaVariance
,Beta
,BetaVariance
, andRho
are copied to the corresponding fields ofPrior
.Using dot notation after model creation.
For more information on the degradation model, see Exponential Degradation Model.
NoiseVariance
— Variance of additive noise
1
(default) | nonnegative scalar
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
functionUsing dot notation after model creation
SlopeDetectionLevel
— Slope detection level
0.05
(default) | scalar value in the range [0,1] | []
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
functionUsing dot notation after model creation
SlopeDetectionInstant
— Slope detection time
[]
(default) | scalar
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.
CurrentMeasurement
— Latest degradation feature value
scalar
This property is read-only.
Latest degradation feature value supplied to the update
function, specified as a scalar.
InitialLifeTimeValue
— Initial lifetime variable value
scalar | duration
object
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.
CurrentLifeTimeValue
— Current lifetime variable value
scalar | duration
object
This property is read-only.
Latest lifetime variable value supplied to the update
function,
specified as a scalar.
LifeTimeVariable
— Lifetime variable
""
(default) | string
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
, thenLifeTimeVariable
must match one of the variable names in the tabletimetable
, thenLifeTimeVariable
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
functionUsing dot notation after model creation
LifeTimeUnit
— Lifetime variable units
""
(default) | string
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).
DataVariables
— Degradation variable name
""
(default) | string
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
functionUsing dot notation after model creation
UseParallel
— Flag for using parallel computing
false
(default) | true
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
functionUsing dot notation after model creation
UserData
— Additional model information
[]
(default) | any data type or format
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
fit | Estimate parameters of remaining useful life model using historical data |
predictRUL | Estimate remaining useful life for a test component |
update | Update posterior parameter distribution of degradation remaining useful life model |
restart | Reset remaining useful life degradation model |
Examples
Train Exponential Degradation Model
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 Exponential Degradation Model with Known Priors
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
Train Exponential Degradation Model Using Tabular Data
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")
Predict RUL Using Exponential Degradation Model
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.
Update Exponential Degradation Model and Predict RUL
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
Exponential Degradation Model
The exponentialDegradationModel
object implements the
following continuous-time exponential degradation model [1]:
where:
ϕ is the model intercept, which is constant. You can initialize ϕ as the lower or upper bound on the feasible region of the degradation variable using
Phi
. If the sign of θ is:Positive, then ϕ is a lower bound.
Negative, then ϕ is an upper bound.
θ(t) is a random variable modeled as a lognormal distribution with mean
Theta
and varianceThetaVariance
.β(t) is a random variable modeled as a Gaussian distribution with mean
Beta
and varianceBetaVariance
.ε(t) is the model additive noise and is modeled as a normal distribution with zero mean and variance
NoiseVariance
.σ2 is equal to
NoiseVariance
.
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
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
The
predictRUL
,update
, andrestart
commands support code generation with MATLAB Coder™ for this RUL model type. Before generating code that uses this model, you must save the model usingsaveRULModelForCoder
. For an example, see Generate Code for Predicting Remaining Useful Life.In addition to the read-only properties, you cannot change the following properties of degradation models at run time:
LifeTimeVariable
LifeTimeUnit
DataVariables
See
predictRUL
for additional limitations on code generation.
Automatic Parallel Support
Accelerate code by automatically running computation in parallel using Parallel Computing Toolbox™.
To evaluate these models in parallel, set the UseParallel
property to true
.
Version History
Introduced in R2018a
See Also
Functions
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)