Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/print payload as hex #69

Merged
merged 5 commits into from
Dec 14, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add hex output option
  • Loading branch information
tapparelj committed Dec 14, 2023
commit 0589ba79772d38d671e39dc122809be1ce98be36
4 changes: 2 additions & 2 deletions .conda/recipe/conda_build_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ channel_targets:
- tapparelj main
# override the conda-forge pin for gnuradio-core by uncommenting
# and specifying a different version here
#gnuradio_core:
#- "3.10.1"
gnuradio_core:
- "3.10.6"
gnuradio_extra_pin:
# always leave one entry with the empty string
- ""
Expand Down
6 changes: 6 additions & 0 deletions .conda/recipe/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ requirements:
- numpy # [build_platform != target_platform]
- pybind11 # [build_platform != target_platform]
# Add extra build tool dependencies here
- boost-cpp=1.78.0
- volk=3.0.0

host:
- gmp # [linux]
Expand All @@ -46,11 +48,15 @@ requirements:
- numpy
- volk
# Add/remove library dependencies here
- boost-cpp=1.78.0
- volk=3.0.0

run:
- numpy
- python
# Add/remove runtime dependencies here
- boost-cpp=1.78.0
- volk=3.0.0

test:
requires:
Expand Down
45 changes: 45 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
cff-version: 1.2.0
title: >-
A fully-functional GNU Radio software-defined radio
implementation of a LoRa transceiver
message: >-
If you use this software, please cite it using the
metadata from this file.
type: software
authors:
- given-names: Joachim
family-names: Tapparel
orcid: 'https://orcid.org/0000-0002-0154-9738'
affiliation: École Polytechnique Fédérale de Lausanne
repository-code: 'https://github.com/tapparelj/gr-lora_sdr'
abstract: >-
This is the fully-functional GNU Radio software-defined
radio (SDR) implementation of a LoRa transceiver with all
the necessary receiver components to operate correctly
even at very low SNRs. This work has been conducted at the
Telecommunication Circuits Laboratory, EPFL.
license: GPL-3.0+
preferred-citation:
type: conference-paper
authors:
- family-names: "Joachim"
given-names: "Tapparel"
orcid: "https://orcid.org/0000-0002-0154-9738"
- family-names: "Afisiadis"
given-names: "Orion"
orcid: "https://orcid.org/0000-0002-5287-9681"
- family-names: "Mayoraz"
given-names: "Paul"
- family-names: "Balatsoukas-Stimming"
given-names: "Alexios"
orcid: "https://orcid.org/0000-0002-6721-4666"
- family-names: "Burg"
given-names: "Andreas"
orcid: "https://orcid.org/0000-0002-7270-5558"
doi: "10.1109/SPAWC48557.2020.9154273"
journal: "2020 IEEE 21st International Workshop on Signal Processing Advances in Wireless Communications (SPAWC)"
month: 5
start: 1
end: 5
title: "An Open-Source LoRa Physical Layer Prototype on GNU Radio"
year: 2020
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# v0.5.7
- Add optional print of received payload as hex values
- Update conda-smithy configuration
# v0.5.6
- Added tagged stream input support (for frame definition of frame length)
- Fixed LLR stream format between _fft\_demod_ and _deinterleaver_
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[![GitHub last commit](https://img.shields.io/github/last-commit/tapparelj/gr-lora_sdr)](https://img.shields.io/github/last-commit/tapparelj/gr-lora_sdr)
![gnuradio](https://img.shields.io/badge/GNU%20Radio-3.10.5-important)
![version](https://img.shields.io/badge/Version-0.5.6-brightgreen)
![gnuradio](https://img.shields.io/badge/GNU%20Radio-3.10.6-important)
![version](https://img.shields.io/badge/Version-0.5.7-brightgreen)
[![arXiv](https://img.shields.io/badge/arXiv-2002.08208-<COLOR>.svg)](https://arxiv.org/abs/2002.08208)
[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Ftapparelj%2Fgr-lora_sdr&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)
[![Build conda package](https://github.com/tapparelj/gr-lora_sdr/actions/workflows/conda-build.yml/badge.svg)](https://github.com/tapparelj/gr-lora_sdr/actions/workflows/conda-build.yml)
Expand All @@ -20,9 +20,11 @@ In the GNU Radio implementation of the LoRa Tx and Rx chains the user can choose
</p>

- In the Tx chain, the implementation contains all the main blocks of the LoRa transceiver: the header- and the CRC-insertion blocks, the whitening block, the Hamming encoder block, the interleaver block, the Gray demapping block, and the modulation block.

![tx_flow](https://user-images.githubusercontent.com/66671413/184139150-a14a0417-7098-46ea-b6ad-ca8ba6709904.png)

- On the receiver side there is the packet synchronization block, which performs all the necessary tasks needed for the synchronization, such as the necessary STO and CFO estimation and correction. The demodulation block follows, along with the Gray mapping block, the deinterleaving block, the Hamming decoder block and the dewhitening block, as well as a CRC verification block.

![rx_flow](https://user-images.githubusercontent.com/66671413/184138776-2e41efc0-78b4-434b-8958-3bed2443cbc4.png)

- The implementation can be used for fully end-to-end experimental performance results of a LoRa SDR receiver at low SNRs.
Expand All @@ -32,7 +34,7 @@ In the GNU Radio implementation of the LoRa Tx and Rx chains the user can choose

## Functionalities

- Sending and receiving LoRa packets between USRP-USRP and USRP-commercial LoRa transceiver (tested for Adafruit Feather 32u4 RFM95 and dragino LoRa/GPS HAT).
- Sending and receiving LoRa packets between USRP-USRP and USRP-commercial LoRa transceiver (tested with RFM95, SX1276, SX1262).

- Parameters available:
- Spreading factors: 5-12*
Expand All @@ -45,7 +47,7 @@ In the GNU Radio implementation of the LoRa Tx and Rx chains the user can choose
- Low datarate optimisation mode
- Utilisation of soft-decision decoding for improved performances

\* Spreading factors 5 and 6 not compatible with SX1261/2.
\* Spreading factors 5 and 6 are not compatible with SX126x.
## Reference
J. Tapparel, O. Afisiadis, P. Mayoraz, A. Balatsoukas-Stimming and A. Burg, "An Open-Source LoRa Physical Layer Prototype on GNU Radio," 2020 IEEE 21st International Workshop on Signal Processing Advances in Wireless Communications (SPAWC), Atlanta, GA, USA, 2020, pp. 1-5.

Expand All @@ -58,7 +60,7 @@ If you find this implementation useful for your project, please consider citing
- python 3
- cmake
- libvolk
- Boost
- boost
- UHD
- gcc > 9.3.0
- gxx
Expand Down Expand Up @@ -182,6 +184,7 @@ Thanks to Ryan Volz this OOT module can also directly be installed as a Conda pa
[grc]
local_blocks_path=path_to_the_downloaded_folder/gr-lora_sdr/grc
## Changelog
- Add optional print of received payload as hex values
- Added tagged stream input support (for frame definition of frame length)
- Fixed LLR stream format between _fft\_demod_ and _deinterleaver_
- added tags to crc verification output stream indication frame start, length and CRC result.
Expand Down
Loading