Main Content

Particle Filter

Estimate states of discrete-time nonlinear system using particle filter

  • pf_block

Libraries:
Control System Toolbox / State Estimation
System Identification Toolbox / Estimators

Description

The Particle Filter block estimates the states of a discrete-time nonlinear system using the discrete-time particle filter algorithm.

Consider a plant with states x, input u, output m, process noise w, and measurement y. Assume that you can represent the plant as a nonlinear system.

The algorithm computes the state estimates x^ of the nonlinear system using the state transition and measurement likelihood functions you specify.

You create the nonlinear state transition function and measurement likelihood functions for the system and specify these functions in the block. The block supports state estimation of a system with multiple sensors that are operating at different sampling rates. You can specify up to five measurement likelihood functions, each corresponding to a sensor in the system.

Examples

Ports

Input

expand all

Measured system outputs corresponding to each measurement likelihood function that you specify in the block. The number of ports equals the number of measurement likelihood functions in your system. You can specify up to five measurement likelihood functions. For example, if your system has two sensors, you specify two measurement likelihood functions in the block. The first port y1 is available by default. Click Add Measurement, to generate port y2 corresponding to the second measurement likelihood function.

Specify the ports as N-dimensional vectors, where N is the number of quantities measured by the corresponding sensor. For example, if your system has one sensor that measures the position and velocity of an object, then there is only one port y1. The port is specified as a two-dimensional vector with values corresponding to position and velocity.

Dependencies

The first port y1 is available by default. To generate ports y2 to y5, click Add Measurement.

Optional input argument to the state transition function f other than the state x.

If you create f using a MATLAB® function (.m file), the software generates the port StateTransitionFcnInputs when you enter the name of your function, and click Apply.

If your state transition function has more than one additional input, use a Simulink Function (Simulink) block to specify the function. When you use a Simulink Function block, you provide the additional inputs directly to the Simulink Function block using Inport (Simulink) blocks. No input ports are generated for the additional inputs in the Particle Filter block.

Dependencies

To generate this port, both of the following conditions should be satisfied:

  • You specify f in Function using a MATLAB function, and f is on the MATLAB path.

  • f requires only one additional input argument apart from particles.

Optional inputs to the measurement likelihood functions other than the state x and measurement y.

MeasurementLikelihoodFcn1Inputs corresponds to the first measurement likelihood function that you specify, and so on.

If you specify two measurement inputs using MATLAB functions (.m files) in Function, the software generates ports MeasurementLikelihoodFcn1Inputs and MeasurementLikelihoodFcn2Inputs when you click Apply. You can specify the inputs to these ports as scalars, vectors, or matrices.

If your measurement likelihood functions have more than one additional input, use Simulink Function (Simulink) blocks to specify the functions. When you use a Simulink Function block, you provide the additional inputs directly to the Simulink Function block using Inport (Simulink) blocks. No input ports are generated for the additional inputs in the Particle Filter block.

Dependencies

To generate a port corresponding to a measurement likelihood function h, both of the following conditions should be satisfied:

  • You specify measurement input h in Function using a MATLAB function, and h is on the MATLAB path.

  • h requires only one additional input argument apart from particles and measurement.

Enable correction of estimated states when measured data is available.

For example, consider that measured output data is not available at all time points at the port y1 that corresponds to the first measurement likelihood function. Then, use a signal value other than 0 at the Enable1 port to enable the correction of estimated states when measured data is available. Specify the port value as 0 when measured data is not available. Similarly, if measured output data is not available at all time points at the port yi for the ith measurement likelihood function, specify the corresponding port Enablei as a value other than 0.

Dependencies

To generate a port corresponding to a measurement likelihood function, select Add Enable port for that measurement likelihood function. The port appears when you click Apply.

Output

expand all

Estimated states, returned as a vector of size Ns, where Ns is the number of states of the system. To access the individual states, use the Selector (Simulink) block.

When the Use the current measurements to improve state estimates parameter is selected, the block outputs the corrected state estimate x^[k|k] at time step k, estimated using measured outputs until time k. If you clear this parameter, the block returns the predicted state estimate x^[k|k1] for time k, estimated using measured output until a previous time k-1. Clear this parameter if your filter is in a feedback loop and there is an algebraic loop in your Simulink® model.

State estimation error covariance, returned as an Ns-by-Ns matrix, where Ns is the number of states of the system. To access the individual covariances, use the Selector (Simulink) block.

You can output the error covariance only if you select Output state estimation error covariance in the Block outputs, Multirate tab, and click Apply.

Dependencies

To enable this parameter, set the State estimation method parameter in the Block outputs, Multirate tab to 'Mean'.

Particle values used for state estimation, returned as an Ns-by-Np or Np-by-Ns array. Ns is the number of states of the system, and Np is the number of particles.

  • If the StateOrientation parameter is specified as 'column', then Particles is returned as an Ns-by-Np array.

  • If the StateOrientation parameter is specified as 'row', then Particles is returned as an Np-by-Ns array.

Dependencies

To generate this port, select Output all particles in the Block outputs, Multirate tab, and click Apply.

Particle weights used for state estimation, returned as a 1-by-Np or Np-by-1 vector, where Np is the number of particles used for state estimation.

  • If the StateOrientation parameter is specified as 'column', then Weights is returned as a 1-by-Np vector, where each weight is associated with the particle in the same column in the Particles array.

  • If the StateOrientation parameter is specified as 'row', then Weights is returned as a Np-by-1 vector, where each weight is associated with the particle in the same row in the Particles array.

Dependencies

To generate this port, select Output weights in the Block outputs, Multirate tab, and click Apply.

Parameters

expand all

System Model Tab

State Transition

The particle filter state transition function calculates the particles at time step k+1, given particles at time step k per the dynamics of your system and process noise. This function has the syntax:

particlesNext = f(particles, param1, param2, ...)

where, particles and particlesNext have dimensions Ns-by-Np if State Orientation is specified as 'column', or Np-by-Ns if State Orientation is specified as 'row'. Also, param_i represents optional input arguments you may specify. For more information on optional input arguments, see StateTransitionFcnInputs.

You create the state transition function and specify the function name in Function. For example, if vdpParticleFilterStateFcn.m is the state transition function that you created and saved, specify Function as 'vdpParticleFilterStateFcn'.

You can create Function using a Simulink Function (Simulink) block or as a MATLAB function (.m file).

Programmatic Use

Block Parameter: StateTransitionFcn
Type: character vector, string
Default: 'vdpParticleFilterStateFcn'
Initialization

Number of particles used in the filter, specified as a positive scalar integer. Each particle represents a state hypothesis in the system. A higher number of particles increases the state estimation accuracy, but also increases the computational effort required to run the filter.

Programmatic Use

Block Parameter: NumberOfParticles
Type: positive scalar integer
Default: 1000

Initial distribution of particles, specified as 'Gaussian', 'Uniform', or 'Custom'.

If you choose 'Gaussian', the initial set of particles or state hypotheses are distributed per the multivariate Gaussian distribution, where you specify the Mean and Covariance. The initial weight of all particles is assumed to be equal.

If you choose 'Uniform', the initial set of particles are distributed per the uniform distribution, where you specify the upper and lower State bounds. The initial weight of all particles is assumed to be equal.

'Custom' allows you to specify your own set of initial particles and their weights. You can use arbitrary probability distributions for Particles and Weights to initialize the filter.

Programmatic Use

Block Parameter: InitialDistribution
Type: character vector
Values: 'Gaussian', 'Uniform', 'Custom'
Default: 'Gaussian'

Initial mean value of particles, specified as a vector. The number of states to be estimated defines the length of the vector.

Dependencies

To enable this parameter, set the Distribution parameter in the System model tab to Gaussian.

Programmatic Use

Block Parameter: InitialMean
Type: array
Default: [0,0]

Initial covariance of particles, specified as a scalar, vector, or matrix.

If Covariance is specified as:

  • A scalar, then it must be positive. The covariance is assumed to be a [Ns Ns] matrix with this scalar on the diagonals. Here, Ns is the number of states.

  • A vector, then each element must be positive. The covariance is assumed to be a [Ns Ns] matrix with the elements of the vector on the diagonals.

  • A matrix, then it must be positive semidefinite.

Dependencies

To enable this parameter, set the Distribution parameter in the System model tab to Gaussian.

Programmatic Use

Block Parameter: InitialCovariance
Type: scalar, vector, or matrix
Default: 1

Circular variables used for state estimation, specified as a scalar, or Ns-element vector, where Ns is the number of states.

If Circular Variables is specified as a scalar, the software extends it to a vector where each element is equal to this scalar. Circular (or angular) distributions use a probability density function with a range of [ π]. Use circular variables if some of the states in your system represent angular quantities like the orientation of an object.

Programmatic Use

Block Parameter: CircularVariables
Type: scalar, vector
Default: 0

Orientation of system states, specified as 'column' or 'row'.

If State Orientation is specified as:

  • 'column', then the first input argument to the state transition and measurement likelihood function is [Ns Np]. In this case, ith column of this matrix is the ith particle (state hypothesis). Also, the states estimates xhat is output as a [Ns 1] vector. Here, Ns is the number of states, and Np is the number of particles.

  • 'row', then the first input argument to the state transition and measurement likelihood function is [Np Ns], and each row of this matrix contains a particle. Also, the states estimates xhat is output as a [1 Ns] vector.

Programmatic Use

Block Parameter: StateOrientation
Type: character vector
Values: 'column', 'row'
Default: 'column'

Initial bounds on system states, specified as an Ns-by-2 array, where Ns is the number of states.

The ith row lists the lower and upper bound of the uniform distribution for the initial distribution of particles of the ith state.

Dependencies

To enable this parameter, set the Distribution parameter in the System model tab to Uniform.

Programmatic Use

Block Parameter: InitialStateBounds
Type: array
Default: [-3 3;-3 3]

Custom particle distribution for state estimation, specified as an Ns-by-Np or Np-by-Ns array. Ns is the number of states of the system, and Np is the number of particles.

You choose a distribution, create a probability distribution object for it using the makedist function, and generate particles of the desired distribution using the random function.

  • If the StateOrientation parameter is 'column', then specify Particles as an Ns-by-Np array.

    For example,

    pd = makedist('Poisson');
    Particles = random(pd,Ns,Np);
  • If the StateOrientation parameter is 'row', then specify Particles as an Np-by-Ns array.

    For example,

    pd = makedist('Poisson');
    Particles = random(pd,Np,Ns);

Dependencies

To enable this parameter, set the Distribution parameter in the System model tab to Custom.

Programmatic Use

Block Parameter: InitialParticles
Type: array
Default: []

Custom particle weight values for state estimation, specified as a 1-by-Np or Np-by-1 vector of positive values, where Np is the number of particles used for state estimation.

  • If the StateOrientation parameter is 'column', then specify Weights as a 1-by-Np vector. Each weight in the vector is associated with the particle in the same column in the Particles array.

    For example,

    Weights = ones(1,Np)/Np;
  • If the StateOrientation parameter is 'row', then specify Weights as a Np-by-1 vector. Each weight in the vector is associated with the particle in the same row in the Particles array.

    For example,

    Weights = ones(Np,1)/Np;

Dependencies

To enable this parameter, set the Distribution parameter in the System model tab to Custom.

Programmatic Use

Block Parameter: InitialWeights
Type: vector of positive values
Default: []
Measurement

The measurement likelihood function calculates the likelihood of particles (state hypotheses) using the sensor measurements. For each state hypothesis (particle), the function first calculates an Nm-element measurement hypothesis vector. Then the likelihood of each measurement hypothesis is calculated based on the sensor measurement and the measurement noise probability distribution. This function has the syntax:

likelihood = h(particles, measurement, param1, param2, ...)
where, likelihood is an Np-element vector, where Np is the number of particles. particles have dimensions Ns-by-Np if State Orientation is specified as 'column', or Np-by-Ns if State Orientation is specified as 'row'. measurement is an Nm-element vector where, Nm is the number of measurements your sensor provides. param_i represents optional input arguments you may specify. For more information on optional input arguments, see MeasurementLikelihoodFcn1Inputs,...,MeasurementLikelihoodFcn5Inputs.

You create the measurement likelihood function and specify the function name in Function. For example, if vdpMeasurementLikelihoodFcn.m is the measurement likelihood function that you created and saved, specify Function as 'vdpMeasurementLikelihoodFcn'.

You can create Function using a Simulink Function (Simulink) block or as a MATLAB function (.m file).

  • You can use a MATLAB function only if h has zero or one additional input argument param_i other than Particles and Measurement.

    The software generates an additional input port MeasurementLikelihoodFcniInputs to specify this argument for the ith measurement likelihood function, and click Apply.

  • If you are using a Simulink Function block, specify x and y using Argument Inport (Simulink) blocks and the additional inputs param_i using Inport (Simulink) blocks in the Simulink Function block. You do not provide param_i to the Particle Filter block.

If you have multiple sensors in your system, you can specify multiple measurement likelihood functions. You can specify up to five measurement likelihood functions using the Add Measurement button. To remove measurement likelihood functions, use Remove Measurement.

Programmatic Use

Block Parameter: MeasurementLikelihoodFcn1, MeasurementLikelihoodFcn2, MeasurementLikelihoodFcn3, MeasurementLikelihoodFcn4, MeasurementLikelihoodFcn5
Type: character vector, string
Default: 'vdpMeasurementLikelihoodFcn'

Suppose that measured output data is not available at all time points at the port y1 that corresponds to the first measurement likelihood function. To generate an input port Enable1, select Add Enable port. Use a signal at this port to enable the correction of estimated states only when measured data is available. Similarly, if measured output data is not available at all time points at the port yi for the ith measurement likelihood function, select the corresponding Add Enable port.

Programmatic Use

Block Parameter: HasMeasurementEnablePort1, HasMeasurementEnablePort2, HasMeasurementEnablePort3, HasMeasurementEnablePort4, HasMeasurementEnablePort5
Type: character vector
Values: 'off', 'on'
Default: 'off'
Resampling

Method used for particle resampling, specified as one of the following:

  • 'Multinomial' — Multinomial resampling, also called simplified random sampling, generates N random numbers independently from the uniform distribution in the open interval (0,1) and uses them to select particles proportional to their weight.

  • 'Stratified' — Stratified resampling divides the whole population of particles into subsets called strata. It pre-partitions the (0,1) interval into N disjoint sub-intervals of size 1/N. The random numbers are drawn independently in each of these sub-intervals and the sample indices chosen in the strata.

  • 'Systematic' — Systematic resampling is similar to stratified resampling as it also makes use of strata. One distinction is that it only draws one random number from the open interval (0,1/N) and the remaining sample points are calculated deterministically at a fixed 1/N step size.

Programmatic Use

Block Parameter: ResamplingMethod
Type: character vector
Values: 'Multinomial', 'Systemic', 'Stratified'
Default: 'Multinomial'

Method to determine when resampling occurs, specified as either 'Ratio' or 'Interval'. The 'Ratio' value triggers resampling based on the ratio of effective total particles. The 'Interval' value triggers resampling at regular time steps of the particle filter operation.

Programmatic Use

Block Parameter: TriggerMethod
Type: character vector
Values: 'Ratio', 'Interval'
Default: 'Ratio'

Minimum desired ratio of the effective number of particles to the total number of particles, specified as a positive scalar. The effective number of particles is a measure of how well the current set of particles approximates the posterior distribution. A lower effective particle ratio implies that a lower number of particles are contributing to the estimation and resampling is required.

If the ratio of the effective number of particles to the total number of particles falls below the minimum effective particle ratio, a resampling step is triggered.

Specify minimum effective particle ratio as any value from 0 through 1.

Dependencies

To enable this parameter, set the Trigger method parameter in the System model tab to Ratio.

Programmatic Use

Block Parameter: MinEffectiveParticleRatio
Type: scalar
Values: Range [0,1]
Default: 0.5

Fixed interval between resampling, specified as a positive scalar integer. The sampling interval determines during which correction steps the resampling is executed. For example, a value of two means the resampling is executed every second correction step. A value of inf means that resampling is never executed.

Dependencies

To enable this parameter, set the Trigger method parameter in the System model tab to Interval.

Programmatic Use

Block Parameter: SamplingInterval
Type: positive scalar integer
Default: 1
Random Number Generator Options

Whether the random numbers are repeatable, specified as either 'Repeatable' or 'Not repeatable'. If you want to be able to produce the same result more than once, set Randomness to 'Repeatable', and specify the same random number generator seed value in Seed.

Programmatic Use

Block Parameter: Randomness
Type: character vector
Values: 'Repeatable', 'Not repeatable'
Default: 'Repeatable'

Seed value for repeatable random numbers, specified as a scalar.

Dependencies

To enable this parameter, set the Randomness parameter in the System model tab to 'Repeatable'.

Programmatic Use

Block Parameter: Seed
Type: scalar
Default: 0
Settings

Use this parameter to specify the data type for all block parameters.

Programmatic Use

Block Parameter: DataType
Type: character vector
Values: 'single', 'double'
Default: 'double'

Block sample time, specified as a positive scalar.

Use the Sample time parameter if your state transition and all measurement likelihood functions have the same sample time. Otherwise, select the Enable multirate operation option in the Multirate tab, and specify sample times in the same tab.

Dependencies

To enable this parameter, set the Enable multirate operation parameter in the Block output, Multirate tab to off.

Programmatic Use

Block Parameter: SampleTime
Type: character vector, string
Default: '1'

Block Outputs, Multirate Tab

Outputs

Method used for extracting a state estimate from particles, specified as one of the following:

  • 'Mean' — The Particle Filter block outputs the weighted mean of the particles, depending on the parameters Weights and Particles, as the state estimate.

  • 'Maxweight' — The Particle Filter block outputs the particle with the highest weight as the state estimate.

  • 'None' — Use this option to implement a custom state estimation method by accessing all particles using the Output all particles parameter from the Block outputs, Multirate tab.

Programmatic Use

Block Parameter: StateEstimationMethod
Type: character vector, string
Values: 'Mean', 'MaxWeight', 'None'
Default: 'Mean'

If you select this parameter, an output port for particles used in the estimation, Particles is generated in the block.

  • If the StateOrientation parameter is specified as 'column', then the particles are output as an Ns-by-Np array. Ns is the number of states of the system, and Np is the number of particles.

  • If the StateOrientation parameter is specified as 'row', then the particles are output as an Np-by-Ns array.

Programmatic Use

Block Parameter: OutputParticles
Type: character vector
Values: 'off', 'on'
Default: 'off'

If you select this parameter, an output port for particle weights used in the estimation, Weights is generated in the block.

  • If the StateOrientation parameter is specified as 'column', then the particle weights are output as a 1-by-Np vector. Here, where each weight is associated with the particle in the same column in the Particles array. Np is the number of particles used for state estimation.

  • If the StateOrientation parameter is specified as 'row', then the particle weights are output as a Np-by-1 vector.

Programmatic Use

Block Parameter: OutputWeights
Type: character vector
Values: 'off', 'on'
Default: 'off'

If you select this parameter, a state estimation error covariance output port, P is generated in the block.

Dependencies

To enable this parameter, set the State estimation method parameter in the Block outputs, Multirate tab to 'Mean'.

Programmatic Use

Block Parameter: OutputStateCovariance
Type: character vector
Values: 'off', 'on'
Default: 'off'

When this parameter is selected, the block outputs the corrected state estimate x^[k|k] at time step k, estimated using measured outputs until time k. If you clear this parameter, the block returns the predicted state estimate x^[k|k1] for time k, estimated using measured output until a previous time k-1. Clear this parameter if your filter is in a feedback loop and there is an algebraic loop in your Simulink model.

Programmatic Use

Block Parameter: UseCurrentEstimator
Type: character vector
Values: 'on', 'off'
Default: 'on'
Multirate

Select this parameter if the sample times of the state transition or any of the measurement likelihood functions differ from the rest. You specify the sample times in the Multirate tab, in Sample time.

Programmatic Use

Block Parameter: EnableMultirate
Type: character vector
Values: 'off', 'on'
Default: 'off'

If the sample times for state transition and measurement likelihood functions are different, specify Sample time. Specify the sample times for the measurement functions as positive integer multiples of the state transition sample time. The sample times you specify correspond to the following input ports:

  • Ports corresponding to state transition function — Additional input to state transition function StateTransitionFcnInputs. The sample times of these ports must always equal the state transition function sample time, but can differ from the sample time of the measurement likelihood functions.

  • Ports corresponding to ith measurement likelihood function — Measured output yi, additional input to measurement likelihood function MeasurementLikelihoodFcniInputs, enable signal at port Enablei. The sample times of these ports for the same measurement likelihood function must always be the same, but can differ from the sample time for the state transition function and other measurement likelihood functions.

Dependencies

To enable this parameter, set the Enable multirate operation parameter in the Block outputs, Multirate tab to on.

Programmatic Use

Block Parameter: StateTransitionFcnSampleTime, MeasurementLikelihoodFcn1SampleTime1, MeasurementLikelihoodFcn1SampleTime2, MeasurementLikelihoodFcn1SampleTime3, MeasurementLikelihoodFcn1SampleTime4, MeasurementLikelihoodFcn1SampleTime5
Type: character vector, string
Default: '1'

References

[1] T. Li, M. Bolic, P.M. Djuric, "Resampling Methods for Particle Filtering: Classification, implementation, and strategies," IEEE Signal Processing Magazine, vol. 32, no. 3, pp. 70-86, May 2015.

Extended Capabilities

Version History

Introduced in R2018a