Skip to the content
PCBKitNew board
2 layers76 × 56 mmAi sdr mini, the printed circuit board in 3D

Ai sdr mini

HaohanHe/MBDSDR

AI-driven SDR & VNA system: LLM-callable tools over MCP with human-approval gates (C++/Qt6 + Python + Flutter)

Size
76 × 56 mm
Copper layers
2
Thickness
1.6 mm
Parts
62
Nets
37
Pads
268
Tracks, vias
0, 60
Routed
Not yet
KiCad
KiCad 7 (file 20221018)
Created
17 Sep 2026
Updated
7 Nov 2026

Overview

Ai sdr mini is an open-source printed circuit board by HaohanHe, from the HaohanHe/MBDSDR repository on GitHub, published under the MIT licence. It is a 2-layer board of 76 × 56 mm with 62 parts on 37 nets.

It is built around the ATGM336H-5NR32-G, ESP32-S3-WROOM-1-N8R8 and SI4732-A10-GSR, with the AMS1117-3.3, BMI260 and USB2514B-AEZC among its other parts. Its parts include 23 capacitors, 19 resistors, 7 ICs, 4 diodes and 2 crystals. It belongs with the radio and wireless boards and the ESP32 boards of this library.

Main components

8

README

README.md

MBDSDR · AI 定义无线电(AI-defined SDR) v0.2.0

30 秒读懂:这是一套把示波器/矢网/软件无线电(SDR)的每个动作封装成 LLM 可调用工具的系统——外部 AI agent 通过 MCP 协议直接遥控真实硬件: 测天线、收信号、解调、解码、抓星历。没有 mock、没有假数据:没插硬件 就报空,未校准就标口径。

真机实证(2026-10):NanoVNA-H 实测自制天线谐振与馈线时延、 RTL-SDR 实抄 435MHz 业余频段载波、外部 agent 经 MCP 遥控收发全链路、 设备屏幕截图回传——全部见 docs/learn/agent-onboarding-runbook.md。

把 SDR 的接收 / 解调 / 解码 / 卫星过境 / AR 指向,全部封装成 LLM 可调用的工具(function calling), 由智能体编排成"一键工作流"。本仓库是同一套体系在三个端 + 一套论文实验 + 一套真机工具上的落地。

组件位置是什么
原生桌面端cpp/C++/Qt 原生 SDR 接收软件(UI 与 DSP 同进程,不依赖 Python 运行时)。AI 助手工具面(read/write 双态、写动作在手动模式被门拦截;数量随版本漂移,实时口径以 cpp/src/ai/tool_schema.cpp 注册表为准),并内置 ControlHub HTTP 控制通道
手机端mobile/Flutter 一套代码(Android/iOS),手机作 AI 的"眼睛和手臂":定位+罗盘指向+rtl_tcp 直连外置 SDR;经 ControlHub HTTP 只读对接桌面引擎
Python 智能体内核mbdsdr_ai/研究原型:注册大量 LLM 可调用工具(数量随版本漂移,实时口径见该 README §1 与运行时 tool_registry.list_tools())+ 工作流引擎。这是原型期工具面,不是随桌面交付的工具集
论文实验管线experiments/可复现实验(Eb/N0 解码成功率 / 多普勒定轨 / AMR 基线 / LLM 基线),固定种子、逐图标口径
真机工具tools/一键只读自检 hw_selfcheck + 联调向导 onboarding
重复实现台账docs/learn/dedup-ledger.md同主题多份实现的状态台账(已收敛/有意分层/待收敛)+ 成对工具自洽审计方法与已修缺陷
能力地图docs/learn/capability-map.md任务→积木编排对照表(气象对星接收/多普勒定轨/ASTU-1遥测/前端搭建/链路自测)+ 新积木参数速查 + 诚实边界
学习与阶段规格docs/learn/上游真实源码精读(sdrpp/gnuradio/librtlsdr…)+ phase3–6 实现规格与审计

许可证:MIT(见 LICENSE、第三方归属 NOTICE.md)。

工程口径:全仓 MIT 发布,第三方上游项目与许可归属见 NOTICE.md; 协议栈(FT8/LRPT/CCSDS 等)按公开标准与协议事实独立实现 · LLM 工具三通道(Agent / ControlHub / HTTP)行为一致且有测试钉住,写动作一律过人工门 · 已对 SDR++、SatDump、 nanovna-saver、NanoVNA-App、kimi-code、kilocode 六个上游项目做过源码级 克隆审计(见 docs/learn/)。


日本語 / For Japanese readers

MBDSDR は「AI が計測器を直接操作するシステム」です。 SDR(ソフトウェア無線)と 向量网络分析仪(NanoVNA)の全操作を LLM から呼び出せるツールとして実装し、 MCP(Model Context Protocol)を通じて外部エージェントが実機を遠隔操作できます。 「専用機器が使いにくい」という問題を、AI に操作させることで解く——これが本作の 出発点です。

実機検証済み(2026年10月、ダミーデータなし): NanoVNA-H による自作アンテナの共振周波数・給線路遅延の実測 / RTL-SDR による 435MHz 帯アマチュア周波数の実キャリア受信・FM 復調 / 外部エージェントからの MCP 遠隔操作(list_devices→connect→set_frequency→get_status 全闭环)。

工程口径:全倉庫 MIT(クリーンルーム自願実装、GPL コード非流用)· LLM ツールは三チャネル(Agent / ControlHub / HTTP)で動作一致・書き込みは 人工承認ゲート必須 · SDR++・SatDump・NanoVNA-App・kimi-code 等の主要 OSS 6 件をクローンして源码監査済み。

零硬件演示:python3 -m mbdsdr_ai.aigui_demo --out demo.html(AI 编排 UI 的完整闭环)、python3 -m pytest mbdsdr_ai/tests -q(离线确定性测试)。


快速开始

1. 桌面端(原生 C++/Qt)

bash
cd cpp
cmake -S . -B build && cmake --build build -j"$(nproc)"
./build/mbdsdr        # 无硬件且未加载离线捕获文件时,显示诚实"未连接"空状态
                      # 需要合成调试信号时必须显式 --test-source / MBDSDR_TEST_SOURCE=1
                      # 设计红线:never invent synthetic IQ by default, no fake hardware is ever shown

依赖(Qt 6.8 / librtlsdr 2.x / CMake 3.16+)、测试与完整功能清单见 cpp/README.md。

启动后桌面引擎在回环 127.0.0.1:50732 起一条 ControlHub HTTP 控制通道(具名常量 tokens::kControlHttpDefaultPort,QSettings/env 可配): 本机浏览器开 http://127.0.0.1:50732/ 即可查看状态 / 下命令;端点只绑回环,跨机控制走 SSH 隧道(如 ssh -N -L 50732:127.0.0.1:50732 user@接收机)。 Chromebook / Crostini 当远程控制端的完整拓扑与隧道步骤见 docs/CHROMEOS_CROSTINI_SDR.md。

2. 真机自检 + 联调(一条命令)

真机(RTL-SDR + GNSS + 天线)在用户本地;云开发环境无任何硬件透传:

bash
# 只读自检:USB/udev、rtl_test tuner、rtl_sdr 实读丢包、声卡、GNSS 串口、Python 依赖
python3 tools/hw_selfcheck/selfcheck.py

# 一条命令从"插好 RTL-SDR"走到"出图/出报文"(ADS-B 飞机报文,1090 MHz)
python3 tools/onboarding/onboard.py --step all --freq 1090e6 --mode adsb

3. Python 内核与论文实验

bash
# 工具自测(离线、确定性、不碰真机)
python3 -m pytest tools/hw_selfcheck/test_selfcheck.py tools/onboarding/test_onboarding.py -q

# 复现一个仿真实验(固定种子,产物落被 gitignore 的 paper/experiments/)
python3 experiments/exp_ebno_decode.py --trials 50 --seed 20261001

见 mbdsdr_ai/README.md(工具面 / 摘除项 / 诚实标注项)与 experiments/README.md(口径红线与全部复现命令)。


真机与云测状态(诚实声明)

  • 云测环境无硬件:无 USB / 串口 / 声卡 / GNSS。所有依赖真机的工具在云内返回诚实空态或失败 ("请先 sdr_connect / sdr_open_iq_file / 配置地面站坐标"),不静默 mock、不补假点。
  • C++ / Flutter / Python 三端的真实硬件联调均需在用户本地真机完成后回传结果; 真机步骤与回传格式见 docs/learn/phase6/P2-hw-report-format.md。
  • 云内可验证的部分(构建 offscreen + 测试信号、离线确定性测试、仿真口径实验)已在各端自测通过; 真机专项(真实拔插、出声、USB-GNSS)标注为"待真机",未宣称已验证。
  • 三端测试基线与回归锚点见 AGENTS.md §5,随每轮工程实测更新;验证能力以可复现命令 (见上方命令区)与云端 CI(.github/workflows/ci.yml)为准,不设数字标语——数字随时间浮动, 写入即过期(AGENTS.md §1)。无硬件环境下的用例以诚实 SKIP 结算,换机 / 真机后需重测,不代表真机已验。
  • 未解决项总账(逐项带阶段溯源)见 docs/learn/phase41/open-items.md。

LLM 基线(诚实说明)

实验管线里的 LLM 基线(experiments/exp_llm_baseline.py)仅在配置 API key 时才真调在线模型。 云内 / 无 key 环境下:经典规则与 KNN 在本地真算,LLM 整列输出 PENDING_ONLINE_RUN—— 不伪造数值、不联网、不花钱。key 只从环境变量读(MBDSDR_LLM_API_KEY),代码与文档中无任何 key 字面量。

桌面 / 移动端的 AI 聊天(cpp/src/ai/llm_worker)同理:无 key 或 401/403 时诚实报 PENDING、不 mock 输出; transport 层已透传真实 HTTP 状态码(llm_client.cpp 读 HttpStatusCodeAttribute),按码分类 (429/5xx 退避重试、4xx 终态如实报错)。但真实在线重试 e2e 从未在带 key / 联网环境跑过—— 分类与退避路径由离线纯函数测试钉住,在线一次实跑仍属未决(见总账)。

受保护编码器(不内置)

DMR / P25 / C4FM 等涉及专利或许可受限的语音编码器不内置本仓库。需要时由用户自行上传合法的外部 解码器/二进制;系统在检测到外部组件时接线、没有时诚实标注不可用。本仓库为 MIT 独立实现实现, 上游项目(sdrpp / gnuradio / librtlsdr 等)的协议事实与交互范式是实现依据, 项目与许可归属见 NOTICE.md。


目录导览

text
cpp/        原生 C++/Qt 桌面 SDR(引擎/解调/录制/解码/卫星过境/世界地图/AI 助手)
mobile/     Flutter 手机端(Android/iOS):rtl_tcp 客户端 + 解调 + 录音/回放 building blocks + GNSS
desktop/    早期 Python/Qt 桌面 GUI 原型(面板式,非当前主推原生端)
mbdsdr_ai/  Python 智能体内核:agent.py 装配、sdr_tools.py 工具面、workflow_engine、scheduler、pose
experiments/论文实验管线(common/ 公共库 + exp_*.py 脚本 + tests/)
tools/      hw_selfcheck(真机只读自检)、onboarding(联调向导)
docs/learn/ 上游精读笔记 + phase3–41 实现规格与审计(交付状态横幅见各 _PHASE*_SPEC.md 顶部;总账见 phase41/open-items.md)
paper/      论文与实验产物(被 .gitignore,生成物由脚本一键再生成)
repos/      克隆的上游源码(仅供学习,不入产品路径)

根目录另存历史设计稿(白皮书、IEEE 论文初稿、卫星指向雷达图)与硬件工程 (KiCad、BOM、接线表),均为阶段性交付物,不参与三端构建。

30 秒上手:NanoVNA 真机 dump

  1. 接线:被测件接 PORT 1(S11),USB 接电脑(VID:PID 0x0483:0x5740,Windows 用 COMx)。
  2. 跑:
    text
    python3 -m mbdsdr_ai.nanovna_dump --port /dev/ttyACM0 --json-pretty --out sweep.json
  3. 回传 sweep.json(+ 连接日志 version/info/cal)即可比对。 无设备可先 --selftest 跑通流程(合成演示,非真实测量)。详见 docs/learn/nanovna/hardware-quickstart.md。

工具能力矩阵(三通道:Agent / Hub / HTTP 透传)

按域分组;写=手动模式 gate 拦截,读=不拦截。

SDR 调谐 / VFO

工具写/读
tune_frequency写
set_mode写
set_bandwidth写
get_status读
get_spectrum_status读
list_vfos / add_vfo / delete_vfo(rename_vfo/switch_vfo 同)读/写
set_vfo_frequency / set_vfo_mode / set_vfo_bandwidth / set_vfo_armed写

SDR 静噪 / 亚音 / 解码

工具写/读
set_squelch / get_squelch_status写/读
set_ctcss / get_ctcss_status写/读
set_cdcss / get_cdcss_status写/读
set_ft8 / get_ft8_status写/读
get_ft8_history读
set_lrpt / get_lrpt_status写/读
set_noise_blanker / get_noise_blanker_status写/读
get_acars_packets / get_navtex_messages / get_pocsag_messages / get_m17_calls / get_vor_radial / get_adsb_aircraft / get_aprs_messages / get_color_maps读

VNA 基础

工具写/读
set_vna_sweep写
get_vna_data / get_vna_status读

VNA 分析

工具写/读
vna_tdr_cable写
analyze_vna_resonance / analyze_vna_filter / analyze_vna_equivalent / analyze_vna_touchstone / analyze_vna_match读

VNA 校准

工具写/读
vna_calibration写(step=status 为只读引导)
vna_device写(action=status/vbat/freq_offset 读为只读,整体手动 gate)

导出 / 录制

工具写/读
start_recording / stop_recording / delete_recording / export_recording / export_iq_segment / list_recordings / get_recording_state写/读
export_vna_snapshot / export_spectrum_snapshot / export_peaks_csv / export_ft8_results写

书签 / 扫描 / 网络

工具写/读
list_bookmarks / add_bookmark / tune_to_bookmark / delete_bookmark读/写
scan_band / start_scan_link / stop_scan_link / get_scan_link_status写/读
connect_network_source / set_network_audio_sink / get_network_audio_status写/读
list_templates / run_template读/写(确定性任务模板:list 列举 3 模板;run 按名构建并登记计划 executed=false,不同步调谐/录制,手动 gate)
get_task_history读(TaskRunner 完成任务历史:列表最近 N 条 + id 详情含 steps 数组,无记录 runs=[] 诚实空态)

系统 / 校准 / 卫星

工具写/读
calibrate_frequency / apply_frequency_correction / predict_passes / list_satellites读
set_fft_params / set_color_map / set_doppler_compensation / get_capabilities写/读

接收链硬件参数

工具写/读
set_gain / set_sample_rate / set_decimation / set_direct_sampling / set_offset_tuning / set_agc / set_bias_tee(馈电风险)/ set_force_mono / set_anr写
set_audio_output / set_tune_step写

录制参数

工具写/读
set_recording_target / set_recording_dir / set_recording_template / set_recording_stereo / set_recording_ignore_squelch / set_recording_max_segment / set_gated_recording / set_watch_recording写

扫描 / 显示 / 频谱外观

工具写/读
set_scan_params写
set_persistence / set_waterfall_depth / set_waterfall_speed / set_builtin_palette / set_spectrum_db_range / set_spectrum_zoom / set_db_grid_step / set_peak_threshold / set_peak_hold / set_edge_rail_visibility写

源 / 网络 / GNSS / 图层

工具写/读
set_source_type / set_spyserver / connect_gnss / set_map_layers / set_station_position / set_sat_pass_template写

VNA 连接与渗透分析

工具写/读
vna_connect写
analyze_vna_permeability读

外设电台(TX,写动作均需 confirm 确认)

工具写/读
set_cat_control / send_cw / send_ax25_beacon / soapy_transmit写

外观 / 布局

工具写/读
set_ui_scale / set_language / set_left_groups写

记忆编排(SQLite FTS5,~/.mbdsdr/memory.db)

工具写/读
memory_add / memory_update / memory_flush / memory_delete写(手动 gate;add/update 入队异步落库,flush 同步排空;delete 按 (scope,key) 同步删,不存在返回 deleted=false 空操作)
memory_search / checkpoint_status / memory_stats读

工作台编排(AIGUI P0-b,三栏 splitter + 右侧 tab)

工具写/读
arrange_workspace / reset_workspace / update_component_data写(手动 gate;按编译期白名单调整 splitter 尺寸/tab 可见性,未知 id 诚实占位;update_component_data 为 A2UI updateDataModel 最小子集 upsert/清空组件数据槽,不碰 DSP/音频/硬件)
get_workspace_layout / list_ui_components读

全部工具以注册表为唯一事实源(运行时 list_tools() 取实时口径),文档不复制浮动数字。域分组口径见 docs/learn/phase31/agent-tool-documentation.md。

MCP 服务器(C++ mbdsdr-mcp 与 Python mbdsdr_ai/core/mcp_server.py)合并视图

两套 MCP server 同仓并存、互为镜像:

  • 域分组一致:两 server 的 tools/list 均按域分组(C++ 10 域、Python 11 域——Python 前 10 域与 C++ 同集合,另含「解码器长尾」扩展域;钉扎测试保证不漂移)。
  • C++ mbdsdr-mcp:面向外部第三方 agent 的 stdio 接入面(接入细节见 docs/learn/phase63/third-party-agent-mcp.md),工具本体与桌面 Agent 同一套 registeredToolSpecs(),不另立实现。
  • Python mbdsdr_ai/core/mcp_server.py:面向脚本/嵌入式控制器的本地调用面,便于在测试台与自动化脚本里直接驱动同一工具语义。
  • 写工具一致门控:两 server 的写工具统一走 arm_manual / 手动 gate,人在环确认,不会因接入面不同而绕过。

Parts

62
QtyValueFootprintReferences
16100nFai-sdr:0402C3, C4, C5, C6, C8, C10, C12, C13, C14, C16, C19, C20, C21, C22, C23, C24
710kai-sdr:0402R7, R8, R11, R13, R14, R15, R16
410uFai-sdr:0805C7, C9, C11, C15
41kai-sdr:0402R1, R2, R3, R4
4LED_YELLOWai-sdr:0603_LEDLED1, LED2, LED3, LED4
34.7kai-sdr:0402R5, R6, R19
2100kai-sdr:0402R17, R18
218pFai-sdr:0402C17, C18
25.1kai-sdr:0402R9, R10
1100nHai-sdr:0402L2
112kai-sdr:0402R12
112pFai-sdr:0402C1
124MHzai-sdr:CRYSTAL-3225X2
132.768kHzai-sdr:CRYSTAL-3215X1
1500mAai-sdr:0805F1
1AMS1117-3.3ai-sdr:SOT-223U7
1ATGM336H-5NR32-Gai-sdr:ATGM336H-5NU6
1BMI260ai-sdr:LGA-14-2.5x3U5
1ESP32-S3-WROOM-1-N8R8ai-sdr:ESP32-S3-WROOM-1U4
1SI4732-A10-GSRai-sdr:SOIC-16U2
1SMA-Fai-sdr:SMA-FEMALERF1
1TMAG5273A1QDBVTai-sdr:SOT-23-6U3
1TS-1101ai-sdr:BUTTON-3x4SW1
1TYPE-C-6Pai-sdr:TYPE-C-6PJ1
1UFL-Fai-sdr:UFL-FEMALERF2
1USB-A-Fai-sdr:USB-A-FEMALEUSB1
1USB2514B-AEZCai-sdr:QFN-36-6x6U1

Questions

How big is the Ai sdr mini PCB?

It measures 76 × 56 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ai sdr mini use?

62 parts, built around the ATGM336H-5NR32-G, ESP32-S3-WROOM-1-N8R8, SI4732-A10-GSR and AMS1117-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ai sdr mini KiCad files?

From the HaohanHe/MBDSDR repository on GitHub, at the commit this page was made from: the board is ai-sdr-mini-kicad/ai-sdr-mini.kicad_pcb and its schematic ai-sdr-mini-kicad/ai-sdr-mini.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ai sdr mini design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers13.4 × 23.8 mmOpenRemoteID, the printed circuit board in 3D

    OpenRemoteID

    OpenDrone-hw/OpenRemoteID

    Open hardware concept for a standalone Remote ID module: ESP32-C3 plus GNSS receiver. Incomplete, not a compliant product.

    6 parts7CERN-OHL-S-2.0
  • 4 layers56.5 × 63.3 mmDigital microscope, the printed circuit board in 3D

    Digital microscope

    Ballistyxx/hqcam

    Code + physical documentation of the 3rd revision of my digital microscope

    26 parts1AGPL-3.0
  • 4 layers49.4 × 57.1 mmFM Radio, the printed circuit board in 3D

    FM Radio

    zOnlyKroks/pcb-consortium

    64 partsCC0-1.0
  • 4 layers16.4 × 48.7 mmTitania3, the printed circuit board in 3D

    Titania3

    Danzibob/Titania3

    The project goal is to create a datalogger small and light enough for an 18mm A8-3 rocket, but capable enough to use as a backup logger for mid and high power flights.

    48 parts1
  • 2 layers84 × 100 mmHacking box v3 unrouted, the printed circuit board in 3D

    Hacking box v3 unrouted

    dkuaegis/aegis-hack-the-badge

    Aegis 보안팀 해킹체험 프로젝트

    60 parts2
  • 6 layers120 × 50 mmUsb switch, the printed circuit board in 3D

    Usb switch

    cubicap/usb4-thing

    An attemt at creating a USB4 multiplexer controlled by ESP32-S3.

    65 parts
  • 2 layers61 × 61 mmVael, the printed circuit board in 3D

    Vael

    dialgorithm/vael

    esp32s3 flight controller

    66 parts