diff matlab/AIMCread.m @ 46:c8024714e13e

- Added support for a very basic AIM-C file format
author tomwalters@google.com
date Thu, 27 May 2010 07:25:03 +0000
parents
children f03d4455b262
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matlab/AIMCread.m	Thu May 27 07:25:03 2010 +0000
@@ -0,0 +1,47 @@
+function [data, nFrames, period, nChannels, nSamples, sample_rate] = AIMCread(filename)
+%[data, nFrames, period, nChannels, nSamples ] = AIMCread( filename)
+%
+% data ... matrix (or array) of size [nFrames,nChannels,nSamples]
+%          in case vertical/horizontal profiles are read, you should use squeeze
+% nFrames ... number of frames
+% period ... Frame interval in ms
+% nChannels ... points on vertical axis of an auditori image
+% nSamples ... points on horizontal axis of an auditori image
+
+fid = fopen(filename);
+
+debug = 0;
+
+nFrames = fread( fid, 1, 'int32');
+period = fread( fid, 1, 'float32'); % Frame period in ms
+nChannels = fread( fid, 1, 'int32'); % vertical axis of an AI
+nSamples = fread( fid, 1, 'int32'); % horizontal axis of an AI
+sample_rate = fread(fid, 1, 'float32'); % sample rate of each channel in Hz
+
+if nChannels == 1 % temporal profiles
+  data = fread( fid, [nSamples,nFrames], 'float32'); % transposed!
+  data = data.';
+  data = reshape( data, [nFrames,1,nSamples]); % to have the same dimensions
+  % if a 'squeeze' is used, this line has no effect at all
+  if debug
+   disp('seems to be temporal profiles')
+  end
+elseif nSamples == 1 % spectral profiles
+  data = fread( fid, [nChannels,nFrames], 'float32');  % transposed!
+  data = data.';
+  %data = reshape( data, [nFrames,nChannels,1]); % has no effect
+  if debug
+   disp('seems to be spectral profiles')
+  end
+else % auditory 2d images
+  data = zeros(nFrames,nChannels,nSamples);
+  for k=1:nFrames % loop since fread cannot return 3d array
+    Image = fread(fid, [nSamples,nChannels], 'float32'); % transposed!
+    data(k,:,:) = Image.';
+  end
+  if debug
+   disp('seems to be 2d images')
+  end
+end
+
+fclose(fid);