code:fit
This is an old revision of the document!
Gnu Octave calibration routine
This is a spheroid fitter for obtaining sensor bias and gain for each axis of an accelerometer or magnetometer given a set of sample data.
function bias_gain=nr_fit() fp=fopen('rpy90bothways.TXT','r'); data=fscanf(fp,'%f %f %f %f %f %f %f %f %f %f',[10,inf]); accel=data(5:7,:); datalenght=size(data)(2); bias_gain=[1;1;1;0;0;0]; err_mean=1; correction=zeros(6,1); while(err_mean>0.02) err_mean fflush(stdout); err_mean=0; correction_total=zeros(6,1); for(i=1:datalenght) measured=[bias_gain(1),0,0;0,bias_gain(2),0;0,0,bias_gain(3)]*(accel(1:3,i)-bias_gain(4:6)); erro=1-dot(measured,measured); correction+=[2*bias_gain(1)*(accel(1,i)-bias_gain(4))^2;2*bias_gain(2)*(accel(2,i)-bias_gain(5))^2;2*bias_gain(3)*(accel(3,i)-bias_gain(6))^2;-2*bias_gain(1)^2*(accel(1,i)-bias_gain(4));-2*bias_gain(2)^2*(accel(2,i)-bias_gain(5));-2*bias_gain(3)^2*(accel(3,i)-bias_gain(6))]; correction*=erro/(datalenght*dot(correction,correction)); err_mean+=abs(erro)/datalenght; correction_total+=correction; endfor bias_gain+=correction_total; endwhile bias_gain(1)=abs(1/bias_gain(1)); bias_gain(2)=abs(1/bias_gain(2)); bias_gain(3)=abs(1/bias_gain(3)); bias_gain(4)*=-1; bias_gain(5)*=-1; bias_gain(6)*=-1; endfunction
code/fit.1264248310.txt.gz · Last modified: 2010/01/23 12:05 by laurenceb