From 522e3abe048de988bc62edd6dc4899f9ae986a5f Mon Sep 17 00:00:00 2001
From: Tara Mina <Tara Mina>
Date: Thu, 6 Apr 2017 21:58:08 -0500
Subject: [PATCH] Added analysis code for IMU data and Simulink block for
 Mahony filter

---
 .../IMU_standstill/analyzeIMU_data.m          | 273 ++++++++++++++++++
 controls/model/mahony_filter.slx              | Bin 0 -> 22933 bytes
 2 files changed, 273 insertions(+)
 create mode 100644 controls/dataCollection/IMU_standstill/analyzeIMU_data.m
 create mode 100644 controls/model/mahony_filter.slx

diff --git a/controls/dataCollection/IMU_standstill/analyzeIMU_data.m b/controls/dataCollection/IMU_standstill/analyzeIMU_data.m
new file mode 100644
index 000000000..9d4429866
--- /dev/null
+++ b/controls/dataCollection/IMU_standstill/analyzeIMU_data.m
@@ -0,0 +1,273 @@
+function analyzeIMU_data( fileName )
+%UNTITLED2 Summary of this function goes here
+%   Detailed explanation goes here
+
+
+    IMU_dataDirectory = 'C:\Users\Tara\Desktop\Project Documents\Current Project Documents\EE 492\Data\IMU Data';
+    IMU_dataFile = [IMU_dataDirectory , '\' , fileName];
+    
+    IMU_data = readtable(IMU_dataFile);
+
+    g = 9.8;    %meters per second squared
+
+    %Set the column values of the table
+    timeCol = 1;
+    accelXCol = 2;
+    accelYCol = 3;
+    accelZCol = 4;
+    gyroXCol = 5;
+    gyroYCol = 6;
+    gyroZCol = 7;
+
+    %Pull the data columns into arrays
+    timeArray = IMU_data{:, timeCol};
+    accelXArray = IMU_data{:, accelXCol};
+    accelYArray = IMU_data{:, accelYCol};
+    accelZArray = IMU_data{:, accelZCol};
+    gyroXArray = IMU_data{:, gyroXCol};
+    gyroYArray = IMU_data{:, gyroYCol};
+    gyroZArray = IMU_data{:, gyroZCol};
+
+    %Get the mean and standard deviation of the accelerometer data and multiply
+    %by the g constant to get this value in meters per second
+    accelX_mean = mean(accelXArray) * g;
+    accelY_mean = mean(accelYArray) * g;
+    accelZ_mean = mean(accelZArray) * g
+    accelX_dev = std(accelXArray) * g;
+    accelY_dev = std(accelYArray) * g;
+    accelZ_dev = std(accelZArray) * g;
+
+    %Get mean and standard deviation of gyroscope data, which is in rad / sec
+    gyroX_mean = mean(gyroXArray);
+    gyroY_mean = mean(gyroYArray);
+    gyroZ_mean = mean(gyroZArray);
+    gyroX_dev = std(gyroXArray);
+    gyroY_dev = std(gyroYArray);
+    gyroZ_dev = std(gyroZArray);
+
+    %Calculate the variances from the standard deviations
+    accelX_var = accelX_dev ^ 2;
+    accelY_var = accelY_dev ^ 2;
+    accelZ_var = accelZ_dev ^ 2;
+    gyroX_var = gyroX_dev ^ 2;
+    gyroY_var = gyroY_dev ^ 2;
+    gyroZ_var = gyroZ_dev ^ 2;
+
+    %Print received data from accelerometer nicely to command prompt
+    disp( ' ' );
+    disp('Accelerometer data: ');
+    disp( [ 'X acceleration mean ( m / s^2 ): ' , num2str(accelX_mean) ] );
+    disp( [ 'Y acceleration mean ( m / s^2 ): ' , num2str(accelY_mean) ] );
+    disp( [ 'Z acceleration mean ( m / s^2 ): ' , num2str(accelZ_mean) ] );
+    disp( [ 'X acceleration standard deviation ( m / s^2 ): ' , num2str(accelX_dev) ] );
+    disp( [ 'Y acceleration standard deviation ( m / s^2 ): ' , num2str(accelY_dev) ] );
+    disp( [ 'Z acceleration standard deviation ( m / s^2 ): ' , num2str(accelZ_dev) ] );
+    disp( [ 'X acceleration variance ( (m/s^2) ^ 2 ): ', num2str(accelX_var) ] );
+    disp( [ 'Y acceleration variance ( (m/s^2) ^ 2 ): ', num2str(accelY_var) ] );
+    disp( [ 'Z acceleration variance ( (m/s^2) ^ 2 ): ', num2str(accelZ_var) ] );
+    disp( ' ' );
+
+
+    %Print received data from gyroscope nicely to command prompt
+    disp('Gyroscope data: ');
+    disp( [ 'Angular velocity about X mean ( rad / s ): ' , num2str(gyroX_mean) ] );
+    disp( [ 'Angular velocity about Y mean ( rad / s ): ' , num2str(gyroY_mean) ] );
+    disp( [ 'Angular velocity about Z mean ( rad / s ): ' , num2str(gyroZ_mean) ] );
+    disp( [ 'Angular velocity about X standard deviation ( rad / s ): ' , num2str(gyroX_dev) ] );
+    disp( [ 'Angular velocity about Y standard deviation ( rad / s ): ' , num2str(gyroY_dev) ] );
+    disp( [ 'Angular velocity about Z standard deviation ( rad / s ): ' , num2str(gyroZ_dev) ] );
+    disp( [ 'Angular velocity about X variance ( (rad/s) ^ 2 ): ', num2str(gyroX_var) ] );
+    disp( [ 'Angular velocity about Y variance ( (rad/s) ^ 2 ): ', num2str(gyroY_var) ] );
+    disp( [ 'Angular velocity about Z variance ( (rad/s) ^ 2 ): ', num2str(gyroZ_var) ] );
+    disp( ' ' );
+
+%     %Graph plots:
+%     figure();
+%     plot(timeArray, accelXArray * g);
+%     title('X Acceleration Data ( m / s^2 )');
+%     xlabel('Time (s)');
+% 
+%     figure();
+%     plot(timeArray, accelYArray * g);
+%     title('Y Acceleration Data ( m / s^2 )');
+%     xlabel('Time (s)');
+% 
+%     figure();
+%     plot(timeArray, accelZArray * g);
+%     title('Z Acceleration Data ( m / s^2 )');
+%     xlabel('Time (s)');
+% 
+%     figure();
+%     plot(timeArray, gyroXArray);
+%     title('Angular Velocity about X Data (rad/s)');
+%     xlabel('Time (s)');
+% 
+%     figure();
+%     plot(timeArray, gyroYArray);
+%     title('Angular Velocity about Y Data (rad/s)');
+%     xlabel('Time (s)');
+% 
+%     figure();
+%     plot(timeArray, gyroZArray);
+%     title('Angular Velocity about Z Data (rad/s)');
+%     xlabel('Time (s)');
+% 
+% 
+%     %Get the magnitude of the accelerometer data
+%     mag_accel = sqrt( accelXArray.^2 + accelYArray.^2 + accelZArray.^2 ) * g;
+%     mag_accel_mean = mean( mag_accel );
+%     mag_accel_dev = std( mag_accel );
+%     mag_accel_var = mag_accel_dev ^ 2;
+% 
+%     %Display these results and graph them
+%     disp( ['Magnitude of acceleration vector mean ( m / s^2 ): ' , num2str(mag_accel_mean) ] );
+%     disp( ['Magnitude of acceleration vector standard deviation ( m / s^2 ): ' , num2str(mag_accel_dev) ] );
+%     disp( ['Magnitude of acceleration vector variance ( ( m/s^2 )^2 ): ' , num2str(mag_accel_var) ] );
+%     figure();
+%     plot( timeArray, mag_accel, 'b' );
+%     hold on;
+%     plot( timeArray, ones(1, length(timeArray)) * g , 'r-' );
+%     title('Magnitude of Acceleration Vector with Respect to Nominal ( m / s^2 )');
+%     xlabel('Time (s)');
+%     legend( 'Accel Mag Measured' , 'Accel Mag Nominal' );
+% 
+%     %Also graph the percent error
+%     mag_accel_percentError = abs(mag_accel - g) / g * 100;
+%     figure();
+%     plot( timeArray, mag_accel_percentError);
+%     title('Magnitude of Acceleration Vector Percent Error from Nominal (%) ');
+%     xlabel('Time (s)');
+%     ylabel('Percent Error (%)');
+% 
+%     mag_accel_percentError_mean = mean( mag_accel_percentError );
+%     mag_accel_percentError_dev = std( mag_accel_percentError );
+% 
+%     disp(' ');
+%     disp( ['Percent error from nominal mean ( % ): ' , num2str(mag_accel_percentError_mean) ] );
+%     disp( ['Percent error from nominal standard deviation ( % ): ' , num2str(mag_accel_percentError_dev) ] );
+%     disp(' ');
+
+
+
+
+
+    %Following example given in MATLAB help
+    %Looking at the frequency response characterisitcs of the noise
+    timeArray_diff = diff( timeArray );
+    timeArray_diffMean = mean( timeArray_diff ); %seconds
+    fs = 1 / timeArray_diffMean;
+
+    %Get the fast fourier transform
+    accelX_fft = fft( accelXArray*g - accelX_mean );
+    accelY_fft = fft( accelYArray*g - accelY_mean );
+    accelZ_fft = fft( accelZArray*g - accelZ_mean );
+    gyroX_fft = fft( gyroXArray - gyroX_mean );
+    gyroY_fft = fft( gyroYArray - gyroY_mean );
+    gyroZ_fft = fft( gyroZArray - gyroZ_mean );
+
+    %Determine the length of our data and obtain only first half of FFT data
+    N = length(timeArray);
+    accelX_fft = accelX_fft( 1:N/2+1 );
+    accelY_fft = accelY_fft( 1:N/2+1 );
+    accelZ_fft = accelZ_fft( 1:N/2+1 );
+    gyroX_fft = gyroX_fft( 1:N/2+1 );
+    gyroY_fft = gyroY_fft( 1:N/2+1 );
+    gyroZ_fft = gyroZ_fft( 1:N/2+1 );
+
+    %Get the power spectral density of the signal
+    accelX_PSD = ( 1 / (2*pi*N) ) * abs( accelX_fft ) .^ 2;
+    accelY_PSD = ( 1 / (2*pi*N) ) * abs( accelY_fft ) .^ 2;
+    accelZ_PSD = ( 1 / (2*pi*N) ) * abs( accelZ_fft ) .^ 2;
+    gyroX_PSD = ( 1 / (2*pi*N) ) * abs( gyroX_fft ) .^ 2;
+    gyroY_PSD = ( 1 / (2*pi*N) ) * abs( gyroY_fft ) .^ 2;
+    gyroZ_PSD = ( 1 / (2*pi*N) ) * abs( gyroZ_fft ) .^ 2;
+
+    %Multiply everything but the first and last term by 2
+    accelX_PSD(2:end-1) = 2*accelX_PSD(2:end-1);
+    accelY_PSD(2:end-1) = 2*accelY_PSD(2:end-1);
+    accelZ_PSD(2:end-1) = 2*accelZ_PSD(2:end-1);
+    gyroX_PSD(2:end-1) = 2*gyroX_PSD(2:end-1);
+    gyroY_PSD(2:end-1) = 2*gyroY_PSD(2:end-1);
+    gyroZ_PSD(2:end-1) = 2*gyroZ_PSD(2:end-1);
+
+    %Get the frequency range vector
+    freq = 0:(2*pi)/N:pi;
+
+    %Show the plots of the power spectral density in the log domain
+    figure();
+    plot( freq/pi, 10*log10(accelX_PSD) );
+    %plot( freq/pi, accelX_PSD, '*' );
+    title('Periodogram of X Acceleration Data Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+    %ylabel('Power Frequency');
+
+    figure();
+    plot( freq/pi, 10*log10(accelY_PSD) );
+    title('Periodogram of Y Acceleration Data Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+
+    figure();
+    plot( freq/pi, 10*log10(accelZ_PSD) );
+    title('Periodogram of Z Acceleration Data Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+
+    figure();
+    plot( freq/pi, 10*log10(gyroX_PSD) );
+    title('Periodogram of Angular Velocity about X Data Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+
+    figure();
+    plot( freq/pi, 10*log10(gyroY_PSD) );
+    title('Periodogram of Angular Velocity about Y Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+
+    figure();
+    plot( freq/pi, 10*log10(gyroZ_PSD) );
+    title('Periodogram of Angular Velocity about Z Using FFT');
+    xlabel('Normalized Frequency (\times\pi rad/sample)');
+    ylabel('Power Frequency (dB/rad/sample)');
+
+
+
+    %Estimate the average power spectral density, ignoring the first value
+    accelX_PSD_mean = mean( accelX_PSD(2:end) );
+    accelX_PSD_mean_dB = 10*log10( accelX_PSD_mean );
+    accelY_PSD_mean = mean( accelY_PSD(2:end) );
+    accelY_PSD_mean_dB = 10*log10( accelY_PSD_mean );
+    accelZ_PSD_mean = mean( accelZ_PSD(2:end) );
+    accelZ_PSD_mean_dB = 10*log10( accelZ_PSD_mean );
+    gyroX_PSD_mean = mean( gyroX_PSD(2:end) );
+    gyroX_PSD_mean_dB = 10*log10( gyroX_PSD_mean );
+    gyroY_PSD_mean = mean( gyroY_PSD(2:end) );
+    gyroY_PSD_mean_dB = 10*log10( gyroY_PSD_mean );
+    gyroZ_PSD_mean = mean( gyroZ_PSD(2:end) );
+    gyroZ_PSD_mean_dB = 10*log10( gyroZ_PSD_mean );
+
+    %Display the average power spectral densities in dB
+    disp( ' ' );
+    disp( [ 'Average PSD for X Acceleration Data Noise (dB): ' , num2str(accelX_PSD_mean_dB) ] );
+    disp( [ 'Average PSD for Y Acceleration Data Noise (dB): ' , num2str(accelY_PSD_mean_dB) ] );
+    disp( [ 'Average PSD for Z Acceleration Data Noise (dB): ' , num2str(accelZ_PSD_mean_dB) ] );
+    disp( [ 'Average PSD for Angular Velocity about X Data Noise (dB): ' , num2str(gyroX_PSD_mean_dB) ] );
+    disp( [ 'Average PSD for Angular Velocity about Y Data Noise (dB): ' , num2str(gyroY_PSD_mean_dB) ] );
+    disp( [ 'Average PSD for Angular Velocity about Z Data Noise (dB): ' , num2str(gyroZ_PSD_mean_dB) ] );
+    disp( ' ' );
+
+    disp( ' ' );
+    disp( [ 'Average PSD for X Acceleration Data Noise : ' , num2str(accelX_PSD_mean) ] );
+    disp( [ 'Average PSD for Y Acceleration Data Noise : ' , num2str(accelY_PSD_mean) ] );
+    disp( [ 'Average PSD for Z Acceleration Data Noise : ' , num2str(accelZ_PSD_mean) ] );
+    disp( [ 'Average PSD for Angular Velocity about X Data Noise : ' , num2str(gyroX_PSD_mean) ] );
+    disp( [ 'Average PSD for Angular Velocity about Y Data Noise : ' , num2str(gyroY_PSD_mean) ] );
+    disp( [ 'Average PSD for Angular Velocity about Z Data Noise : ' , num2str(gyroZ_PSD_mean) ] );
+    disp( ' ' );
+
+
+
+end
+
diff --git a/controls/model/mahony_filter.slx b/controls/model/mahony_filter.slx
new file mode 100644
index 0000000000000000000000000000000000000000..df7f4d681d0169f6630f5a48695e21cf85f1de8b
GIT binary patch
literal 22933
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
O^k)kF_UQC}KK&QHP4?LU

literal 0
HcmV?d00001

-- 
GitLab