amodem

amodem

音频调制解调库实现无网络数据传输

amodem是一个Python实现的音频调制解调库,可通过声卡实现计算机间的数据传输。它支持多种调制方式和采样率,使用OFDM技术,最高可达80kbps的传输速率。该项目适用于空中隔离或有线连接的场景,为无网络环境下的数据交换提供了解决方案。

音频调制解调器文件传输声音通信OFDMPythonGithub开源项目

音频调制解调器通信库

.. image:: https://img.shields.io/pypi/pyversions/amodem.svg :target: https://pypi.python.org/pypi/amodem/ :alt: Python 版本 .. image:: https://img.shields.io/pypi/l/amodem.svg :target: https://pypi.python.org/pypi/amodem/ :alt: 许可证 .. image:: https://img.shields.io/pypi/v/amodem.svg :target: https://pypi.python.org/pypi/amodem/ :alt: 包版本 .. image:: https://img.shields.io/pypi/status/amodem.svg :target: https://pypi.python.org/pypi/amodem/ :alt: 开发状态

描述

该程序可以使用简单的耳机在两台计算机之间传输文件,实现真正的空中隔离通信(通过扬声器和麦克风),或使用音频线缆(以获得更高的传输速度)。

发送方将输入数据调制成音频信号,然后通过声卡播放。

接收方录制音频,并将其解调回原始数据。

该过程需要一个手动校准步骤:发送方必须为其声卡找到最佳输出音量,该音量不会使接收麦克风饱和,并为解调提供足够好的信噪比。

HackerNews 讨论:https://news.ycombinator.com/item?id=17333257

技术细节

该调制解调器使用 OFDM 通过音频线缆进行通信,具有以下参数:

  • 采样率:8/16/32 kHz
  • 波特率:1 kHz
  • 符号调制:BPSK、4-PSK、16-QAM、64-QAM、256-QAM
  • 载波:2-11 kHz(最多十个载波)

这样,调制解调器可以达到 80kbps 比特率 = 10 kB/s(在最佳信噪比条件下)。

每个 250 字节的数据帧使用简单的 CRC-32 校验和来验证数据完整性。

安装

确保已安装所有必需的软件包(在 Debian 上):

$ sudo apt-get install python-numpy python-pip portaudio19-dev git

从 PyPI 获取最新发布版本:

$ pip install --user amodem

或者,尝试从 GitHub 获取最新(不稳定)开发版本:

$ git clone https://github.com/romanz/amodem.git
$ cd amodem
$ pip install --user -e .

对于图形和可视化(可选),安装 matplotlib Python 包。

验证安装,运行:

$ export BITRATE=48  # 显式选择高调制解调器比特率(假设良好的信噪比)。
$ amodem -h
usage: amodem [-h] {send,recv} ...

音频 OFDM 调制解调器:48.0 kb/s(64-QAM x 8 载波)Fs=32.0 kHz

位置参数:
  {send,recv}
    send         将二进制数据调制为音频信号。
    recv         将音频信号解调为二进制数据。

可选参数:
  -h, --help     显示此帮助消息并退出

在 Windows 上,您可以从 MinGW <https://packages.msys2.org/base/mingw-w64-portaudio>_ 下载 portaudio 库。 然后,您应该使用以下命令行标志指定 DLL:

-l AUDIO_LIBRARY, --audio-library AUDIO_LIBRARY
                    PortAudio 共享库的文件名。

校准

在发送方和接收方之间连接音频线缆,并运行以下脚本:

在发送方:

~/sender $ export BITRATE=48  # 显式选择高调制解调器比特率(假设良好的信噪比)。
~/sender $ amodem send --calibrate

在接收方:

~/receiver $ export BITRATE=48  # 显式选择高调制解调器比特率(假设良好的信噪比)。
~/receiver $ amodem recv --calibrate

如果未设置 BITRATE,调制解调器将使用 1 kbps 设置(单频率 BPSK 调制)。

调整发送方计算机的输出音量,直到所有频率都能良好接收:

3000 Hz: 良好信号 4000 Hz: 良好信号 5000 Hz: 良好信号 6000 Hz: 良好信号 7000 Hz: 良好信号 8000 Hz: 良好信号 9000 Hz: 良好信号 10000 Hz: 良好信号

如果信号"太弱",请提高发送方的输出音量。

如果信号"太强",请降低发送方的输出音量。

如果信号"太嘈杂",可能是噪声水平太高或模拟信号失真。 请在校准会话期间运行以下命令, 并将生成的 audio.raw 文件发送给我进行调试:

~/receiver $ arecord --format=S16_LE --channels=1 --rate=32000 audio.raw

您可以查看 校准过程的截屏 <https://asciinema.org/a/25065?autoplay=1>_。

使用方法

准备发送方(生成要发送的随机二进制数据文件):

~/sender $ dd if=/dev/urandom of=data.tx bs=60KB count=1 status=none
~/sender $ sha256sum data.tx
008df57d4f3ed6e7a25d25afd57d04fc73140e8df604685bd34fcab58f5ddc01  data.tx

启动接收方(将等待发送方开始):

~/receiver $ amodem recv -vv -o data.rx

启动发送方(将调制数据并开始传输):

~/sender $ amodem send -vv -i data.tx

发送方应输出类似的日志:

2015-02-06 18:12:46,222 DEBUG      音频 OFDM 调制解调器:48.0 kb/s(64-QAM x 8 载波)Fs=32.0 kHz
2015-02-06 18:12:46,222 INFO       已加载 PortAudio V19-devel(构建于 2014 年 2 月 25 日 21:09:53)
2015-02-06 18:12:48,297 INFO       发送 2.150 秒的训练音频
2015-02-06 18:12:48,297 INFO       开始调制
2015-02-06 18:12:49,303 DEBUG      已发送      6.000 kB
2015-02-06 18:12:50,296 DEBUG      已发送     12.000 kB
2015-02-06 18:12:51,312 DEBUG      已发送     18.000 kB
2015-02-06 18:12:52,290 DEBUG      已发送     24.000 kB
2015-02-06 18:12:53,299 DEBUG      已发送     30.000 kB
2015-02-06 18:12:54,299 DEBUG      已发送     36.000 kB
2015-02-06 18:12:55,306 DEBUG      已发送     42.000 kB
2015-02-06 18:12:56,296 DEBUG      已发送     48.000 kB
2015-02-06 18:12:57,311 DEBUG      已发送     54.000 kB
2015-02-06 18:12:58,293 DEBUG      已发送     60.000 kB
2015-02-06 18:12:58,514 INFO       已发送 60.000 kB @ 10.201 秒
2015-02-06 18:12:59,506 DEBUG      正在关闭输入和输出

接收方应输出类似的日志: 2015-02-06 18:12:44,848 调试 音频 OFDM 调制解调器: 48.0 kb/s (64-QAM x 8 载波) Fs=32.0 kHz 2015-02-06 18:12:44,849 信息 PortAudio V19-devel (构建于 2014年2月25日 21:09:53) 已加载 2015-02-06 18:12:44,929 调试 异步读取线程已启动 2015-02-06 18:12:44,930 调试 跳过 0.100 秒 2015-02-06 18:12:45,141 信息 等待载波音: 3.0 kHz 2015-02-06 18:12:47,846 信息 载波在 ~2265.0 ms @ 3.0 kHz 处检测到 2015-02-06 18:12:47,846 调试 已缓冲 1000 ms 的音频 2015-02-06 18:12:48,025 调试 载波从 2264.000 ms 开始 2015-02-06 18:12:48,029 调试 载波符号振幅: 0.573 2015-02-06 18:12:48,030 调试 载波当前相位: 0.061 2015-02-06 18:12:48,030 调试 频率误差: -0.009 ppm 2015-02-06 18:12:48,030 调试 频率校正: 0.009 ppm 2015-02-06 18:12:48,030 调试 增益校正: 1.746 2015-02-06 18:12:48,198 调试 前缀正确 2015-02-06 18:12:48,866 调试 3.0 kHz: 信噪比 = 34.82 dB 2015-02-06 18:12:48,866 调试 4.0 kHz: 信噪比 = 36.39 dB 2015-02-06 18:12:48,867 调试 5.0 kHz: 信噪比 = 37.88 dB 2015-02-06 18:12:48,867 调试 6.0 kHz: 信噪比 = 38.58 dB 2015-02-06 18:12:48,867 调试 7.0 kHz: 信噪比 = 38.86 dB 2015-02-06 18:12:48,867 调试 8.0 kHz: 信噪比 = 38.63 dB 2015-02-06 18:12:48,867 调试 9.0 kHz: 信噪比 = 38.07 dB 2015-02-06 18:12:48,868 调试 10.0 kHz: 信噪比 = 37.22 dB 2015-02-06 18:12:48,869 信息 开始解调 2015-02-06 18:12:49,689 调试 已获得 6.000 kB, 信噪比: 41.19 dB, 漂移: -0.01 ppm 2015-02-06 18:12:50,659 调试 已获得 12.000 kB, 信噪比: 41.05 dB, 漂移: -0.00 ppm 2015-02-06 18:12:51,639 调试 已获得 18.000 kB, 信噪比: 40.96 dB, 漂移: -0.00 ppm 2015-02-06 18:12:52,610 调试 已获得 24.000 kB, 信噪比: 41.47 dB, 漂移: -0.01 ppm 2015-02-06 18:12:53,610 调试 已获得 30.000 kB, 信噪比: 41.06 dB, 漂移: -0.00 ppm 2015-02-06 18:12:54,589 调试 已获得 36.000 kB, 信噪比: 41.37 dB, 漂移: -0.00 ppm 2015-02-06 18:12:55,679 调试 已获得 42.000 kB, 信噪比: 41.13 dB, 漂移: -0.00 ppm 2015-02-06 18:12:56,650 调试 已获得 48.000 kB, 信噪比: 41.31 dB, 漂移: -0.00 ppm 2015-02-06 18:12:57,631 调试 已获得 54.000 kB, 信噪比: 41.23 dB, 漂移: +0.00 ppm 2015-02-06 18:12:58,605 调试 已获得 60.000 kB, 信噪比: 41.31 dB, 漂移: +0.00 ppm 2015-02-06 18:12:58,857 调试 检测到 EOF 帧 2015-02-06 18:12:58,857 调试 已解调 61.205 kB @ 9.988 秒 (97.9% 实时) 2015-02-06 18:12:58,858 信息 接收到 60.000 kB @ 9.988 秒 = 6.007 kB/s 2015-02-06 18:12:58,876 调试 正在关闭输入和输出 2015-02-06 18:12:58,951 调试 异步读取线程已停止 (读取了 896000 字节)

接收器完成后,验证接收文件的哈希值:

~/receiver $ sha256sum data.rx 008df57d4f3ed6e7a25d25afd57d04fc73140e8df604685bd34fcab58f5ddc01 data.rx

你可以在这里观看数据传输过程的屏幕录像。

I/O 重定向

音频可以写入/读取中间 PCM 文件(而不是扬声器/麦克风),使用以下命令:

$ echo 123 | amodem send -o /tmp/file.pcm
发送 0.800 秒的训练音频
开始调制
已发送 0.004 kB @ 0.113 秒

$ amodem recv -i /tmp/file.pcm
等待载波音: 2.0 kHz
载波在 ~150.0 ms @ 2.0 kHz 处检测到
载波相干性: 100.000%
载波符号振幅: 1.000
频率误差: 0.000 ppm
开始解调
123
接收到 0.004 kB @ 0.011 秒 = 0.376 kB/s

可视化

确保已安装 "matplotlib" 包,并在接收端运行:

~/receiver $ amodem recv --plot -o data.rx

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多