final code? working on reports
This commit is contained in:
parent
ac791ce418
commit
d93a980ed5
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
obj_*
|
||||
*~
|
||||
*~
|
||||
*#*
|
BIN
Coursework-Reports/12to1.jpg
Normal file
BIN
Coursework-Reports/12to1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 189 KiB |
BIN
Coursework-Reports/12to12.jpg
Normal file
BIN
Coursework-Reports/12to12.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 219 KiB |
BIN
Coursework-Reports/12to3.jpg
Normal file
BIN
Coursework-Reports/12to3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 188 KiB |
BIN
Coursework-Reports/SaxBy2,4Break.png
Normal file
BIN
Coursework-Reports/SaxBy2,4Break.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 57 KiB |
BIN
Coursework-Reports/SaxBy4,4Break.png
Normal file
BIN
Coursework-Reports/SaxBy4,4Break.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
@ -123,7 +123,7 @@ LatexCommand lstlistoflistings
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/coursework.c"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={Main coursework program: 2 processes for reading and aggregating data}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt},caption={Main coursework program: 2 processes for reading and aggregating data}"
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -141,7 +141,7 @@ lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentst
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/buffer.h"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={Buffer header file: get, free and manipulate buffers}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt},caption={Buffer header file: get, free and manipulate buffers}"
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -156,7 +156,7 @@ lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentst
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/sax.h"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={SAX header file: z-normalise and stringify buffers}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt},caption={SAX header file: z-normalise and stringify buffers}"
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -171,7 +171,7 @@ lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentst
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/math.h"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={Math header file: mean, standard deviation, implementations of ceil, sqrt}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt},caption={Math header file: mean, standard deviation, implementations of ceil, sqrt}"
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -186,7 +186,7 @@ lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentst
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/io.h"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={IO header file: init function for starting sensors}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt},caption={IO header file: init function for starting sensors}"
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -201,7 +201,7 @@ lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentst
|
||||
\begin_inset CommandInset include
|
||||
LatexCommand lstinputlisting
|
||||
filename "../Coursework/util.h"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},caption={Other utilities: short and float printing functions from earlier labs}"
|
||||
lstparams "breaklines=true,frame=tb,language=C,basicstyle={\\ttfamily},commentstyle={\\color{commentgreen}\\itshape},keywordstyle={\\color{blue}},emphstyle={\\color{red}},stringstyle={\\color{red}},identifierstyle={\\color{cyan}},otherkeywords={PROCESS_THREAD, PROCESS_BEGIN, PROCESS_END, etimer_set, process_alloc_event, initIO, getBuffer, PROCESS_WAIT_EVENT, PROCESS_WAIT_EVENT_UNTIL, leds_off, leds_on, getLight, printf, putFloat, putchar, process_post, etimer_reset, etimer_stop, handleSAXBufferRotation, handleSimpleBufferRotation, free, freeBuffer, calculateStdDev, handleFinalBuffer, ceil, normaliseBuffer, aggregateBuffer, printBuffer, stringifyBuffer, swapBufferMemory, malloc, calculateMean, valueToSAXChar, sqrt, putShort},caption={Other utilities: short and float printing functions from earlier labs}"
|
||||
|
||||
\end_inset
|
||||
|
||||
|
Binary file not shown.
@ -36,7 +36,7 @@ customHeadersFooters
|
||||
\output_sync 0
|
||||
\bibtex_command default
|
||||
\index_command default
|
||||
\paperfontsize default
|
||||
\paperfontsize 10
|
||||
\spacing single
|
||||
\use_hyperref true
|
||||
\pdf_title "IoT Aggregation Algorithm Coursework"
|
||||
@ -117,21 +117,224 @@ Andy Pack / 6420013
|
||||
Description
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
Symbolic Aggregation Approximation (SAX) was implemented as an in-network
|
||||
data processing technique, compressing the representation while allowing
|
||||
further processing on this symbolic string.
|
||||
Figure
|
||||
\begin_inset CommandInset ref
|
||||
LatexCommand ref
|
||||
reference "fig:Demonstration-of-SAX"
|
||||
plural "false"
|
||||
caps "false"
|
||||
noprefix "false"
|
||||
|
||||
\end_inset
|
||||
|
||||
shows two rounds of SAX output following data collection, a window size
|
||||
of 2 was used and an alphabet of length 4, i.e the characters
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
a
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
through
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
d
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
inclusive.
|
||||
12 C
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
floats
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
total 48 bytes of data, this can be reduced by a factor of 4 using
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
char
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
representation instead, a window size of 2 halves the number of output
|
||||
samples and lowers the required memory to just 6 bytes.
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Section
|
||||
Specification
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
SAX is implemented in two separate steps, that of transforming the time-series
|
||||
into Piecewise Aggregate Approximation (PAA) representation and then representi
|
||||
ng this numeric series with a symbolic alphabet.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Subsection
|
||||
PAA
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
The standard deviation and mean of the data series were first calculated,
|
||||
these are required for Z-normalisation.
|
||||
This normalisation process takes a series of data and transforms it into
|
||||
one with a mean of 0 and a standard deviation of 1.
|
||||
This changes the context of the value from being measured in lux to being
|
||||
a measure of a samples distance from the mean, 0, in standard deviations.
|
||||
This allows comparison of different time-series.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
Following Z-normalisation, the size of the series is reduced by applying
|
||||
a windowing function.
|
||||
This takes subsequent equally-sized groups of samples and reduces the group
|
||||
to the mean of those values.
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
As a result of these two actions, the original time series has been reduced
|
||||
to a given length of samples with a mean of 0 and standard deviation of
|
||||
1.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Subsection
|
||||
SAX
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
With the result of the above, the remaining step is to replace each sample
|
||||
value with a symbol to represent it.
|
||||
The amount of symbols to be used is given, each will represent the same
|
||||
probability range when considering a Gaussian distribution of mean 0 and
|
||||
standard deviation of 1.
|
||||
This can be achieved by using standard deviation breakpoints defined such
|
||||
that the area under Gaussian curve between breakpoints is the same.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Section
|
||||
Implementation
|
||||
\end_layout
|
||||
|
||||
\begin_layout Section
|
||||
Output
|
||||
\begin_layout Standard
|
||||
The SAX functionality was added as an alternative buffer rotating mechanism
|
||||
over the original 12-to-1/4-to-1/12-to-12 aggregation system.
|
||||
The length of the output buffer is calculated such that it can be allocated.
|
||||
From here the input buffer is Z-normalised using the
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
normaliseBuffer(buffer)
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
function from the
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
buffer.h
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
header.
|
||||
This function iterates over each value in the buffer, subtracts the buffer's
|
||||
mean and then divides by the standard deviation.
|
||||
Following this, the buffer is aggregated using the same 4-to-1 aggregation
|
||||
function
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
aggregateBuffer(bufferIn, bufferOut, groupSize)
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
as the group size is variable.
|
||||
The output from this function represents the PAA form of the initial data
|
||||
series.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
This final buffer is handled using
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
handleFinalBuffer(buffer)
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
where a pre-processor directive checks whether SAX is being used.
|
||||
If so the PAA buffer is
|
||||
\emph on
|
||||
stringified
|
||||
\emph default
|
||||
using
|
||||
\begin_inset listings
|
||||
lstparams "basicstyle={\ttfamily}"
|
||||
inline true
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
|
||||
stringifyBuffer(buffer)
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
which performs the SAX symbolic representation.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
\begin_inset Float figure
|
||||
placement h
|
||||
wide false
|
||||
sideways false
|
||||
status open
|
||||
@ -139,8 +342,8 @@ status open
|
||||
\begin_layout Plain Layout
|
||||
\align center
|
||||
\begin_inset Graphics
|
||||
filename SaxBy2,10Break.png
|
||||
width 100col%
|
||||
filename SaxBy2,4Break.png
|
||||
width 30col%
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -152,7 +355,14 @@ status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Demonstration of SAX aggregation with window size of 2 and alphabet of length
|
||||
10
|
||||
4
|
||||
\begin_inset CommandInset label
|
||||
LatexCommand label
|
||||
name "fig:Demonstration-of-SAX"
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
Binary file not shown.
@ -113,8 +113,31 @@ November 2020
|
||||
Andy Pack / 6420013
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
\begin_inset FloatList figure
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
\begin_inset VSpace defskip
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
|
||||
\emph on
|
||||
Standard deviation thresholds of 400 for some activity and 1,000 for high
|
||||
activity.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
\begin_inset Float figure
|
||||
placement bh
|
||||
wide false
|
||||
sideways false
|
||||
status open
|
||||
@ -122,8 +145,9 @@ status open
|
||||
\begin_layout Plain Layout
|
||||
\align center
|
||||
\begin_inset Graphics
|
||||
filename NonSaxAggregate.png
|
||||
width 100col%
|
||||
filename 12to1.jpg
|
||||
lyxscale 50
|
||||
width 80col%
|
||||
|
||||
\end_inset
|
||||
|
||||
@ -134,7 +158,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Demonstration of 4-into-1 aggregation taking place following moderate activity
|
||||
Demonstration of 12-into-1 aggregation for little activity
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
@ -156,7 +180,8 @@ status open
|
||||
\begin_layout Plain Layout
|
||||
\align center
|
||||
\begin_inset Graphics
|
||||
filename NonSaxWithRed.png
|
||||
filename 12to3.jpg
|
||||
lyxscale 50
|
||||
width 100col%
|
||||
|
||||
\end_inset
|
||||
@ -168,9 +193,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Demonstration of both no aggregation for high activity (First output) and
|
||||
tight 12-into-1 average for little activity (Last output), red LED on as
|
||||
aggregation occurs
|
||||
Demonstration of 4-into-1 aggregation for moderate activity
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
@ -192,7 +215,8 @@ status open
|
||||
\begin_layout Plain Layout
|
||||
\align center
|
||||
\begin_inset Graphics
|
||||
filename SaxBy2,10Break.png
|
||||
filename 12to12.jpg
|
||||
lyxscale 50
|
||||
width 100col%
|
||||
|
||||
\end_inset
|
||||
@ -204,8 +228,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Demonstration of SAX aggregation with window size of 2 and alphabet of length
|
||||
10
|
||||
Demonstration of no aggregation for high activity
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,7 @@
|
||||
#define INITIAL_STATE true // whether begins running or not
|
||||
|
||||
#define SAX // use sax aggregation and transform instead of simple average aggregation
|
||||
#define SAX_BREAKPOINTS 10 // number of characters to be used
|
||||
#define SAX_BREAKPOINTS 4 // number of characters to be used
|
||||
|
||||
#include "contiki.h"
|
||||
|
||||
@ -35,15 +35,13 @@ PROCESS_THREAD(sensing_process, ev, data)
|
||||
/*INIT*/
|
||||
PROCESS_BEGIN();
|
||||
|
||||
static bool isRunning = INITIAL_STATE;
|
||||
static struct etimer timer;
|
||||
etimer_set(&timer, CLOCK_SECOND/READING_INTERVAL);
|
||||
if(isRunning) etimer_set(&timer, CLOCK_SECOND/READING_INTERVAL); // start timer if running
|
||||
|
||||
event_buffer_full = process_alloc_event();
|
||||
|
||||
initIO();
|
||||
|
||||
static bool isRunning = INITIAL_STATE;
|
||||
|
||||
static Buffer buffer;
|
||||
buffer = getBuffer(BUFFER_SIZE);
|
||||
/*END INIT*/
|
||||
@ -54,23 +52,20 @@ PROCESS_THREAD(sensing_process, ev, data)
|
||||
PROCESS_WAIT_EVENT();
|
||||
|
||||
if (ev == PROCESS_EVENT_TIMER){
|
||||
if (isRunning == true) {
|
||||
leds_off(LEDS_RED);
|
||||
|
||||
float light_lx = getLight(); // GET
|
||||
leds_off(LEDS_RED);
|
||||
|
||||
float light_lx = getLight(); // GET
|
||||
|
||||
buffer.items[counter] = light_lx; // STORE
|
||||
|
||||
printf("%2i/%i: ", counter + 1, buffer.length);putFloat(light_lx);putchar('\n'); // DISPLAY CURRENT VALUE
|
||||
//printBuffer(buffer);putchar('\n'); // DISPLAY CURRENT BUFFER
|
||||
|
||||
counter++;
|
||||
if(counter == buffer.length) // CHECK WHETHER FULL
|
||||
{
|
||||
process_post(&aggregator_process, event_buffer_full, &buffer); // pass buffer to processing thread
|
||||
counter = 0;
|
||||
buffer = getBuffer(BUFFER_SIZE); // get new buffer for next data, no freeing in this thread
|
||||
}
|
||||
buffer.items[counter] = light_lx; // STORE
|
||||
|
||||
printf("%2i/%i: ", counter + 1, buffer.length);putFloat(light_lx);putchar('\n'); // DISPLAY CURRENT VALUE
|
||||
|
||||
counter++;
|
||||
if(counter == buffer.length) // CHECK WHETHER FULL
|
||||
{
|
||||
process_post(&aggregator_process, event_buffer_full, &buffer); // pass buffer to processing thread
|
||||
counter = 0;
|
||||
buffer = getBuffer(BUFFER_SIZE); // get new buffer for next data, no freeing in this thread
|
||||
}
|
||||
|
||||
etimer_reset(&timer);
|
||||
@ -82,12 +77,12 @@ PROCESS_THREAD(sensing_process, ev, data)
|
||||
if (isRunning == true)
|
||||
{
|
||||
printf("Starting...\n");
|
||||
etimer_set(&timer, CLOCK_SECOND/READING_INTERVAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Stopping, clearing buffer...\n");
|
||||
//freeBuffer(buffer);
|
||||
//buffer = getBuffer(BUFFER_SIZE);
|
||||
etimer_stop(&timer);
|
||||
counter = 0; // just reset counter, used as index on buffer items, will overwrite
|
||||
}
|
||||
}
|
||||
@ -158,10 +153,10 @@ handleSimpleBufferRotation(Buffer *inBufferPtr)
|
||||
printf("Insignificant std. dev.: ");putFloat(sd.std);printf(", squashing buffer\n");
|
||||
|
||||
outBuffer = getBuffer(1); // CREATE OUTPUT BUFFER
|
||||
|
||||
outBuffer.items[0] = sd.mean;
|
||||
}
|
||||
outBuffer.stats = sd; // final compressed buffer has pointer to stats for uncompressed data in case of further interest
|
||||
inBuffer.stats = sd;
|
||||
outBuffer.stats = sd; // final compressed buffer has stats for uncompressed data in case of further interest
|
||||
|
||||
/*********************/
|
||||
handleFinalBuffer(outBuffer); // PASS FINAL BUFFER
|
||||
|
Binary file not shown.
@ -36,26 +36,25 @@
|
||||
void
|
||||
normaliseBuffer(Buffer bufferIn) // z normalise buffer for SAX
|
||||
{
|
||||
if(bufferIn.stats.std == 0) // error check
|
||||
if(bufferIn.stats.std == 0) // error check, don't divide by 0
|
||||
{
|
||||
printf("Standard deviation of zero, unable to normalise\n");
|
||||
return;
|
||||
}
|
||||
|
||||
int i; // for group number
|
||||
float *inputPtr = bufferIn.items; // cursor for full buffer
|
||||
int i;
|
||||
float *inputPtr = bufferIn.items; // cursor
|
||||
for(i = 0; i < bufferIn.length; i++)
|
||||
{
|
||||
*inputPtr = (*inputPtr - bufferIn.stats.mean) / bufferIn.stats.std;
|
||||
|
||||
inputPtr++; // increment both cursors
|
||||
inputPtr++;
|
||||
}
|
||||
}
|
||||
|
||||
char
|
||||
valueToSAXChar(float inputValue)
|
||||
{
|
||||
float below, above;
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < SAX_BREAKPOINTS; i++)
|
||||
{
|
||||
@ -69,7 +68,7 @@ valueToSAXChar(float inputValue)
|
||||
}
|
||||
else // in between check interval of two breakpoints
|
||||
{
|
||||
if(breakPoints[i - 1] < inputValue < breakPoints[i]) return SAX_CHAR_START + i;
|
||||
if((breakPoints[i - 1] < inputValue) && (inputValue < breakPoints[i])) return SAX_CHAR_START + i;
|
||||
}
|
||||
}
|
||||
return '0';
|
||||
@ -78,7 +77,7 @@ valueToSAXChar(float inputValue)
|
||||
char* // map buffer of normalised floats into SAX chars
|
||||
stringifyBuffer(Buffer bufferIn)
|
||||
{
|
||||
char* outputString = (char*) malloc((bufferIn.length + 1) * sizeof(char));
|
||||
char* outputString = (char*) malloc((bufferIn.length + 1) * sizeof(char)); // +1 for null terminator
|
||||
|
||||
int i;
|
||||
for(i = 0; i < bufferIn.length; i++)
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
typedef unsigned short USHORT;
|
||||
|
||||
//print a unsigned short (as returned from rand) picewise char by char
|
||||
//print a unsigned short picewise char by char
|
||||
void
|
||||
putShort(USHORT in)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user