SDD 软件设计说明

MRRC 软件设计方案 (SDD)

Mobile Remote Radio Control - Software Design Description

文档版本: V1.0
日期: 2026-06-19
状态: 正式发布
项目: MRRC (Mobile Remote Radio Control)
方法论: IBM Team Solution Design (TeamSD) v2.3.2


目录

  1. 执行摘要
  2. 业务方向 (BUS 411)
  3. 项目定义 (ENG 343)
  4. 系统上下文 (APP 011)
  5. 非功能需求 (ART 0507)
  6. 用例模型 (ART 0508)
  7. 主题域模型 (APP 408)
  8. 架构决策 (ART 0513)
  9. 架构概览 (ART 0512)
  10. 服务模型 (ART 0582)
  11. 组件模型 (ART 0515)
  12. 运营模型 (ART 0522)
  13. 可行性评估 (ART 0530)
  14. 版本历史

1. 执行摘要

1.1 项目概述

MRRC (Mobile Remote Radio Control) 是一款专为移动端优化的业余电台远程控制系统。该系统允许业余无线电爱好者通过现代Web浏览器(尤其是移动设备)随时随地远程控制电台设备,进行语音通话和参数调节。

1.2 设计目标

目标 指标
移动端优先 触摸屏优化,PWA支持,单手操作
超低延迟 TX/RX切换 < 100ms
PTT可靠性 99%+ 按下即发射成功率
专业降噪 WDSP NR2 频谱降噪 15-20dB
实时音频 端到端延迟 < 100ms

1.3 核心功能

  • 远程电台控制: 频率、模式、VFO切换、PTT控制
  • 实时音频流: TX/RX双向音频,Int16/Opus编码
  • DSP数字处理: WDSP库集成,NR2/NB/ANF/AGC
  • ATR-1000集成: 实时功率/SWR显示,智能学习,快速调谐
  • AI语音助手: Whisper识别 + Qwen3-TTS合成
  • CW实时解码: ONNX前端推理
  • 多实例支持: 单服务器多电台独立控制

1.4 技术架构

MRRC 四层架构 客户端层 (Client Layer) 移动端浏览器 | 桌面浏览器 | 外部软件 服务层 (Service Layer) MRRC主程序 (Tornado) | ATR-1000 API | 语音助手服务 控制层 (Control Layer) Hamlib/rigctld | PyAudio | WDSP 设备层 (Device Layer) 电台设备 | 音频设备 | ATR-1000天调

2. 业务方向 (BUS 411)

2.1 愿景 (Vision)

成为全球领先的移动端业余电台远程控制解决方案,让业余无线电爱好者随时随地畅享通联乐趣。

2.2 使命 (Mission)

通过创新的Web技术和专业DSP处理,为HAM提供低延迟、高可靠性的远程电台控制体验。

2.3 目标 (Goals)

目标 描述
G1 成为移动端HAM Radio远程控制的首选方案
G2 提供业界领先的TX/RX切换延迟 (<100ms)
G3 实现99%+的PTT可靠性
G4 集成专业级DSP降噪 (WDSP NR2)

2.4 目的 (Objectives)

目的 指标 目标值
O1 TX/RX切换延迟 < 100ms
O2 PTT可靠性 ≥ 99%
O3 降噪深度 ≥ 15dB
O4 移动端用户满意度 ≥ 4.5/5
O5 系统可用性 ≥ 99.5%

2.5 策略 (Strategies)

策略 描述
S1 移动优先设计 - 所有功能先考虑移动端体验
S2 性能极致优化 - 持续优化延迟和可靠性
S3 DSP深度集成 - 集成专业WDSP库
S4 开源生态 - 基于开源项目,持续回馈社区

2.6 战术 (Tactics)

战术 描述
T1 AudioWorklet低延迟播放
T2 PTT预热帧机制
T3 WDSP NR2频谱降噪
T4 多实例部署支持

3. 项目定义 (ENG 343)

3.1 项目概述

属性
项目名称 MRRC (Mobile Remote Radio Control)
项目类型 远程电台控制系统
目标用户 业余无线电爱好者
部署平台 macOS/Linux/Windows
用户平台 Web浏览器 (移动端/桌面端)

3.2 项目范围

3.2.1 范围内 (In Scope)

  • 移动端Web界面开发
  • 后端Tornado服务器开发
  • 音频流处理 (TX/RX)
  • DSP降噪集成 (WDSP)
  • ATR-1000天调集成
  • AI语音助手集成
  • CW解码功能
  • 多实例部署支持

3.2.2 范围外 (Out of Scope)

  • 电台硬件开发
  • 移动端原生App开发
  • 云端部署服务
  • 商业SaaS平台

3.3 成功标准

标准 描述
SC1 TX/RX切换延迟 < 100ms
SC2 PTT可靠性 ≥ 99%
SC3 音频延迟 < 100ms
SC4 支持iOS Safari和Android Chrome
SC5 WDSP降噪效果 ≥ 15dB

3.4 主要里程碑

里程碑 日期 交付物
M1: 概念验证 2024-10 基础TX/RX功能
M2: 移动端优化 2024-12 mobile_modern.html
M3: DSP集成 2026-03 WDSP NR2降噪
M4: V4.9发布 2026-03-14 语音助手/CW/多实例
M5: V5.5 2026-05 记忆频道管理/登录页重构/WAV→MP3录音/FT8桥接增强
M6: V5.6.5 2026-06 PTT三层安全防护/ATR-1000学习缓冲/FT8 ULTRON远程控制台/EFHW知识库

4. 系统上下文 (APP 011)

4.1 用户与系统交互

系统上下文 — 用户与外部系统 用户 (Users) HAM Operator 移动端浏览器 HAM Operator 桌面端浏览器 External App JTDX / WSJT-X MRRC System Web Browser UI 层 (HTTPS) WebSocket 音频 / 控制 REST API :8080 外部集成 Radio Device IC-M710等 ATR-1000 天调设备 rigctld Hamlib (:4532)

4.2 外部系统接口

接口 协议 描述
Web UI HTTPS/WSS 浏览器客户端接口
REST API HTTP 外部应用集成 (:8080)
ATR-1000 WebSocket 天调设备通信 (:60001)
rigctld TCP 电台控制 (:4532)

4.3 数据流

方向 描述
TX Audio Client → Radio 麦克风 → 编码 → 电台
RX Audio Radio → Client 电台 → 采集 → 降噪 → 解码 → 扬声器
Control Client ↔ Radio 频率/模式/PTT控制命令
Meter Data Radio → Client S表/功率/SWR数据

4.4 边界描述

边界 描述
客户端边界 浏览器Web应用,PWA离线包
服务边界 Tornado WebSocket服务器
设备边界 电台、ATR-1000、音频设备

5. 非功能需求 (ART 0507)

5.1 性能需求

需求ID 需求描述 目标值 优先级
NFR-001 TX/RX切换延迟 < 100ms 关键
NFR-002 PTT响应时间 < 50ms 关键
NFR-003 音频端到端延迟 < 100ms 关键
NFR-004 功率显示延迟 < 200ms
NFR-005 界面响应时间 < 200ms
NFR-006 并发客户端数 ≥ 10

5.2 可用性需求

需求ID 需求描述 目标值 优先级
NFR-010 系统可用性 ≥ 99.5% 关键
NFR-011 故障恢复时间 < 30s
NFR-012 自动重连 支持
NFR-013 PTT可靠性 ≥ 99% 关键

5.3 安全性需求

需求ID 需求描述 目标值 优先级
NFR-020 传输加密 TLS 1.2+ 关键
NFR-021 用户认证 支持
NFR-022 访问控制 基于角色
NFR-023 审计日志 操作记录

5.4 可扩展性需求

需求ID 需求描述 目标值 优先级
NFR-030 多实例部署 支持
NFR-031 模块化设计 松耦合
NFR-032 新电台支持 可扩展

5.5 兼容性需求

需求ID 需求描述 目标值 优先级
NFR-040 移动浏览器 iOS Safari, Android Chrome 关键
NFR-040 桌面浏览器 Chrome, Firefox, Safari, Edge
NFR-041 电台设备 Hamlib支持的所有设备

5.6 容量需求

需求ID 需求描述 目标值 优先级
NFR-050 网络带宽 < 100kbps (控制) + 256kbps (音频)
NFR-051 内存占用 < 200MB
NFR-052 CPU占用 < 30% (单客户端)

6. 用例模型 (ART 0508)

6.1 参与者 (Actors)

参与者 描述
HAM Operator 业余无线电爱好者,通过浏览器控制电台
External App 外部软件 (JTDX, flrig等)
System Admin 系统管理员 (部署维护)

6.2 用例 (Use Cases)

6.2.1 核心用例

UC-001: 远程发射 (TX) 参与者: HAM Operator 目标: 通过浏览器麦克风发射语音到电台 前置条件: 已连接WebSocket,电源已开启 后置条件: 音频成功传输到电台 基本流: 1. 用户按下PTT按钮 2. 系统发送PTT命令到电台 3. 用户开始说话,浏览器采集音频 4. 音频编码 (Int16 / Opus) 5. 通过WebSocket传输到服务器 6. 服务器解码并播放到电台 7. 用户松开PTT 8. 系统停止发射 备选流: 2a. PTT命令失败: 重试3次,每次间隔50ms 4a. 音频编码失败: 切换到PCM原始格式
UC-002: 远程接收 (RX) 参与者: HAM Operator 目标: 接收电台音频并播放到浏览器 前置条件: 已连接WebSocket,电源已开启 后置条件: 音频成功播放到浏览器 基本流: 1. 系统从电台采集音频 (PyAudio) 2. 音频处理 (WDSP降噪) 3. 编码 (Int16) 4. 通过WebSocket传输到浏览器 5. 浏览器解码 6. AudioWorklet播放 WDSP NR2 频谱降噪 15-20dB
UC-003: 电台参数控制 参与者: HAM Operator 目标: 控制电台频率、模式等参数 前置条件: 已连接rigctld 后置条件: 参数成功设置 基本流: 1. 用户调整频率 / 模式 2. 发送控制命令到MRRC 3. MRRC转发到rigctld 4. rigctld控制电台 5. 返回执行结果 6. 更新界面显示

6.2.2 扩展用例

用例ID 用例名称 描述
UC-004 天调控制 ATR-1000功率/SWR显示和调谐
UC-005 语音助手 AI语音识别和控制
UC-006 CW解码 摩尔斯电码实时解码
UC-007 音频录制 QSO录音和回放
UC-008 多实例管理 多电台独立控制

6.3 用例关系图

用例关系图 HAM Operator UC-001 TX 远程发射 UC-002 RX 远程接收 UC-003 Control 电台参数控制 UC-004 ATR-1000 天调控制 UC-005 AI 语音助手 UC-006 / 007 / 008 CW解码 / 录音 / 多实例

7. 主题域模型 (APP 408)

7.1 核心实体

核心实体关系图 Client 客户端 Session 会话 Radio 电台 1:N AudioFlow 音频流 TXAudio 发射音频 RXAudio 接收音频 MeterData 仪表数据

7.2 实体定义

实体 属性 描述
Client id, type, platform, browser 客户端连接
Session id, client_id, start_time, auth_token 会话管理
Radio id, model, rigctld_host, audio_device 电台设备
AudioFlow session_id, direction, codec, sample_rate 音频流
TXAudio flow_id, samples, timestamp 发射音频数据
RXAudio flow_id, samples, timestamp 接收音频数据
MeterData freq, mode, power, swr, smeter 仪表数据
TunerRecord freq, sw, ind, cap, swr, timestamp 天调学习记录

8. 架构决策 (ART 0513)

8.1 技术选型决策

AD-001: Web框架选型

属性
决策ID AD-001
类型 Architectural
主题 Web框架选择
决策 采用Tornado作为后端Web框架

问题描述: 需要选择支持WebSocket的Python异步Web框架

替代方案: - A1: Flask + SocketIO - 同步框架,性能较低 - A2: Django Channels - 过于重量级 - A3: FastAPI - 新兴框架,生态较新

决策理由: - Tornado原生支持WebSocket - 成熟稳定,社区活跃 - 与PyAudio事件循环兼容

影响: - 需要使用Tornado的IOLoop进行异步处理 - 与PyAudio集成时需要特殊处理


AD-002: 音频编码方案

属性
决策ID AD-002
类型 Architectural
主题 音频编码选择
决策 采用Int16作为主要编码,Opus作为可选编码

问题描述: 需要选择低延迟、高质量的音频编码方案

替代方案: - A1: AAC - 延迟较高,专利问题 - A2: MP3 - 延迟较高,不适合实时 - A3: Opus - 低延迟,高质量,Web原生支持

决策理由: - Opus是WebRTC标准,浏览器原生支持 - 低延迟 (20ms帧长) - 高压缩率 (48kbps达到CD音质)

影响: - TX端使用Opus编码 - RX端需要支持多种解码格式


AD-003: DSP降噪方案

属性
决策ID AD-003
类型 Architectural
主题 DSP降噪选择
决策 集成WDSP库,使用NR2频谱降噪

问题描述: 需要为SSB语音通信选择专业降噪方案

替代方案: - A1: RNNoise - 通用神经网络降噪,SSB效果一般 - A2: WebAudio滤波器 - 效果有限 - A3: WDSP NR2 - 专门针对SSB优化

决策理由: - WDSP是OpenHPSDR项目专业DSP库 - NR2频谱降噪专门针对SSB优化 - 15-20dB降噪深度,语音保真度高

影响: - 需要安装WDSP库 (libwdsp) - 48kHz采样率处理


AD-004: 多实例部署架构

属性
决策ID AD-004
类型 Architectural
主题 多实例支持
决策 使用独立配置文件 + 独立Unix Socket

问题描述: 需要支持单服务器运行多个MRRC实例

替代方案: - A1: Docker容器隔离 - 需要额外学习成本 - A2: 端口区分 - 音频设备共享问题 - C: 配置文件 + Unix Socket隔离

决策理由: - 配置文件独立,配置简单 - Unix Socket隔离避免端口冲突 - 复用现有代码,改动最小

影响: - 每个实例需要独立配置文件 - 每个实例需要独立Unix Socket路径


8.2 架构决策汇总

决策ID 类型 主题 状态
AD-001 Architectural Tornado Web框架 已实施
AD-002 Architectural Int16/Opus编码 已实施
AD-003 Architectural WDSP NR2降噪 已实施
AD-004 Architectural 多实例部署 已实施
AD-005 Management PTT可靠性机制 已实施
AD-006 Operational 音频缓冲区策略 已实施

9. 架构概览 (ART 0512)

9.1 企业视图

MRRC 企业架构 Internet 层 Mobile User iPhone 浏览器 Desktop User PC 浏览器 External App JTDX / WSJT-X HTTPS/WSS HTTPS/WSS HTTP DMZ / 防火墙 TLS Termination / SSL 证书 MRRC Server Web Server Tornado :443/:8877 WebSocket Server 音频/控制通道 REST API :8080 外部集成 Audio & Control Manager Radio Device IC-M710等 ATR-1000 天调设备 rigctld Hamlib (:4532)

9.2 服务视图

MRRC 服务架构 服务层 (Services Layer) Web UI Service Web用户界面 Audio Stream 实时音频流服务 Control Service 电台控制服务 ATR Proxy Service ATR-1000代理 依赖 支撑层 (Support Layer) User Auth Service 用户认证 Session Manager 会话管理 WDSP DSP Processing NR2 / NB / ANF / AGC Audio Codec Int16 / Opus / ADPCM

9.3 技术视图

MRRC 技术架构 前端 (Frontend) HTML5 / CSS3 Vanilla JS Web Audio API WebSocket API WSS / HTTPS 后端 (Backend) Tornado WebSocket 异步服务器 PyAudio 音频 I/O WDSP DSP 处理 Hamlib rigctld 集成 Radio Device ATR-1000 Tuner rigctld (Hamlib)

10. 服务模型 (ART 0582)

10.1 服务组合

服务 类型 描述
WebUIService 核心 Web用户界面服务
AudioStreamService 核心 实时音频流服务
ControlService 核心 电台控制服务
DSPProcessingService 核心 WDSP数字信号处理
ATRProxyService 支撑 ATR-1000代理服务
AuthService 支撑 用户认证服务
SessionService 支撑 会话管理服务
APIService 扩展 REST API服务
VoiceAssistantService 扩展 AI语音助手服务
CWDecoderService 扩展 CW实时解码服务

10.2 服务层次

服务层次结构 用户服务层 (User Services) Web UI Interface 浏览器界面 Voice Assistant AI 语音助手 CW Decoder Interface CW 实时解码 业务服务层 (Business Services) Audio Stream 音频流管理 Radio Control 电台控制 ATR Management 天调管理 DSP Processing 数字信号处理 Session Management 会话管理 基础设施服务层 (Infrastructure Services) WebSocket Transport 传输层 Audio I/O (PyAudio) 音频输入/输出 Network Comm 网络通信 Hamlib Integration 电台集成 File Storage 文件存储

10.3 服务依赖

服务依赖关系 VoiceAssistant 语音助手 CWDecoder CW解码 WebUI Web 界面 AudioStream 音频流 (核心) RadioControl 电台控制 ATRProxy ATR-1000 代理 Session 会话管理 Auth 用户认证

11. 组件模型 (ART 0515)

11.1 组件清单

组件 类型 职责
MRRCServer 核心 Tornado主服务器,WebSocket处理
AudioCapture 核心 PyAudio音频采集
AudioPlayer 核心 PyAudio音频播放
WDSPProcessor 核心 WDSP DSP处理 (NR2/NB/ANF/AGC)
AudioEncoder 核心 音频编码 (Int16/Opus/ADPCM)
AudioDecoder 核心 音频解码
HamlibClient 核心 rigctld通信客户端
ControlHandler 核心 控制命令处理
SessionManager 支撑 会话管理
AuthManager 支撑 用户认证
ATRProxyClient 支撑 ATR-1000 Unix Socket客户端
RESTAPIHandler 扩展 REST API处理器
VoiceAssistantClient 扩展 语音助手客户端
CWDecoder 扩展 CW ONNX解码器

11.2 组件接口

组件接口定义 MRRCServer + start() + stop() + handle_ws() + handle_http() AudioCapture + start() + stop() + read() AudioPlayer + play() + stop() + flush() ControlHandler + setFreq() + setMode() + setPTT() AudioEncoder + encode() + setCodec() WDSPProcessor + process() + setNR2() + setAGC() HamlibClient + send_cmd() + get_freq() + set_freq() ATRProxyClient + connect() + send() + recv()

11.3 组件协作

协作 描述
TX Audio Path Mic → AudioCapture → AudioEncoder → MRRCServer → Radio
RX Audio Path Radio → PyAudio → WDSPProcessor → AudioDecoder → Browser
Control Path Browser → MRRCServer → HamlibClient → rigctld → Radio
ATR Path MRRCServer → ATRProxyClient → ATR-1000 Device

12. 运营模型 (ART 0522)

12.1 系统拓扑

MRRC 系统拓扑 Node: MRRC Server OS: macOS / Linux Python 3.12+ MRRC Server :8877 rigctld :4532 atr1000_proxy :60001 voice_assistant :9090 PyAudio / WDSP / Hamlib Radio Device IC-M710 / Serial: /dev/tty... ATR-1000 Tuner IP: 192.168.1.63 Audio Device USB CODEC

12.2 节点描述

节点 类型 规格 软件
MRRC Server 应用服务器 4+ CPU, 8+ GB RAM Python 3.12+, Tornado
rigctld 控制器进程 - Hamlib
ATR-1000 Proxy 代理进程 - Python
客户端 浏览器 Modern Browser Chrome/Safari/Edge

12.3 连接矩阵

目标 协议 端口
Browser MRRC Server HTTPS/WSS 443/8877
MRRC Server rigctld TCP 4532
MRRC Server ATR-1000 Proxy Unix Socket /tmp/atr1000_*.sock
ATR-1000 Proxy ATR-1000 Device WebSocket 60001
MRRC Server Voice Assistant HTTP 9090
External App REST API HTTP 8080

12.4 部署配置

环境 配置
开发 HTTP, localhost, 单实例
生产 HTTPS (TLS), 域名, 多实例支持

13. 可行性评估 (ART 0530)

13.1 风险评估 (Risks)

ID 风险 概率 影响 缓解措施
R1 音频延迟过高 AudioWorklet优化,缓冲区调整
R2 PTT可靠性不足 预热帧机制,确认重试
R3 WDSP集成困难 备选RNNoise方案
R4 移动端兼容性 多浏览器测试
R5 多实例配置复杂 标准化配置模板

13.2 假设 (Assumptions)

ID 假设 置信度
A1 用户有稳定的互联网连接
A2 电台支持Cat控制 (rigctld)
A3 浏览器支持WebSocket
A4 用户具备基本网络知识

13.3 问题 (Issues)

ID 问题 优先级 状态
I1 多实例Unix Socket配置需要完善 已解决
I2 ATR-1000设备连接稳定性 监控中

13.4 依赖 (Dependencies)

ID 依赖 所有者
D1 Hamlib/rigctld正常运行 用户
D2 网络可达性 用户
D3 TLS证书配置 用户

13.5 可行性结论

维度 评估 说明
技术可行 ✅ 高 核心功能已在V5.6.5实现
市场可行 ✅ 高 移动端远程控制需求明确
资源可行 ✅ 高 开源项目,社区支持
时间可行 ✅ 高 敏捷迭代,持续交付

14. 版本历史

版本 日期 作者 变更
V1.0 2026-06-19 MRRC Team 初始SDD文档

本文档遵循IBM Team Solution Design (TeamSD)方法论生成 文档编码: SDD-MRR-2026-001