Near-field communication based on ultrasonic waves 基于超声波的近场通信 音频频率传输工具,支持跨平台音频信号处理与传输
本项目经过以下优化,显著提升了超声波通信的可靠性和性能:
- ECC纠错码优化: 将纠错字节从
max(8, len/4)提升到max(12, len/3) - 效果: 在噪声环境下数据传输成功率显著提高
- 声音标记阈值: 从
2.0f降低到1.5f - 效果: 提高信号检测灵敏度,更容易识别超声波信号
- 音量设置: 从
10提升到25 - 效果: 提高信号传输距离和抗干扰能力
- 频率调整: 超声波协议起始频率从
437调整到400 - 效果: 更好的频率响应和兼容性
- 默认采样率: 从
48000Hz调整到44100Hz - 频谱历史: 从
4增加到8 - 播放缓冲区: 从
16*1024减少到8*1024 - 捕获缓冲区: 从
1024减少到512 - 效果: 降低延迟,提高实时性能
- 容错机制: 信号检测从要求完全匹配改为允许2位错误
- 效果: 在噪声环境下仍能正确检测信号
- 协议选择: 默认使用协议5(超声波Normal)
- 效果: 专门针对超声波通信优化
- macOS (已测试)
- Linux (Ubuntu/Debian)
- Windows
- Android (实验性)
brew install sdl2sudo apt install libsdl2-devchoco install sdl2# 编译
mkdir build && cd build
cmake ..
make
# 运行
./magical-conch-cN: 选择捕获设备N-pN: 选择播放设备N-tN: 传输协议 (默认5 - 超声波Normal)-lN: 固定载荷长度,N在[1, 64]范围内-d: 使用直接序列扩频(DSS)技术 (默认启用)-v: 打印生成的音调信息-r: 仅接收模式,不发送数据-s filename: 保存接收到的数据到文件
问题:Mac电脑的音频设备最高采样率为44.1kHz,无法支持超声波协议的正常工作。
原因分析:
-
采样率不足导致严重失真:
- 超声波协议频率:20673 Hz(480 * 43.07 Hz)
- Mac最高采样率:44.1 kHz
- 每个周期只有 2.13 个采样点(44100 / 20673 ≈ 2.13)
-
奈奎斯特采样定理限制:
- 根据奈奎斯特采样定理,采样率至少要是信号频率的 2 倍才能准确重建信号
- 44.1kHz 采样率对于 20kHz 超声波,仅达到理论最低要求
- 实际应用中,需要 4-10 倍采样率才能获得高质量重建
-
高频信号对相位信息极其敏感:
- 超声波协议依赖精确的相位信息进行解码
- 采样点不足会导致相位信息完全丢失
- 即使信号幅度足够,解码器也无法提取正确的比特位
测试结果:
- ✅ 可听频段协议(t0-t2):完全正常工作,解码成功率 100%
- ❌ 超声波协议(t3-t5):无法正常解码,即使使用自动增益归一化也无法解决
解决方案:
-
使用专用硬件(推荐):
- 使用支持高采样率的音频设备(96kHz+)
- 例如:专业声卡、USB音频接口
-
使用可听频段协议(推荐):
- 使用协议 t0(Normal)、t1(Fast)或 t2(Fastest)
- 配合自动增益归一化功能,已经可以完美工作
- 示例:
./magical-conch -t0 -s waveform.bin -l5
-
提高采样率(需要硬件支持):
- 修改代码中的采样率参数到 96kHz 或 192kHz
- 需要音频设备支持相应的采样率
自动增益归一化功能:
为了解决信号幅度过低的问题,项目实现了自动增益归一化功能:
- 在保存波形文件前,自动扫描并放大信号到最大音量
- 目标峰值:25000(约 76% 音量)
- 完全解决了可听频段协议的信号幅度问题
- 但无法解决超声波协议的采样率限制问题
本项目使用以下技术实现超声波通信:
- FFT频谱分析: 实时分析音频频谱
- Reed-Solomon纠错码: 提供强大的错误纠正能力
- DSS扩频技术: 直接序列扩频提高抗干扰能力
- 多协议支持: 支持可听频段和超声波频段通信
- 自动增益归一化: 自动放大信号幅度,提高解码成功率