Multiply by Matrix

Matrix multiplexer/multiplier: y(k) = A x(k)

This block is similar to Multiply Const, the difference being it can handle several inputs and outputs, and the input-to-output relation can be described by the following mathematical equation: y(k) = A x(k) where y in R^n, x in R^m, A in R^n*m

y(k) and x(k) are column-vectors describing the elements on the input port at time step k(this is a sync block with no memory).

Examples for where to use this block include:
 * Switch matrices (i.e. switch which ports go where), assuming all ports run on the same rate
 * Simulation of static MIMO-Channels (in that case, A is the channel matrix)
 * Summing up streams with variable coefficients

This block as one input message port. A message sent to this port will be converted to a std::vector >, and then passed on to set_A. If no conversion is possible, a warning is issued via the logging interface, and A remains unchanged.

Note : It is not possible to change the dimension of the matrix after initialization, as this affects the I/O signature! If a matrix of invalid size is passed to the block, an alert is raised via the logging interface, and A remains unchanged.



Parameters
(R): Run-time adjustable


 * Type
 * Only Complex and Float are supported!


 * Matrix A (R)
 * The matrix. Matrix A above would be input as.


 * TPP
 * The tag propagation policy.
 * All to All: All input tags are passed to all outputs.
 * One to One: Input tags on input K are passed to output K.
 * No Propagation: No tags are propagated through the block.
 * Matrix-Defined: A tag is propagated from input k to output l, if A(l,k) != 0.

Example Flowgraph
Basic Example

A simple example flowgraph would be:



In this case, the inputs are  from a vector source.

The Matrix is set to match A above.



This results in an output.



Tagging Example

To demonstrate the tag propagation, here is another example:



If the One to One TTP is selected the output tagging would look like:



If the All to All TTP is selected the output tagging would look like:



If the Matrix-defined TTP is selected the output tagging would look like:



Source Files

 * C++ files
 * multiply_matrix_impl.cc


 * Header files
 * multiply_matrix_impl.h


 * Public header files
 * multiply_matrix.h


 * Block definition
 * blocks_multiply_matrix_xx.block.yml