function data_stat(filename, msrd) % prints some statistics % also plot graphs MF = 0; if(nargin == 0) filename = 'tempout'; endif; if(nargin == 2) MF = 1; endif; D = dlmread(filename); if(isempty(D)) return; endif; [r c] = ind2sub(size(D), find(D(:,[3:18]) == 0)); % find bad data D(r,:) = []; % and delete it % [r c] = ind2sub(size(D), (D(:,[11:18]) < 2000000)); % D(r,:) = []; printf("Some statistics:\n\n\trelative error for inner ADC:\n"); Time = (D(:,1)*2^24+D(:,2))/1000; T = []; Rr = []; x = rel_error(D(:,[3 4 6:10])); printf("%f ", x); avrg = mean(x); printf("\t(aver: %f)\n", avrg); printf("\n\trelative error for outern ADC:\n\n"); plot(Time, D(:,[3 4 6:10])); if(MF) R = dlmread(msrd); Rr = R(:,2); T = R(:,1)/1000; addlabels(Time, D(:,[3 4 6:10]), T, Rr); %~ M = mean(mean(D(:,[3 4 6:10]))) / mean(Rr); %~ Y = Rr * M; %~ T = R(:,1)/1000; %~ hold on; plot(T, Y, '.'); %~ text(T+10, Y, num2str(Rr)); %~ hold off; endif; Tit = sprintf("Internal 12-bit ADC, err=%f%%", avrg); xlabel("Time, s"); ylabel("R, ADU"); title(Tit); print -dpng -color int.png; close; x = rel_error(D(:,[11:18])); avrg = mean(x); printf("%f ", x); printf("\t(aver: %f)\n", avrg); printf("\n"); plot(Time, D(:,[11:18])); if(MF) addlabels(Time, D(:,[11:18]), T, Rr); %~ M = mean(mean(D(:,[11:18]))) / mean(Rr); %~ Y = Rr * M; %~ hold on; plot(T, Y, '.'); %~ text(T+10, Y, num2str(Rr)); %~ hold off; endif; Tit = sprintf("External 24-bit ADC, err=%f%%", avrg); xlabel("Time, s"); ylabel("R, ADU"); title(Tit); print -dpng -color ext.png; close meanline = mean(D(:,[11:18])')'; diffs = mean(D(:,[11:18]) - meanline) % average difference between mean line newD = D(:,[11:18]) - diffs; plot(Time, newD); if(MF) addlabels(Time, newD, T, Rr); %~ newDr = interp1(Time, meanline, T); %~ N = [ ones(size(Rr)) Rr ]; %~ K = N \ newDr %~ Y = Rr * K(2) + K(1); %~ hold on; plot(T, Y, '.'); %~ text(T+10, Y, num2str(Rr)); %~ hold off; endif; Tit = sprintf("External 24-bit ADC, corrected"); xlabel("Time, s"); ylabel("R, ADU"); title(Tit); print -dpng -color ext_corr.png; close if(MF) % R = K*ADU -> K = ADU \ R Kmul = []; Kadd = []; for i = 11:18 dat = interp1(Time, D(:,i), T); N = [ ones(size(dat)) dat ]; K = N \ Rr; Kadd = [Kadd K(1)]; Kmul = [Kmul K(2)]; endfor %Kmul = median(Kmul); %Kadd = median(Rr - dat*Kmul); printf("coefficients: Kadd = %s, Kmul = %g\n", num2str(Kadd), Kmul); newR = D(:,[11:18]) .* Kmul + Kadd; plot(Time, newR); addlabels(Time, newR, T, Rr); Tit = sprintf("External 24-bit ADC, corrected"); xlabel("Time, s"); ylabel("R, Ohm"); title(Tit); print -dpng -color ext_corr_Ohm.png; endif endfunction function addlabels(Time, data, T, Rr) % % plot circles with R label % - Time - original time labels % - data - original data % - T - time labels for Rr % - Rr - measured resistance % meanline = mean(data')'; newDr = interp1(Time, meanline, T); %N = [ ones(size(Rr)) Rr Rr.^2]; N = [ ones(size(Rr)) Rr ]; K = N \ newDr %Y = Rr.^2 * K(3) + Rr * K(2) + K(1); Y = Rr * K(2) + K(1); hold on; plot(T, Y, '.'); text(T+10, Y, num2str(Rr)); %plot(Time, meanline, 'o'); hold off; endfunction