Filter löschen
Filter löschen

Reducing Computation Time

3 Ansichten (letzte 30 Tage)
Dejan Cvijanovic
Dejan Cvijanovic am 26 Apr. 2012
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.

Akzeptierte Antwort

Jan
Jan am 26 Apr. 2012
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 Kommentare
Dejan Cvijanovic
Dejan Cvijanovic am 26 Apr. 2012
*produce float numbers eventually
Jan
Jan am 30 Apr. 2012
Thanks, Walter. I cannot find it in the FEX: http://www.mathworks.com/matlabcentral/fileexchange/?sort=date_desc_updated&term=hex2float

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 26 Apr. 2012
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 Kommentare
Dejan Cvijanovic
Dejan Cvijanovic am 30 Apr. 2012
What about using 'ubit32=>float32' instead of '*float32'.....because binary is not in float, right?
Jan
Jan am 30 Apr. 2012
'ubit32' is very inefficient, when it really splits the reading to 32 bits. 'uint32' reads and processes them in a block.

Melden Sie sich an, um zu kommentieren.


Dejan Cvijanovic
Dejan Cvijanovic am 26 Apr. 2012
Can anyone confirm correctness of last two posts?
  1 Kommentar
Jan
Jan am 30 Apr. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by