Artemis 4 RC1

This commit is contained in:
Marco Dalla Tiezza
2024-05-28 22:40:45 +02:00
parent acc44c93b3
commit 528c816508
254 changed files with 14757 additions and 30137 deletions

62
docs/acf_analysis.md Normal file
View File

@@ -0,0 +1,62 @@
# Autocorrelation Function (ACF)
## Theoretical Introduction
Correlation functions are valuable mathematical tools utilized across various scientific disciplines, including engineering, physics, and chemistry. The cross-correlation function, commonly defined as a sliding inner (dot) product, quantifies the similarity between two signals as a function of a temporal shift applied to one of them:
$$
\left[ k*l \right]\equiv \int_{-\infty}^{+\infty}k^{*}(t)l(t+\tau)dt
$$
where $k$ and $l$ are two general non-discrete functions without discontinuity, $k^{*}$ is the complex conjugate of $k$ and $\tau$ is the lag (time delay for signal analysis). This representation is closely related to the convolution theorem by the following relationship:
$$
k(t)*l(t)\equiv k^{*}(-t)*l(t)
$$
In our case, the signal must be compared with itself to identify periodic patterns or detect anomalous high degrees of similarity within a given time interval. To achieve this objective, we can employ the Autocorrelation Function (ACF), which is essentially the cross-correlation of a signal with itself, where $k(t)=l(t)$. The following equation defines the ACF, derived from a straightforward modification of the initial equation:
$$
\left[ k*k \right](\tau)\equiv \int_{-\infty}^{+\infty}k^{*}(t)k(t+\tau)dt
$$
Within a discrete data set composed by $Y(t)$ records we can easily calculate autocorrelation from:
$$
\rho_{\tau}=\frac{\sum_{i=1}^{N-\tau}(Y_i-\bar{Y})(Y_{i+\tau}-\bar{Y})}{\sum_{i=1}^{N}(Y_i-\bar{Y})^2}
$$
where $Y_{i+τ}$ is a lagged data by $τ$ of $Y_i$ and $\bar{Y}$ is the average value of the original data set. Entire denominator is used to keep the normalization condition, indeed ρτ can assume a value between -1 (exact anticorrelation) and +1 (exact correlation). A complete correlation can be only achieved with a perfect overlap of the analyzed function with it self; the simple way to verify that is when $τ=0$
![Screenshot](assets/acf_1.png)
## Example: ACF Analysis
### STANAG 4285
The first example will be a NATO standard known as STANAG 4285. You can download a .wav sample from HERE. We start to collect some information about the structure of this signal: a good starting point is the official declassified NATO document dated 1989. The main frame structure can be found at **Annex A-3/5** with a graphical view at **Annex A-7**, also reported below:
* [STANAG 4285 (i)](assets/acf_2.png)
* [STANAG 4285 A-3](assets/acf_3.png)
* [STANAG 4285 A-4](assets/acf_4.png)
* [STANAG 4285 A-5](assets/acf_5.png)
* [STANAG 4285 A-7](assets/acf_6.png)
!!! note "Summary"
* 1 x 80 bits of synchronization pattern
* 4 x 32 bits of data
* 3 x 16 bits of reference
Therefore, a full sequence will be composed as the sum of all symbols reported above: 256 symbols recursively transmitted at the ratio of 2400 bauds means a redundancy of 106.66 ms.
To analyze an unknown signal I strongly recommend **Signal Analyzer (SA)**. SA is actually one of the most valuable and priceless software available by Sergey Makarov (Макаров Сергей Михайлович, sadly passed away on 29 May 2012) and it used to perform several tests on data sample coded as .wav or .mp3 file. The signal waterfall is reported below:
![Screenshot](assets/acf_7.png)
When an Autocorrelation function is applied on selected data frame (see above), the result shows a clear recursive pattern with a gap of **106.244 ms** between every peak as expected. An ACF refinement can be done into **WaveForm** windows where we can also notice an identical structure as reported by the specifications
![Screenshot](assets/acf_8.png)
![Screenshot](assets/acf_9.png)
!!! Success "Summary"
1. Synchronization pattern is composed by $2400*33.013E-3=79.2\simeq 80$ symbols
2. Data group contain $2400*13.348E-3=32.0=32$ symbols
3. Reference sequence is formed by $2400*6.674E-3=16.02\simeq 16$ symbols

BIN
docs/assets/acf_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/assets/acf_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
docs/assets/acf_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

BIN
docs/assets/acf_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

BIN
docs/assets/acf_5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
docs/assets/acf_6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
docs/assets/acf_7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

BIN
docs/assets/acf_8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
docs/assets/acf_9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="222.267" height="371.88" viewBox="0 0 166.7 278.91" fill="#231f20" xmlns:v="https://vecta.io/nano"><path d="M0 140.2L83.35 0l83.35 140.2-25.74 43.28-16.55-27.43c2.98-5.36 6.25-10.54 9.33-15.84L83.35 55.44 32.96 140.2l9.34 15.79-16.52 27.47L0 140.2zm37.52 62.49l45.83-76.19 45.83 76.18-45.83 76.23-45.83-76.22z"/></svg>

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="222.267" height="371.88" viewBox="0 0 166.7 278.91" fill="#231f20" xmlns:v="https://vecta.io/nano"><path d="M0 140.2L83.35 0l83.35 140.2-25.74 43.28-16.55-27.43c2.98-5.36 6.25-10.54 9.33-15.84L83.35 55.44 32.96 140.2l9.34 15.79-16.52 27.47L0 140.2zm37.52 62.49l45.83-76.19 45.83 76.18-45.83 76.23-45.83-76.22z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 377 B

BIN
docs/assets/sql_schema.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

51
docs/build_package.md Normal file
View File

@@ -0,0 +1,51 @@
# Build Package
Building a distributable package with an executable for Artemis creates a practical solution for end-users, as they can run the application without needing to interact with the terminal and they can easily share the application as a stand-alone package.
## Requirements
* Python (3.11 or higher)
!!! info
We assume that Python is already installed on the system and the Artemis source code has been downloaded and extracted. If these prerequisites are not met, please follow steps 1 to 3 in the [run from source section](run_from_source.md).
!!! warning "Cross-Compilation"
To generate standalone packages, an operating system that matches the target OS must be used, as Nuitka does not support cross-compilation. For example: you cannot build binaries on Windows that work on Linux or macOS.
## :simple-windows: Windows
### Procedure
1. Open a PowerShell terminal in the main Artemis folder and execute the following command to start the build process:
```
.\building\Windows\build_windows.ps1
```
2. Wait for the build process to complete. This may take a few minutes depending on your system's performance. Once the process finishes, check the `artemis.dist/` directory: it will contain the stand-alone software with the `artemis.exe` executable.
---
## :simple-linux: Linux
### Procedure
1. Open a terminal in the main Artemis folder and execute the following command to start the build process:
```
. ./building/Linux/build_linux.sh
```
2. Wait for the build process to complete. This may take a few minutes depending on your system's performance. Once the process finishes, check the `artemis.dist/` directory: it will contain the stand-alone software with the `app.bin` executable.
3. If you wish to create a shortcut, follows the procedure in the [installation section](installation.md/#create-a-shortcut)
---
## :simple-apple: Mac OS
!!! warning
The support for the macOS compiled version of the program is temporarily limited due to a lack of machines for extensive testing. Feel free to contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues).
### Procedure
1. Open a terminal in the main Artemis folder and execute the following command to start the build process:
```
. ./building/macOS/build_macos.sh
```

37
docs/contribute.md Normal file
View File

@@ -0,0 +1,37 @@
# Contribute
Artemis is an open source project an every contribution, no matter how small, is valuable and greatly appreciated. Don't worry about getting everything perfect, we are happy to work with you on your contribution and help you along the way. This guide will help you get started by outlining various ways you can contribute.
<div class="grid cards" markdown>
- :material-bug: __Spot a bug?__
---
Open an issue (or pull request) and let us know the problem you faced (or you're working on)
[:octicons-arrow-right-24: Open an Issue](https://github.com/AresValley/Artemis/issues)
- :material-source-fork: __Fork the repository__
---
Create your own copy of the codebase that you can modify and submit pull requests from.
[:octicons-arrow-right-24: Fork the repo](https://github.com/AresValley/Artemis)
- :material-lightbulb-on: __Ideas?__
---
Idea for a new feature? Open an issue on the project's GitHub repository to describe your proposal in detail.
[:octicons-arrow-right-24: Open an Issue](https://github.com/AresValley/Artemis/issues)
- :material-heart: __Spreading the word!__
---
Do you like Artemis? Don't forgeto to share it with your network and your friends!
</div>

76
docs/credits.md Normal file
View File

@@ -0,0 +1,76 @@
# License & Credits
## License
Artemis is maintained by Marco Dalla Tiezza and released under the [GPLv3](https://github.com/AresValley/Artemis/blob/master/LICENSE) license.
## Credits
* **Marco Dalla Tiezza** - *Artemis I-II-IV developer, DB parsing, Website*
* [**Alessandro Ceccato**](https://github.com/alessandro90 "GitHub profile") - *Artemis III lead developer*
* **Paolo Romani (IZ1MLL)** - *Lead β Tester, RF specialist*
* **Carl Colena** - *Sigidwiki admin, β Tester, Signals expert*
* [**Marco Bortoli**](https://github.com/marbort "GitHub profile") - *macOS deployment, β Tester*
* [**Eric Wiessner (KI7POL)**](https://github.com/WheezyE "GitHub profile") - *ARM port (Raspberry Pi3B+ and Pi4B)*
* [**Pierpaolo Pravatto**](https://github.com/ppravatto "GitHub profile") - *Wiki page, β Tester*
* [**Francesco Capostagno**](https://github.com/fcapostagno "GitHub profile"), **Luca**, **Pietro** - *β Tester*
## Donators
* Eric Hahn
* Alan Lawrence
* Diego Gil Fernandez
* Torsten Teichert
* Charles Preston
* Brad Hein
* Paolo Romani
* Michelle Corbani
* Martin van Duinen
* Valentino Zardi
* Emmanuel Fabre
* Oscar Nilsson
* Pierre Declercq
* Detlef Jahn
* Oliver Schellenberg
* Stephane Imbertone
* Roel Ketelaars
* Timothy Ehrhart
* George Mager
* Gerhard Amon
* Gerald Schmidt
* Carlos Rocha
* Joshua Frohberg
* Bill Riches
* Jeffrey Krehbiel
* Володимир Багмет
* Philip Hamlin
* David Davies
* Nigel P. Lawrence
* Marco Rissi (PP5ZX)
* Martin van Duinen
* Alex Diamantopulo
* Joseph Winter
* Mark Bender
* Rolf Gerhardt
* Denese Harris
* Benjamin Steele
* Alexander Irmscher
* Jonathan Chang
* Torsten Lipke
* Massimo Petrantoni
* William Arcand
* Jon Carp
* Robert Crone
* William Houston
* Richard Quasne
* Tom Krugliakov
* Francisco Neira Basso
* Alistair Macrae
* Kevin Arburn
* Marek Barłóg
* Gabriel Glösmann
* Corbin Williams
* Ton Machielsen
* Ivan Rancic
* Alipio Fernandez
* Matt Eisele
* Martin Dudel
* Harald Geier

25
docs/db_acf.md Normal file
View File

@@ -0,0 +1,25 @@
# ACF
The table contains 4 columns explained below.
!!! example
A technical explanation on how autocorrelation function works along with a practical example is reported [HERE](acf_analysis.md)
## ACF_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new ACF. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the ACF. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`FLOAT`
The autocorrelation time expressed in ms.
## DESCRIPTION
`TEXT`
The short description is used to explain the details about the autocorrelation value, e.g. `Frame`, `Superframe`, etc.

22
docs/db_bandwidth.md Normal file
View File

@@ -0,0 +1,22 @@
# Bandwidth
The table contains 4 columns explained below.
## BAND_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new bandwidth. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the bandwidth. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`INTEGER`
The bandwidth in Hz expressed as an integer.
## DESCRIPTION
`TEXT`
The short description is used to explain the purpose of the bandwidth and any other useful details.

12
docs/db_cat_label.md Normal file
View File

@@ -0,0 +1,12 @@
# Category Label
This table contains only the name of the category/tag. The table contains 2 columns explained below.
## CLB_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new category tag. It is auto-incrementing and is not replaced in the event of deletion.
## VALUE
`TEXT`
The name of the category/tag expressed as a string.

17
docs/db_category.md Normal file
View File

@@ -0,0 +1,17 @@
# Category
The primary function of this table is to facilitate the classification of the signal by assigning it to its appropriate family or category. Can be used with any tag. The table contains 3 columns explained below.
## CAT_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new category/tag. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the category. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## CLB_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific **category label** associated with the category. It links to the primary key of the [Category Label](db_cat_label.md) table that holds the name of the category.

22
docs/db_frequency.md Normal file
View File

@@ -0,0 +1,22 @@
# Frequency
The table contains 4 columns explained below.
## FREQ_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new frequency. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the frequency. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`INTEGER`
The freqeuncy in Hz expressed as an integer.
## DESCRIPTION
`TEXT`
The short description is used to explain the purpose of the bandwidth and any other useful details.

28
docs/db_info.md Normal file
View File

@@ -0,0 +1,28 @@
# Info
This is the database meta table and contains 4 columns explained below.
## NAME
`TEXT`
This is the name of the database.
## DATA
`TEXT`
The creation date when the database has been initialised.
## VERSION
`INTEGER`
A simple integer to denote the database version.
## EDITABLE
`INTEGER`
This field should serve as a writing protection on the database.
* **0**: read-only database
* **1**: database can be edited with no restrictions
!!! example "Experimental"
This feature is experimental and not yet implemented.

22
docs/db_location.md Normal file
View File

@@ -0,0 +1,22 @@
# Location
This is the location where the signal is distributed/received. Avoid the usage of the precise location of the TX station or very small town (very rare). It's a good habit to use **nations/continents** or special location (like `Worldwide`). The table contains 4 columns explained below.
## LOC_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new location. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the location. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`TEXT`
The location expressed as a string.
## DESCRIPTION
`TEXT`
The short description is used to explain further details about the location.

22
docs/db_mode.md Normal file
View File

@@ -0,0 +1,22 @@
# Mode
This field reports the way how a signals has been decoded during the reception. The table contains 4 columns explained below.
## MOD_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new mode. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the modulation. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`TEXT`
The mode expressed as a string.
## DESCRIPTION
`TEXT`
The short description is used to explain the purpose of the mode and any other useful details.

22
docs/db_modulation.md Normal file
View File

@@ -0,0 +1,22 @@
# Modulation
Modulation refers to the method by which information is encoded into the main signal (carrier). This process involves altering various properties of the carrier signal, such as amplitude, frequency, or phase. Multiple modulation techniques can be employed, and a TX station has the capability to utilize different modulation schemes. The table contains 4 columns explained below.
## MDL_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a new modulation. It is auto-incrementing and is not replaced in the event of deletion.
## SIG_ID
`INTEGER` :material-axis-arrow:{ title="Foreign key" }
This is a direct reference to the specific signal associated with the modulation. It links to the primary key of the [Signals](db_signals.md) table that holds detailed information about the signals.
## VALUE
`TEXT`
The modulation expressed as a string.
## DESCRIPTION
`TEXT`
The short description is used to explain the purpose of the modulation and any other useful details.

8
docs/db_overview.md Normal file
View File

@@ -0,0 +1,8 @@
# Database
With the release of Artemis 4, we have made a significant upgrade in our data management system by transitioning from a CSV file to a full relational SQL database. This change brings a multitude of advantages that enhance the efficiency, scalability, and reliability of our system. In the following sections, we will explore, table by table, the structure of the new database.
![Screenshot](assets/sql_schema.webp)

28
docs/db_signals.md Normal file
View File

@@ -0,0 +1,28 @@
# Signals
This is the main table and contains 4 columns explained below.
## SIG_ID
`INTEGER` :material-key-outline:{ title="Primary key" } :material-upload-outline:{ title="Auto-increment" }
This is a unique identification number for each entry that is assigned during the creation of a signal. It is auto-incrementing and is not replaced in the event of signal deletion.
## NAME
`TEXT`
The name of the signal. A simple string that describes in short the analyzed signal. Special characters are allowed.
## DESCRIPTION
`TEXT`
The short description is used to explain the purpose of the signal and some other useful details.
!!! tip
The DESCRIPTION field supports **Markdown**, a simple markup language for creating rich text using plain text. Headers, emphasis, lists, links, code blocks and many more features for advanced text formtting. [Markdown Basic Syntax :simple-markdown:](https://www.markdownguide.org/basic-syntax/)
## URL
`TEXT`
The sigidwiki (SigID) URL of the selected signal. This is a direct connection to the online database where further details of the signal are collected.
!!! info
**Internal Use Only** This field is for the SigID database and not intended for user viewing or editing. Personal URLs can be stored in the signal description.

11
docs/index.md Normal file
View File

@@ -0,0 +1,11 @@
---
title: Documentation
---
#
<p align="center" markdown>
![Logo](assets/logo_large_black.svg#only-light){width="400"}
![Logo](assets/logo_large_white.svg#only-dark){width="400"}
</p>
**Artemis** is a software designed to assist **radio frequency (RF) signal identification and storage**. It simplifies real-time spectrum analysis by leveraging one of the most extensive and community-driven databases, containing nearly **500 recognized signals**. This comprehensive software solution allows users to collect RF signals with specific parameters such as frequency, bandwidth, modulation, etc. Users can also store spectrum waterfalls, audio samples, and all types of documents for future reference. Artemis provides a robust platform to manage a wide range of RF data with precision and ease.

38
docs/installation.md Normal file
View File

@@ -0,0 +1,38 @@
# Installation
**Requirements:**
* **Windows** 8 or later
* **Linux** Ubuntu 20.04+ / Mint 20+ / Fedora 32+ and many other
* **macOS** 11+ (Big Sur or later)
## :simple-windows: Windows
Just download the installer and follow the guided procedure to complete the installation process.
---
## :simple-linux: Linux
Download and extract the tarball archive in a folder of your choice and run the executable `app.bin`.
### Create a Shortcut
1. To create a direct shortcut (in the main menu) launch the bash script in the terminal with the command:
```
. create_shortcut.sh
```
This script will:
- Set the correct read/write privileges of the Artemis folder
- Create the artemis.desktop file (shortcut) in /home/$USER/.local/share/applications
- Move the Artemis icon file to /usr/share/icons
---
## :simple-apple: Mac OS
The support for the macOS compiled version of the program is temporarily limited due to a lack of machines for extensive testing. To use Artemis on a macOS device, you have the following options:
* **Run the program directly from the source:** Follow the instructions provided in [this chapter](run_from_source.md) to launch the program from the source code.
* **Compile the Artemis 4 binaries on your machine:** In this case, you can contribute by reporting any issues you encounter by [opening an Issue](https://github.com/AresValley/Artemis/issues).
* **Use the last available compiled version (3.2.1):** Although this version is no longer officially supported, it remains available for use.

10
docs/javascripts/katex.js Normal file
View File

@@ -0,0 +1,10 @@
document$.subscribe(({ body }) => {
renderMathInElement(body, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
{ left: "\\(", right: "\\)", display: false },
{ left: "\\[", right: "\\]", display: true }
],
})
})

29
docs/run_from_source.md Normal file
View File

@@ -0,0 +1,29 @@
# Run from source code
Running Artemis directly from the source code using the Python interpreter is considered the most reliable and least problematic method. This approach ensures maximum compatibility and reduces the likelihood of encountering runtime issues. However, it is also the less practical option, as it requires the use of the terminal for the execution.
## Requirements
* Python (3.11 or higher)
## Procedure
1. Download and install Python (3.11 or higher) from the official [website](https://www.python.org/downloads/). Be sure to select the flag `Add Python 3.x to PATH` during the first part of the installation.
2. Download Artemis source code from the [latest release](https://github.com/AresValley/Artemis/releases) in the GitHub repository.
3. Extract the downloaded archive.
4. Open the terminal in Artemis folder and install the required Python libraries with PIP:
```
pip install -r requirements.txt --user
```
5. Launch Artemis:
```
python app.py
```
!!! example "Note for Developers"
Whenever modifications are made to any **.qml** file or any assets (such as images, icons, etc.), it is essential to recompile the **resource.py** file to ensure that the changes are reflected in the application. To achieve this, execute the following command:
```
pyside6-rcc ./artemis.qrc -o artemis/resources.py
```

45
docs/sigid.md Normal file
View File

@@ -0,0 +1,45 @@
# SigID Wiki Database
Artemis serves as a valuable resource for both personal signal collection and leveraging a vast repository of pre-identified signals. This software application allows users to curate their own collections, but its true strength lies in its integration with a comprehensive database of known signals. This database is directly sourced from the [Signal Identification Wiki](https://www.sigidwiki.com/wiki/Signal_Identification_Guide), an open-source resource collaboratively maintained by a global community of radio enthusiasts.
!!! tip "Database Revision"
For quality control purposes, the database undergoes a rigorous review process before integration into Artemis. This review adheres to established guidelines (**DIANA** crawler, not yet released), ensuring the accuracy and completeness of the information presented to users. The specifics of this review process are outlined in the following section.
## Modulation
A good practise (reported also on ) is to write the primary type of modulation (if known) and not all the possible variants. A practical example is reported on [Signal Identification Wiki](https://www.sigidwiki.com/wiki/Signal_Identification_Guide): there is no need to write **8-PSK** or **QPSK**, **PSK** is enough. The Artemis SigID database is provided without any modulation variants included. The recognized modulations are listed below:
### Analog
* **AM:** Amplitude Modulation
* **FM:** Frequency Modulation
* **PM:** Phase Modulation
* **LSB:** Lower Sideband
* **USB:** Upper Sideband
* **VSB:** Vestigial Sideband
* **CW:** Continuous Wave
### Digital
* **QAM:** Quadrature Amplitude Modulation
* **PSK:** Phase-Shift Keying
* **FSK:** Frequency-Shift Keying
* **ASK:** Amplitude-Shift Keying
* **MSK:** Minimum-Shift Keying
* **IFK:** Incremental Frequency Keying
* **OOK:** On-Off Keying
* **FDM:** Frequency-Division Multiplexing
* **BOC:** Binary Offset Carrier Modulation
* **CDMA:** Code Division Multiple Access
* **TDMA:** Time Division Multiple Access
* **FBMC:** Filter Bank Multi Carrier
* **UFMC:** Universal Filtered Multi Carrier
* **PCM:** Pulse Code Modulation
* **PPM:** Pulse Position Modulation
* **FMCW:** Frequency-Modulated Continuous Wave
* **Pulse:** Pulse
### Spread Spectrum
* **CSS:** Chirp Spread Spectrum
* **DSSS:** Direct Sequence Spread Spectrum
* **FHSS:** Frequency Hopping Spread Spectrum
* **THSS:** Time Hopping Spread Spectrum
## Locations
Locations are either countries or special token (`Worldwide`, `Europe`, etc.) . Precise location of the TX station, towns and cities are converted to their respective countries.