AlexandreRouma/SDRPlusPlus

GitHub: AlexandreRouma/SDRPlusPlus

一款跨平台、模块化设计的开源软件无线电接收与分析软件,支持多频点同时监听和广泛的 SDR 硬件设备。

Stars: 5755 | Forks: 786

# SDR++, 简洁高效的 SDR 软件
![截图](https://i.imgur.com/Ter2MQJ.png) SDR++ 是一款跨平台、开源的 SDR 软件,旨在做到无冗余且易于使用。 ![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/84071c1595181954.svg) ## 功能特性 * 多 VFO * 广泛的硬件支持(通过 SoapySDR 和专用模块) * SIMD 加速 DSP * 跨平台(Windows, Linux, MacOS 和 BSD) * 尽可能全速更新瀑布图,使浏览信号更轻松、更愉悦 * 模块化设计(可轻松编写您自己的插件) # 安装说明 ## 每夜构建版 (Nightly Builds) 每夜构建版包含最新的功能和错误修复。它们通常与[正式发布版](https://github.com/AlexandreRouma/SDRPlusPlus/releases)一样稳定,但通常在代码更改后的几分钟到几小时内即可使用。 您可以在[这里](https://www.sdrpp.org/nightly)下载。它将重定向到 GitHub 上最新的每夜构建版本,向下滚动到 "Artifacts" 并点击适合您操作系统的版本。 GitHub 目前需要登录账户才能下载文件,请确保您已登录。 ## Windows 从 [Releases 页面](https://github.com/AlexandreRouma/SDRPlusPlus/releases)下载最新版本并解压到您选择的目录。 要创建桌面快捷方式,右键点击 exe 文件并选择 `发送到 -> 桌面快捷方式`,然后将桌面上的快捷方式重命名为您想要的名称。 ## Linux ### 基于 Debian 的系统 (Ubuntu, Mint 等) 从 [Releases 页面](https://github.com/AlexandreRouma/SDRPlusPlus/releases)下载最新版本并解压到您选择的目录。 然后,使用 apt 进行安装: ``` sudo apt install path/to/the/sdrpp_debian_amd64.deb ``` **重要提示:您必须为您 SDR 安装驱动程序。请按照制造商的说明在您的特定发行版上进行操作。** ### 基于 Arch 的系统 按照以下说明从源码安装。 **警告:sdrpp-git AUR 包已非官方包,不建议使用。** ### 其他 目前没有针对其他发行版的现成软件包,对于这些系统,您需要[从源码构建](https://github.com/AlexandreRouma/SDRPlusPlus#building-on-linux--bsd)。 ## MacOS 从最新的[每夜构建版](https://www.sdrpp.org/nightly)下载应用程序包 (app bundle)。 ## BSD 目前没有 BSD 软件包,请参阅 [Building on Linux / BSD](https://github.com/AlexandreRouma/SDRPlusPlus#building-on-linux--bsd) 获取从源码构建的说明。 # 在 Windows 上构建 首选 IDE 是 [VS Code](https://code.visualstudio.com/),以便在不同平台上获得相似的开发体验,并使用命令行通过 CMake 进行构建。 ## 安装依赖 * [cmake](https://cmake.org) * [vcpkg](https://vcpkg.io) * [PothosSDR](https://github.com/pothosware/PothosSDR) (这将安装大多数 SDR 的库。您必须将其安装在 `C:/Program Files/PothosSDR`) * [RtAudio](https://www.music.mcgill.ca/~gary/rtaudio/) (您必须构建并将其安装在 `C:/Program Files (x86)/RtAudio/`) 之后,使用 vcpkg 安装以下依赖: * fftw3 * glfw3 * zstd 您可能会构建 64 位版本,因此请确保 vcpkg 使用 `.\vcpkg.exe install :x64-windows` 安装正确的版本。 ## 使用命令行构建 **重要:** 将 `` 替换为 vcpkg 的安装目录。 ``` mkdir build cd build cmake .. "-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake" -G "Visual Studio 16 2019" cmake --build . --config Release ``` ## 运行开发版本 ### 创建新的配置根目录 ``` ./create_root.bat ``` 这将创建 `root_dev` 目录,用于保存 sdrpp 和模块的配置。 接下来,您需要编辑 `root_dev/config.json` 文件以指向已构建的模块。如果文件夹中缺少该文件,请运行一次应用程序,它将创建一个具有默认值的配置文件 —— 稍后会介绍如何运行应用程序。 ### 从命令行运行 SDR++ 在顶级目录下,您可以直接运行: ``` ./build/Release/sdrpp.exe -r root_dev -c ``` 或者,如果您希望从构建目录(例如 `build/Release`)运行,并调整指向 `root_dev` 文件夹的相对路径: ``` ./sdrpp.exe -r ../../root_dev -c ``` 可选的 `-c` 参数用于保持控制台活动状态,以便查看错误消息。 由于所有路径都是相对的,对于其余的命令行说明,我们将假设您使用前一条命令从顶级目录运行。 如前所述,您需要编辑 `root_dev/config.json` 以添加已构建的模块。在默认配置文件中,您需要在 `modules` 部分添加路径。将您希望使用的所有模块添加到此列表中。 ``` ... "modules": [ "./build/radio/Release/radio.dll", "./build/recorder/Release/recorder.dll", "./build/rtl_tcp_source/Release/rtl_tcp_source.dll", "./build/audio_sink/Release/audio_sink.dll" ] ... ``` 您还需要更改资源和模块目录的位置,对于开发环境,我建议: ``` ... "modulesDirectory": "root_dev/modules", ... "resourcesDirectory": "root_dev/res", ... ``` 请记住,这些路径将相对于运行目录。 ## 安装 SDR++ 如果您选择运行 SDR++ 进行开发,则不需要此步骤。 首先,将 `build/Release/` 中的 exe 和 DLL 复制到 `root_dev`。 接下来,您需要复制所有已编译的模块。为此,将模块的 DLL 文件(位于下面给出的构建文件夹中)复制到 `root_dev/modules` 目录,并将其他 DLL(名称与模块不完全匹配的)复制到 `root_dev` 目录。 构建的模块将包括以下部分(对您希望使用的所有模块重复上述说明): * `build/radio/Release/` * `build/recorder/Release/` * `build/rtl_tcp_source/Release/` * `build/spyserver_source/Release/` * `build/airspyhf_source/Release/` * `build/plutosdr_source/Release/` * `build/audio_sink/Release/` # 在 Linux / BSD 上构建 ## 选择您希望构建的模块 根据您想要构建的模块,您需要安装一些额外的依赖项。 请参阅本自述文件下方的模块列表表格,了解每个模块的名称、依赖项和构建选项。 然后,构建选项将传递给 cmake 命令,例如 `cmake .. -DOPTION_NAME_HERE=ON -DANOTHER_OPTION_HERE=OFF` 等等... ## 安装依赖 * cmake * fftw3 * glfw * libvolk * zstd 接下来根据您希望构建的模块安装依赖项(参见上一步) 注意:确保您使用的是 GCC 8 或更高版本,因为旧版本没有内置 `std::filesystem`。 ## 构建 将 `` 替换为您希望用于构建的线程数 ``` mkdir build cd build cmake .. make -j ``` ## 创建新的根目录 ``` sh ./create_root.sh ``` ## 运行开发版本 如果您希望安装 SDR++,请跳到下一步 首先从构建目录运行 SDR++ 以生成默认配置文件 ``` ./sdrpp -r ../root_dev/ ``` 然后,您需要编辑 `root_dev/config.json` 文件以指向已构建的模块。以下是它应该看起来的示例: ``` ... "modules": [ "./build/radio/radio.so", "./build/recorder/recorder.so", "./build/rtl_tcp_source/rtl_tcp_source.so", "./build/audio_sink/audio_sink.so" ] ... ``` 注意:您可以通过在构建目录中运行 `find . | grep '\.so' | sed 's/^/"/' | sed 's/$/",/' | sed '/sdrpp_core.so/d'` 来自动生成此列表。 您还需要更改资源和模块目录的位置,对于开发环境,我建议: ``` ... "modulesDirectory": "./root_dev/modules", ... "resourcesDirectory": "./root_dev/res", ... ``` 请记住,这些路径将相对于运行目录。 当然,记得为所有已构建且您希望使用的模块添加条目。 接下来,从顶级目录,您可以直接运行: ``` ./build/sdrpp -r root_dev ``` 或者,如果您希望从构建目录运行,则需要更正 config.json 文件中的目录,然后运行: ``` ./sdrpp -r ../root_dev ``` ## 安装 SDR++ 要安装 SDR++,请在您的 ``build`` 文件夹中运行以下命令: ``` sudo make install ``` # 在 MacOS 上构建 警告:这不适合胆小的人,说明主要未经测试。建议改用[每夜构建版](https://www.sdrpp.org/nightly)。 ## 安装依赖 依赖项与 Linux 完全相同,请参阅该部分以了解核心依赖项,以及模块列表以了解每个模块的依赖项。 您需要使用 Homebrew 安装依赖项。 确保安装 portaudio,稍后会用到。 示例安装命令: ``` brew install libusb fftw glfw airspy airspyhf portaudio hackrf rtl-sdr libbladerf codec2 zstd pip3 install mako ``` ### 安装 volk 您需要从源码安装 volk。按照其仓库中的说明进行操作。在 M1 上还需要一些额外的操作。 ## 构建 除了 Linux 的参数外,您还需要一些特殊的 cmake 参数。您需要启用 portaudio sink 模块 `-DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON` 并禁用通常的 rtaudio sink `-DOPT_BUILD_AUDIO_SINK=OFF`,以及告诉 SDR++ 它将作为 MacOS bundle 运行的选项 `-DUSE_BUNDLE_DEFAULTS=ON`。在早于 Catalina (10.15) 的 MacOS 版本上,您还需要使用内部 std::filesystem,因为操作系统无法提供它 `-DOPT_OVERRIDE_STD_FILESYSTEM=ON`。 以下是撰写本文时将构建几乎所有模块的构建命令示例。您可以随时查看 CI 脚本以获取最新参数以防万一,但这应该可以工作。从 SDRPlusPlus 目录的顶部: ``` mkdir build cd build cmake .. -DOPT_BUILD_SOAPY_SOURCE=OFF -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_AUDIO_SOURCE=OFF -DOPT_BUILD_AUDIO_SINK=OFF -DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DUSE_BUNDLE_DEFAULTS=ON -DCMAKE_BUILD_TYPE=Release make -j ``` ## 创建 bundle 并安装 从 SDRPlusPlus 目录的顶部: ``` sh make_macos_bundle.sh ./build ./SDR++.app ``` 这将创建一个 `SDR++.app` bundle,您可以像安装任何其他 MacOS 应用程序一样通过将其拖入 Applications 来安装。 # 模块列表 并非所有模块都默认构建。我决定禁用那些具有大型库、无法通过包管理器(或 pothos)安装的库以及仍处于测试阶段的模块的构建。 测试版模块通常包含在发行版中,但在 SDR++ 中未启用(需要实例化)。 ## 源 (Sources) | 名称 | 阶段 | 依赖项 | 选项 | 默认构建| 发行版中构建 | SDR++ 中默认启用 | |----------------------|------------|-------------------|--------------------------------|:---------------:|:-----------------------:|:---------------------------:| | airspy_source | Working | libairspy | OPT_BUILD_AIRSPY_SOURCE | ✅ | ✅ | ✅ | | airspyhf_source | Working | libairspyhf | OPT_BUILD_AIRSPYHF_SOURCE | ✅ | ✅ | ✅ | | audio_source | Working | rtaudio | OPT_BUILD_AUDIO_SOURCE | ✅ | ✅ | ✅ | | bladerf_source | Working | libbladeRF | OPT_BUILD_BLADERF_SOURCE | ⛔ | ✅ (not Debian Buster) | ✅ | | file_source | Working | - | OPT_BUILD_FILE_SOURCE | ✅ | ✅ | ✅ | | fobossdr_source | Working | libfobos | OPT_BUILD_FOBOSSDR_SOURCE | ✅ | ✅ | ✅ | | hackrf_source | Working | libhackrf | OPT_BUILD_HACKRF_SOURCE | ✅ | ✅ | ✅ | | harogic_source | Beta | htra_api | OPT_BUILD_HAROGIC_SOURCE | ⛔ | ⛔ | ✅ | | hermes_source | Beta | - | OPT_BUILD_HERMES_SOURCE | ✅ | ✅ | ✅ | | kcsdr_source | Unfinished | libkcsdr | OPT_BUILD_KCSDR_SOURCE | ⛔ | ⛔ | ⛔ | | limesdr_source | Working | liblimesuite | OPT_BUILD_LIMESDR_SOURCE | ⛔ | ✅ | ✅ | | network_source | Beta | - | OPT_BUILD_NETWORK_SOURCE | ✅ | ✅ | ✅ | | perseus_source | Beta | libperseus-sdr | OPT_BUILD_PERSEUS_SOURCE | ⛔ | ✅ | ✅ | | plutosdr_source | Working | libiio, libad9361 | OPT_BUILD_PLUTOSDR_SOURCE | ✅ | ✅ | ✅ | | rfnm_source | Beta | librfnm | OPT_BUILD_RFNM_SOURCE | ⛔ | ✅ | ✅ | | rfspace_source | Working | - | OPT_BUILD_RFSPACE_SOURCE | ✅ | ✅ | ✅ | | rtl_sdr_source | Working | librtlsdr | OPT_BUILD_RTL_SDR_SOURCE | ✅ | ✅ | ✅ | | rtl_tcp_source | Working | - | OPT_BUILD_RTL_TCP_SOURCE | ✅ | ✅ | ✅ | | sdrplay_source | Working | SDRplay API | OPT_BUILD_SDRPLAY_SOURCE | ⛔ | ✅ | ✅ | | sdrpp_server_source | Working | - | OPT_BUILD_SDRPP_SERVER_SOURCE | ✅ | ✅ | ✅ | | soapy_source | Deprecated | soapysdr | OPT_BUILD_SOAPY_SOURCE | ⛔ | ⛔ | ⛔ | | spectran_source | Unfinished | RTSA Suite | OPT_BUILD_SPECTRAN_SOURCE | ⛔ | | ⛔ | | spectran_http_source | Beta | - | OPT_BUILD_SPECTRAN_HTTP_SOURCE | ✅ | ✅ | ✅ | | spyserver_source | Working | - | OPT_BUILD_SPYSERVER_SOURCE | ✅ | ✅ | ✅ | | usrp_source | Beta | libuhd | OPT_BUILD_USRP_SOURCE | ⛔ | ⛔ | ✅ | ## 输出 (Sinks) | 名称 | 阶段 | 依赖项 | 选项 | 默认构建| 发行版中构建 | SDR++ 中默认启用 | |--------------------|------------|--------------|------------------------------|:---------------:|:----------------:|:---------------------------:| | android_audio_sink | Working | - | OPT_BUILD_ANDROID_AUDIO_SINK | ⛔ | ✅ | ✅ (仅限 Android) | | audio_sink | Working | rtaudio | OPT_BUILD_AUDIO_SINK | ✅ | ✅ | ✅ | | network_sink | Working | - | OPT_BUILD_NETWORK_SINK | ✅ | ✅ | ✅ | | new_portaudio_sink | Working | portaudio | OPT_BUILD_NEW_PORTAUDIO_SINK | ⛔ | ✅ | ⛔ | | portaudio_sink | Working | portaudio | OPT_BUILD_PORTAUDIO_SINK | ⛔ | ✅ | ⛔ | ## 解码器 (Decoders) | Name | Stage | Dependencies | Option | Built by default| Built in Release | Enabled in SDR++ by default | |---------------------|------------|--------------|-------------------------------|:---------------:|:----------------:|:---------------------------:| | atv_decoder | Unfinished | - | OPT_BUILD_ATV_DECODER | ⛔ | ⛔ | ⛔ | | dab_decoder | Unfinished | - | OPT_BUILD_DAB_DECODER | ⛔ | ⛔ | ⛔ | | falcon9_decoder | Unfinished | ffplay | OPT_BUILD_FALCON9_DECODER | ⛔ | ⛔ | ⛔ | | kgsstv_decoder | Unfinished | - | OPT_BUILD_KGSSTV_DECODER | ⛔ | ⛔ | ⛔ | | m17_decoder | Working | - | OPT_BUILD_M17_DECODER | ⛔ | ✅ | ⛔ | | meteor_demodulator | Working | - | OPT_BUILD_METEOR_DEMODULATOR | ✅ | ✅ | ⛔ | | pager_decoder | Unfinished | - | OPT_BUILD_PAGER_DECODER | ⛔ | ⛔ | ⛔ | | radio | Working | - | OPT_BUILD_RADIO | ✅ | ✅ | ✅ | | radio | Unfinished | - | OPT_BUILD_VOR_RECEIVER | ⛔ | ⛔ | ⛔ | | weather_sat_decoder | Unfinished | - | OPT_BUILD_WEATHER_SAT_DECODER | ⛔ | ⛔ | ⛔ | ## 杂项 (Misc) | Name | Stage | Dependencies | Option | Built by default | Built in Release | Enabled in SDR++ by default | |---------------------|------------|--------------|-----------------------------|:----------------:|:----------------:|:---------------------------:| | discord_integration | Working | - | OPT_BUILD_DISCORD_PRESENCE | ✅ | ✅ | ⛔ | | frequency_manager | Working | - | OPT_BUILD_FREQUENCY_MANAGER | ✅ | ✅ | ✅ | | iq_exporter | Working | - | OPT_BUILD_IQ_EXPORTER | ✅ | ✅ | ⛔ | | recorder | Working | - | OPT_BUILD_RECORDER | ✅ | ✅ | ✅ | | rigctl_client | Unfinished | - | OPT_BUILD_RIGCTL_CLIENT | ✅ | ✅ | ⛔ | | rigctl_server | Working | - | OPT_BUILD_RIGCTL_SERVER | ✅ | ✅ | ✅ | | scanner | Beta | - | OPT_BUILD_SCANNER | ✅ | ✅ | ⛔ | | scheduler | Unfinished | - | OPT_BUILD_SCHEDULER | ⛔ | ⛔ | ⛔ | # 故障排除 首先,请确保您运行的是最新的自动构建版本。如果您的问题与错误有关,它很可能在更高版本中已修复 ## SDR++ 崩溃后无论如何都无法再次启动 这是 1.0.0 中的一个错误,已在 1.0.1 中修复 在某些情况下,如果在保存配置时发生崩溃,配置文件将损坏,SDR++ 因此拒绝启动。 此问题现已修复。如果配置文件损坏,它将重置为默认状态。 ## 启动时出现 "hash collision" 错误 您可能在 Ubuntu/Debian 上安装了 `soapysdr-module-all` 包。如果没有,这仍然是由多个 soapy 模块发生冲突引起的 SoapySDR 错误。卸载与 SoapySDR 相关的任何内容,然后安装 soapysdr 本身以及您实际需要的 soapy 模块。 ## "我看不到 -在此插入模块名称-,怎么回事?" 如果该模块包含在更高版本的更新中,则它未在配置中启用。解决此问题的最简单方法是删除 `config.json` 文件并让 SDR++ 重新创建它(您将丢失与主 UI 相关的设置,如 VFO 颜色、缩放级别和主题)。 然而,最好的选择是编辑配置文件以添加您希望启用的模块的实例(请参阅模块列表)。 ## SDR++ 在停止 RTL-SDR 时崩溃 这是 libusb1.4 最近引入的一个错误 要解决此问题,只需降级到 libusb1.3 ## SDR++ 在启动 HackRF 时崩溃 如果您还启用了 SoapySDR 模块,这是 libhackrf 中的一个错误。这是由于 libhackrf 没有检查它是否已初始化引起的。 在发布修复的 libhackrf 版本之前的解决方案是从 SDR++ 禁用 soapy_source 模块。为此,进入 "Module Manager" 菜单并点击 "soapy_source" 行旁边的 `-` 按钮。之后,重启 SDR++。 ## 问题未在此列出? 如果您仍然有问题,请提交 issue 或在 discord 上询问。我会尽快回复。但是,请尽量避免在每个能想到的平台上联系我,以为我会回复得更快... # 贡献 随时欢迎通过 GitHub issue tracker 提交频段计划。 对于代码更改,请改为创建功能请求。 # 致谢 ## 赞助人 (Patrons) * Bob Logan * [Christian Häusler](https://github.com/corvus-ch) * Croccydile * Dale L Puckett (K0HYD) * [Daniele D'Agnelli](https://linkedin.com/in/dagnelli) * [David Taylor (GM8ARV)](https://twitter.com/gm8arv) * D. Jones * Dexruus * [EB3FRN](https://www.eb3frn.net/) * Eric Johnson * Ernest Murphy (NH7L) * Flinger Films * [Frank Werner (HB9FXQ)](https://twitter.com/HB9FXQ) * gringogrigio * Jandro * Jeff Moe * Joe Cupano * KD1SQ * Kezza * Krys Kamieniecki * Lee Donaghy * Lee (KD1SQ) * .lozenge. (Hank Hill) * Martin Herren (HB9FXX) * NeoVilsonWong * Nitin (VU2JEK) * ON4MU * [Passion-Radio.com](https://passion-radio.com/) * Paul Maine * Peter Betz * [Scanner School](https://scannerschool.com/) * Scott Palmer * [SignalsEverywhere](https://signalseverywhere.com/) * Syne Ardwin (WI9SYN) * [W4IPA](https://twitter.com/W4IPAstroke5) * William Arcand (W1WRA) * William Pitchford * [Yves Rougy](https://www.twitch.tv/yorzian) * [Zipper](https://github.com/reppiZ) ## 贡献者 (Contributors) * [Aang23](https://github.com/Aang23) * [Alexsey Shestacov](https://github.com/wingrime) * [Aosync](https://github.com/aosync) * [Benjamin Kyd](https://github.com/benkyd) * [Benjamin Vernoux](https://github.com/bvernoux) * [Cropinghigh](https://github.com/cropinghigh) * [Fred F4EED](http://f4eed.wordpress.com/) * [Howard0su](https://github.com/howard0su) * John Donkersley * [Joshua Kimsey](https://github.com/JoshuaKimsey) * [Manawyrm](https://github.com/Manawyrm) * [Martin Hauke](https://github.com/mnhauke) * [Marvin Sinister](https://github.com/marvin-sinister) * [Maxime Biette](https://github.com/mbiette) * [Paulo Matias](https://github.com/thotypous) * [Raov](https://twitter.com/raov_birbtog) * [Cam K.](https://github.com/Starman0620) * [Shuyuan Liu](https://github.com/shuyuan-liu) * [Syne Ardwin (WI9SYN)](https://esaille.me/) * [Szymon Zakrent](https://github.com/zakrent) * Youssef Touil * [Zimm](https://github.com/invader-zimm) ## 使用的库 * [SoapySDR (PothosWare)](https://github.com/pothosware/SoapySDR) * [Dear ImGui (ocornut)](https://github.com/ocornut/imgui) * [json (nlohmann)](https://github.com/nlohmann/json) * [rtaudio](http://www.portaudio.com/) * [Portable File Dialogs](https://github.com/samhocevar/portable-file-dialogs)
标签:Bash脚本, DSP, FFT, HackRF, RTL-SDR, SDR软件, SIMD优化, SoapySDR, 信号处理, 开源, 无线协议分析, 无线电接收, 无线电爱好者, 无线电监测, 模块化架构, 瀑布图, 软件定义无线电, 通信技术, 频谱分析