52 views (last 30 days)

Hi,

I need to find nonzero elements in Simulink of a Boolean vector signal, for example:

[1;0;1;0;0]

Basically it comes from comparison of two signals. This can be done by a find block in Simulink but I am only using blocks in the "slcilib" (simulink code inspector library) for code certifiable reasons, and of course it does not contain a find block.

What I expect to have is the index vector itself, in this case [1 3], and I will feed this index vector to a selector block index port (this port does not support Boolean data type!), to select corresponding values of another signal and assign these values.

Is it possible to do it using only math and logic operations that are contained in the slcilib? Any clue would be helpful!

Thanks!

Azzi Abdelmalek
on 29 Aug 2016

Edited: Azzi Abdelmalek
on 29 Aug 2016

You can use compare to zero block

Azzi Abdelmalek
on 29 Aug 2016

Edit

If yoursignal=[1 0 1 0 1 ], If the sample time is ts=0.1 for example to get the indices,

idx=10*ts*yoursignal=1*1=1

idx=10*2*ts*yoursignal=2*0=0

idx=10*3*ts*yoursignal=3*1=3

idx=10*4*ts*yoursignal=4*1=0

idx=10*5*ts*yoursignal=5*1=5

You get the indices 1,3 and 5. You will ignore the 0 value

NB: n*Ts is given by the clock

Sign in to comment.

Peter Anderson
on 26 Apr 2018

Edited: Peter Anderson
on 26 Apr 2018

See my answer to this question here:

Short answer is use a for-iterator subsystem. This version finds the first non-zero element and then stops looking.

Note that there will be a performance hit doing it this way over MATLAB function block with a find function call when simulating in normal mode. Not noticable for small arrays but I tested it for large arrays with a one in the final index and it was much slower. Running in accelerator mode was fine though.

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 4 Comments

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387626

⋮## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387626

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387628

⋮## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387628

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387638

⋮## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387638

## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387647

⋮## Direct link to this comment

https://se.mathworks.com/matlabcentral/answers/301215-find-nonzero-element-of-a-signal-in-simulink-without-using-find-block#comment_387647

Sign in to comment.