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
目录
- 执行摘要
- 业务方向 (BUS 411)
- 项目定义 (ENG 343)
- 系统上下文 (APP 011)
- 非功能需求 (ART 0507)
- 用例模型 (ART 0508)
- 主题域模型 (APP 408)
- 架构决策 (ART 0513)
- 架构概览 (ART 0512)
- 服务模型 (ART 0582)
- 组件模型 (ART 0515)
- 运营模型 (ART 0522)
- 可行性评估 (ART 0530)
- 版本历史
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 技术架构
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 用户与系统交互
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 核心用例
6.2.2 扩展用例
| 用例ID |
用例名称 |
描述 |
| UC-004 |
天调控制 |
ATR-1000功率/SWR显示和调谐 |
| UC-005 |
语音助手 |
AI语音识别和控制 |
| UC-006 |
CW解码 |
摩尔斯电码实时解码 |
| UC-007 |
音频录制 |
QSO录音和回放 |
| UC-008 |
多实例管理 |
多电台独立控制 |
6.3 用例关系图
7. 主题域模型 (APP 408)
7.1 核心实体
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 企业视图
9.2 服务视图
9.3 技术视图
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 服务层次
10.3 服务依赖
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 组件接口
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 系统拓扑
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