Python:超声波到音频范围

标签 python audio signal-processing

我正在使用 Python 2.7.3,我有一个与超声波频率有关的问题:

在 40MHz 采样时,我测量了一个超声波信号,它是 1MHz 谐振频率和一个包络的​​卷积——其包络取决于超声波信号传播的介质。我想听听这个收到的信号,我的问题是:

如何将接收到的信号映射到人类听觉范围内?或者换一种说法,
我如何下采样并将此信号转换为音频频率(保持包络形状,甚至可能延长时间以使其更长)。

这里是模拟信号,但无论如何它通常是这样的:

import numpy as np
import matplotlib.pylab as plt

# resonant frequency is 1MHz
f     = 1e6
Omega = 2*np.pi*f

# samle at 40MHz or ts=25ns, for about 1000 samples: 
t = np.arange(0,25e-6,25e-9)
y = np.sin(Omega*t) * (t**2) * np.exp(-t/3e-6)
y /= max(y)

plt.plot(y)
plt.grid()
plt.xlabel('sample')
plt.ylabel('value')
plt.show()

enter image description here

最佳答案

您的问题有两个常见的答案:

  • 只需以采样频率的一小部分播放即可。如果您播放信号,例如44.1 kHz 采样频率,您将听到大约 1000 Hz 的音调和大约 20 ms 的信号长度。 (我选择了 44.1 kHz,因为它肯定是任何硬件都可以播放的频率之一。)这可能最容易通过将信号保存到 WAV 文件中来完成(参见 wave 模块),然后你可以使用任何播放 WAV 文件的东西。
  • 标准方法是将谐振频率混合到可听频率。这是 radio 的基本原理。从数学上讲,它涉及乘以接近谐振频率的载波频率,然后对结果进行低通滤波。该操作也可以被视为将频谱移动到更接近 0。但是,由于您的信号包络非常快(0.25 ms),这只会导致短暂的点击,因此在这里没有用处。

  • 如果有进一步的要求,可以想出其他解决方案。包络频率和谐振频率似乎彼此比较接近,这限制了选择。如果您需要对实时信号执行此操作,那么挑战将是拉长包络,因为必须检测包络。否则无法延长时间。

    关于Python:超声波到音频范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306838/

    相关文章:

    python - 将 pandas 数据帧作为 mysql 查询中的参数传递

    c - 通过c中的套接字传递wav文件样本

    python - 游戏过程中音频变化速度

    ios - 用音频单元录制音频,文件的每个文件都以X秒为单位分割

    python - 字符串到日期时间 django

    python - 请求 https ://www. googleapis.com/bigquery/v2/projects/publicdata/queries?alt=json 时出现 HttpError 403 返回“访问被拒绝:作业 publicdata:

    c++ - 任意二维集的类 RANSAC 实现

    c - arm_cft_sR_q31_len4096 未声明

    python - MATLAB 和 Python 之间的不同频谱图

    python - Tweepy exists_friendship 不存在?