how to convert file.m into block in Simulink ?

hi,
I wrote a function that produce 40 binary bits vector according to another 20 bits vector. In Matlab it works ok.
I want to convert it into a blockqmodel in Simulink.
Anybody knows how to do it ?
for example:
function gate_h = gate_array(I_H, indx_h)
no_cells = 20;
if(I_H > 0)
TMP_reg = [zeros(1, no_cells-indx_h), ones(1, indx_h)];
else
TMP_reg = [ones(1, indx_h), zeros(1, no_cells-indx_h)];
end
bitpatterns = {[0 1], [1 0]};
gate_h = cell2mat(bitpatterns(TMP_reg + 1));
Thanks, Henry

 Réponse acceptée

Try using the following as a MATLAB Function block
function gate_h = gate_array(I_H, indx_h)
no_cells = 20;
gate_h = zeros(1, no_cells * 2);
gate_h(1:2:indx_h*2) = 1;
gate_h(indx_h*2+1:2:no_cells*2-1) = 1;
if I_H > 0
gate_h = 1 - gate_h;
end

5 commentaires

Henry Buck
Henry Buck le 4 Mar 2016
great,
no error at all...looks ok. need to check the simulation results.
What about when I_H<0 ?
Thanks, Henry
Walter Roberson
Walter Roberson le 4 Mar 2016
Modifié(e) : Walter Roberson le 4 Mar 2016
I miscalculated mentally.
function gate_h = gate_array(I_H, indx_h)
no_cells = 20;
gate_h = zeros(1, no_cells * 2);
if I_H > 0
gate_h(2:2:(no_cells-indx_h)*2) = 1;
gate_h((no_cells-indx_h)*2+1:2:no_cells*2-1) = 1;
else
gate_h(1:2:indx_h*2-1) = 1;
gate_h((indx_h+1)*2:2:no_cells*2) = 1;
end
Henry Buck
Henry Buck le 4 Mar 2016
Thanks, But something a bit different. for example: if TMO_reg above is TMP_reg = [0 0 1 1 0 0 0 1] % in that case no_cells = 8. I want that gate_h will cange to gate_h = [0 1 0 1 1 0 1 0 0 1 0 1 0 1 1 0]. that values of gate_h will change until new TMP_reg appear: TMP_reg = [1 1 0 0 0 1 0 0] then gate_h = [1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 1]. the bits vector gate_h is dubble then vector TMP_reg.
Thanks, Henry
Henry Buck
Henry Buck le 4 Mar 2016
Modifié(e) : Walter Roberson le 4 Mar 2016
Hi,
I made a simple change and it seems to be works ok.
%%%%%%%%%%%%
function gate_h = gate_array_h6(I_H, indx_h)
no_cells = 20;
gate_h = zeros(1, no_cells * 2);
gate_h(1:2:indx_h*2) = 0;
gate_h(indx_h*2+1:2:no_cells*2-1) = 0;
if I_H > 0
gate_h(2:2:(no_cells-indx_h)*2) = 1;
gate_h((no_cells-indx_h)*2+1:2:no_cells*2-1) = 1;
else
gate_h(1:2:indx_h*2-1) = 1;
gate_h((indx_h+1)*2:2:no_cells*2) = 1;
end
%%%%%%%%%%%%
No E R R O R at all ....:-)).
Thanks a lot,
Henry
Henry Buck
Henry Buck le 4 Mar 2016
Hi,
For changing direction of the gate_h bits vector to complement gate_l bit vector, what do I need to change ? for example: in one block I got gate_h= [0 1 0 1 0 1 0 1 1 0 1 0]. and in anothe block I want to get gate_l = [1 0 1 0 1 0 1 0 0 1 0 1].
its like gate_l is complement of gate_h

Connectez-vous pour commenter.

Plus de réponses (1)

Rick Rosson
Rick Rosson le 4 Mar 2016

0 votes

Have you tried using the MATLAB Function block? It's in the User Defined Functions sub-library in base Simulink.

2 commentaires

Henry Buck
Henry Buck le 4 Mar 2016
Yes I did, But when I add that code into MATLAB Function code, after running I got lots of error relate to the code above.
I dont know how solve it.
Thanks, Henry
Henry Buck
Henry Buck le 4 Mar 2016
Hi, I made a simple change and it seems to be works ok.
%%%%%%%%%%%% function gate_h = gate_array_h6(I_H, indx_h)
no_cells = 20; gate_h = zeros(1, no_cells * 2); gate_h(1:2:indx_h*2) = 0; gate_h(indx_h*2+1:2:no_cells*2-1) = 0;
if I_H > 0 gate_h(2:2:(no_cells-indx_h)*2) = 1; gate_h((no_cells-indx_h)*2+1:2:no_cells*2-1) = 1; else gate_h(1:2:indx_h*2-1) = 1; gate_h((indx_h+1)*2:2:no_cells*2) = 1; end %%%%%%%%%%%%
No E R R O R at all ....:-)).
Thanks a lot, Henry

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by