{
  "added_at": "2026-11-03",
  "additional_evidence_urls": [
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/CMakeLists.txt",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/lib/CMakeLists.txt",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/grc/lora_receiver.block.yml",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/lib/decoder_impl.cc",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/apps/lora_receive_file_nogui.py",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/docker/Dockerfile",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/.travis.yml",
    "https://github.com/rpp0/gr-lora/tree/90343d45a3c73c84d32d74b8603b6c01de025b08/docs/test-results",
    "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/LICENSE"
  ],
  "category": "protocol-analysis",
  "description_en": "GNU Radio out-of-tree module by Pieter Robyns and co-authors for receiving and decoding LoRa physical-layer frames with a software-defined radio, implementing the modulation features described in patents and blog posts. Its receiver channelizes the input, detects and synchronizes to LoRa chirps with clock-drift correction, and decodes symbols through Gray mapping, deinterleaving, dewhitening and Hamming decoding into header and payload bytes, which a message socket sink can forward over UDP port 40868. The bundled flowgraphs decode recorded traces or live captures, and the README lists HackRF One, USRP B201, RTL-SDR and LimeSDR as tested receivers.",
  "description_zh": "由 Pieter Robyns 等人开发的 GNU Radio 树外模块，借助软件定义无线电接收并解码 LoRa 物理层帧，实现了专利和博客文章中描述的调制特性。其接收器先对输入进行信道化，检测 LoRa 线性调频信号并与之同步、校正时钟漂移，再经格雷映射、解交织、去白化和汉明译码把符号还原为报头和载荷字节；消息套接字汇点可把结果通过 UDP 端口 40868 转发。附带的流图可解码录制的信号或实时采集的信号，README 列出 HackRF One、USRP B201、RTL-SDR 和 LimeSDR 为经过测试的接收设备。",
  "entry_url": "https://awesomerea.org/resources/gr-lora/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/gr-lora/",
  "evidence_url": "https://github.com/rpp0/gr-lora/blob/90343d45a3c73c84d32d74b8603b6c01de025b08/README.md",
  "group": "tools",
  "id": "gr-lora",
  "json_url": "https://awesomerea.org/resources/gr-lora/record.json",
  "kind": "tool",
  "markdown_url": "https://awesomerea.org/resources/gr-lora/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/gr-lora/index.md",
  "name": "gr-lora",
  "name_zh": "gr-lora LoRa 物理层解码模块",
  "record_type": "resource",
  "relationship": "foundation",
  "requirements": [
    "The newest commit on master, from 2021-12-10, merged a port to GNU Radio 3.9: CMake requests GNU Radio 3.9, the Python bindings use pybind11, and the library links liquid-dsp and log4cpp. The README was not updated for the port and still lists Python 2, SWIG and wx dependencies, and its Docker image installs python2 packages on an unpinned Arch Linux base; the Travis CI configuration builds GNU Radio maint-3.8. A gr3.7 branch keeps the older code.",
    "Input is IQ samples from an SDR or a recorded file. The receiver block takes sample rate, center frequency, channel list, bandwidth, spreading factor, coding rate, implicit-header, CRC and reduced-rate settings that must match the transmission. apps/lora_receive_file_nogui.py offers to download an example 868.1 MHz SF7 trace from the authors' university server, and further traces are in the separate gr-lora-samples repository. The README lists LoPy, Dragino HAT, Adafruit Feather 32u4, Microchip RN2483 and SX1276 boards as tested transmitters.",
    "The README states that payload and header CRCs are not checked and that several channels cannot be decoded at once; its changelog marks version 0.7's downlink, reduced-rate implicit-header and arbitrary-bandwidth support as experimental. The newest version tag is v0.6.2, so 0.7 exists only on master. docs/test-results holds the authors' decoding rates from suites rerun on 2021-12-01 during the port, such as 100% on the short USRP traces, and the author considers LoRa fully reverse engineered as of version 0.6, citing close to 100% accuracy on clear signals; these are author-reported results.",
    "GPL-3.0 (LICENSE). The README asks research users to cite the Zenodo record 10.5281/zenodo.853201. It covers the LoRa physical layer only."
  ],
  "requirements_zh": [
    "master 分支最新提交（2021-12-10）合并了向 GNU Radio 3.9 的移植：CMake 要求 GNU Radio 3.9，Python 绑定改用 pybind11，库链接 liquid-dsp 和 log4cpp。README 未随移植更新，仍列出 Python 2、SWIG 和 wx 依赖，其 Docker 镜像在未固定版本的 Arch Linux 基础镜像上安装 python2 软件包；Travis CI 配置构建的是 GNU Radio maint-3.8。gr3.7 分支保留了旧代码。",
    "输入为来自 SDR 或录制文件的 IQ 采样。接收器模块的采样率、中心频率、信道列表、带宽、扩频因子、编码率、隐式报头、CRC 和低速率模式等参数必须与发射端一致。apps/lora_receive_file_nogui.py 可从作者所在大学的服务器下载一段 868.1 MHz、SF7 的示例信号，更多信号样本见独立的 gr-lora-samples 仓库。README 列出 LoPy、Dragino HAT、Adafruit Feather 32u4、Microchip RN2483 和 SX1276 板卡为经过测试的发射设备。",
    "README 说明不校验载荷和报头的 CRC，也不能同时解码多个信道；其更新日志把 0.7 版的下行链路、隐式报头低速率模式和任意带宽支持标为实验性功能。最新的版本标签是 v0.6.2，因此 0.7 版只存在于 master 分支。docs/test-results 收录了作者在移植期间于 2021-12-01 重新运行测试集得到的解码率，例如短 USRP 信号样本为 100%；作者还认为自 0.6 版起 LoRa 已被完全逆向，理由是信号清晰时解码准确率接近 100%。这些都是作者报告的结果。",
    "GPL-3.0（LICENSE）。README 请研究用户引用 Zenodo 记录 10.5281/zenodo.853201。它只涉及 LoRa 物理层。"
  ],
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/rpp0/gr-lora",
  "verification": "source-reviewed",
  "verified_at": "2026-10-27"
}
