SDD V1.2 · 2026-08-04

MRRC-FT8
软件设计说明书

用于记录 headless FT8/FT4 服务器的架构、接口、运行模型与版本演进, 作为实现与设计的一致性基线文档。

SDD 范围

IBM TeamSD 对齐,15 章,内容与实现状态一致。

属性
文档 IDSDD-MRRC-FT8-2026-001
版本V1.2
基线日期2026-08-04
阶段radio.vlsc.net:9988 在线运行(FT-710)
运行时WSJT-X 3.0.2 Improved DSP + FastAPI + Uvicorn + NumPy
前端HTML5, CSS3, vanilla JavaScript, Canvas PWA
核心接口FastAPI REST/WS + 受监督 DSP Worker IPC + rigctld loopback

V1.2 落地了什么

FT-710 电台电平改走 Raw CAT

ATT / PREAMP / AGC / RF 增益现改用 \send_raw 原始 CAT 帧读写,绕开 FT-710 从不回应的 hamlib L/l 电平路径(2026-08-04 对站内 rigctld 实机验证)。编码:RA01;=6 dB、PA01;=10 dB、GT06;=AUTO——hamlib 4.7.2 会误发 GT04;——以及 RG0<NNN>;=0..1。抽屉每次读取电台真实状态,写入后丢弃过期快照。

FT-710 滤波器宽度 Raw-SH

hamlib 4.6.2 拼错宽度命令(SH0NN; 而非 SH00NN;),导致 M <mode> <width> 永不改变电台。宽度现改走 raw \send_raw,并以 SH 寄存器真实读数回读(1.8 / 2.4 / 3.0 kHz),兼容 4.7.2 升级。发射功率(PC0…;)被 FT-710 拒绝,故不提供该控件。

MRRC-FT8 驾驶舱实况——20 米波段 14.074 MHz 的 FT8 频带活动与实时解码

驾驶舱实况:20 米波段 14.074 MHz 的 FT8 频带活动与实时解码。

V1.1 落地了什么

UtcRing 驱逐错位根因

环形物理位置曾以 (absolute − base) % capacity 寻址,驱逐推进 base 后读取按新 base 寻址而数据从未移动——偏移随墙钟 1:1 增长、在容量处回绕。现改为仅按绝对采样序号寻址(X % capacity):驱逐永不移动数据,base 仅作边界检查。

Replay 对侧 TX 时隙相位

回复路径缺少 UC-003「对侧 TX 时隙」:TxDriver 曾门控在永不变化的硬编码偶相位上,回复同相位的台总是碰撞。sequencer 现携带 tx_phase = 1 − slot_id % 2,QSO 交替至完成。

手动回复决策窗口

回复总是错过其所答消息之后的那个时隙。TX 决策现为临时性的:窗口保持打开至 decision_cutoff 并采用轮询而非睡眠,fit guard 将超过适配截止的回复推迟到下一个可用时隙。

3 kHz 瀑布 + 波段选择

频谱帧现仅输出 3 kHz FT8 通带——无空白半画布、载荷减半。驾驶舱顶栏波段选择器经租约门控的 /radio/band 变更调谐 7/14/21/28 MHz FT8 拨号频率。

SDD 15 章

AD-001 … AD-015

AD-001 Headless 分层服务器 AD-002 WSJT-X C ABI AD-003 受监督 DSP Worker AD-004 固定音频采样率域 AD-005 单一 DSP owner + 锁 AD-006 UTC 时隙纪律 AD-007 Sequencer/PTT 安全 AD-008 rigctld 串口 owner AD-009 Caddy 边缘 + Cookie 认证 AD-010 单一控制租约 AD-011 横屏优先驾驶舱 AD-012 人工选台,单场 QSO AD-013 独立有界数据流 AD-014 SQLite + ADIF AD-015 原生服务部署