From ed82fe01c8286dd2f30793f0bda444b5c1764df3 Mon Sep 17 00:00:00 2001 From: Matus Novak <mn00272@surrey.ac.uk> Date: Sun, 17 Mar 2019 22:59:45 +0000 Subject: [PATCH] Added more sections to the report --- report/bibliography.bib | 8 +++ report/chapters/abbreviations.md | 18 +++++ report/chapters/abstract.md | 8 +++ report/chapters/acknowledgement.md | 3 + report/chapters/acronyms.md | 1 - report/chapters/design.md | 101 ++++++++++++++++------------- report/chapters/introduction.md | 53 ++++++++++++++- report/chapters/literature.md | 9 ++- report/chapters/originality.md | 3 + report/chapters/requirements.md | 16 ++++- report/chapters/research.md | 1 - report/chapters/specifications.md | 1 - report/chapters/testing.md | 4 +- report/images/BinTray.png | Bin 0 -> 97699 bytes report/index.mdpp | 10 +-- report/make.bat | 2 +- 16 files changed, 179 insertions(+), 59 deletions(-) create mode 100644 report/chapters/abbreviations.md delete mode 100644 report/chapters/acronyms.md create mode 100644 report/chapters/originality.md delete mode 100644 report/chapters/research.md delete mode 100644 report/chapters/specifications.md create mode 100644 report/images/BinTray.png diff --git a/report/bibliography.bib b/report/bibliography.bib index 3590570..eb9bf40 100644 --- a/report/bibliography.bib +++ b/report/bibliography.bib @@ -227,4 +227,12 @@ year = {2017}, publisher = {http://photobyte.org}, howpublished = {\url{http://photobyte.org/137mhz-polar-orbiting-weather-satellites/}} +} + +@misc{bintray, + title = {Welcome to JFrog BinTray}, + author = {Rami Honig}, + year = {2018}, + publisher = {jfrog.com}, + howpublished = {\url{https://www.jfrog.com/confluence/display/BT/Welcome+to+JFrog+Bintray}} } \ No newline at end of file diff --git a/report/chapters/abbreviations.md b/report/chapters/abbreviations.md new file mode 100644 index 0000000..eeee79e --- /dev/null +++ b/report/chapters/abbreviations.md @@ -0,0 +1,18 @@ +# Abbreviations + +| Abbreviation | Definition | +| ------------ | ---------- | +| CI | Continuous Integration | +| REW | Radio Enabled Web | +| SDR | Software Defined Radio | +| GCC | GNU C Compiler | +| LLVM | Apple's Clang Low Level Virtual Machine | +| MSVC | Microsoft Studio Visual C++ | +| x64 | The 64-bit system | +| amd64 | Also refers to the 64-bit system | +| x86_64 | The 64-bit version of the x86 architecture. Also refers to the 64-bit system | +| x32 | The 32-bit system | +| x86 | The 32-bit instruction system, refers to the 32-bit system | +| i686 | The 32-bit instruction set, part of the x86 family | +| win32 | Windows specific 32-bit architecture, used by MSVC | +| win64 | Windows specific 64-bit architecture, used by MSVC | diff --git a/report/chapters/abstract.md b/report/chapters/abstract.md index 8957164..b15b9c9 100644 --- a/report/chapters/abstract.md +++ b/report/chapters/abstract.md @@ -1 +1,9 @@ # Abstract + +In this report we look at the design and implementation of small scale websites transmission over FM Radio. The project, "Radio Enabled Web", consists of a Encoder and a Decoder parts. These two applications, more precisely shared libraries, can encode a static HTML website into an audio file. This audio file can be then transmitted using conventional FM Transmitter, and then received on the other side. The received audio is then decoded via the Decoder application, and shown to the user via browser. + +This project, Radio Enabled Web, utilizes the FM radio transmitter and a receiver to transmit the contents of the website. However, it is possible to use any other carrier that uses audio, for example an amateur short-band radio. + +The Radio Enabled Web (REW), splits both the Decoder and Encoder into small standalone blocks, which can be used by the user. These blocks are C++ classes, and are purely optional. These blocks can be assembled into a custom pipeline, or integrated into any other viable language. The main part of this project is the GUI application(s) and Command Line Interfaces that can be used out of the box. + +This report mainly consists of software design, implementation, and testing of the Radio Enabled Web. diff --git a/report/chapters/acknowledgement.md b/report/chapters/acknowledgement.md index 1320079..e415e6e 100644 --- a/report/chapters/acknowledgement.md +++ b/report/chapters/acknowledgement.md @@ -1 +1,4 @@ # Acknowledgement + +I would like to thank the grocery shop under the University library for a constant supply of energy drinks, which were greatly needed to complete this project. + diff --git a/report/chapters/acronyms.md b/report/chapters/acronyms.md deleted file mode 100644 index e4acb87..0000000 --- a/report/chapters/acronyms.md +++ /dev/null @@ -1 +0,0 @@ -# Acronyms diff --git a/report/chapters/design.md b/report/chapters/design.md index 9611023..b1c0668 100644 --- a/report/chapters/design.md +++ b/report/chapters/design.md @@ -2,29 +2,29 @@ ## 4.1 Software -The aim of this project is not only to transmit entire web pages through an FM radio, but also to provide the API for the user. The API, in form of a library, must be easily understood and well documented. The API will provide a basic set of building blocks for the user to arrange them in any desirable pipeline. These blocks in a form of a pipeline can be used to encode or decode the transmission, or further enhance the library. The aim is to also provide a basic CLI (Command Line Interface) with pre-built pipeline that can be used to encode and then decode the transmission. Additionally, to provide a http server for localhost, in order for the user to be able to browse the decoded transmission through a web browser of their choice. +The aim of this project is not only to transmit entire web pages through an FM radio, but also to provide the API for the user. The API, in form of a library, must be easily understood and well documented. The API will provide a basic set of building blocks for the user to arrange them in any desirable pipeline. These blocks, in a form of a pipeline, can be used to encode or decode the transmission, or further enhance the library. The aim is to provide a basic CLI (Command Line Interface) with pre-built pipeline that can be used to encode and then decode the transmission. Additionally, to provide a HTTP server for localhost, in order for the user to be able to browse the decoded transmission through a web browser of their choice. ### 4.1.1 Programming language and environment -C++ was chosen as the implementation language for this project. The main reason behind this decision was performance benefits of compiled languages over an interpreted languages [@languagesbenchmark]. Another reason for the chosen language is that I have past experience working with this language in my own personal projects. C++ is a good choice for an open source library as it can be integrated into interpreter library. For example, using pybind11 [@pybind11] to create python bindings, or by using Node [@nodejsaddons] to create a JavaScript library. C++ libraries can be also easily integrated into C# Net Framework via dllimport [@csharpdllimport], Ruby [@rubyextensions], and many more. +C++ was chosen as the implementation language for this project. The main reason behind this decision was performance benefits of the compiled languages over the interpreted languages [@languagesbenchmark]. Another reason for the chosen language is that I have past experience working with this language in my own personal projects. C++ is a good choice for an open source library, as it can be integrated into interpreted language. For example, using pybind11 [@pybind11] to create python bindings, or by using Node [@nodejsaddons] to create a JavaScript library. C++ libraries can be also easily integrated into C# Net Framework via dllimport [@csharpdllimport], Ruby [@rubyextensions], and many more. -Additionally, the decoding part of this project needs to listen to the raw audio input of the user's machine. Therefore, it is essential that the application needs to run at real-time speed. The use of C++ will greatly improve the efficiency of the decoding algorithm. +Additionally, the decoding part of this project needs to listen to the raw audio input of the user's machine. Therefore, it is essential that the application needs to run at real-time speeds. The use of C++ will greatly improve the efficiency of the decoding algorithm. -The C++ offers a standard library [@stdlib] which contains the basic building blocks for the project needs. However, unlike Java and other high level languages, C++ does not offer out of the box networking library or filesystem library. The standard library, or STD for short, only provides us with language specific additions, such as: strings, vectors (dynamic arrays), optionals, and mainly the smart pointers. The smart pointers are a new addition to the C++ standard library version 11. It is a word of mouth that C or C++ applications are memory leaky, meaning, the application built in C or C++ are eventually leak memory and therefore use all of the available resources. However, these smart pointers are meant to help the programmer to reduce the likelihood of that happening. Normally when a new object is allocated, the standard way of doing it is through malloc (in C) or new operator (in C++). The memory needs to be then deleted via free (in C) or operator delete (in C++). The smart pointers encapsulate the raw pointers in an smart pointer object instance, and delete the memory when the instance fall out of scope. The project will have a heavy use of this feature. +The C++ offers a standard library [@stdlib], which contains the basic building blocks for what the project needs. However, unlike Java and other high level languages, C++ does not offer out of the box networking library or filesystem library. The standard library, or STD for short, only provides us with language specific additions, such as strings, vectors (dynamic arrays), optionals, and the smart pointers. The smart pointers are a new addition to the C++ standard library version 11. It is a word of mouth that C or C++ applications are memory leaky, meaning, the application built in C or C++ will eventually leak memory and therefore use all of the available resources. However, these smart pointers are meant to help the programmer to reduce the likelihood of that happening. Normally when a new object is allocated, the standard way of doing it is through malloc (in C) or new operator (in C++). The memory needs to be then deleted via free (in C) or operator delete (in C++). The smart pointers encapsulate the raw pointers in an smart pointer object instance, and delete the memory when the instance fall out of scope. The project will have a heavy use of this feature. The C++ comes with many versions, the standards, from C++98 (1998) up to C++20 (2020). The project will use the C++ 17 standard. The reason behind this chose is that the smart pointers have been first introduced in C++11 and later enhanced with additional features in C++14. Additionally, C++17 offers better metaprograming features than its predecessors. However, due to issues with the continuous integration and Mac OSX, the standard had to be lowered to C++ 14. -For the unit testing the Catch2 [@catch2] framework was chosen. The framework does not produce any static or dynamic libraries, instead only a single header file is needed for a integration. This Catch2 unit testing framework also offers a real time expression expansion for the each assert macro. This is extremely beneficial when it comes to asserting comparisons between two values in the unit tests. For example, when testing if a `std::vector` contains a specific number of elements, we can call `REQUIRE(vec.size() == 10);`. If this assertion fails, the Catch2 will print it out as an error `8 == 10`. This also works for more complicated types such as strings. +For the unit testing, the Catch2 [@catch2] framework was chosen. The framework does not produce any static or dynamic libraries, instead only a single header file is needed for a integration. This Catch2 unit testing framework also offers a real time expression expansion for the each assert macro. This is extremely beneficial when it comes to asserting comparisons between two values in the unit tests. For example, when testing if a `std::vector` contains a specific number of elements, we can call `REQUIRE(vec.size() == 10);`. If this assertion fails, the Catch2 will print it out as an error `8 == 10`. This also works for more complicated types such as strings. ### 4.1.2 Package Manager and build system -The C++ does not have an official package manager. There are many third party options such as Microsoft's vcpkg [@vcpkg] or conan [@conan]. The vcpkg is available on all three major platforms (Windows, Linux, and OSX) and offers packages in i686, amd64, or arm. This seems as a great choice for a package manager of this project, however there are some issues with it. First, the vcpkg does not offer a static binaries of the library on Linux and OSX, only dynamic binaries. This is also reversed on Windows where the the manager offers mainly static binaries with little or no choice of using dynamic binaries instead. Second, the vcpkg requires user's knowledge about complicated C++ building mechanism. This breaks the idea of this project, the entire project must be easy to understand and build by the user. The conan has been discarded due to a reason that the official documentation lacks the essentials, and the offer of the libraries is not comprehensive as we need. This leaves us with no other choice than building the libraries ourselves. +The C++ does not have an official package manager. There are many third party options such as Microsoft's vcpkg [@vcpkg] or conan [@conan]. The vcpkg is available on all three major platforms (Windows, Linux, and OSX) and offers packages in i686, amd64, or arm. This seems as a great choice for a package manager of this project, however there are some issues with it. First, the vcpkg does not offer a static binaries of the library on Linux and OSX, only dynamic binaries. This is also reversed on Windows where the the manager offers mainly static binaries with little or no choice of using dynamic binaries instead. Second, the vcpkg requires user's knowledge about complicated C++ building mechanism. This breaks the idea of this project, the entire project must be easy to understand and easily built by the user. The conan has been discarded due to a reason that the official documentation lacks the essentials, and the offer of the libraries is not comprehensive as need for this project. This leaves us with no other choice than to build the libraries ourselves. Instead of using a package manager, the Git Submodules [@gitsubmodules] will be used. The Git submodules is a way of adding other Git repositories into our project. The libraries will be simply added as a git submodule and then fetched from the remote git origin into a subfolder of the project. The contents of those libraries will not be pushed to the main repository, instead only the submodule metadata needed to fetch the library. This slightly introduces a complexity of the building system, but allows us to chose a specific commit or compilation flags for each of the library we will need. -The C++ offers no standard way of building the application from sources. There are many different offers of tools when it comes to building and generating project files for C++ applications. One of the popular one is automake [@automake]. The automake was primarly designed to work only on Linux based systems, and has almost non-existing support for Windows without using a virtual machine or a port of Linux tools. Automake is used by many open source C++ libraries, however due to Linux only support it can not be used in the project. Instead, CMake [@cmake] will be used. CMake offers a simple intuitive scripting language which can be used to identify source files, add include directories, and link libraries for the target executable (this project) or a library. CMake fulfils the needs as it is easy to install and the commands to build the project are easy to follow for a beginner. +The C++ offers no standard way of building the application from sources. There are many different offers of tools when it comes to building and generating project files. One of the popular one is automake [@automake]. The automake was primarly designed to work only on Linux based systems, and has almost non-existing support for Windows without using a virtual machine or a port of Unix shell tools. Automake is used by many open source C++ libraries. However, due to Linux only support, it can not be used in this project. Instead, CMake [@cmake] will be used. CMake offers a simple intuitive scripting language, which can be used to identify source files, add include directories, and link libraries for the target executable (this project) or a library. CMake fulfils the needs, as it is easy to install, and the commands to build the project are easy to follow for a beginner. -Additionally CMake offers an optional variables to be added into the building script. For example, it is possible to add `BUILD_EXAMPLES` or `BUILD_TESTS` conditional boolean variable which a user can set to true or false. Using this variables, the project's CMake script file `CMakeLists.txt` will conditionally include examples and tests into the final generated project files. These project files can be anything from a simple Makefile, Visual Studio solution files, or even Mac XCode files. The CMake also offers a GUI which greatly reduces the complexity of user experience. +Additionally, CMake offers an optional variables to be added into the building script. For example, it is possible to add `BUILD_EXAMPLES` or `BUILD_TESTS` conditional boolean variables, which a user can set to true or false. Using this variables, the project's CMake script file `CMakeLists.txt` will conditionally include examples and tests into the final generated project files. These project files can be anything from a simple Makefile, Visual Studio solution files, or even Mac XCode files. The CMake also offers a GUI which greatly reduces the complexity of the user experience.  @@ -32,14 +32,14 @@ Additionally CMake offers an optional variables to be added into the building sc The following third party libraries have been chosen for this project. -* argagg [@argagg] - This library provides a command line argument parsing. Needed for the command line interface part of this project. -* asio [@asio] - A library to create a basic http server. This server will be listening on the localhost and serving the decoded transmission to the user. +* argagg [@argagg] - This library provides a command line argument parsing. Needed for the command line interface part of this project. The library only needs a list of arguments and their description. Additionally, a help page is automatically generated using the description. +* asio [@asio] - A library to create a basic http server. This server will be listening on the localhost and serving the decoded transmission to the user. The main part of the Asio is asynchronous networking, which will be needed when we want to separate decoding and serving via threads. * dirent [@dirent] - A library to wrap Windows specific file system functions to be compatible with Unix functions. The original dirent is a library provided inside of every Linux based system. However due to the differences between Linux and Windows, this library provides a translation for Windows compilers between those two environments. This is only needed when building on Windows and will be enabled or disabled by CMake during configuration. -* zlib [@zlib] - This is a common compression library. It will be used to compress the source website into raw stream of bytes before being transformed into packets and transmitted. -* portaudio [@portaudio] - A cross platform audio input/output library. This library will be used by the Decoder to listen for transmission. -* qt5 [@qt5] - A cross platform GUI library developed by Nokia. +* zlib [@zlib] - This is a common compression library. It will be used to compress the source website into raw stream of bytes before being transformed into packets and transmitted. The zlib is well used compression library among many real world applications. Therefore, its documentation has been perfected, and easily understood, over the course of many years. +* portaudio [@portaudio] - A cross platform audio input/output library. This library will be used by the Decoder to listen for transmission. Many Linux distributions already provides this library by default, which we need to take into consideration in our CMake scripts. +* qt5 [@qt5] - A cross platform GUI library developed by Nokia. This library provides a basic set of UI widgets, alongside with some more complex ones. In this project, only the basic set will be used, to reduce the size of the output executable. The Qt5 has a commercial fee, however because this project is open source, we are allowed to use Qt5 without paying for it. -All of the third party libraries are included as a git submodule. Only the libraries that need compilation step, such as zlib, will be included in the CMake generator. Any other libraries that are header only, meaning they do not require compilation step, are only included as a include directory for the compiler. +All of the third party libraries are included as a git submodule. Only the libraries that need compilation step, such as zlib, portaudio, and Qt5, will be included in the CMake generator. Any other libraries that are header only, meaning they do not require compilation step, are only included as a include directory for the compiler. ### 4.1.4 Integrated development environment @@ -71,7 +71,7 @@ Microsoft Visual Studio 2017 [@visualstudio] with ReSharper C++ [@resharper] has ## 4.2 Continuous Integration -The continuous integration is an essential part when building C++ applications or libraries. Due to a reason that the output binary (either an executable or a dynamic library) is platform dependent, we will need to test the compilation and tests for all of the platforms we wish to distribute to. The continuous integration is an online service which listens to changes within the repository and launches a build for every change. This change can be a commit, new tag, or a pull request. With a use of this service we can ensure that the code written is platform independent. In this project, the three major platforms have been included: Windows, Linux, and OSX. Additionally, the i686 and amd64 versions need to be included in the Windows testing. The status of all of the continuous integration is listed in the README file of the repository. +The continuous integration is an essential part when building C++ applications or libraries. Due to a reason that the output binary (either an executable or a dynamic library) is platform dependent, we will need to test the compilation and unit tests for all of the platforms we wish to distribute to. The continuous integration is an online service which listens to changes within the repository, and launches a build for every introduced change. This change can be a new commit, new tag, or a pull request. With a use of this service, we can ensure that the code written is platform independent. In this project, the three major platforms have been included: Windows, Linux, and OSX. Additionally, the i686 and amd64 versions need to be included in the Windows testing. The status of all of the continuous integration is listed in the README file of the repository.  @@ -79,7 +79,7 @@ The continuous integration is an essential part when building C++ applications o The AppVeyor [@appveyor] is a continuous integration that offers building software on Windows virtual machines. The MinGW and MSVC compilers (both in amd64 and i686 settings) have been included in the building script. During the build, the latest commit is fetched from the repository, and using a custom script provided, the project is built and the output packed into a single artifact zip file. The artifact contains the binary distribution of the command line interface, alongside with the dynamic library and header files. -Due to the CRT [@iteratordebug] in MSVC compiler, the build system had to be adjusted for Visual Studio 2017. While the output binary for MinGW, or Unix system is built in Release mode only, The Visual Studio build needs to output both Debug and Release binaries. The Debug mode produces a non optimized library with debug symbols and the Release mode produces optimized library with no debug symbols attached. These debug symbols are only needed for the development of an application that used this library. However, due to the CRT in MSVC compiler, the CRT library on Windows is not compatible if the CRT used in the built binary does not match the debug level used. For example, if the user decides to download the Release version, and tries to use it in their own custom application built in Debug mode, it will cause compilation error. Therefore, both Debug and Release versions must be published. This does not apply for MinGW, GCC, or Clang compiler. +Due to the CRT [@iteratordebug] in MSVC compiler, the build system had to be adjusted for Visual Studio 2017. While the output binary for MinGW, or Unix system is built in the release mode only. The Visual Studio build needs to output both the debug and the release binaries. The debug mode produces a non optimized library with debug symbols attached. The release mode produces optimized and minimized library with no debug symbols. These debug symbols are only needed for the development of an application that used this library. However, due to the CRT in MSVC compiler, the CRT library on Windows is not compatible if the CRT used in the built binary does not match the debug level used. For example, if the user decides to download the release version, and tries to use it in their own custom application built in debug mode, it will cause compilation error. Therefore, both debug and release versions must be published. This does not apply for MinGW, GCC, or Clang compiler. Only Visual Studio 2017 in Win32 and Win64 mode and MinGW 6.3.0 in i686 and x86_64 mode are used in this continuous integration. @@ -87,7 +87,7 @@ Only Visual Studio 2017 in Win32 and Win64 mode and MinGW 6.3.0 in i686 and x86_ ### 4.2.2 Travis CI -The Travis CI [@travisci] is a continuous integration that offers building software on both Linux and Mac OSX. Similarly as in AppVeyor, the build is launched on every new commit pushed to the repository. The Linux GCC 7.3.0 in x64 mode and Apple Clang LLVM 8.0.0 in x64 mode is used during compilation. +The Travis CI [@travisci] is a continuous integration that offers building software on both Linux and Mac OSX. Similarly, as in AppVeyor, the build is launched on every new commit pushed to the repository. The Linux GCC 7.3.0 in x64 mode and Apple Clang LLVM 8.0.0 in x64 mode is used during compilation.  @@ -95,17 +95,21 @@ The Travis CI [@travisci] is a continuous integration that offers building softw The Circle CI [@circleci] is a continuous integration that only offers building software on Linux. As in both AppVeyor and Travis CI, The Circle CI launches the build on every new commit. For the purposes of this project, only Linux GCC 5.5, 6.4, 7.3, and 8.2 in x64 mode is used. -After the successful build of the software on various version of GCC, the documentation building process is run in two separate jobs. During this, the first job "build_docs" will run Doxygen [@doxygen] which will parse the header files and produces XML output. This XML output is further processed by DoxyBook [@doxybook] and exported as Markdown into a temporary folder. In the second job, the last job, the Markdown documentation is converted into HTML static pages via VuePress [@vuepress], and finally pushed into the `gh-pages` branch on the GitHub mirrored repository. +After a successful build of the software, on various version of GCC, the documentation building process is run in two separate jobs. During this, the first job "build_docs" will run Doxygen [@doxygen] which will parse the header files and produces an XML output. This XML output is further processed by DoxyBook [@doxybook] and exported as Markdown into a temporary folder. In the second job, the final job, the Markdown documentation is converted into HTML static pages via VuePress [@vuepress], and finally pushed into the `gh-pages` branch on the GitHub mirrored repository. These HTML files can be browsed online by accessing the repository.  ### 4.2.4 Distribution of binary artifacts -TBA: Bintray artifacts +When the artifacts are built on the continuous integrations, they are pushed to the BinTray [@bintray] into a custom generic repository. This repository is no more than a simple file storage with versioning labelling system. The reason behind BinTray is that if we wish to distribute the library and the header files to the user, we need to make it available to them. If this was a Java application, we could distribute the library via Maven. However, this is not possible with C++, as there is no official package distribution software to do it for us. We could host the artifacts on University's GitLab, but due to the problem with non-working pipelines, I have decided not to try this feature as it may be a waste of time. Instead, we could use the mirror repository on GitHub to host the artifacts. This can work until we reach the 1GB of used space. After this limit is reached, a friendly warning is sent to the owner forcing them to release some space. This has lead me to BinTray which allows up to 10GB of space and up to 1TB of download traffic, more than needed for these artifacts. + +When the artifact is built, it is compressed into a zip file. The versioning of these zip files is the following this schema: `rew-<version>-<machine>-<compiler>.zip`, where the `<version>` is the version described by the git, the tag, and the `<machine>-<compiler>` are retrieved from the compiler itself. This versioning is useful for the developer, if they wish to integrate this software in their own application. However, for a common user, this is a highly confusing naming scheme. It would be more beneficial to host a website, for example a product website, with three simple options (Windows, Linux, and OSX) for downloading the software. This product website does not exist, but could be part of the future of this project. + + ### 4.2.5 Documentation -The documentation is implemented via Doxygen [@doxygen] and a custom Doxygen xml parser DoxyBook [@doxybook]. The Doxygen parses the header files of this project and outputs an XML structure representing the classes, namespaces, and functions. This XML structure is then processed by DoxyBook, an open source command line utility created and maintained by myself. This utility converts the XML into Markdown files. The markdown files are then processed by VuePress [@vuepress]. The VuePress is a Vue.js [@vue] based platform for creating blogs and static page documentation. The reason for this choice is that the files generated can be browsed offline without a use of a HTTP server. Additionally, the generated static HTML files can be also uploaded to GitHub's gh-pages. The gh-pages is a name of a branch of a repository. If the branch is populated with HTML files, the GitHub will then automatically publish them online, without a use of a server. These files, the documentation, can be then viewed by anyone. +The documentation is implemented via Doxygen [@doxygen] and a custom Doxygen xml parser DoxyBook [@doxybook]. The Doxygen parses the header files of this project and outputs an XML structure representing the classes, namespaces, and functions. This XML structure is then processed by DoxyBook, an open source command line utility created and maintained by myself. This utility converts the XML into Markdown files. The markdown files are then processed by VuePress [@vuepress]. The VuePress is a Vue.js [@vue] based platform for creating blogs and static page documentation. The reason for this choice is that the files generated can be browsed offline without a use of a HTTP server. Additionally, the generated static HTML files can additionally be uploaded to the GitHub's gh-pages. The gh-pages is a name of a branch of a repository. If the branch is populated with HTML files, the GitHub will then automatically publish them online, without a use of a server. These files, the documentation, can be then viewed by anyone. ~~~{.cpp caption="Example of Doxygen comments within the header files"} REW_NAMESPACE{ @@ -133,9 +137,9 @@ REW_NAMESPACE{ ### 4.3.1 System structure -The system was split into two separate components: Encoder and Decoder. The Encoder will be designed to only accept a folder containing all website files, and outputs a raw stream of samples that can be saved into an audio file. These samples, a PCM stream, is a stream of 32bit floating point values representing the entire encoded website as audio. The samples need to be normalized values between -1.0f and +1.0f, so that they have the maximum gain possible, without causing audio clipping. Any values beyond or under +/-1.0f will be wrapped over, causing glitches. Any audio PCM sample of 0.0f is considered to be infinitely silent, while +/-1.0f is considered highest possible gain. The Decoder needs to accept these PCM samples, either through an audio input or from an audio file. The Decoder will then process these samples and extracts the compressed stream of data that holds the website contents. +The system was split into two separate components: the Encoder and the Decoder. The Encoder will be designed to only accept a folder containing all website files, and outputs a raw stream of samples that can be saved into an audio file. These samples, a PCM stream, is a stream of 32bit floating point values representing the entire encoded website as an audio. The samples need to be normalized values between -1.0f and +1.0f, so that they have the maximum gain possible, without causing audio clipping. Any values beyond or under +/-1.0f will be wrapped over, causing glitches - clipping. Any audio PCM sample of 0.0f is considered to be infinitely silent, while +/-1.0f is considered highest possible gain. The Decoder needs to accept these PCM samples, either through an audio input or from an audio file. The Decoder will then process these samples and extracts the compressed stream of data that holds the website contents. -Command Line Interface will be provided alongside of the encoder and decoder libraries, so that the user can use these application without integrating the library in their own software. However, our target demographic may not have the technical skills to operate the CLI. Therefore, a GUI application, one for the Encoder and one for the Decoder, will be part of the project and binary distribution provided for the user. This GUI will be implemented via Qt5 [@qt5], a cross platform library developed by Nokia. GTK+ [@gtk] was considered at the beginning, however due to incompatibility on newer Mac OSX versions, the GTK will not correctly work unless the user enables X11 manually. Therefore, QT5 for its wide compatibility was chosen as the GUI framework for this project. The binary distribution of Qt5 will be distributed alongside the GUI binary distribution of the Encoder and Decoder. This is necessary to ensure that the target user does not need to install Qt5 globally into their machine. +Command Line Interface will be provided alongside of the encoder and decoder libraries, so that the user can use these application without integrating the library in their own software. However, our target demographic may not have the technical skills to operate the CLI. Therefore, a GUI application, one for the Encoder and one for the Decoder, will be part of the project and binary distribution provided for the user. This GUI will be implemented via Qt5 [@qt5], a cross platform library developed by Nokia. GTK+ [@gtk] was considered at the beginning, however due to incompatibility on newer Mac OSX versions, the GTK will not correctly work unless the user enables the X11 manually. Therefore, QT5 for its wide compatibility, was chosen as the GUI framework for this project. The binary distribution of Qt5 will be distributed alongside the GUI binary distribution of the Encoder and the Decoder. This is necessary to ensure that the target user does not need to install Qt5 globally into their machine. All of the dependencies and target binaries are defined inside of the CMakeLists.txt files, one file for each Encoder or Decoder component. @@ -143,9 +147,9 @@ All of the dependencies and target binaries are defined inside of the CMakeLists ### 4.3.2 API Design -Because this project is meant to be open source, it must have a consistent API that is intuitive and easy to integrate to a custom software. Additionally, the algorithm must be adjustable. To satisfy these requirements, the algorithm was split into multiple blocks. Each block, using its own specific input data type, will consume the input and outputs it either in the same data type, or a new data type. Each block only does a single specific work, and is completely standalone. The blocks can be arranged together to form a pipeline (can be also described as flowgraph). This kind of implementation was inspired by GNU Radio [@gnuradio]. +Because this project is meant to be open source, it must have a consistent API that is intuitive and easy to integrate to a custom software. Additionally, the algorithm must be adjustable. To satisfy these requirements, the algorithm was split into multiple blocks. Each block, using its own specific input data type, will consume the input and outputs it either in the same data type, or a new data type. Each block only does a single specific work and is completely standalone. The blocks can be arranged together to form a pipeline (can be also described as flowgraph). This kind of implementation was inspired by the GNU Radio [@gnuradio]. -Each block is a derived class of Input and Output class. However, not every block needs to inherit both Input and Output classes. For example, a file audio source block, does not need to have an input, it only produces an output. An abstract Input class contains a virtual method `process()`. This method is called by the abstract Output class in order to forward the data. Due to the strict static typing of C++, the combination of Input and Output derived classes will always match. +Each block is a derived class of the Input and the Output base classes. However, not every block needs to inherit both Input and Output classes. For example, a file audio source block, does not need to have an input, it only produces an output. An abstract Input class contains a virtual method `process()`. This method is called by the abstract Output class in order to forward the data. Due to the strict static typing of C++, the combination of Input and Output derived classes will always match. ~~~{.cpp caption="The abstract Input with omitted code"} template<typename T> @@ -177,19 +181,19 @@ private: Using this idea, the following blocks have been implemented as listed below: -* `Clamp<typename I, typename O>` - A block that clamps the input based on a specific minimum and maximum variables. This is necessary in order to ensure that the algorithm produces samples in -1.0f and +1.0f range. -* `Merge<typename T, size_t N>` - A block that can merge N number of streams into a single stream for further processing. During this, the data is not converted to another data type, instead it is re-used. -* `Multiply<typename T>` - This block simply multiplies the input stream by a fixed value. -* `AudioSource` - (Decoder only) An abstract block that is used to produce an output of 32bit float PCM samples. This block needs to be further implemented. An implementation of `AudioReader` class, for reading audio files, and `AudioListener` class, for listening to the microphone audio input on the machine. TBA: WavAudioReader + PhysicalAudioListener. -* `FirFiler` - (Decoder only) Filters out a specific frequency from a raw stream of PCM samples. -* `Goertzel` - (Decoder only) Filters the input stream of 32bit float PCM samples and outputs a magnitude based on the frequency being tracked. +* `Clamp<typename I, typename O>` - A block that clamps the input based on a specific minimum and maximum variables. This is necessary in order to ensure that the algorithm produces samples in -1.0f and +1.0f range. At the same time, the output is converted into a different data type, specified by the template parameters. +* `Merge<typename T, size_t N>` - A block that can merge N number of streams into a single stream for further processing. During this, the data is not converted to another data type, instead it is re-used. During this process, the data is temporarily stored within the block. The data is forwarded once the length of all input paths matches, and then released and the input buffer reset. +* `Multiply<typename T>` - This block simply multiplies the input stream by a fixed value. No data type conversion happens. +* `AudioSource` - (Decoder only) An abstract block that is used to produce an output of 32bit float PCM samples. This block needs to be further implemented. An implementation of abstract `AudioReader` class, for reading audio files, and abstract `AudioListener` class, for listening to the microphone audio input on the machine. These two classes are then further implemented as concrete `WavAudioReader` and `PhysicalAudioListener` classes. `WavAudioReader` is meant to read audio samples from a WAV file, while the `PhysicalAudioListener` reads the audio samples from a physical input device. +* `FirFiler` - (Decoder only) This block is meant to filter out noise. It works by listening to a specific frequency from a raw stream of PCM samples. +* `Goertzel` - (Decoder only) Filters the input stream of 32bit float PCM samples and outputs a magnitude based on the frequency being tracked. The block needs to be initialized with a specific window size. This window size greatly changes the output magnitude and the accuracy of the algorithm as a whole. * `ByteAssembler` - (Decoder only) Takes a raw stream of Goertzel processed data and assembles a byte. * `PacketAssembler` - (Decoder only) Takes a raw stream of bytes and converts it into a Packet. An 8bit CRC is applied before the packet is constructed in order to verify its integrity. -* `FileAssembler` - (Decoder only) Takes a stream of packets and assembles the output file if all of the packets have been provided. This block caches the packets based on a file ID, and only outputs a file if all of the packets are provided and can be decompressed. +* `FileAssembler` - (Decoder only) Takes a stream of packets and assembles the output file, only if all of the packets have been provided. This block caches the packets based on a file ID, and only outputs a file if all of the packets are provided and can be decompressed. * `FrameSync` - (Decoder only) Waits for a frame synchronization and forwards a specific number of samples further down the pipeline. The amount of samples to forward is determined by the size of a single packet. This specific amount is necessary in order to ensure that the samples will or will not contain the packet we need to decode. -* `AudioSink` - (Encoder only) Similarly as in `AudioSource` except its role is reversed. An abstract class that is meant to be derived into a custom implementation in order to output the samples into a WAV file or a speaker output on the machine. -* `FileLoader` - (Encoder only) Loads a file into a memory and appends the file name at the start of the byte array representing the contents. Simply forwards the file in memory further down the connected blocks. -* `PacketGenerator` - (Encoder only) Accepts an in-memory file, and using a zlib compression the packets are generated. +* `AudioSink` - (Encoder only) Similarly as in `AudioSource` except its role is reversed. An abstract class that is meant to be derived into a custom implementation in order to output the samples into a WAV file or a speaker output on the machine. This class is further specialized as abstract `AudioWriter`, and a block `WavAudioWriter` has been provided as the concrete class. Additionally, `PhysicalAudioOutput` is provided as well. +* `FileLoader` - (Encoder only) Loads a file into a memory and appends the file name at the start of the byte array representing the contents. Simply forwards the contents further down the connected blocks. +* `PacketGenerator` - (Encoder only) Accepts an in-memory file, and using a zlib compression, the data is compressed and packets are generated. * `SamplesGenerator` - (Encoder only) Constructs samples using a raw stream of bytes. In this case, the stream of bytes are the packets from the `PacketGenerator`. More custom blocks can be implemented by the user using the abstract Input and Output classes. The new blocks will automatically be compatible with the pre-existing blocks as listed above. @@ -198,7 +202,7 @@ The detailed explanation behind the functionality of these blocks is explained i ### 4.3.3 Fast Fourier Transform and Goertzel Algorithm -During the prototyping phase, a Fast Fourier Transform (FFT) was considered in order to listen for the two specific frequencies representing the binary stream of data. After a lot of research done on this topic, a decision was made that using FFT was computationally heavy for a simple work we need. In this project, we are only looking at two specific frequencies, representing high and low bits, and a complete silence, representing no transmission. In the end, Goertzel Algorithm was used to do this. While FFT produces a buckets for a range of frequencies, Goertzel only produces a magnitude of a specific frequency we are trying to listen to. If no frequency is detected, the output of the algorithm is close or equal to zero. Goertzel can be sumarized in the following code: +During the prototyping phase, a Fast Fourier Transform (FFT) was considered in order to listen for the two specific frequencies representing the binary stream of data. After a lot of research done on this topic, a decision was made that using FFT was computationally heavy for a simple work we need. In this project, we are only looking at the two specific frequencies, representing high and low bits, and a complete silence, representing no transmission. In the end, the Goertzel algorithm was used to perform this process. While the FFT produces buckets for a range of frequencies, the Goertzel only produces a magnitude of a specific frequency we are trying to listen to. If no frequency is detected, the output of the algorithm is close or equal to zero. The Goertzel can be sumarized in the following code: ~~~{.cpp caption="Processing samples via Goertzel to produce a magnitude."} void processSamples(const float* samples, const size_t length) { @@ -214,7 +218,7 @@ void processSamples(const float* samples, const size_t length) { } ~~~ -The same algorithm can be represented in less than 23 assembly instructions. Not only Geortzel is faster than FFT, but it also solves the same problem. +The same algorithm can be represented in less than 23 assembly instructions. Not only the Goertzel is faster than the FFT, but it also solves the same problem we have. ~~~{.S caption="Processing samples via Goertzel represented as assembly. Compiled via GCC 8.3 amd64 with -O2."} processSamples(float const*, unsigned long): @@ -244,11 +248,11 @@ processSamples(float const*, unsigned long): ### 4.3.4 Packet design and the Algorithm -In order to transmit the files, or any large data, over an FM radio, we need to convert the files into an audio. There are multiple ways how to do this. For this project, Frequency Shift Keying (FSK) [@fsk] will be used. FSK encodes the stream of bits into two different frequencies. For the purpose of naming simplicity, the frequency to encode the low bit will be called low frequency, and the to encode the high bit will be called high frequency. To implement this, a simple `ToneSynth` class has been constructed. Combined with `SamplesGenerator` block, it creates PCM samples from a raw stream of bytes. Each byte is encoded into a fixed number of samples. This way we ensure that the Decoder can listen to a fix sized block of samples to decode it back into a byte. Additionally, frequencies 2400hz and 4800hz have been chosen for the low and high frequencies. Each byte is additionally delimited by a silence with a width of a single encoded bit. This way, we can easily calculate the expected number of samples for the entire input. +In order to transmit the files, or any large data, over an FM radio, we need to convert the files into an audio. There are multiple ways how to do this. For this project, Frequency Shift Keying (FSK) [@fsk] will be used. The FSK encodes the stream of bits into two different frequencies. For the purpose of the naming simplicity, the frequency to encode the low bit will be called low frequency, and the frequency to encode the high bit will be called high frequency. To implement this, a simple `ToneSynth` class has been constructed. Combined with the `SamplesGenerator` block, it creates PCM samples from a raw stream of bytes. Each byte is encoded into a fixed number of samples. This way we ensure that the Decoder can listen to a fix sized block of samples, in order to decode it back into a byte. Additionally, frequencies 2400hz and 4800hz have been chosen for the low and high frequencies. Each byte is additionally delimited by a silence with a width of a single encoded bit. This way, we can easily calculate the expected number of samples for the entire input. The choice of having the high frequency the double of the low frequency, is to ensure that the start and the end of the sine wave matches. This increases the accuracy of the Goertzel algorithm.  -Next, to decode the audio and make sense of the PCM samples, we apply the Goertzel algorithm. The Goertzel algorithm works in fixed number of samples, a window. The size of the Goertzel window greatly changes the magnitude of the output. After many attempts and tests made, a window size of a length of a single encoded bit has been chosen. Using sample rate of 48Khz and a single bit length of 1.25 millisecond, the window size is 60 samples. This window also slides per single sample. Using this method I have been able to produce the best bit detection results. +Next, to decode the audio, and make sense of the PCM samples, we apply the Goertzel algorithm. The Goertzel algorithm works in a fixed number of samples, a window. The size of the Goertzel window greatly changes the magnitude of the output. After many attempts and tests made, a window size of a length of a single encoded bit has been chosen. Using sample rate of 48Khz and a single bit length of 1.25 millisecond, the window size is 60 samples. This window also slides per single sample. Using this method I have been able to produce the best bit detection results.  @@ -260,7 +264,9 @@ To find the start and the end of the encoded byte, we simply look for the empty  -When we find the start and the end of the magnitude sequence, we can test for the length of the samples. If the does not match the expected length, it is discarded. However, not exact amount of samples may be found, while still being a valid sequence of samples. For example, an audio input of the user's machine may record in 47.9Khz due to chap hardware, while the application is configured in 48Khz. To fix this, a tiny margin has been applied during the length verification. When the byte is constructed, it is simply forwarded down the block pipeline for further processing. +When we find the start and the end of the magnitude sequence, we can test for the length of the samples. If the sequence does not match the expected length, it is discarded. However, not exact amount of samples may be found, while still being a valid sequence of samples. For example, an audio input of the user's machine may record in 47.9Khz due to lower-quality hardware, while the application is configured in 48Khz. To fix this, a tiny margin has been applied during the length verification. When the byte is constructed, it is simply forwarded down the block pipeline for further processing. + +The process of detecting wether the bits in the byte are low or high, we simply count the incoming magnitudes. These magnitudes come from a `Merge` block. This block outputs N number of streams. In our case, we are listening to two frequencies, therefore two streams. This stream is a clamped value of the Goertzel algorithm. Because it is clamped, we either get 1 or 0. To check wether we have a high or low bit, we simply divide the entire byte sequence into 8 equal buckets. Within each of the bucket, we count the number of `1` within each of the high or low stream. The higher count wins and we get a high or low bit. However, to encode a large number of data, we need to split the source data into a fixed sized packets. If we transmit the entire large file, the user's receiver may be interrupted, or simply temporarily blocked due to ambient noise, and the entire file lost. Instead, we use packets. Each packet has a simple fixed sized header that identifies the file ID and a packet sequence number. The packet structure then follows by a raw stream of data, in our case a 32 byte chunk, and finally by a single byte representing the 8-bit CRC of the entire packet. @@ -281,20 +287,20 @@ struct Packet { When we receive the packet, the algorithm, more specifically the `FileAssembler` block, will cache the received packets until the final packet has been received. To check whether we have the final packet, the `FileAssembler` block simply searches for the `{ 0xff, 0xff, 0x00, 0x00 }` sequence. This sequence is the footer of the zlib [@zlib] stream. Before the packets are constructed on the Encoder side, the data is compressed through zlib and the footer is appended automatically. We can use this to detect the end of the stream, and therefore the end of the packet sequence. To decompress the data, we simply feed the 32 byte chunks of data into the zlib deflator in the correct order. The CRC of the packet, and the zlib deflating process, should ensure that the decoded data is valid. -However, to mark the start and the end of the packet, we need to include synchronization. To implement this, we need to consider the following scenarios: +However, to mark the start and the end of the packet, we need to include a synchronization. To implement this, we need to consider the following scenarios: * The receiver, the FM radio, on the user's side may be interrupted by a noise or a hardware defect. * The transmission may be blocked by machine's interrupts (the machine, for example a computer, that transmits the data). * The receiver, the FM radio, may start receiving data in the middle of the packet. (The user has plugged in the audio input in the middle of the transmission). * The Decoder may be blocked by the user's machine interrupts or other tasks. -The Decoder is not meant to run on a dedicated hardware, therefore interruption of the audio input may happen at any time. To ensure that we have the beginning of the packet, we introduce a synchronization bytes. These bytes is a sequence of bytes that are transmitted at the start of every packet. The idea comes from NOAA satellites [@noaa]. More precisely, the synchronization of the weather images sent by the satellites [@fmpicture]. +The Decoder is not meant to run on a dedicated hardware, therefore interruption of the audio input may happen at any time. To ensure that we have the beginning of the packet, we introduce the synchronization bytes. These bytes is a sequence of bytes that are transmitted at the start of each packet. The idea comes from NOAA satellites [@noaa]. More precisely, the synchronization of the weather images sent by the satellites [@fmpicture]. ![Example of the transmission sent by the NOAA satellites. The synchronization is seen on the right as a quick transition between black and white pixels. The credits for the image belong to Mike Richards from his blog post "137MHz Polar Orbiting Weather Satellites" [@noaadecoding]](images/noaa.png) In this project, we use the same idea. The beginning of the packet is marked with a synchronization sequence of `{0xff, 0x00, 0xff, 0x00}` bytes. This was later changed to sequence `{0xf0, 0xf0, 0xf0, 0xf0}`. In the NOAA satellites, the synchronization sequence also marks the speed at which the data is transmitted, the baudrate. However due to the time constraints of this project, this was not implemented. Instead, the receiver must know the baudrate beforehand. This is something that could be added in the future. -When the synchronization sequence is detected, the Decoder then starts to buffer fixed number of samples, before forwarding it into the similar algorithm (explained in the section further). This fixed number of samples is calculated based on the baudrate (width of a single bit in number of samples), the sample rate of the audio input (usually 48Khz), and the spacing (the delimiter) between the bytes. When the samples are buffered, they are forwarded into the next stage, which follors the same algorithm with minor modifications, and packets are generated. If the packet is generated, it is verified for its integrity by calculating the CRC and comparing the value with the CRC value appended in the packet. +When the synchronization sequence is detected, the Decoder then starts to buffer fixed number of samples before forwarding it into a similar algorithm (explained in the section further). This fixed number of samples is calculated based on the baudrate (width of a single bit in number of samples), the sample rate of the audio input (usually 48Khz), and the spacing (the delimiter) between the bytes. When the samples are buffered, they are forwarded into the next stage, which follors the same algorithm with some minor modifications, and packets are generated. If the packet is generated, it is verified for its integrity by calculating the CRC and comparing the value with the CRC value appended in the packet.  @@ -306,11 +312,11 @@ The idea behind the algorithm is simple: accept a raw stream of 32bit float PCM This pipeline as shown above proved to be unsuccessful due to a reason that the packet synchronization breaks down. The reason is that the number of data that enters a block may not match the number of data that comes out of it. For example, when we are converting Goertzel decoded output of raw ones and zeros, it is converted into bytes. This is not a 1:1 conversion. Therefore, the track of time is lost. The algorithm can detect the synchronization bytes, however if the data failed to decode, the system will still have partial data that can affect the next packet. For example, it is possible that the Decoder will receive only the first three bytes of the synchronization sequence, the last byte fails to decode, and then the first byte of the file ID happens to be `0xf0`. The Decoder will mark that as the start of the packet, and the next 32+5 bytes are used, whether they form a real packet or a random sequence of mixed data. -This is a problem that we can solve by adding Frame Synchronization (`FrameSync` class) block. This block internally implements the same pipeline as above, however the track of the time is added into the bytes decoded. The track of time is measured in the number of samples and not via the system clock. The reason for this is that the algorithm does not run in a real time environment, unless a dedicated hardware is used. It is possible for the Decoder to be temporarily interrupted by the system process scheduler, therefore the system time would not match, even if we have received the bytes in correct distance apart. The `FrameSync` block remembers the last N bytes. This N matches the number of bytes in the expected synchronization sequence. This sequence must be the same for the Encoder and Decoder, otherwise no packets would be detected. If the received N bytes matches the expected sequence, the `FrameSync` block starts to buffer the next X number of samples. Additionally, the buffered bytes also need to verified for the distance at which the bytes have been received. The distance is the number of samples it takes to encode a single byte. If the distance is higher, this simply means the bytes received are not neighbours, and the buffer is reset. As mentioned previously, the X number (in the internal buffer for forwarding packet samples) is the amount of samples that is expected to hold the entire packet. This is calculated based on the expected width of a single byte, and the delimiter between the bytes. When the buffer is filled, it is then forwarded into the next pipeline (see figure below). If the packet is decoded, it is added into the `FileAssembler`. If no packet is decoded, for example due to noise or transmission errors, the pipeline is reset and no packet is added. When the pipeline is reset, it simply listens for the next synchronization sequence. +This is a problem that we can solve by adding a frame synchronization (`FrameSync` class) block. This block internally implements the same pipeline as above, however the track of the time is added into the bytes decoded. The track of time is measured in the number of samples and not via the system clock. The reason for this is that the algorithm does not run in a real time environment, unless a dedicated hardware is used. It is possible for the Decoder to be temporarily interrupted by the system process scheduler, therefore the system time would not match, even if we have received the bytes in correct distance apart. Additionally, the raw samples from the audio input device may not come at exact intervals. It all depends on the OS process scheduler. The `FrameSync` block remembers the last N bytes. This N matches the number of bytes in the expected synchronization sequence. This sequence must be the same for the Encoder and the Decoder, otherwise no packets would be detected. If the received N bytes matches the expected sequence, the `FrameSync` block starts to buffer the next X number of samples. Additionally, the buffered bytes also need to verified for the distance at which the bytes have been received. The distance is the number of samples it takes to encode a single byte. If the distance is higher, this simply means the bytes received are not neighbours, and the buffer is reset. As mentioned previously, the X number (in the internal buffer for forwarding packet samples) is the amount of samples that is expected to hold the entire packet. This is calculated based on the expected width of a single byte, and the delimiter between the bytes. When the buffer is filled, it is then forwarded into the next pipeline (see figure below). If the packet is decoded, it is added into the `FileAssembler`. If no packet is decoded, for example due to noise or transmission errors, the pipeline is reset and no packet is added. When the pipeline is reset, it simply listens for the next synchronization sequence.  -This pipeline is provided in the dynamic library of the Decoder. However the user, if they wish to, are able to reconstruct this pipeline in their own specific way. The user is also able to further connect their own custom blocks, for example to forward the data into their own software for further processing. This is optional and not the main usage of this algorithm. The main usage is simply to encode or decode websites. The target user of this application does not have programming skills to implement this. This block design is purely an optional feature. +This pipeline is provided in the dynamic library of the Decoder. However, the user, if they wish to, is able to reconstruct this pipeline in their own specific way. The user is also able to further connect their own custom blocks, for example to forward the data into their own software for further processing. This is an optional feature and not the main usage of this algorithm. The main usage is simply to encode or decode a static websites. The target user of this application may not have programming skills to implement this. This block design is purely an optional feature. ### 4.3.6 Command Line Interface @@ -342,13 +348,16 @@ build\Debug\decoder-cli.exe --help Serve the decoded files on local HTTP server via http://localhost:8080 ~~~ -TBA: ASIO and serving HTTP files. +To be added: ASIO and serving HTTP files. ### 4.3.7 Graphical User Interface -TBA: Qt5 and GUI description + screenshots. +To be added: Qt5 and GUI description + screenshots. ## 4.4 Unit Testing +To be added: Unit testing with Catch2 + ## 4.5 Performance Testing +To be added: Performance testing on different hardware and different OS. diff --git a/report/chapters/introduction.md b/report/chapters/introduction.md index e10b99d..c8cf3cd 100644 --- a/report/chapters/introduction.md +++ b/report/chapters/introduction.md @@ -1 +1,52 @@ -# Introduction +# 1. Introduction + +The aim of this project is to create a fully working GUI application and CLI application to transmit static web pages over FM Radio. This project will additionally consists of a shared library, which can be used the user. Having a shared library is beneficial for the user, if they wish to modify or enhance the Decoder or the Encoder. But, the target end user of this application is not a developer nor an engineer. Thus, a GUI application will be provided. Additionally, a CLI program will be provided alongside the GUI. The CLI can be used on IoT devices such as Raspberry Pi or simply on machines that do not have GUI capabilities. + +Because of the limitations of the carrier (audio), the throughput is limited to few bytes per second. Therefore this project is intended to be used with a simple static website with little to no embedded images. A great example is a Wikipedia article. + +## 1.1 Background + +There have been many natural disasters around the world, such as the hurricanes Maria and Irma in Puerto Rico in 2017. People have been left without electricity for months. Because of this, the information infrastructure collapsed, people had no access to the internet or media. The idea of this project is to provide an internet access in times of similar crisis. + +This project, Radio Enabled Web, can use already existing hardware, the FM radio, to receive the static website. The FM Radio is an old technology and easily accessible and cheap. On the other had, people do not have FM transmitter laying around in their houses. However, it is possible to construct low power FM transmitter from around 20 passive components and few transistors. The FM transmitter circuit can be found in some beginner electronics DIY books. Therefore, the idea is that it only needs one person to create the FM transmitter, with little to no electronics skills. Additionally, because FM radios are common domestic appliance, the users will only require the application and a computer. + +This project can be used to distribute a static website to the public, when the infrastructure collapses. The contents of the websites can provide a basic guidelines for the public, such as a map of refugee camps or specific instructions given to the citizens from the government. + +## 1.2 Motivation + +The idea of this project came to me when I was working with my brother on a hobby project with Software Defined Radio (SDR). We were interested in receiving raw weather images from a NOAA [@noaa] satellite orbiting around the Earth. The satellite constantly transmits the data, and anyone who listens with the proper hardware can receive these images. I was also interested in decentralized internet, an internet created by the users, that can survive a natural disaster. Thus, the FM radio internet idea was born. The initial idea was to have a specific + + +Additionally, I wanted to create something unique that can benefit the public. + +## 1.3 Aims & Objectives + +This project aims to develop a GUI and CLI applications to encode or decode an audio into a static website. The following criteria are: + +* Design a block based algorithm that can be structured into any kind of pipeline. This pipeline will be used to decode or encode the static website into an audio. +* Create a shared (dynamic) library that consists of pre-build set of blocks and the algorithm itself. Leave the implementation open so that it can be adjusted if needed to. +* Create continuous integration scripts so that the application and the library are tested for every new added feature. The CI also serves as a proof that the application is portable across different platforms. +* Create a CLI that uses the shared library. The CLI can be used on non GUI enabled computers to transmit or decode the data. +* Create a GUI that a user can use to encode or decode the static website. +* Create a HTTP server that is embedded into both the CLI and GUI applications so that the user can browse the encoded website with a web browser. +* Perform tests with real FM hardware and modify the implementation if needed to. + +## 1.4 Success Criteria + +The following are success criteria needed for this project to be marked as success: + +* A working implementation of the encoding and decoding algorithm. +* Ability to decode the data from noisy transmission. A noise filter must be implemented. +* A working Command Line Interface. +* A working Graphical User Interface. +* Cross platform support for Windows, Linux, and Mac OSX. + +## 1.5 Report Structure + +* *1. Introduction* - This section provides a brief introduction and highlights the aims and objectives of this project. +* *2. Literature Review* - This section provides an investigation into already existing or similar technologies. Additionally, relevant findings are highlighted. +* *3. System Requirements* - This section includes a set of features of the system. This section also provides software and hardware specifications. +* *4. System Design and Implementation* - The main part of this report, which consists of detailed description of the algorithm implementation and C++ project structure as a whole. This section is also dedicated to a usability of continuous integration. +* *5. System Testing* - This entire section is dedicated to testing of the algorithm via FM transmitter and receiver. The section is also dedicated to performance testing on a number of different hardware. +* *6. Conclusion and Future Work* - This section highlights the success of this project. Additionally, any changes or improvements that have not been included in the final implementation are described in here. + diff --git a/report/chapters/literature.md b/report/chapters/literature.md index 7984f4f..66131b0 100644 --- a/report/chapters/literature.md +++ b/report/chapters/literature.md @@ -1 +1,8 @@ -# Literature Review +# 2. Literature Review + +This chapter will discuss any relevant technologies and relevant encoding or decoding strategies explained. + +## 2.1 Modulation + + + diff --git a/report/chapters/originality.md b/report/chapters/originality.md new file mode 100644 index 0000000..fbcd497 --- /dev/null +++ b/report/chapters/originality.md @@ -0,0 +1,3 @@ +# Declaration of Originality + +I confirm that the submitted work is my own work and that I have clearly identified and fully acknowledged all material that is entitled to be attributed to others (whether published or unpublished) using the referencing system set out in the programme handbook. I agree that the University may submit my work to means of checking this, such as the plagiarism detection service Turnitin® UK. I confirm that I understand that assessed work that has been shown to have been plagiarised will be penalised. diff --git a/report/chapters/requirements.md b/report/chapters/requirements.md index 1049473..069c09f 100644 --- a/report/chapters/requirements.md +++ b/report/chapters/requirements.md @@ -1 +1,15 @@ -# System Requirements +# 3. System Requirements + +## 3.1 Functional Requirements + +## 3.2 Non-Functional Requirements + +## 3.3 Software and Hardware Specifications + +## 3.4 Technical Feasibility + +### 3.4.1 Legal Feasibility + +### 3.4.2 operational Feasibility + +### 3.4.3 Economical Feasibility diff --git a/report/chapters/research.md b/report/chapters/research.md deleted file mode 100644 index 15d2a04..0000000 --- a/report/chapters/research.md +++ /dev/null @@ -1 +0,0 @@ -# Research topic in theory diff --git a/report/chapters/specifications.md b/report/chapters/specifications.md deleted file mode 100644 index 247b185..0000000 --- a/report/chapters/specifications.md +++ /dev/null @@ -1 +0,0 @@ -# Specifications diff --git a/report/chapters/testing.md b/report/chapters/testing.md index f00b526..10da05e 100644 --- a/report/chapters/testing.md +++ b/report/chapters/testing.md @@ -1 +1,3 @@ -# Testing +# 5. System Testing + +To be added: Testing on a real FM transmitter and receiver hardware. diff --git a/report/images/BinTray.png b/report/images/BinTray.png new file mode 100644 index 0000000000000000000000000000000000000000..39682a5b5493d790e595f79fb9de26b833275a04 GIT binary patch literal 97699 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 literal 0 HcmV?d00001 diff --git a/report/index.mdpp b/report/index.mdpp index cefeba2..e058c24 100644 --- a/report/index.mdpp +++ b/report/index.mdpp @@ -5,22 +5,22 @@ date: January 1 1970 geometry: "left=3cm,right=3cm,top=2cm,bottom=2cm" --- +!INCLUDE "chapters/originality.md" + !INCLUDE "chapters/abstract.md" !INCLUDE "chapters/acknowledgement.md" -!INCLUDE "chapters/acronyms.md" +!INCLUDE "chapters/abbreviations.md" -!INCLUDE "chapters/introduction.md" +\tableofcontents -!INCLUDE "chapters/research.md" +!INCLUDE "chapters/introduction.md" !INCLUDE "chapters/literature.md" !INCLUDE "chapters/requirements.md" -!INCLUDE "chapters/specifications.md" - !INCLUDE "chapters/design.md" !INCLUDE "chapters/testing.md" diff --git a/report/make.bat b/report/make.bat index 30d0858..168fd3b 100644 --- a/report/make.bat +++ b/report/make.bat @@ -1,3 +1,3 @@ mkdir build markdown-pp index.mdpp -o build/report.md -pandoc --filter pandoc-citeproc --bibliography=bibliography.bib --variable papersize=a4paper --csl=ieee.csl --toc --listings --include-in-header mixins/fix-captions.tex --include-in-header mixins/titlesec.tex --include-in-header mixins/table.tex --include-in-header mixins/listings.tex -o build/report.pdf build/report.md +pandoc --filter pandoc-citeproc --bibliography=bibliography.bib --variable papersize=a4paper --csl=ieee.csl --listings --include-in-header mixins/fix-captions.tex --include-in-header mixins/titlesec.tex --include-in-header mixins/table.tex --include-in-header mixins/listings.tex -o build/report.pdf build/report.md -- GitLab