\documentclass{article}
\usepackage{titling}
\usepackage{graphicx} % Required for inserting images
\usepackage{forest}
\usepackage{hyperref}
\usepackage[backend=biber]{biblatex}

\addbibresource{refs.bib}
\begin{document}

% \maketitle


\noindent\textbf{Progress Report:} \textit{Human Presence Detection using Wi-Fi Channel State Information}

\noindent\textbf{Author:} Christos Falas (\href{mailto:cf575@cam.ac.uk}{cf575@cam.ac.uk})

\noindent\textbf{Supervisor:} Markus Kuhn

\noindent\textbf{Project Checkers:} Pietro Lio (pl219) and Jeremy Yallop (jdy22)

\noindent\textbf{Date:} \today

\vspace{1cm}

\section{Summary}

Overall, I believe that the project is going well, and a lot of progress has been made. However, due to easier logistics, I decided to re-arrange the work plan slightly, so that some tasks that I wasn't planning on doing until a bit later are already done, aand others that were supposed to be done by now are not.

In the next sections, I try to explain these decisions, as well s give some context on what I've done, and what is left to be done.

Due to this change in work plan, it is hard to estimate whether my project is behind or ahead of schedule. I would imagine I am roughtly on track (since the extra work I've done is slightly more than the work I skipped). In order to not have this problem, at the end I devised a new work plan.

\section{Multi-NIC setup}

Per my initial plan, I was supposed to currently only be working using a single Wi-Fi NIC on the receiving end. However, this only allows me to use CSI data from 2 antennas, which is quite limiting (and would lead to an under-constrained solution in most cases). In order to combat this, I re-arranged my work plan, and moved the work to set up the multi-NIC system to an earlier stage.

In order to easily work with multiple NICs, I had to use multiple computers, since I was limited by the number of PCIe slots on each computer (this would not be a limit on commercial access point hardware). Along with my main desktop computer, I am using two identical small-form-factor machines, each of which have 2 PCIe ports.

Per my original proposal, I am using FeitCSI \cite{feitcsi:project} to control the Wi-Fi NICs over the network. However, FeitCSI does not currently support multiple NICs on the same machine. Therefore, in order to use both PCIe slots on the machine for NICs, I had to set up different virtual machines, so that each VM would only detect a single NIC. For ease of management, I configured the VMs to boot from the network, off of a single disk image, such that I only have to make changes in one place. The overall setup is as shown in Figure \ref{fig:multi-nic}.

While the setup is not realistic for a commercial deployment, it makes working with multiple NICs much easier, is a rough approximation of the desired setup that allows me to collect the same data. This collection process should be a lot easier with newer Wi-Fi 7 hardware.

\begin{figure}[h]
\begin{forest}
for tree={draw, align=center, l sep=1cm}
[Network Switch, s sep=1cm
    [Main Machine
        [Hypervisor
            [TFTP \& NFS Server, name=tftp, yshift=0.8cm]
            [Development Machine, name=dev] % Assigning a name to reference later
            [FeitCSI, name=feit0 [NIC 0, edge=green]]
        ]
    ]
    [Machine 1, tikz={\node [draw, inner sep=2mm, fit=()(!111)(!lll), rounded corners, dashed]{};}
        [Hypervisor, name=hyper1
        [FeitCSI, name=feit11 [NIC 1, name=nic1, edge=green]]
        [FeitCSI, name=feit12 [NIC 2, edge=green]]
        ]
    ]
    [Machine 2, tikz={\node [draw, inner sep=2mm, fit=()(!111)(!lll), rounded corners, dashed]{};}
        [Hypervisor, name=hyper2
        [FeitCSI, name=feit21 [NIC 3, edge=green]]
        [FeitCSI, name=feit22 [NIC 4, edge=green]]
        ]
    ]
]
\draw[blue, bend left] (tftp.north) to[out=20, in=160] (feit21.north);
\draw[blue, bend left] (tftp.north) to[out=20, in=160] (feit22.north);
\draw[blue, bend left] (tftp.north) to[out=20, in=160] (feit11.north);
\draw[blue, bend left] (tftp.north) to[out=20, in=160] (feit12.north);
\draw[blue, bend left] (tftp.north) to[out=20, in=160] (feit0.north);
\end{forest}
\caption{Network/hardware setup for multi-NIC CSI collection}
\label{fig:multi-nic}
\end{figure}

To ensure consistency in the spacing between antennas, I built a simple custom mount for the 8 antennas (2 per NIC) that I am using, out of a tin can. This mount is shown in Figure \ref{fig:antenna-mount}.

\begin{figure}[h]
    \includegraphics[scale=0.5]{images/antenna_mount.png}
    \centering
    \caption{Custom antenna mount}
    \label{fig:antenna-mount}
\end{figure}

\section{Data Ingestion}

I have implemented a simple data ingestion pipeline, which connects to each of the FeitCSI instances over the network, and collects the CSI data from each of the NICs in realtime (at around 100Hz). The data is then merged using the correct antenna order, and then streamed to downstream consumers (which could save the data to a file for later processing, or process it in realtime).

Additionally, I implemented a simple visualisation framework which streams data to the browser in realtime, which allows me to see the data as it is being collected and processed. This is useful for debugging, and for understanding the data better.

\section{Data Preprocessing}

Data preprocessing was one of my first milestones per my original work plan. Even though I completed it initially in schedule, I believe the implementation is not optimal. Some of the math I used from the original paper I am replicating \cite{Hsu2024} is not very clear, which makes the preprocessing method used not as effective. Therefore, I am currently working on implementing a few different methods for data preprocessing, to see what works best.

\section{Angle of Arrival Estimation}

One of the main techniques I was planning to use was angle of arrival estimation, using the MUSIC algorithm. I have implemented this per the original work plan.

This allows me to estimate a 2-dimensional probability density function, estimating the response of the signal at a specific angle and time of flight. In theory, plotting a heatmap of this on a polar plane should give a rough indication of where a person is in the room.

I am currently in the process of evaluating the results from this, to see how well it performs under different conditions.

\section{Dataset Collection}

Over the weekend 1st-2nd February, I collected data using multiple different configurations, with both the empty room, with one or more people walking around the room (after going through the necessary ethics review). Using this data instead of the realtime data allows for more repeatable experiments, which will allow me to improve my method more effectively, and hence was done earlier than scheduled in the original work plan.

\section{Difficulties}

One of the main problems that I had which caused me to lose a lot of time was some hardware issues. The CPU in the main computer I was using had a hardware issue, causing my program to crash within a few seconds of running (but did not show any significant problems with other software running). This was quite difficult to diagnose, since I immediately assumed that this was a bug in my code. After a lot of debugging, running the program on different machines and environments, I realised that this is a hardware issue.

Even after diagnosing this, I had to wait for a long time (~3 weeks) for Intel to send me a replacement CPU, which caused me to not be able to do as much work over the Christmas vacation as I would have liked.

\section{Next Steps}

Since there have been many changes to the original work plan, causing me to both be ahead and behind simultaneously, here is a new work plan which I am planning to follow until the end of my project:

\begin{enumerate}
    \item Evaluate different data preprocessing methods, and see which one works best and when. This will lead to improved accuracy in the heatmaps, so that the hotspots are more obvious. I aim to complete this by 21st February.
    \item Automatically detect peaks/hotspots in the heatmap, to get an automatic counter for the number of people in the room (and evaluate prediction accuracy against the collected dataset). This was originally planned for January, but I believe it can now be done by 7th March.
    \item Train a neural network to detect the exact position and poses of the people in the scene. I already have everything I need for this, so I believe it can be done by 21st March. This will be done simultaneously with writing a draft of the dissertation.
    \item Evaluate whether using MIMO (Multiple Input, Multiple Output) will improve the accuracy of the system, and/or allow us to use less receiving antenna. This will also be done simultaneously with writing the dissertation, and should be completed by 4th April.
    \item Finalise dissertation. This should give sufficient amount of time for editing, as well as for any unexpected issues that may arise, or for any other extensions I would like to add. This will likely be continuous until the submission deadline.
\end{enumerate}


\printbibliography


\end{document}

