Two questions really, But I would like to make it more descriptive :
I am implementing a Modulator which involves Matrix Multiplication of complex Vector:
Just to give an example :
cck_encoding_table(1,:)= [ 1j 1 1j -1 1j 1 -1j 1 ];
cck_encoding_table(2,:)= [ -1j -1 -1j 1 1j 1 -1j 1 ];
cck_encoding_table(3,:)= [ -1j 1 -1j -1 -1j 1 1j 1 ];
cck_encoding_table(4,:)= [ 1j -1 1j 1 -1j 1 1j 1 ];
Basically, I need to implement this in Simulink( Xilinx) eventually in Hardware:
cck_n_code=exp(1j*Phi1)*cck_encoding_table(index+1,:);
My question, how to model Matrix Multiplication with Complex Vectors. My understanding is to use Complex Multiplier. But that is to multiply only 2 complex vectors
If I have to multiply more than 2 complex vector in a single clock would it be possible.
I am not expecting any answers like model itself, but possible approach/direction if any to solve the problem
Thanks for reading, Kiran
Simply write out the low level equations that result from your matrix multiply. Each element of the output will be the result of summing a collection of multiplications of elements from your input vector&matrix.
If you need to do it fast, then put down as many complex multipliers and adders as you need and wire the input elements up to them - that'll give you all your outputs at once and require you to have all your inputs available at once.
Alternatively, put your inputs into a memory block (or probably 2, one for the vector, one for the matrix) and arrange some logic which will feed the correct address into that memory block to iterate over the elements in an appropriate order. Those inputs go to a complex multiplier and then on to a complex accumulator (you might have to model that from an adder and resettable register). Your control logic will need to reset this accumulator periodically.
The output of the accumulator can be fed on to a next stage, or stored in another memory block (another address for you control logic to manage).
if your encoding table is always going to have elements which are only from the set (1,-1,j,-j) then you can encode these as 2 bits rather than storing entire fully represented complex numbers and write a custom piece of logic which takes advantage of this fact to create a much simpler complex multiplier than the general purpose one.