v1.0 · 正式发布

口袋里的
SunSDR2 DX 电台

原生 iOS SwiftUI 应用,iPhone 远程操控 SunSDR2 DX 收发信机。 实时频谱瀑布图、低延迟音频、DSP 降噪、一键 PTT —— 完整替代 Web 前端。

完整的电台操控体验

从频谱瀑布到 DSP 降噪,从频道记忆到 PTT 发射 —— 所有功能都经过精心设计,专为 iPhone 触摸交互优化。

实时频谱瀑布

512-bin FFT 实时频谱,与 Web 前端匹配的颜色渐变。自适应噪声基底,可配置增益/偏置对比度拉伸。

  • 动态频率刻度(39k/78k/156k/312k IQ 带宽)
  • 点击瀑布图直接跳频
  • 5 帧累积 + 10fps 节流,零主线程开销

低延迟音频

RX:Int16 PCM 48kHz 通过 AVAudioPlayerNode 播放。TX:麦克风采集 → 降采样 → Int16 PCM → WebSocket。

  • RX 48kHz 高清音频回放
  • TX 16kHz 单声道采集
  • 实时 RMS 电平表
  • 一键静音

频率 & 模式控制

超大 56pt 等宽频率显示,步进调谐,12 个业余波段预设,USB/LSB/CW/AM/FM/WFM 六种模式。

  • 56pt 数字频率显示,点击输入
  • 5 档步进:1K/5K/10K/50K/100K
  • 160m–2m 共 12 个波段预设
  • CW/SSB/Wide/AM/FM 滤波器预设

DSP 降噪面板

完整的 WDSP 数字信号处理控制:NR2 降噪、NB 噪声消除、ANF 自动陷波、AGC 自动增益。

  • NR2 降噪 + 电平调节
  • NB / ANF / NF 独立开关
  • AGC:关 / 慢 / 中 / 快
  • 手动陷波列表(添加/删除)

频道记忆

3×3 网格频率预设,始终可见。一键切换频率和模式。空槽位显示占位符,随时快速保存。

  • 9 个频道槽位,3×3 网格布局
  • UserDefaults JSON 持久化
  • 滑动删除,快速保存
  • 点击即调谐频率+模式

系统设置

服务器地址配置、IQ 采样率选择(39k/78k/156k/312k)、Keychain 自动登录、连接状态诊断。

  • 4 档 IQ 采样率可切换
  • Keychain 安全存储密码
  • 4 路 WebSocket 连接状态指示
  • 收藏频道管理

精密的工程架构

4 路 WebSocket 连接、零第三方依赖、纯 Apple 框架构建。

SunsdrMobile iOS App SwiftUI · Combine AVAudioEngine sunmrrc Server FastAPI / Python radio.vlsc.net:8889 192.168.16.100 SunSDR2 DX 192.168.16.200 Port 50001/50002 HTTPS / WSS 4 WebSocket 连接 UDP /WSCTRX 双向 文本 · cmd:val /WSaudioRX 下行 二进制 · PCM/Opus /WSaudioTX 上行 二进制 · PCM /WSspectrum 下行 二进制 · 512 uint8
双向 文本
/WSCTRX
Bidirectional Text
cmd:val 协议 — 频率、模式、PTT、DSP
下行 二进制
/WSaudioRX
Server → Client
1B 标签 + Int16 PCM / Opus
上行 二进制
/WSaudioTX
Client → Server
Int16 PCM 16kHz 单声道
下行 二进制
/WSspectrum
Server → Client
512 × uint8 dB (0=-120dB, 255=0dB)

专为 iPhone 触摸交互设计

每个像素都经过精心布局,信息密度与操作便利性的最佳平衡。

CTRL RX TX FFT USB S7 23ms 14.074.000 20m ▼ 1K ▼ S-meter S7 -30k -20k -10k 14.074 +10k +20k +30k 🔊 45 AF RF SQL USB SSB 20m 14.074 40m 7.074 --- --.--- --- --.--- 10m 28.074 --- --.--- --- --.--- --- --.--- --- --.--- TX HeaderView 56pt 频率 WaterfallView 3×3 频道网格 96pt PTT

RX 主界面

频谱瀑布 + S 表 + 音频电平 + 增益滑块 + 模式选择 + 频道网格 + PTT

SMeterViewWaterfallView ModeSelectorFavoritesGrid PTTButtonGainSlider

DSP 面板

WDSP 总开关、NR2 降噪(带电平表和强度滑块)、NB/ANF/NF 开关、AGC 模式选择、手动陷波管理

NotchChartViewNR2 Card AGC ButtonGroupNotch List

设置

快速保存、收藏管理(滑动删除)、服务器配置 + 重连、连接状态诊断、IQ 采样率切换

Quick SaveFavorites List Server ConfigStatusLine

零主线程负担

所有繁重计算均在后台线程完成,确保 60fps 流畅滚动。

50%
帧跳过率
减半 dispatch 开销
帧累积
减少瀑布图处理频次
10fps
瀑布图层数上限
UIImage 更新节流
200KB
瀑布图显存
512×100×4 像素缓冲
4
WebSocket 并发连接
URLSessionWebSocketTask
0
第三方依赖
纯 Apple 框架

技术栈

Swift 5.9 SwiftUI Combine AVFoundation AVAudioEngine URLSessionWebSocketTask CGImage / UIKit Keychain UserDefaults XcodeGen iOS 17+

5 分钟上手

克隆、生成 Xcode 项目、构建、连接电台 —— 只需四步。

克隆仓库

从 GitHub 获取最新代码

git clone https://github.com/cheenle/SunsdrMobile.git

生成 Xcode 项目

使用 XcodeGen 从 project.yml 生成 .xcodeproj

cd SunsdrMobile && xcodegen generate

构建 & 运行

在 Xcode 中打开项目,选择 iPhone 真机,Cmd+R 运行

open SunsdrMobile.xcodeproj

连接电台

输入服务器地址和密码,自动登录并建立 4 路 WebSocket 连接

radio.vlsc.net:8889 → Keychain
在 GitHub 上查看

运行环境

iOS 17.0+ Xcode 15.0+ Swift 5.9 iPhone 真机 sunmrrc v3.4+ 自签名 TLS 证书

模拟器不支持完整的 AVAudioEngine 麦克风功能,需要物理 iPhone 设备