Skip to content
Snippets Groups Projects
microcart_imu_analysis_1.m 2.25 KiB
Newer Older
% function microcart_imu_analysis_1

close all;  clc; 
filename = 'imu.csv';
delimiter = ',';
formatSpec = '%f%f%f%f%f%f%f%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN, 'ReturnOnError', false);
fclose(fileID);
t = dataArray{:, 1};
ax = dataArray{:, 2};
ay = dataArray{:, 3};
az = dataArray{:, 4};
gx = dataArray{:, 5};
gy = dataArray{:, 6};
gz = dataArray{:, 7};
clearvars filename delimiter formatSpec fileID dataArray ans;

% magnitude of acceleration in gs 
a = ( ax.^2 + ay.^2 + az.^2 ).^0.5 ; 

% magnitude of deviation from ideal 
ea1 = 1 - a ;

% magnitude of deviation from mean 
ea2 = a - mean(a) ; 

% RMS error 
ea1rms = sqrt(1/length(ea1)*(ea1')*ea1) ; 
ea2rms = sqrt(1/length(ea2)*(ea2')*ea2) ; 

subplot(3,1,1); 
plot(t, a , t , ones(length(t),1)); axis([min(t),max(t),min([a;1])-0.01,max([a;1])+0.01]); grid;
xlabel('Time (s)'); ylabel('Acceleration (gs)'); 
legend('Measured','Ideal'); 


subplot(3,1,2); 
plot(t, ea1 ); axis([min(t),max(t),min(ea1)-0.01,max(ea1)+0.01]); grid;
xlabel('Time (s)'); ylabel('Error From Ideal (gs)'); 

subplot(3,1,3); 
plot(t, ea2 ); axis([min(t),max(t),min(ea2)-0.01,max(ea2)+0.01]); grid;
xlabel('Time (s)'); ylabel('Error From Mean (gs)'); 

% 
figure; 
X = fft(ea2); 
N = length(ea2); 
fs = 1/(t(2)-t(1)); 
F = ([-N/2:N/2-1]/N)*fs; %frequency axis for plotting FFTs 
% subplot(2,1,1); 
plot(F,fftshift(abs(X))); grid; 
xlabel('frequency (Hz)');
ylabel(['|FFT(x)|']);
% subplot(2,1,2); 
% plot(F,20*log10(fftshift(abs(X)))); grid; 
% xlabel('frequency (Hz)');
% ylabel('|FFT(x)| dB');
suptitle('x = Error From Mean (gs)'); 


eax = ax - mean(ax); 

vx = var(ax); 
sigmax = sqrt(vx);  

figure; 

bins = unique(eax) ; 
dbins = bins(2)-bins(1); % the quantization levels consistent 

bins_right = bins + dbins/2; 
bins_left = bins - dbins/2; 
cgauss_right = normcdf(bins_right,0,sigmax); 
cgauss_left = normcdf(bins_left,0,sigmax); 

empf = length(eax)*(cgauss_right-cgauss_left); 
stairs(bins_left,empf,'r','LineWidth',1) ; 
xlabel('Error From Mean (gs)'); 
ylabel('Occurences'); 

grid; 
hold on; 
h = hist(eax,bins); 
stem(bins,h); 

legend(['Quantized Gaussian Noise: N(0,',num2str(vx),')'],'Emperical Distribution')


% quantized_accel_noise_gauss_anal( ax )