Main Content


Compute bit or symbol error rate of input data


The ErrorRate object compares input data from a transmitter with input data from a receiver and calculates the error rate as a running statistic. To obtain the error rate, the object divides the total number of unequal pairs of data elements by the total number of input data elements from one source.

To obtain the error rate:

  1. Define and set up your error rate object. See Construction.

  2. Call step to compare input data from a transmitter with input data from a receiver and calculate the error rate according to the properties of comm.ErrorRate. The behavior of step is specific to each object in the toolbox.


Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.


H = comm.ErrorRate creates an error rate calculator System object, H. This object computes the error rate of the received data by comparing it to the transmitted data.

H = comm.ErrorRate(Name,Value) creates an error rate calculator object, H, with each specified property set to the specified value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).



Number of samples to delay transmitted signal

Specify the number of samples by which the received data lags behind the transmitted data. This value must be a real, nonnegative, double-precision, integer scalar. Use this property to align the samples for comparison in the transmitted and received input data vectors. Specify the delay in number of samples, regardless of whether the input is a scalar or a vector. The default is 0.


Computation delay

Specify the number of data samples that the object should ignore at the beginning of the comparison. This value must be a real, nonnegative, double-precision, integer scalar. Use this property to ignore the transient behavior of both input signals. The default is 0.


Samples to consider

Specify samples to consider as one of Entire frame | Custom | Input port. The property defines whether the object should consider all or only part of the input frames when computing error statistics. The default is Entire frame. Select Entire frame to compare all the samples of the RX frame to those of the TX frame. Select Custom or Input port to list the indices of the RX frame elements that the object should consider when making comparisons. When you set this property to Custom, you can list the indices as a scalar or a column vector of double-precision integers through the CustomSamples property. When you set this property to Input port, you can list the indices as an input to the step method.


Selected samples from frame

Specify a scalar or a column vector of double-precision, real, positive integers. This value lists the indices of the elements of the RX frame vector that the object uses when making comparisons. This property applies when you set the Samples property to Custom. The default is an empty vector, which specifies that all samples are used.


Enable error rate reset input

Set this property to true to reset the error statistics via an input to the step method. The default is false.


stepCompute bit or symbol error rate of input data
Common to All System Objects

Allow System object property value changes


Reset internal states of System object


collapse all

Create two binary vectors and determine the error statistics.

Create a bit error rate counter object.

errorRate = comm.ErrorRate;

Create an arbitrary binary data vector.

x = [1 0 1 0 1 0 1 0 1 0]';

Introduce errors to the first and last bits.

y = x;
y(1) = ~y(1);
y(end) = ~y(end);

Calculate the error statistics.

z = errorRate(x,y);

The first element of the vector z is the bit error rate.

ans = 0.2000

The second element of z is the total error count.

ans = 2

The third element of z is the total number of bits.

ans = 10

Create an 8-DPSK modulator and demodulator pair that work with binary data.

dpskModulator = comm.DPSKModulator('ModulationOrder',8,'BitInput',true);
dpskDemodulator = comm.DPSKDemodulator('ModulationOrder',8,'BitOutput',true);

Create an error rate calculator, accounting for the three bit (one symbol) transient caused by the differential modulation.

errorRate = comm.ErrorRate('ComputationDelay',3);

Calculate the BER for 10 frames.

BER = zeros(10,1);

for i= 1:10
    txData = randi([0 1],96,1);           % Generate binary data
    modData = dpskModulator(txData);      % Modulate
    rxSig = awgn(modData,7);              % Pass through AWGN channel
    rxData = dpskDemodulator(rxSig);      % Demodulate
    errors = errorRate(txData,rxData);    % Compute error statistics
    BER(i) = errors(1);                   % Save BER data

Display the BER.

BER = 10×1



This object implements the algorithm, inputs, and outputs described on the Error Rate Calculation block reference page. The object properties correspond to the block parameters, except:

  • The Output data and Variable name block parameters do not have a corresponding properties. The object always returns the result as an output.

  • The Stop simulation block parameter does not have a corresponding property. To implement similar behavior, use the output of the step method in a while loop, to programmatically stop the simulation. .

  • The Computation mode parameter corresponds to the Samples and CustomSamples properties.

Extended Capabilities

Introduced in R2012a