I would like to perform the repmat() function in Simulink. Apparently, there isn't a block for this purpose. So I doing this using the MATLAB function block. Here the following signal dimensions that I'm trying to handle
The code is just:
function y = repmat(u, Ns)
y = repmat(u, [Ns,1,1]); % Ns is a paramater of my system
It works, but using this block is always awkward and inefficient. Is there a clever way to do this?

15 commentaires

hosein Javan
hosein Javan le 16 Août 2020
Modifié(e) : hosein Javan le 16 Août 2020
repmat is usally used for element wise operations. if you can tell why even thinking of repmat, maybe there's a better solution of that.
Walter Roberson
Walter Roberson le 16 Août 2020
from your diagram I would have expected repmat(u, [1,1, Ns]) unless you wanted a different element order and you had hardwired the output size to prevent conflicts on the number of dimensions.
Walter Roberson
Walter Roberson le 16 Août 2020
I do not agree that repmat is used for elementwise operations. That would be repelems
hosein Javan
hosein Javan le 16 Août 2020
hello Mr. Walter Roberson . for example if we want to multiply each row of a matrix by a vector, that would be repmat(k,[m 1]).*A which is element wise. from my experience, it is a faster way than loops. called vectorization I assume.
Walter Roberson
Walter Roberson le 16 Août 2020
If k is a vector with the same number of columns as matrix A, then all you need since R2016b is k.*A . This is "implicit expansion".
hosein Javan
hosein Javan le 16 Août 2020
I'm using 2016a, thanks for implying that. I'm just concerned that newer versions aren't too RAM-friendy!
Walter Roberson
Walter Roberson le 16 Août 2020
bsxfun for earlier releases
hosein Javan
hosein Javan le 17 Août 2020
great help. thank you. I see that bsxfun is for element.wise operation. if the operation was not element wise like "A\b", I assume the best way is arrayfun, isn't it?
Walter Roberson
Walter Roberson le 17 Août 2020
If you repmat to create A for A\b then the array will be singular.
If you repmat to create rows of b then that could be valid. You would not use arrayfun for that.
If you repmat to create columns of b then it would be more efficient to instead repmat the output, as the \ operator will give the same results for all columns of b that are identical columns.
Walter Roberson
Walter Roberson le 17 Août 2020
Modifié(e) : Walter Roberson le 5 Nov 2020
Rubem Pacelli
Rubem Pacelli le 5 Nov 2020
Man... What is the answer to my question?
Use a selector block. Choose 2 dimensions for input. For your first dimension, tell it to select all. For your second dimension, tell it to use a vector from dialog. In the dialog space, enter
repmat(1:2, 1, Ns)
assuming here that the size of the second dimension is 2.
Now connect a reshape() block to the output of that, and specify output dimensions [1, 2, Ns*2]
Rubem Pacelli
Rubem Pacelli le 5 Nov 2020
Modifié(e) : Rubem Pacelli le 5 Nov 2020
Thank you! I think you meant to say [1, 2, Ns] instead of [1, 2, Ns*2]. Before the reshape I have a [1x2*Ns] vector. Hence, it is not possible to reshape to [1, 2, Ns*2]. When I put [1, 2, Ns] in a reshape block, I got a matrix in a shape that I was looking for. :)
Walter Roberson
Walter Roberson le 5 Nov 2020
Yes, you are right, [1, 2, Ns]

Connectez-vous pour commenter.

 Réponse acceptée

Ivan Garcia
Ivan Garcia le 30 Juil 2021
Modifié(e) : Ivan Garcia le 30 Juil 2021

0 votes

You can model the repmat function used in the MATLAB function block above in Simulink as follows:
If the input array "u" has 2 dimensions feed it into a "Reshape" block. Set the output dimensionality to "Customize" and then set the output dimensions to: [1, XSize, YSize], where XSize and YSize are the dimension sizes of the original array. This will expand the third dimension. Then feed the output of the reshape block into a "Selector" block. Set the number of input dimensions to 3. Then for the first dimension set the index option to "Index vector (dialog)" and set the index value to "ones(1, Ns)". For the other two dimensions set the index option to "Select all".
Hope this helps.

Plus de réponses (0)

Catégories

Produits

Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by