Cumulative sum of channel, column, or row elements
Math Functions / Math Operations
dspmathops
The Cumulative Sum block computes the cumulative sum along the specified dimension of the input or across time (running sum).
The inputs can be a vector or a matrix. The output always has the same dimensions, rate, data type, and complexity as the input.
The Cumulative Sum block accepts vector or matrix inputs containing real or complex values.
The optional reset port, Rst
, accepts scalar
values, which can be any builtin Simulink^{®} data type including boolean
.
The rate of the input to the Rst port must be the same or slower than
that of the input data signal. The sample time of the input to the
Rst port must be a positive integer multiple of the input sample time.
The output always has the same dimensions, rate, data type, and complexity as the data signal input.
When you set the Sum input along parameter
to Channels (running sum)
, the block computes
the cumulative sum of the elements in each input channel. The running
sum of the current input takes into account the running sum of all
previous inputs. In this mode, you must also specify a value for the Input
processing parameter. When you set the Input
processing parameter to Columns as channels
(frame based)
, the block computes the running sum along
each column of the current input. When you set the Input
processing parameter to Elements as channels
(sample based)
, the block computes a running sum for
each element of the input across time. See the following sections
for more information:
When you set the Input processing parameter
to Columns as channels (frame based)
, the
block treats each input column as an independent channel. As the following
figure and equation illustrate, the output has the following characteristics:
The first row of the first output is the same as the first row of the first input.
The first row of each subsequent output is the sum of the first row of the current input (time t), and the last row of the previous output (time t  T_{f}, where T_{f} is the frame period).
The output has the same size, dimension, data type, and complexity as the input.
Given an MbyN matrix input, u, the output, y, is an MbyN matrix whose first row has elements
$${y}_{1,j}(t)={u}_{1}{,}_{j}(t)+{y}_{M,j}(t{T}_{f})$$
When you set the Input processing parameter
to Elements as channels (sample based)
,
the block treats each element of the input matrix as an independent
channel. As the following figure and equation illustrate, the output
has the following characteristics:
The first output is the same as the first input.
Each subsequent output is the sum of the current input (time t) and the previous output (time t  T_{s}, where T_{s} is the sample period).
The output has the same size, dimension, data type, and complexity as the input.
Given an MbyN matrix input, u, the output, y, is an MbyN matrix with the elements
$${y}_{i,j}(t)={u}_{i,j}(t)+{y}_{i,j}(t{T}_{s})\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\begin{array}{c}1\le i\le M\\ 1\le j\le N\end{array}$$
When you are computing the running
sum, you can configure the block to reset the running sum whenever
it detects a reset event at the optional Rst
port. The
rate of the input to the Rst port must be the same or slower than
that of the input data signal. The sample time of the input to the
Rst port must be a positive integer multiple of the input sample time.
The reset sample time must be a positive integer multiple of the input
sample time. The input to the Rst
port can be of
the boolean
data type.
If a reset event occurs while the block is performing samplebased processing, the block initializes the current output to the values of the current input. If a reset event occurs while the block is performing framebased processing, the block initializes the first row of the current output to the values in the first row of the current input.
The Reset port parameter specifies the reset event, which can be one of the following:
None
disables the Rst
port.
Rising edge
— Triggers
a reset operation when the Rst
input does one of
the following:
Rises from a negative value to a positive value or zero
Rises from zero to a positive value, where the rise is not a continuation of a rise from a negative value to zero (see the following figure)
Falling edge
— Triggers
a reset operation when the Rst
input does one of
the following:
Falls from a positive value to a negative value or zero
Falls from zero to a negative value, where the fall is not a continuation of a fall from a positive value to zero (see the following figure)
Either edge
— Triggers
a reset operation when the Rst
input is a Rising
edge
or Falling edge
(as
described above)
Nonzero sample
—
Triggers a reset operation at each sample time that the Rst
input
is not zero
Note:
When you run simulations in the Simulink 
When you set the Sum input along parameter
to Columns
, the block computes the cumulative
sum of each column of the input. In this mode, the current cumulative sum is independent
of the cumulative sums of previous inputs.
y = cumsum(u) % Equivalent MATLAB code
The output has the same size, dimension, data type, and complexity as the input. The mth output row is the sum of the first m input rows.
Given an MbyN input, u, the output, y, is an MbyN matrix whose jth column has elements
$${y}_{i,j}={\displaystyle \sum _{k=1}^{j}{u}_{k,j}}\text{}1\le i\le M$$
The block treats lengthM unoriented vector inputs as Mby1 column vectors when summing along columns.
When you set the Sum input along parameter
to Rows
, the block computes the cumulative
sum of the row elements. In this mode, the current cumulative sum is
independent of the cumulative sums of previous inputs.
y = cumsum(u,2) % Equivalent MATLAB code
The output has the same size, dimension, and data type as the input. The nth output column is the sum of the first n input columns.
Given an MbyN input, u, the output, y, is an MbyN matrix whose ith row has elements
$${y}_{i,j}={\displaystyle \sum _{k=1}^{j}{u}_{i,k}}\text{}1\le j\le N$$
When you sum along rows, the block treats lengthN unoriented vector inputs as 1byN row vectors.
The following diagram shows the data types used within the Cumulative Sum block for fixedpoint signals.
You can set the accumulator and output data types in the block dialog as discussed in Dialog Box.
The Main pane of the Cumulative Sum block dialog appears as follows.
Specify the dimension along which to compute the cumulative
summations. You can choose to sum along Channels (running
sum)
, Columns
, or Rows
.
For more information, see the following sections:
Specify how the block should process the input when computing the running sum along the channels of the input. You can set this parameter to one of the following options:
Columns as channels (frame based)
—
When you select this option, the block treats each column of the input
as a separate channel.
Elements as channels (sample based)
—
When you select this option, the block treats each element of the
input as a separate channel.
This parameter is available only when you set the Sum
input along parameter to Channels (running
sum)
.
Determines the reset event that causes the block to reset the
sum along channels. The rate of the input to the Rst port must be
the same or slower than that of the input data signal. The sample
time of the input to the Rst port must be a positive integer multiple
of the input sample time. This parameter appears only when you set
the Sum input along parameter to Channels
(running sum)
. For more information, see Resetting the Running Sum.
The Data Types pane of the Cumulative Sum block dialog appears as follows.
Note: Floatingpoint inheritance takes precedence over the data type settings defined on this pane. When inputs are floating point, the block ignores these settings, and all internal data types are floating point. 
Select the rounding mode for fixedpoint operations.
Select the overflow mode for fixedpoint operations.
Specify the accumulator data type. See FixedPoint Data Types for illustrations depicting the use of the accumulator data type in this block. You can set this parameter to:
A rule that inherits a data type, for example, Inherit:
Same as input
An expression that evaluates to a valid data type,
for example, fixdt([],16,0)
Click the Show data type assistant button to display the Data Type Assistant, which helps you set the Accumulator data type parameter.
See Specify Data Types Using Data Type Assistant (Simulink) for more information.
Specify the output data type. See FixedPoint Data Types for illustrations depicting the use of the output data type in this block. You can set it to:
A rule that inherits a data type, for example, Inherit:
Same as accumulator
An expression that evaluates to a valid data type,
for example, fixdt([],16,0)
Click the Show data type assistant button to display the Data Type Assistant, which helps you set the Output data type parameter.
See Control Signal Data Types (Simulink) for more information.
Specify the minimum value that the block should output. The
default value is []
(unspecified). Simulink software
uses this value to perform:
Simulation range checking (see Signal Ranges (Simulink))
Automatic scaling of fixedpoint data types
Specify the maximum value that the block should output. The
default value is []
(unspecified). Simulink software
uses this value to perform:
Simulation range checking (see Signal Ranges (Simulink))
Automatic scaling of fixedpoint data types
Select this parameter to prevent the fixedpoint tools from overriding the data types you specify on the block mask.
Input and Output Ports  Supported Data Types 

Data input port, 

Reset input port,  All builtin Simulink data types:

Output port 

Cumulative Product  DSP System Toolbox 
Difference  DSP System Toolbox 
Matrix Sum  DSP System Toolbox 
cumsum  MATLAB 