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)