--- /dev/null
+%load file written out by FtspDataLogger.java class\r
+%arg0 - filename, e.g. '1205543689171.report'\r
+function FTSPDataAnalyzer(file, varargin)\r
+[c1 c2 c3 c4 c5]= textread(file, '%u %u %u %u %u', 'commentstyle', 'shell');\r
+data = [c2 c3 c4 c5]; %skipping the first column (java time)\r
+data1 = sortrows(sortrows(data,1),2);\r
+newdata = [];\r
+\r
+row=1;\r
+newrow=1;\r
+unsynced=0;\r
+while (row<=size(data1,1))\r
+\r
+ seqnum=data1(row,2);\r
+\r
+ data2=[];\r
+ row2=1;\r
+ tmprow1=row;\r
+ while (row <= size(data1,1) && data1(row,2)==seqnum)\r
+ if (data1(row,4)==0)\r
+ data2(row2,1)=data1(row,3);\r
+ row2= row2+ 1;\r
+ else\r
+ unsynced=unsynced+1;\r
+ end\r
+ row = row + 1;\r
+ end\r
+ \r
+ if (row2>1)\r
+ row2size=row2-1;\r
+ rcvdsize=row-tmprow1;\r
+ newdata(newrow,1) = seqnum;\r
+ newdata(newrow,2) = mad(data2(1:row2size,1));\r
+ newdata(newrow,3) = mean(data2(1:row2size,1));\r
+ newdata(newrow,4) = row2size/rcvdsize;\r
+ newrow = newrow + 1;\r
+ end\r
+end\r
+\r
+if (length(newdata)==0)\r
+ disp('no data found (at least one data point from a synchronized mote is required)!');\r
+else\r
+ newsize=newrow-1;\r
+ subplot(3,1,1);\r
+ plot(newdata(1:newsize,1),newdata(1:newsize,2));\r
+ title(sprintf('TimeSync Errors'));\r
+ subplot(3,1,2);\r
+ plot(newdata(1:newsize,1),newdata(1:newsize,3));\r
+ title(sprintf('Avg Glob Time'));\r
+ subplot(3,1,3);\r
+ plot(newdata(1:newsize,1),newdata(1:newsize,4),'b-');\r
+ title(sprintf('%% Synced Motes'));\r
+\r
+ disp(sprintf('total unsycned num %d (all %d)',unsynced,newsize));\r
+ disp(sprintf('avg %0.3f',mean(newdata(1:newsize,2))));\r
+ disp(sprintf('max %d',max(newdata(1:newsize,2))));\r
+ savedata = newdata(1:newsize,:);\r
+ save data.out savedata -ASCII;\r
+end\r
+
\ No newline at end of file