Array manipulation issue in Simulink
2 次查看(过去 30 天)
显示 更早的评论
Hello,
I am trying to manipulate an array in Simulink through Matlab function block, but despite trying different ways of doing, I always get an error. Basically, I have a trapeze signal of the type:
t=[0, 6, 58, 65, 85, 91, 136, 143]
v=[0, 6, 6, 0, 0, 7, 7, 0]
Then what I want to do is get just the value of t where there is a rising of "v". This will give me the matrix below:
a=[6, 91]
Because v rise at t=6 and t=91.
What I wrote below doesn't work tho:
function a=fcn(v,t)
a=zeros(1,length(v));
idx=gt(v,0);
CC=diff(idx);
CC1=[CC; 0];
CC2=CC1>0;
CC3=CC2.*t;
CC3(CC3==0)=[];
a(1:length(CC3))=CC3;
Can anyone tell me why?
0 个评论
采纳的回答
Birdman
2017-12-21
Well, your situation can not be properly solved by using a MATLAB Function in Simulink because you need to indicate the size of the output from the very beginning, but at the same time you try to supply the inputs and their size are changing until the simulation is over, so I came up with a solution where I supplied the t and v vectors with a proper simulation time vector to Simulink and make some manipulation with basic Math Operation blocks. At the end of the simulation, a vector you want is logged to the workspace. I also put some commands to PreLoadFcn and StopFcn in File->Model Properties->Model Properties->Callback. Hope this helps.
6 个评论
Birdman
2017-12-21
At least try to look at the codes in PreLoadFcn and StopFcn and try to understand what I did. Also, if the answer helped, can you accept it?
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Sources 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!