Part A is worth 0.5 marks. Part B is worth 1.5 marks. The online assessment is on curve fitting, and can be done at any time.
A separation process accepts a mixture of water, ethanol and methanol in
certain proportions, and produces two output streams, each with particular
proportions of the component liquids.
The input flow of the combined liquids is 100 L/min, and the output flows are the unknowns b and c. The proportions in each stream are shown in the yellow boxes.The output proportions are known, as is the input proportion of water. The proportion of ethanol in the input stream is the third unknown x.
Since the input and output flow of each material must match, we can
devise three equations in the three unknowns:
Then solve the equations using matrix left division:
x = A \ b
You might have heard of the recommendation that we should walk at least 10,000 steps per day to stay healthy. Some people use Fitbit, pedometers or smartphone apps to keep track of the number of steps they walk per day. Have you ever wondered how these devices and applications work? In order to count the number of steps, you need both hardware and software. In Fitbit, pedometers and smartphones, there is a common piece of hardware called the accelerometer, which as its name suggests, measures acceleration. The acceleration can tell you a lot. You may recall the following slide from Week 2's lecture:
The slide shows acceleration in the vertical axis and time (in minutes) is in the horizontal axis. Note that acceleration has 3 directions (in x-, y- and z-directions) and they are plotted in three different colours in the slide. The acceleration data in this graph was collected by an ENGG1811 lecturer (CTC, if you wish to know) using his smartphone during his commute to work. By processing this data, you can count how many steps he walked during this particular commute.
Note that these acceleration data were collected in a trip consisting of walking, train and bus rides. So the first part of data processing is to identify which sections of data correspond to walking. Once the walking sections have been identified, the second part of the data processing is to count the number of steps in those sections. The process of counting the number of steps is fairly similar to that of counting the number heart beats, which you have done in Week 1. So, in this lab, we won't be counting steps but we will focus on determining which sections of the data correspond to walking.
Fitbit and smartphone apps use fairly sophisticated algorithms for data processing. In this lab, you will use a basic algorithm to decide whether a person is walking in a certain time interval or not. The basic idea is to look at the acceleration over a short time interval. The figure below, which consists of two sub-plots (produced by using the matlab command subplot), shows the acceleration when the person was walking and not walking over a time interval of about 6 seconds. Note that the y-axes of the two sub-plots have the same scale. If the person was not walking (the sub-plot on the right), the acceleration varied around the value of 9. However, when the person was walking, the acceleration varied between 4 and 20. Hence, a way to distinguish between walking and non-walking is to say: walking corresponds to large variation in acceleration and non-walking corresponds to smaller variation of acceleration. There are many ways to measure variation. In this lab, we will use variance. If we calculate of the variance of the walking and non-walking data in the sub-plots below, we get 20.85 and 0.04 respectively. So, one key point that you need to use later on is this: large variation in acceleration means walking and vice versa.
You are provided with a matlab mat file named accdata.mat. The file contains a variable matData which is a matrix with 49910 rows and 4 columns.
Let us inspect the contents of the first 8 rows of the matrix matData
>> matData(1:8,:) ans = 0 0.7219 3.6775 12.2583 0.0990 1.1169 2.7922 9.5751 0.1990 0.1090 3.3778 7.3958 0.2960 0.1090 3.2144 6.9736 0.3990 -3.9499 3.5277 10.0382 0.5090 -9.6160 3.1463 6.7829 0.6090 -10.1472 0.2724 5.1349 0.7090 -8.8124 0.8853 3.9090
The first column is time (in seconds); the second, third and fourth columns are respectively the accelerations (in m/s^2) in the x-, y- and z-directions.
The first row of data is
0 0.7219 3.6775 12.2583which means that at time 0, the accelerations in the x-, y- and z-directions were 0.7219, 3.6775 and 12.2583.
0.1990 0.1090 3.3778 7.3958
which means that at time 0.1990, the accelerations in the x-, y- and z-directions were 0.1090, 3.3778 and 7.3958.
You can see that the numbers in the first column are 0, 0.0990, 0.1990,
0.2960 and so on, this means that the accelerometer was trying to measure
the accelerations in the three directions roughly every 0.1 seconds, or
about 10 samples per seconds.
You are asked to do your work in a script so that you can show your tutor later on. We have divided the work into four sub-parts B1, B2, B3 and B4.
The first part of your script is shown below. A couple of steps have been
done for you and the comments are there to help you to understand what the
steps are. The places that say "Your task" contain the work that
you have to do. Some further explanation is below the yellow box.
% ENGG1811 Lab 11 % Part B: Processing acceleration data
% Constants THERSHOLD = 0.5; % Threshold to separate walking from non-walking % Load the data file load accdata % The file contains one variable called matData
% The matrix matData has 49910 rows and 4 columns.
% You should check the size of the matrix to confirm % % Column 1: The time at which the acceleration is measured % Column 2: Acceleration in x-axis % Column 3: Acceleration in y-axis % Column 4: Acceleration in z-axis % Your task: Create a vector vecTime which contains the first column of the % the matrix matData
% Note that you will only be using the vector vecTime for plotting,
% you won't be using this vector for calculations vecTime = % You to complete % Your task: Create a matrix called matAcc3Axes which contains columns 2-4 of % the matrix matData matAcc3Axes = % You to complete % Your task: Plot the accelerations in the three axes against time
% The plot should use xlabel, ylabel and caption
% You can use the plot in the lecture slide shown above as a sample
% If you do not know how to use xlabel, ylabel, caption, look at the help page
% From the beginning of the course, we have stressed that it is always
% good to plot the data to have a look, so that's why we ask you to plot
% Your task: Calculate the total acceleration (See explanation below)
% You can store the result in a vector called vecAccTotal
% Note: You shouldn't use any loops.
% Your task: Plot the total acceleration against time
% The plot should use xlabel, ylabel
Here we explain the meaning of total acceleration. We assume you have the matrix matAcc3Axes which is a matrix with 3 columns. The three elements at each row of the matrix is the acceleration in the x-, y- and z-directions at a particular time instance. The matrix matAcc3Axes has the form
then the total acceleration is the following vector
You should use array operations and vectorisation to calculate the total acceleration. No loops should be used.
Let us assume that you store the total acceleration in a vector called vevAccTotal. This vector has 49910 rows. (You may wish to check the size of the vector to confirm.) We will partition the elements in this vector into segments where each segment contains 60 elements. With this partition, we have:
Since each segment contains 60 elements (or data points), and acceleration data were collected once per 0.1 seconds, each segment contains roughly 6 seconds of acceleration data. For each segment, you should compute the variance of the total acceleration in the segment. If the variance is greater than or equal to a threshold (i.e. if the variance is big) then the person was walking during this time segment; otherwise, the person was not walking. The threshold you should use is 0.5 and it is specified in the beginning of the script shown in Part B1.
You should output your answer in a vector with numSegments elements. The k-th element of this vector is 1 if Segment k corresponds to walking; otherwise the k-th element should be 0.
We will use a small example to illustrate the calculations. Let us assume that the transpose of vevAccTotal is a vector with 14 elements shown below and each segment contains 3 elements. (Note you will use 60 elements per segment for you calculation, but for illustration, we need to use a much smaller number.)
The total accelerations in Segment 1 are 2, 20 and 2. The variance of 2, 20 and 2 is 108, which is at or above the threshold of 0.5, so this is walking. Similarly:
The output should be in a vector with 4 elements because there are 4 complete segments. The output in this case should be the vector
[1 0 0 1]
because Segments 1 and 4 correspond to walking. Note that the elements 6 and 7 are not used because they do not form a complete segment.
For Part B2, you should use an implementation that uses loops.
You will find that, out of a total of 831 complete intervals, 265 of them are walking intervals.
For Part B3, you should do the calculations stated in Part B2 but your implementation should NOT use any loops.
You will need to use the var function in Matlab to calculate variance. You can look at the documentation on how to use this function.
You can use any methods you like as long as they meet the above requirements. For this part, you need to come out with two different methods.
Some functions or operators that you may find useful: any, all, sum, ~, ==, ~=, -.