Hitachi provides a Matlab script (RealtimeOT.m) which can deliver real-time feedback from ETG-4000. This script is installed in the computer (Windows 2000) in the NIRS room. One can modify the script to deliver the real-time signal in the desired format (such as line trace, bar, or color).
To enable realtime feedback, you need to check “LAN OUT Realtime” in the parameter set on ETG-4000 before recording. After you hit the “Ready” button, you need to start RealtimeOT in Matlab command window in the PC. Then click “Start” button in ETG-4000 (or your program send ‘start’ command to ETG-4000).
Here is the script RealtimeOT.m:
% Script RealtimeOT
% Realtime LAN function for OTsystem using MATLAB
%
% Server ETG-4000 :Ex 172.17.101.1
% Client MATLAB :Ex 172.17.101.2
%
% Reference
% TCP/UDP/IP Toolbox2.0.5
% MATLAB Central>File Exchange>Utilities>Data Import/Export>TCP/UDP/IP Toolbox 2.0.5
% http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=345&objectType=file
%
% Written by S.Kawasaki
% First completed 2006/09/12
%
clear oxy;clear deo;
close all;
%/////////////////////////// Open Port /////////////////////////////
%Connect LAN Port
fid=tcpipmex(1,-1,'172.17.101.1',51027);
if fid<0;
disp('Fail to connect!');
tcpipmex(-1,0);
return;
end;
%Send Command for ETG-4000
tcpipmex(2,fid,sprintf('++Hello ETG-4000\r\n'));
%Receive Command from ETG-4000
str='';
while length(str)<3
str=[str,tcpipmex(3,fid,80)];
end
disp(str);
disp('Press ETG-4000 START Button!');
%///////////////////////// Figure ///////////////////////////////
plot_ch=1;%Ex: Probe1(4x4Mode 24ch)=1-24ch, Probe2(4x4Mode 24ch)=25-48ch
figure(1);hold on;box on;grid on;
set(1,'doublebuffer','on');
set(gca,'drawmode','fast');
title(['Probe1 CH',num2str(plot_ch)]);
h1=plot(0,0);
h2=plot(0,0);
drawnow;
%//////////////////////// Get ETG-4000 Data ////////////////////////////////
while(1);
%///////////////////////// Header Size:12 ///////////////////////////////
buff1=tcpipmex(3,fid,4);
% Convert datatype and byte order with help of a file.
fp=fopen('temp','w+');fwrite(fp,buff1);fseek(fp,-4,'cof');
hsize=fread(fp,4,'int32');
fclose(fp);delete('temp');
if hsize==12;%Data is comming!
%///////////////////////// Data Number ///////////////////////////////
buff2=tcpipmex(3,fid,4);
fp=fopen('temp','w+');fwrite(fp,buff2);fseek(fp,-4,'cof');
num=fread(fp,4,'int32');%Number of Data
fclose(fp);delete('temp');
%//////////////////////////// Data Size:428 ////////////////////////////
buff3=tcpipmex(3,fid,4);
%fp=fopen('temp','w+');fwrite(fp,buff3);fseek(fp,-4,'cof');
%dsize=fread(fp,4,'int32');
%fclose(fp);delete('temp');
%/////////////////////////// Hb Data ////////////////////////////////
for ch=1:52;%Oxy
buff4=tcpipmex(3,fid,4);
fp=fopen('temp','w+');fwrite(fp,buff4);fseek(fp,-4,'cof');
oxy(ch,num)=fread(fp,4,'float');
fclose(fp);delete('temp');
end;
for ch=1:52;%Deoxy
buff5=tcpipmex(3,fid,4);
fp=fopen('temp','w+');fwrite(fp,buff5);fseek(fp,-4,'cof');
deo(ch,num)=fread(fp,4,'float');
fclose(fp);delete('temp');
end;
if num>=1;%Plot Oxy&Deoxy
set(h1,'xdata',[1:num],'ydata',oxy(plot_ch,[1:num]));set(h1,'color','r');
set(h2,'xdata',[1:num],'ydata',deo(plot_ch,[1:num]));set(h2,'color','b');
drawnow;
end;
%//////////////////////////// Mark ///////////////////////////////
buff6=tcpipmex(3,fid,2);
fp = fopen('temp','w+');fwrite(fp,buff6);fseek(fp,-2,'cof');
mark(num)=fread(fp,2,'int16');
fclose(fp);delete('temp');
%/////////////////////////// Time ////////////////////////////////
buff7=tcpipmex(3,fid,10);
%time=char(buff7);
end;
if tcpipmex(6,fid)==0;break;end;%Push ETG-4000 Stop Button
end;
%///////////////////////// Close Port ////////////////////////////
tcpipmex(-1,0);
clear buff1;clear buff2;clear buff3;clear buff4;clear buff5;clear buff6;clear buff7;
clear ch;clear fid;clear fp;clear num;clear str;clear hsize;
clear h1;clear h2;clear plot_ch;
You may find that this script is slow, i.e. deliver feedback at some time delay. It’s because the tcpip code is slow. Update 2020-03-06 I think the real reason why it’s slow is not because tcpip, instead it’s because it uses file to convert data to int or float. A much better way is to use bread. Please refer to code in tcpip connection with pnet. Please read this post for fast tcpip connection: tcpip connection with pnet



Dear Xu,
thanks a lot for sharing so much stuff!
We are planning to do neurofeedback studies in our lab and I’m just trying to implement the real-time setup. I have already tested the RealtimeOT.m script and it works. I was wondering, if you also have a basic matlab script for real-time preprocessing and analysis, that you would be willing to share? That would be a great help.
BW,
Simon