一些音频 机器 2: 一些音频 --> “ Hello World ” 是否有-6ren">
gpt4 book ai didi

python - 使用 Python 使用音频传输数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:20 25 4
gpt4 key购买 nike

我有一个项目涉及将字符串转换为不同频率的声音序列,然后将声音读回原始文本。

机器 1:

"Hello World"--> 一些音频

机器 2:

一些音频 --> “ Hello World ”

是否有任何库或项目可以让我这样做?如果没有,关于如何实现这个的任何建议?

最佳答案

您需要了解一下调制技术。正常的程序是这样的:

  • 使用一些纠错码使二进制数据冗余
  • 将数据调制为离散信号
  • 数模转换器
  • 通过物理介质传输
  • A/D 转换器采样
  • 解调
  • 纠错

如果你想做的更简单,那么你可以跳过纠错部分,但这会带来风险,即你的整个数据在稍微不是最佳的环境下被破坏。

让我们快速浏览一下它的软件部分。

添加纠错码

有很多代码可以做到这一点。一个非常简单的方法就是将每个位重复多次,并在纠错阶段取所有接收到的位的平均值。

调制

您有一个由 1 和 0 组成的序列,并希望将其转换为波形图。您可以通过将它们映射到不同的基本信号来做到这一点。在简单的情况下,这些信号可以只是不同频率的正弦信号,通常它们可以是任何信号,但应该正交以在统计上独立。然后你需要指定一个比特将被发送多长时间,这被称为符号长度。您发送信号的时间越长,就越容易检测到它,但是您每次发送的数据可能会更少。请记住,我们正在创建一个离散信号,然后通过一些 D/A 转换器(我们的声卡)。

一个例子

我们要发送模式 00110100,使用 5000 Hz 的正弦表示 0,使用 10000 Hz 的正弦表示 1。我们选择符号长度为 1 毫秒,因此它是我们两个基本信号周期的倍数,这改善了形状。因此,我们发送一个频率为 5000 Hz 持续 2 ms 的正弦波,然后发送 10000 Hz 持续 2 ms,然后发送 5000 Hz 持续 1 ms,10000 Hz 持续 1 ms,最后发送 5000 Hz 持续 2 ms。要为此创建采样点,我们必须选择一种音频格式。让我们使用 44 kHz 采样频率。执行此操作的代码与此类似:

for bit in data:
for i in range(0, sampling_frequency * symbol_length):
signal.append(sin(i * sample_length * symbol_frequency(bit)))

sampling_frequency 类似于 44 kHz,symbol_length 为 1ms,sample_length 为 1/sampling_frequency,symbol_frequency 为 5000 Hz(0)和 10000 Hz(1)。

解调

这可以通过相关函数来完成。基本上,您假设您有一个符号,然后查看您接收到的信号与该符号生成的信号有多相似。相似度是接收样本与理论样本的乘积在所有样本上的总和。如果您的频率匹配,则整个信号的符号应该相等,因此这最终会成为一个很大的值,对于不同的频率,符号在不同的点发生变化,所有符号都将在零附近的某个地方结束。对于我们的简单案例,您可以使用假设的 1 和假设的 0 来计算相关函数,然后使用较大的一个作为您接收到的符号。

要读取您创建的音频并将其写入文件,您可以使用默认的 python wave 库:https://docs.python.org/2/library/wave.html

关于python - 使用 Python 使用音频传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com