how to store the data in an array in simulink and compute the sum of squares of each element?

49 views (last 30 days)
I want to store real time data in an array and compute the sum of square of each elements and get the output. How can I achieve this without using a MATLAB function in simulink?
To make things clear, I am attaching my MATLAB function below. Basically, this code stores every sample in an array. Once the array is full, it shifts the elements to the right by one position and stores the next element at the start of the array. Again, I want to get the same output as below, but using only the Simulink blocks available.
function y = fcn(u,rst)
persistent str i;
if isempty(str)
str = zeros(1,3000);
if isempty(i)
i = 0;
i = i+1;
if (i<=3000)
str(i) = u;
for k=0:length(str)-2
str(end-k) = str(end-k-1);
str(1) = u;
y = sum(str.^2);
I tried to use the Queue block available, which is a FIFO register. I can store the elements and pop it when needed, but I don't know how to compute the sum of square of the elements stored in the queue.

Answers (3)

di liu
di liu on 9 Apr 2020
Hi Saurav,
Do you solve this problem finally? I have met the same issue as you, could you tell me how to do. Thank you.

Walter Roberson
Walter Roberson on 29 Jul 2017
Suppose you use an arithmetic block to square the signals. Then tap the output. One branch goes to a discrete integrator. The branch goes to a fifo of length 3000 (or whatever) and then to a discrete integrator. Now take the unbuffered integrator value minus the buffered integrator value: the result should be the sum of the values that are in the buffer. (Or, looking again, perhaps use a Cumulative Sum block instead of discrete time integrator)
Caution: Unless you happen to be using relatively low-value integer signals, the cumulative round-off error could be significant.
There is an alternate formulation. If you use a buffer block with an overlap equal to (length of buffer minus 1) then at each step you would get a frame of all of the values in the buffer, which you could add, perhaps using a Matrix Sum block.
Walter Roberson
Walter Roberson on 31 Jul 2017
You cannot really talk about a certain number of samples ago for a continuous model, as the values are logically defined at each intermediate point and the number of intermediate points that will be used will depend on the needs of the adaptive solver. Not all of the solvers are guaranteed to only calculate forward in time, by the way. You can sample periodically, though.

Sign in to comment.

Rintu Bhaskar
Rintu Bhaskar on 18 Sep 2021
Hello Saurav,
I am having similar problem. I need to store data (real number) and the have to fetch it for another calculation.
Can you share your solution, please?
Thank you.


Find more on General Applications in Help Center and File Exchange



Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by