Reducing Computation Time

Hey I have somewhat tricky task of reducing computation time for one line of code in my professor's project. Is there any way to reduce the following code so that it computes at a faster rate (maybe 0.01s), right now the time to beat is 0.08s. The code is as follows:
(32 bit IEEE demultiplexed)
x = hex2float( dec2hex( fread(fid, 1, 'ubit32', 0, 'ieee-be') ))
Basicslly looking for quicker way to convert the binary file to float. If you're not sure, I'm open to specifics suggestions. Also, would it be better if I wrote a code like this in C first and then let matlab read from there? Thank you.

 Respuesta aceptada

Jan
Jan el 26 de Abr. de 2012

1 voto

d = fread(fid, 1, 'uint32', 'ieee-be');
x = hex2float(sprintf('%x', d));
I do not have hex2float. Could you provide some example data? I assume typecast(uint32(d), 'single') will help also, if the format of fread is set accordingly. But without hex2float I cannot test this.
Anyhow, 0.08 sec sounds extremely slow. I assume this is cause by the rest of the code.

4 comentarios

Walter Roberson
Walter Roberson el 26 de Abr. de 2012
hex2float() is in the FEX.
Dejan Cvijanovic
Dejan Cvijanovic el 26 de Abr. de 2012
Sorry, I was only given that piece of code to work with, cannot supply/comment on rest of code. All I know is what is listed, need to read in a binary file and produce
Dejan Cvijanovic
Dejan Cvijanovic el 26 de Abr. de 2012
*produce float numbers eventually
Jan
Jan el 30 de Abr. de 2012
Thanks, Walter. I cannot find it in the FEX: http://www.mathworks.com/matlabcentral/fileexchange/?sort=date_desc_updated&term=hex2float

Iniciar sesión para comentar.

Más respuestas (2)

Walter Roberson
Walter Roberson el 26 de Abr. de 2012

1 voto

Is there a reason you are not just using
x = fread(fid, 1, '*float32', 0, 'ieee-be')
Also if you are doing a lot of calculations, it is almost always faster to use fread() to read a number of items at once. (If you stick with going through hex, then dec2hex() can be used on arrays.)

6 comentarios

Dejan Cvijanovic
Dejan Cvijanovic el 26 de Abr. de 2012
Yes, the file Im reading is binary with multiple formats. Does that change anything or is this still applicable?
Walter Roberson
Walter Roberson el 27 de Abr. de 2012
Multiple binary formats should not affect my suggestion for reading a single 32 bit float.
Dejan Cvijanovic
Dejan Cvijanovic el 27 de Abr. de 2012
So just to confirm, this code reads in binary and converts to float and conserves the same answer if I had convert to hex first?
Walter Roberson
Walter Roberson el 27 de Abr. de 2012
The only way to know for sure is to try it.
I do not have access to MATLAB from home to experiment with. And even if I said that it worked, you would need to try it to be *certain*.
Dejan Cvijanovic
Dejan Cvijanovic el 30 de Abr. de 2012
What about using 'ubit32=>float32' instead of '*float32'.....because binary is not in float, right?
Jan
Jan el 30 de Abr. de 2012
'ubit32' is very inefficient, when it really splits the reading to 32 bits. 'uint32' reads and processes them in a block.

Iniciar sesión para comentar.

Dejan Cvijanovic
Dejan Cvijanovic el 26 de Abr. de 2012

0 votos

Can anyone confirm correctness of last two posts?

1 comentario

Jan
Jan el 30 de Abr. de 2012
I'm sure *you* can confirm them. Simply compare the results and to be sure try it with a bunch of random numbers or bit-patterns.

Iniciar sesión para comentar.

Categorías

Más información sobre Data Type Conversion en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 26 de Abr. de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by