Viewing Sensor Data
- Connect MATLAB Mobile to your computer with the MATLAB Connector. This feature is only supported on MATLAB R2014a and later, so make sure you are on a compatible version.
- Install the MATLAB Support Package for Android Sensors. Choose Add-ons from the MATLAB Toolstrip, and then choose Get Hardware Support Packages. This will open the support package installer. Choose Android Sensors from the list and follow the instructions.
- To establish communication between the sensors on your device and MATLAB, create a mobiledev object, as follows:
m = mobiledev;
Step 1: Turn on the Accelerometer
Once you have completed the 3 steps from the above section, go to MATLAB Mobile and turn on the accelerometer. You should see something akin to this:
You can also enable the sensor directly from MATLAB, by executing the following command:
m.AccelerationSensorEnabled = 1;Step 2: Send Data to MATLAB
Did you notice the enabled Start Sending button towards the bottom of your screen? Tap on it, and voila! You are now sending data to MATLAB. Alternatively, you can start sending data directly from MATLAB, through the following command:
m.Logging = 1;You can verify this in MATLAB, note the Current Sensor Values in the result:
m = mobiledev with properties: Connected: 1 Logging: 1 InitialTimestamp: '02-Oct-2014 21:53:26.707' AccelerationSensorEnabled: 1 (20 Logged values) AngularVelocitySensorEnabled: 0 MagneticSensorEnabled: 0 OrientationSensorEnabled: 0 PositionSensorEnabled: 0 Current Sensor Values: Acceleration: [0.2631 5.9226 8.1850] (m/s^2)Step 3: Stop Acquiring Data and Retrieve Logs
Walk around your campus/home/floor with your device. Once you are satisfied, stop sending this data to MATLAB. You can either tap on the Stop Sending button on MATLAB Mobile, or issue the following command in MATLAB:
m.Logging = 0;To retrieve the data, use the accellog variable:
[a, t] = accellog(m);Step 4: Plot Raw Sensor Data
Once you have retrieved the logged acceleration data, you can plot it in MATLAB:
plot(t, a); legend('X', 'Y', 'Z'); xlabel('Relative time (s)'); ylabel('Acceleration (m/s^2)');
Calculate the magnitude to convert your X, Y and Z vectors to scalar values. Then, plot it.
x = a(:,1); y = a(:,2); z = a(:,3); % Calculate and plot magnitude. mag = sqrt(sum(x.^2 + y.^2 + z.^2, 2)); plot(t, mag); xlabel('Time (s)'); ylabel('Acceleration (m/s^2)');
To remove constant effects such as gravity, you can subtract the mean from this data.
% Accounting for gravity. magNoG = mag - mean(mag); % Plot magnitude. plot(t, magNoG); xlabel('Time (s)'); ylabel('Acceleration (m/s^2)');
The plotted data is now centered on zero, and shows peaks which correspond to a step taken while walking.
Step 5: Count Number of Steps Taken
To determine the number of steps taken, you can use to FINDPEAKS function from Signal Processing Toolbox. In this example, we are treating only peaks with a minimum height above one standard deviation as a step. This threshold should be tuned experimentally to match a person’s level of movement while walking, hardness of floor surfaces etc.
% Use FINDPEAKS to determine the local maxima. minPeakHeight = std(magNoG); [pks, locs] = findpeaks(magNoG, 'MINPEAKHEIGHT', minPeakHeight);The number of steps taken is the number of peaks:
numSteps = numel(pks)
numSteps = 15Finally, you can also identify these locations on your plot of acceleration magnitude data:
hold on; % Place a red marker on the locations that correspond to peaks. plot(t(locs), pks, 'r', 'Marker', 'v', 'LineStyle', 'none'); title('Counting Steps'); xlabel('Time (s)'); ylabel('Acceleration Magnitude, Gravity Removed (m/s^2)'); hold off;
Step 6: Clean Up
Once you are done, make sure you turn off the acceleration sensor and clear the mobiledev object.
m.AccelerationSensorEnabled = 0; clear m;
- Acquiring Data from Sensors - MATLAB Mobile
- Android Sensor Support from MATLAB
- Documentation for mobiledev Object
Let us know by leaving a comment below.
Published with MATLAB® R2014b
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.