Finalize thesis report
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Signed-off-by: Severin Kaderli <severin@kaderli.dev>
This commit is contained in:
parent
1862068f09
commit
8fef45b856
10 changed files with 5991 additions and 55 deletions
|
@ -2,4 +2,3 @@
|
|||
latexmk -pdflatex=lualatex -pdf -output-directory=_build thesis/thesis.tex
|
||||
latexmk -c -pdflatex=lualatex -pdf -output-directory=_build thesis/thesis.tex
|
||||
latexmk -pdflatex=lualatex -pdf -output-directory=_build poster/poster.tex
|
||||
latexmk -c -pdflatex=lualatex -pdf -output-directory=_build poster/poster.tex
|
||||
|
|
BIN
documentation/thesis/assets/cpu_test.png
Normal file
BIN
documentation/thesis/assets/cpu_test.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
documentation/thesis/assets/magnetic_induction_test_packet.png
Normal file
BIN
documentation/thesis/assets/magnetic_induction_test_packet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
|
@ -27,17 +27,16 @@ The transmission works over magnetic induction. By putting a load on a CPU the r
|
|||
|
||||
To indicate the start of a message in the signal, a preamble is used. The preamble used in this protocol is 3 high signals, followed by 3 low signals, followed by 3 high signals. The duration of one signal in the preamble is 1 second. That means the entire preamble takes 9 seconds.
|
||||
|
||||
After the preambl, the contents of the manchester encoded packet is sent.
|
||||
After the preamble, the contents of the manchester encoded packet is sent. The entire transmission is repeated until the user stops the process.
|
||||
|
||||
\begin{figure}[H]
|
||||
\begin{bytefield}[bitwidth=.05\linewidth, bitheight=11mm]{4}
|
||||
\bitbox[]{4}[]{9 Symbols} & \bitbox[]{2}[]{4 Bit} & \bitbox[]{10}[]{n Bytes} & \bitbox[]{4}[]{1 Byte} \\
|
||||
\bitbox{4}[bgcolor=gray!30]{Preamble} & \bitbox{2}[bgcolor=red!30]{Payload Length} & \bitbox{10}[bgcolor=blue!30]{Payload} & \bitbox{4}[bgcolor=green!30]{CRC-8-AUTOSAR}
|
||||
\bitbox[]{4}[]{Preamble} & \bitbox[]{2}[]{Payload Length} & \bitbox[]{10}[]{Payload} & \bitbox[]{4}[]{Checksum} \\
|
||||
\bitbox{4}[bgcolor=gray!30]{9 Symbols} & \bitbox{2}[bgcolor=red!30]{\SI{4}{\bit}} & \bitbox{10}[bgcolor=blue!30]{\SI[number-math-rm = \mathnormal, parse-numbers = false]{n}{\byte}} & \bitbox{4}[bgcolor=green!30]{\SI{1}{\byte}}
|
||||
\end{bytefield}
|
||||
\caption{Packet Structure, with Preamble at the Start}
|
||||
\end{figure}
|
||||
|
||||
|
||||
The following pseudocode in \autoref{listing:sending_pseudo} explains step by
|
||||
step how a message should get encoded and transmitted using MagSend.
|
||||
|
||||
|
@ -48,6 +47,28 @@ step how a message should get encoded and transmitted using MagSend.
|
|||
label={listing:sending_pseudo}
|
||||
]{thesis/listings/sending_pseudo.py}
|
||||
|
||||
\subsubsection*{Example}
|
||||
As an example the message "Test" is shown in the MagSend packet structure in \autoref{figure:testPacket}.
|
||||
|
||||
\begin{figure}[H]
|
||||
\begin{bytefield}[bitwidth=.05\linewidth, bitheight=11mm]{4}
|
||||
\bitbox[]{2}[]{Payload Length} & \bitbox[]{10}[]{Payload} & \bitbox[]{4}[]{Checksum} \\
|
||||
\bitbox{2}[bgcolor=red!30]{0x4} & \bitbox{10}[bgcolor=blue!30]{0x54657374} & \bitbox{4}[bgcolor=green!30]{0x2D}
|
||||
\end{bytefield}
|
||||
\caption{Packet Structure of the message "Test"}
|
||||
\label{figure:testPacket}
|
||||
\end{figure}
|
||||
|
||||
When that previous packet is transmitted, the CPU utilization should look similiar to the one
|
||||
in \autoref{figure:testCpu} with the included preamble.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{cpu_test.png}
|
||||
\caption{CPU Utilization while sending a Packet}
|
||||
\label{figure:testCpu}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Receiving}
|
||||
The receiver utilizes a magnetometer to measure the magnetic field and
|
||||
interprets the received sensor values as a signal.
|
||||
|
@ -62,6 +83,18 @@ step how the signal should get interpreted and decoded using MagSend.
|
|||
label={listing:receiving_pseudo}
|
||||
]{thesis/listings/receiving_pseudo.py}
|
||||
|
||||
\subsubsection*{Example}
|
||||
In \autoref{figure:testPacketMagneticInduction} the same packet from the sending
|
||||
example can be seen. This time it is the \gls{mi} signals that the smartphone is
|
||||
receiving from the magnetometer.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{magnetic_induction_test_packet.png}
|
||||
\caption{Magnetic Induction Signal while receiving a Packet}
|
||||
\label{figure:testPacketMagneticInduction}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section{Website}
|
||||
The website provides the user with an interface to transmit text over the
|
||||
|
@ -102,7 +135,7 @@ on the CPU to generate a signal. A message is displayed that indicates that a se
|
|||
|
||||
\newpage
|
||||
\section{App}
|
||||
The app allows the user to receive messages over the protocol.
|
||||
The app allows the user to receive messages over the MagSend protocol.
|
||||
|
||||
On the homescreen you have two buttons. One button is for receiving messages and one is to start the calibration process. By clicking one of the buttons the user will be switched to the corresponding screen.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ The following devices were used for the development and testing of MagSend. Whil
|
|||
The laptop was used as the sending device for MagSend. The Website was run on the Firefox browser. The laptop was always plugged in to the power grid to ensure that the CPU throttles less often.
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{11.0cm}}
|
||||
\begin{reqTblr}{l p{10.9cm}}
|
||||
Device & Lenovo Thinkpad T470P \\
|
||||
Operating System & Arch Linux \\
|
||||
CPU & Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz \\
|
||||
|
@ -21,7 +21,7 @@ The laptop was used as the sending device for MagSend. The Website was run on th
|
|||
The smartphone was used as the receiving device for MagSend. The app was run normally as a native Android application.
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{11.0cm}}
|
||||
\begin{reqTblr}{l p{10.9cm}}
|
||||
Device & Samsung Galaxy S9+ \\
|
||||
Operating System & Android 10 with One UI 2.5 \\
|
||||
SoC & Samsung Exynos 9810 \\
|
||||
|
@ -36,7 +36,7 @@ The smartphone was used as the receiving device for MagSend. The app was run nor
|
|||
The following test cases are all structured in the same way. The table lists the related requirements from \autoref{chapter:requirements} and describes the test case briefly. Then the expected result row lists the steps and the result that should happen for the test case to be successful. The last row describes the actual result from testing.
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T01 \\
|
||||
Related Requirement & F01 \\
|
||||
Description & The user is provided with the option to start the calibration on the website. \\
|
||||
|
@ -61,7 +61,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T02 \\
|
||||
Related Requirement & F01 \\
|
||||
Description & The user can start the calibration process on the website.\\
|
||||
|
@ -98,7 +98,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T03 \\
|
||||
Related Requirement & F01 \\
|
||||
Description & The user can stop the calibration process on the website.\\
|
||||
|
@ -127,7 +127,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T04 \\
|
||||
Related Requirement & F02 \\
|
||||
Description & The user is provided with the option to start calibration in the app.\\
|
||||
|
@ -152,7 +152,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T05 \\
|
||||
Related Requirement & F02 \\
|
||||
Description & The user can start the calibration process in the app.\\
|
||||
|
@ -177,7 +177,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T06 \\
|
||||
Related Requirement & F02 \\
|
||||
Description & The user can stop the calibration process in the app.\\
|
||||
|
@ -196,7 +196,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{table}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T07 \\
|
||||
Related Requirement & F03 \\
|
||||
Description & The user can enter text on the website.\\
|
||||
|
@ -221,7 +221,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T08 \\
|
||||
Related Requirement & F04 \\
|
||||
Description & The entered text is validated on the website when sending.\\
|
||||
|
@ -259,7 +259,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T09 \\
|
||||
Related Requirement & F04 \\
|
||||
Description & The user can send text using the website.\\
|
||||
|
@ -294,7 +294,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T10 \\
|
||||
Related Requirement & F04 \\
|
||||
Description & The user can stop the sending process.\\
|
||||
|
@ -322,7 +322,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T11 \\
|
||||
Related Requirement & F05 \\
|
||||
Description & The user can receive data using the app.\\
|
||||
|
@ -360,7 +360,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T12 \\
|
||||
Related Requirement & F05 \\
|
||||
Description & The user can restart the reception process.\\
|
||||
|
@ -381,7 +381,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{table}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T13 \\
|
||||
Related Requirement & F05 \\
|
||||
Description & The user can stop the reception process.\\
|
||||
|
@ -402,7 +402,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T14 \\
|
||||
Related Requirement & N01 \\
|
||||
Description & The app can receive data in airplane mode.\\
|
||||
|
@ -429,7 +429,7 @@ The following test cases are all structured in the same way. The table lists the
|
|||
\end{figure}
|
||||
|
||||
\begin{table}[H]
|
||||
\begin{reqTblr}{l p{10.5cm}}
|
||||
\begin{reqTblr}{l p{10.3cm}}
|
||||
ID & T15 \\
|
||||
Related Requirement & N02 \\
|
||||
Description & The transfer speed between laptop and smartphone is \SI{1}{\bit\per\second}.\\
|
||||
|
|
|
@ -14,11 +14,11 @@ The following benchmarks were run during idle CPU Load, which was about 1-5\% ut
|
|||
\begin{table}[H]
|
||||
\begin{bfhTabular}{l l l l l}
|
||||
Run & Preamble Detected & Payload Length & Is CRC Valid & Received Message \\
|
||||
1 & Yes & 4 bytes & No & Vêÿ\\
|
||||
2 & Yes & 4 bytes & Yes & Test \\
|
||||
3 & Yes & 4 bytes & Yes & Test\\
|
||||
4 & Yes & 4 bytes & Yes & Test \\
|
||||
5 & Yes & 4 bytes & No & {\textunderscore}rÛ
|
||||
1 & Yes & \SI{4}{\byte} & No & Vêÿ\\
|
||||
2 & Yes & \SI{4}{\byte} & Yes & Test \\
|
||||
3 & Yes & \SI{4}{\byte} & Yes & Test\\
|
||||
4 & Yes & \SI{4}{\byte} & Yes & Test \\
|
||||
5 & Yes & \SI{4}{\byte} & No & {\textunderscore}rÛ
|
||||
\end{bfhTabular}
|
||||
\caption{Benchmark - Idle CPU Load - \SI{0.5}{\bit\per\second}}
|
||||
\end{table}
|
||||
|
@ -27,11 +27,11 @@ The following benchmarks were run during idle CPU Load, which was about 1-5\% ut
|
|||
\begin{table}[H]
|
||||
\begin{bfhTabular}{l l l l l}
|
||||
Run & Preamble Detected & Payload Length & Is CRC Valid & Received Message \\
|
||||
1 & Yes & 4 bytes & Yes & Test\\
|
||||
2 & Yes & 4 & No & Test\\
|
||||
3 & Yes & 4 & Yes & Test\\
|
||||
4 & Yes & 4 & Yes & Test\\
|
||||
5 & Yes & 4 & No & TÊæé
|
||||
1 & Yes & \SI{4}{\byte} & Yes & Test\\
|
||||
2 & Yes & \SI{4}{\byte} & No & Test\\
|
||||
3 & Yes & \SI{4}{\byte} & Yes & Test\\
|
||||
4 & Yes & \SI{4}{\byte} & Yes & Test\\
|
||||
5 & Yes & \SI{4}{\byte} & No & TÊæé
|
||||
\end{bfhTabular}
|
||||
\caption{Benchmark - Idle CPU Load - \SI{1}{\bit\per\second}}
|
||||
\end{table}
|
||||
|
@ -43,11 +43,11 @@ The following benchmarks were run with 25\% CPU utilization. The tool \texttt{st
|
|||
\begin{table}[H]
|
||||
\begin{bfhTabular}{l l l l l}
|
||||
Run & Preamble Detected & Payload Length & Is CRC Valid & Received Message \\
|
||||
1 & Yes & - & - & -\\
|
||||
2 & Yes & \SI{4}{\byte} & - & -\\
|
||||
3 & No & - & - & -\\
|
||||
4 & No & - & - & -\\
|
||||
5 & No & - & - & -\\
|
||||
1 & Yes & N/A & No & N/A\\
|
||||
2 & Yes & \SI{4}{\byte} & No & N/A\\
|
||||
3 & No & N/A & No & N/A\\
|
||||
4 & No & N/A & No & N/A\\
|
||||
5 & No & N/A & No & N/A\\
|
||||
\end{bfhTabular}
|
||||
\caption{Benchmark - 25\% CPU Load - \SI{0.5}{\bit\per\second}}
|
||||
\end{table}
|
||||
|
@ -56,11 +56,11 @@ The following benchmarks were run with 25\% CPU utilization. The tool \texttt{st
|
|||
\begin{table}[H]
|
||||
\begin{bfhTabular}{l l l l l}
|
||||
Run & Preamble Detected & Payload Length & Is CRC Valid & Received Message \\
|
||||
1 & No & - & - & -\\
|
||||
2 & Yes & - & - & -\\
|
||||
3 & No & - & - & -\\
|
||||
4 & No & - & - & -\\
|
||||
5 & No & - & - & -
|
||||
1 & No & N/A & No & N/A\\
|
||||
2 & Yes & N/A & No & N/A\\
|
||||
3 & No & N/A & No & N/A\\
|
||||
4 & No & N/A & No & N/A\\
|
||||
5 & No & N/A & No & N/A
|
||||
\end{bfhTabular}
|
||||
\caption{Benchmark - 25\% CPU Load - \SI{1}{\bit\per\second}}
|
||||
\end{table}
|
||||
|
|
5903
documentation/thesis/data/test_packet.csv
Normal file
5903
documentation/thesis/data/test_packet.csv
Normal file
File diff suppressed because it is too large
Load diff
|
@ -32,7 +32,7 @@ if contains(signal, preamble):
|
|||
header = read_bits(packet, 0, 4)
|
||||
display_header(header)
|
||||
|
||||
// Read the next n Bytes of the bitstream, according to the payload length, to get the payload
|
||||
// Read the next n bytes of the bitstream, according to the payload length, to get the payload
|
||||
payload = read_bits(packet, 4, header)
|
||||
display_payload(payload)
|
||||
|
||||
|
|
|
@ -22,15 +22,15 @@ packet = to_bits(header) + payload + to_bits(checksum)
|
|||
// Encode packet using manchester encoding
|
||||
encoded_packet = manchester_encode(packet)
|
||||
|
||||
// Start the transmission by sending the preamble
|
||||
for symbol in preamble:
|
||||
if symbol is 1:
|
||||
stress_cpu(1000)
|
||||
else:
|
||||
idle_cpu(1000)
|
||||
|
||||
// Transmit the manchester encoded bit stream of the packet
|
||||
while transmission_not_stopped:
|
||||
// Start the transmission by sending the preamble
|
||||
for symbol in preamble:
|
||||
if symbol is 1:
|
||||
stress_cpu(1000)
|
||||
else:
|
||||
idle_cpu(1000)
|
||||
|
||||
// Transmit the manchester encoded bit stream of the packet
|
||||
for code_bit in encoded_packet:
|
||||
if code_bit is 1:
|
||||
stress_cpu(clock_speed)
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
,monolingual,
|
||||
]{bfhthesis} % KOMA-script report
|
||||
|
||||
\usepackage{pdfpages}
|
||||
|
||||
\usepackage{float}
|
||||
\usepackage[
|
||||
hidelinks,
|
||||
pdfusetitle,
|
||||
]{hyperref}
|
||||
|
||||
\usepackage{pdfpages}
|
||||
|
||||
\usepackage{bytefield}
|
||||
|
||||
\usepackage{tabularray}
|
||||
|
@ -38,7 +39,7 @@
|
|||
\usepackage{siunitx}
|
||||
\sisetup{per-mode=symbol}
|
||||
|
||||
\usepackage{float}
|
||||
|
||||
|
||||
% https://tex.stackexchange.com/a/24827
|
||||
\makeatletter
|
||||
|
|
Reference in a new issue