Hi Ross

I think this should do exactly what you want:

% Convert complex data stored in a 36_0 Unsigned format into
% actual complex data in a matlab array
% Useful for converting output of casper FFT into complex array.

function cplx_vec  = conv36u_cplx(vec_36u)
%disp('Converting 36_0 data to 18_17 complex')
s18  = numerictype(1, 18, 17);
cplx_vec = complex(zeros(length(vec_36u),1));

for jj=1:length(vec_36u)
    a  = fi(vec_36u(jj), 0, 64, 0);
    re = reinterpretcast(bitsliceget(a, 18, 1), s18);
    im = reinterpretcast(bitsliceget(a, 36, 19), s18);
    cplx = re + im*1i;
    cplx_vec(jj) = cplx;
end

There may be a neater way to do this (in which case please tell me!).

Regards
Danny

PS: I've never done fixed point stuff with scipy, can you point me in the direction of some examples?


Ross Williamson wrote:
Hi,

I'm trying to implement a test suite for a correlator and I'm having
serious problems with my understanding of fi.  The output of the fft
stage is UFIX 36_0.  I capture that in a matlab variable (say
fft_out0).  All I want to do is split that up into Re and Im parts at
FIX 18_17. I'm finding this rather difficult to do in matlab
(especially because simple bit operations such as&  >>  and
representing numbers via 0x notation do not work).

If for example I try and convert the output from matlab

fi(fft_out0,0,36,0) I still get a fractional number which baffles me.

Is there a way to take this UFIX36_0, split into two FIX 18_17 and
turn it into a complex number?

Ross

p.s. I'm using the unbus blocks to create the simulink output. I don't
want to manually add gateways from every re_im block unless I really
have to.

(p.p.s I'm coming from scipy where this would be trivial hence the
want to throw the toys out of the pram)

Reply via email to