Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
% 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')

Matt Rich
committed
% quantized_accel_noise_gauss_anal( ax )