# 波讯 **Repository Path**: EillesWan/WavingData ## Basic Information - **Project Name**: 波讯 - **Description**: 用波形存储数据吧 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-15 - **Last Updated**: 2026-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 波讯 ## 介绍 用波形存储数据吧 本项目实现了一种**高稳健性声学调制解调系统**,主要是希望在**模拟音频介质**(如黑胶唱片、盒式磁带)中存储数字二进制数据,纯是为了好玩。 期望即使在强噪声、频率失真、转速偏差等恶劣条件下,仍能可靠地从播放录音中恢复原始数字数据。 ## 使用 ### 1. 安装依赖 ```bash pip install numpy scipy reedsolo ``` ### 2. 编码:将文件转为音频 ```bash python encode_to_audio.py message.txt signal.wav ``` * 生成 `signal.wav`(单声道,44.1kHz,16-bit) 如果阁下的计算机内存足够,可以调整期望时长的限制(单位秒,默认7200,实际该限制只是理论值,并不是实际值),以生成很长很长的音频文件,如: ```bash python encode_to_audio.py sth.tar.br signal.wav 14400 ``` ### 3. 解码:从播放录音中恢复数据 ```bash # 普通模式 python decode_from_audio.py recording.wav recovered.txt # 调试模式(显示符号细节) python decode_from_audio.py recording.wav recovered.txt debug ``` ## 性能 | 音频时长(约) | 原始数据容量(约) | 适用场景 | |--------|------------------|--------| | 60 秒 | 30–50 字节 | UUID、短文本、URL | | 6 分钟 | 300–400 字节 | 诗歌、公钥、二维码内容 | | 2 小时 | 8000~9000 字节 | 小型配置、签名、元数据 | > 容量 = (符号速率 × 比特/符号 × 时长)× RS 编码效率 > 当前默认:**10 符号每秒 × 4 比特每符号 × 约25% ≈ 10 比特每秒 净数据率** ## 原理 ### 调制方式:**16-FSK + 线性脉冲信号同步头** * 使用 16 个离散频率(800–4800 Hz)表示 4 bit/符号 * 每符号持续 100 ms(10 符号/秒 → 40 bps) * 开头嵌入 1 秒线性脉冲信号(1–5 kHz)作为同步信号 ### 纠错机制:**Reed-Solomon (255, 63)** * 可纠正每 255 字节中最多 96 字节错误 * 有效对抗爆豆声、划痕、突发干扰 ### 容错设计 * 互相关检测线性脉冲信号同步头(可以检测转速误差) * 频点能量检测解调(不依赖相位或幅度) ## 参数 你可以在 `encode_to_audio.py` 和 `decode_from_audio.py` 开头修改以下参数: | 参数 | 说明 | 建议调整方向 | |------|------|------------| | `SYMBOL_DURATION` | 符号时长 | 增大 → 更稳健,但速率降低 | | `M` | FSK 阶数 | M=8 更可靠,M=32 提高速率但更脆弱 | | `FREQ_MIN / FREQ_MAX` | 频率范围 | 根据介质高频衰减情况下调(如磁带建议 ≤4 kHz) | | `RS_K` | RS 编码信息长度 | 越小纠错越强,但开销越大 | ## 注意 * 录制时请避免自动降噪或均衡处理 * 解码前请确保录音**无自动增益控制(AGC)**,否则会扭曲幅度关系 * 若解码失败,优先检查: + 同步头是否被完整录制 + 录音采样率是否为 44.1 kHz(或接近) + 是否存在强环境噪声覆盖数据频段 ## 许可证 本项目使用 [Apache 2.0 许可证](./LICENSE) 授权