mirror of
https://github.com/eddyem/IR-controller.git
synced 2025-12-06 02:35:14 +03:00
121 lines
3.2 KiB
Matlab
121 lines
3.2 KiB
Matlab
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
|