how to store the data in an array in simulink and compute the sum of squares of each element?
22 次查看(过去 30 天)
显示 更早的评论
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);
end
if isempty(i)
i = 0;
end
i = i+1;
if (i<=3000)
str(i) = u;
else
for k=0:length(str)-2
str(end-k) = str(end-k-1);
end
str(1) = u;
end
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.
0 个评论
回答(3 个)
di liu
2020-4-9
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.
0 个评论
Walter Roberson
2017-7-29
Suppose you use an arithmetic block to square the signals. Then tap the output. One branch goes to a https://www.mathworks.com/help/simulink/slref/discretetimeintegrator.html 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 https://www.mathworks.com/help/dsp/ref/cumulativesum.html 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.
2 个评论
Walter Roberson
2017-7-31
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.
Rintu Bhaskar
2021-9-18
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.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Simulink Functions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!