SDD 软件设计说明

MRRC 软件设计方案 (SDD)

Mobile Remote Radio Control - Software Design Description

文档版本: V1.0
日期: 2026-03-15
状态: 正式发布
项目: 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 核心功能

1.4 技术架构

┌─────────────────────────────────────────────────────────────────────────┐
│                        客户端层 (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)

3.2.2 范围外 (Out of Scope)

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/多实例

4. 系统上下文 (APP 011)

4.1 用户与系统交互

┌─────────────────────────────────────────────────────────────────────────┐
│                           用户 (Users)                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐               │
│  │ HAM Operator │  │ HAM Operator │  │ External App │               │
│  │ (移动端)     │  │ (桌面端)     │  │ (JTDX/WSJT) │               │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘               │
│         │                  │                  │                         │
│         ▼                  ▼                  ▼                         │
│  ┌─────────────────────────────────────────────────────────┐            │
│  │                    MRRC System                         │            │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  │            │
│  │  │ Web Browser │  │ WebSocket   │  │  REST API   │  │            │
│  │  │ (UI Layer)  │  │ (Audio/Ctrl)│  │ (:8080)     │  │            │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  │            │
│  └─────────────────────────────────────────────────────────┘            │
│                               │                                         │
└───────────────────────────────┼─────────────────────────────────────────┘
                                │
        ┌───────────────────────┼───────────────────────┐
        │                       │                       │
        ▼                       ▼                       ▼
┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│  Radio Device │     │ ATR-1000      │     │  rigctld      │
│  (IC-M710等)  │     │ (天调设备)    │     │  (Hamlib)     │
└───────────────┘     └───────────────┘     └───────────────┘

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播放                                                      │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│                       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   │     │ UC-005   │
             │ 天调控制  │     │ 语音助手  │
             └──────────┘     └──────────┘

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 │  │Desktop User │  │External App │           │   │
│  │  │   (iPhone)  │  │   (PC)      │  │   (JTDX)    │           │   │
│  │  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘           │   │
│  └─────────┼─────────────────┼─────────────────┼──────────────────┘   │
│            │                 │                 │                         │
│            │ HTTPS/WSS       │ HTTPS/WSS       │ HTTP                  │
│            ▼                 ▼                 ▼                        │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                     DMZ / 防火墙                                 │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │              TLS Termination / 证书                      │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                  │                                      │
│                                  ▼                                      │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                    MRRC Server                                  │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐           │   │
│  │  │ Web Server  │  │ WebSocket   │  │  REST API   │           │   │
│  │  │  (:443/8877)│  │  Server     │  │   (:8080)   │           │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘           │   │
│  │         │                │                │                    │   │
│  │         └────────────────┼────────────────┘                    │   │
│  │                          ▼                                     │   │
│  │  ┌─────────────────────────────────────────────────────────┐   │   │
│  │  │              Audio & Control Manager                     │   │   │
│  │  │  ┌──────────┐  ┌──────────┐  ┌──────────┐              │   │   │
│  │  │  │ PyAudio  │  │ WDSP     │  │ Hamlib   │              │   │   │
│  │  │  │ Interface│  │ Processor │  │ Wrapper  │              │   │   │
│  │  │  └──────────┘  └──────────┘  └──────────┘              │   │   │
│  │  └─────────────────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                  │                                      │
│              ┌───────────────────┼───────────────────┐                │
│              │                   │                   │                │
│              ▼                   ▼                   ▼                │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐      │
│  │   Radio Device  │  │  ATR-1000       │  │   rigctld      │      │
│  │   (IC-M710等)   │  │   (天调设备)    │  │   (Hamlib)     │      │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘      │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

9.2 服务视图

┌─────────────────────────────────────────────────────────────────────────┐
│                        MRRC 服务架构                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────────┐ │
│  │                      服务层 Services Layer                        │ │
│  ├──────────────┬──────────────┬──────────────┬────────────────────┤ │
│  │              │              │              │                    │ │
│  │  ┌────────┐ │  ┌────────┐ │  ┌────────┐ │  ┌────────┐         │ │
│  │  │ Web UI │ │  │Audio   │ │  │Control │ │  │ ATR    │         │ │
│  │  │ Service│ │  │ Stream │ │  │ Service│ │  │ Proxy  │         │ │
│  │  │        │ │  │ Service│ │  │        │ │  │ Service│         │ │
│  │  └────────┘ │  └────────┘ │  └────────┘ │  └────────┘         │ │
│  │      │      │      │       │      │      │      │              │ │
│  │      └──────┴──────┴───────┴──────┴──────┘      │              │ │
│  │                     │                            │              │ │
│  └─────────────────────┼────────────────────────────┼──────────────┘ │
│                        ▼                                            │
│  ┌──────────────────────────────────────────────────────────────────┐ │
│  │                      支撑层 Support Layer                         │ │
│  ├──────────────────────┬───────────────────────────────────────────┤ │
│  │  ┌────────────────┐  │  ┌────────────────────────────────────┐  │ │
│  │  │  User Auth     │  │  │     WDSP DSP Processing           │  │ │
│  │  │  Service       │  │  │     NR2/NB/ANF/AGC                │  │ │
│  │  └────────────────┘  │  └────────────────────────────────────┘  │ │
│  │  ┌────────────────┐  │  ┌────────────────────────────────────┐  │ │
│  │  │  Session      │  │  │     Audio Encoding/Decoding        │  │ │
│  │  │  Manager      │  │  │     Int16/Opus/ADPCM               │  │ │
│  │  └────────────────┘  │  └────────────────────────────────────┘  │ │
│  └──────────────────────┴───────────────────────────────────────────┘ │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

9.3 技术视图

┌─────────────────────────────────────────────────────────────────────────┐
│                        MRRC 技术架构                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────────┐ │
│  │                         前端 Frontend                             │ │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐         │ │
│  │  │HTML5/CSS3│  │Vanilla JS│  │Web Audio │  │WebSocket │         │ │
│  │  │          │  │          │  │  API     │  │   API    │         │ │
│  │  └──────────┘  └──────────┘  └──────────┘  └──────────┘         │ │
│  │       │             │             │             │                 │ │
│  │       └─────────────┴─────────────┴─────────────┘                 │ │
│  │                         │                                           │ │
│  └─────────────────────────┼─────────────────────────────────────────┘ │
│                            │ WSS/HTTPS                                  │
│  ┌─────────────────────────┼─────────────────────────────────────────┐ │
│  │                    后端 Backend                                     │ │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐         │ │
│  │  │ Tornado  │  │ PyAudio  │  │  WDSP    │  │ Hamlib   │         │ │
│  │  │ WebSocket│  │  (Port)  │  │  (DSP)   │  │ (rigctld)│         │ │
│  │  │ Server   │  │          │  │          │  │          │         │ │
│  │  └──────────┘  └──────────┘  └──────────┘  └──────────┘         │ │
│  │       │             │             │             │                 │ │
│  │       └─────────────┴─────────────┴─────────────┘                 │ │
│  │                         │                                           │ │
│  └─────────────────────────┼─────────────────────────────────────────┘ │
│                            │                                            │
│        ┌───────────────────┼───────────────────┐                      │
│        │                   │                   │                      │
│        ▼                   ▼                   ▼                      │
│  ┌──────────┐       ┌──────────┐       ┌──────────┐                │
│  │  Radio   │       │ATR-1000  │       │  rigctld │                │
│  │ Device   │       │ Tuner    │       │ (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      │  │ Voice       │  │ CW Decoder  │             │  │
│  │  │ Interface   │  │ Assistant   │  │ Interface   │             │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘             │  │
│  └─────────────────────────────────────────────────────────────────┘  │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐  │
│  │                     业务服务层 Business Services                  │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │  │
│  │  │ Audio Stream│  │ Radio       │  │ ATR        │             │  │
│  │  │ Management  │  │ Control     │  │ Management │             │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘             │  │
│  │  ┌─────────────┐  ┌─────────────┐                              │  │
│  │  │ DSP         │  │ Session     │                              │  │
│  │  │ Processing  │  │ Management  │                              │  │
│  │  └─────────────┘  └─────────────┘                              │  │
│  └─────────────────────────────────────────────────────────────────┘  │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐  │
│  │                     基础设施服务层 Infrastructure Services        │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │  │
│  │  │ WebSocket   │  │ Audio I/O   │  │ Network    │             │  │
│  │  │ Transport   │  │ (PyAudio)   │  │ Communication│            │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘             │  │
│  │  ┌─────────────┐  ┌─────────────┐                              │  │
│  │  │ Hamlib      │  │ File       │                              │  │
│  │  │ Integration │  │ Storage    │                              │  │
│  │  └─────────────┘  └─────────────┘                              │  │
│  └─────────────────────────────────────────────────────────────────┘  │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

10.3 服务依赖

┌─────────────────────────────────────────────────────────────────────────┐
│                          服务依赖关系                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│   VoiceAssistant ─────┐                                                │
│        │              │                                                │
│   CWDecoder ──────────┼────▶ AudioStream ◀──┐                         │
│        │              │        │             │                         │
│   WebUI ──────────────┘        │             │                         │
│                               │             │                         │
│   RadioControl ◀──────────────┴─────────────┼────────────────┐        │
│        │                                       │                │        │
│   ATRProxy ◀─────────────────────────────────┘                │        │
│        │                                                     │         │
│   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│  │AudioPlayer  │  │Control   │  │                    │
│  │ │+start()    │  │+play()     │  │+setFreq()│  │                    │
│  │ │+stop()     │  │+stop()     │  │+setMode()│  │                    │
│  │ │+read()     │  │+flush()    │  │+setPTT() │  │                    │
│  │ └──────┬──────┘  └──────┬──────┘  └────┬────┘  │                    │
│  │        │                 │               │       │                    │
│  │        ▼                 ▼               ▼       │                    │
│  │ ┌─────────────┐  ┌───────────────────────┐      │                    │
│  │ │AudioEncoder│  │    WDSPProcessor      │      │                    │
│  │ │+encode()   │  │+process()            │      │                    │
│  │ └──────┬──────┘  │+setNR2()            │      │                    │
│  │        │         │+setAGC()            │      │                    │
│  │        │         └───────────────────────┘      │                    │
│  │        │                                        │                    │
│  │        ▼                                        │                    │
│  │ ┌─────────────┐  ┌─────────────┐                │                    │
│  │ │HamlibClient │  │ATRProxyClient│                │                    │
│  │ │+send_cmd()  │  │+connect()   │                │                    │
│  │ │+get_freq()  │  │+send()      │                │                    │
│  │ │+set_freq()  │  │+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   │ │ rigctld │ │atr1000_ │ │ voice   │  │  │ │   │
│  │  │  │  │Server  │ │         │ │ proxy   │ │assistant│  │  │ │   │
│  │  │  │  │ :8877  │ │ :4532   │ │ :60001  │ │ :9090  │  │  │ │   │
│  │  │  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘  │  │ │   │
│  │  │  │       │          │           │           │        │  │ │   │
│  │  │  │       └──────────┼───────────┼───────────┘        │  │ │   │
│  │  │  │                  │           │                    │  │ │   │
│  │  │  │  ┌──────────────┴───────────┴──────────────┐      │  │ │   │
│  │  │  │  │     PyAudio / WDSP / Hamlib            │      │  │ │   │
│  │  │  │  └─────────────────────────────────────────┘      │  │ │   │
│  │  │  └───────────────────────────────────────────────────┘  │ │   │
│  │  │                                                              │   │
│  │  └─────────────────────────────────────────────────────────────┘   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                      │                                  │
│           ┌──────────────────────────┼──────────────────────────┐     │
│           │                          │                          │     │
│           ▼                          ▼                          ▼     │
│   ┌───────────────┐         ┌───────────────┐         ┌─────────────┐  │
│   │  Radio Device │         │ ATR-1000      │         │  Audio     │  │
│   │  IC-M710     │         │ Tuner         │         │  Device    │  │
│   │  Serial:     │         │ IP:           │         │  USB CODEC │  │
│   │  /dev/tty... │         │ 192.168.1.63  │         │            │  │
│   └───────────────┘         └───────────────┘         └─────────────┘  │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

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 可行性结论

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

14. 版本历史

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

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