nex_wf.m 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. function [adfreq, n, ts, nf, w] = nex_wf(filename, varname)
  2. % nex_wf(filename, varname): Read waveform variable from a .nex file
  3. %
  4. % [adfreq, n, ts, nf, w] = nex_wf(filename, varname)
  5. %
  6. % INPUT:
  7. % filename - if empty string, will use File Open dialog
  8. % varname - variable name
  9. %
  10. %
  11. % OUTPUT:
  12. % n - number of waveforms
  13. % ts - array of waveform timestamps (in seconds)
  14. % nf - number of data points in each waveform
  15. % w - matrix of waveform a/d values [n nf] (in millivolts)
  16. n = 0;
  17. adfreq = 0;
  18. ts = 0;
  19. nf = 0;
  20. w = 0;
  21. if(nargin ~= 2)
  22. disp('2 input arguments are required')
  23. return
  24. end
  25. if(ischar(filename) == 0)
  26. disp('input arguments should be character arrays')
  27. return
  28. end
  29. if(ischar(varname) == 0)
  30. disp('input arguments should be character arrays')
  31. return
  32. end
  33. if(isempty(filename))
  34. [fname, pathname] = uigetfile('*.nex', 'Select a Nex file');
  35. filename = strcat(pathname, fname);
  36. end
  37. fid = fopen(filename, 'r');
  38. if(fid == 0)
  39. return
  40. end
  41. disp(strcat('file = ', filename));
  42. magic = fread(fid, 1, 'int32');
  43. version = fread(fid, 1, 'int32');
  44. comment = fread(fid, 256, 'char');
  45. freq = fread(fid, 1, 'double');
  46. tbeg = fread(fid, 1, 'int32');
  47. tend = fread(fid, 1, 'int32');
  48. nvar = fread(fid, 1, 'int32');
  49. fseek(fid, 260, 'cof');
  50. name = zeros(1, 64);
  51. found = 0;
  52. for i=1:nvar
  53. type = fread(fid, 1, 'int32');
  54. var_version = fread(fid, 1, 'int32');
  55. name = fread(fid, [1 64], 'char');
  56. offset = fread(fid, 1, 'int32');
  57. nf = fread(fid, 1, 'int32');
  58. dummy = fread(fid, 32, 'char');
  59. adfreq = fread(fid, 1, 'double');
  60. adtomv = fread(fid, 1, 'double');
  61. n = fread(fid, 1, 'int32');
  62. name = char(name);
  63. name = deblank(name);
  64. k = strcmp(name, deblank(varname));
  65. if(k == 1)
  66. if type ~= 3
  67. disp(sprintf('%s is not a waveform variable', deblank(varname)));
  68. return;
  69. end
  70. found = 1;
  71. fseek(fid, offset, 'bof');
  72. ts = fread(fid, [1 nf], 'int32');
  73. w = fread(fid, [n nf], 'int16');
  74. break
  75. end
  76. dummy = fread(fid, 76, 'char');
  77. end
  78. fclose(fid);
  79. if found == 0
  80. disp('did not find variable in the file');
  81. else
  82. ts = ts/freq;
  83. w = w*adtomv;
  84. disp(strcat('number of waveforms = ', num2str(nf)));
  85. end