首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:超声波到音频范围

Python:超声波到音频范围
EN

Stack Overflow用户
提问于 2014-08-14 11:21:50
回答 2查看 1.2K关注 0票数 1

我正在使用Python2.7.3,我有一个关于超声波频率的问题:

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

如何将接收到的信号映射到人类听觉的范围?或者换一种方式,我可以如何降低采样,并将这个信号转换成音频(保持信封形状,甚至可能延长时间,使其更长)。

这里是模拟信号,但在任何情况下都是这样的:

代码语言:javascript
复制
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()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-14 17:48:16

你的问题有两个共同的答案:

  1. 只需在采样频率的一小部分上播放。如果您播放您的信号回放,例如44.1 kHz采样频率,您将有一个大约1000赫兹和信号长度约20毫秒的音频。(我选择了44.1 kHz,因为它肯定是任何hw都可以回放的频率之一。)通过将信号保存到WAV文件中(请参阅wave模块),这可能是最简单的方法,然后您可以对任何播放WAV文件的内容进行回放。
  2. 标准的方法是将谐振频率降低到可听到的频率。这是无线电的基本原理。从数学上讲,它涉及到将接近谐振频率的载波频率相乘,然后对结果进行低通滤波。这一操作也可以被看作是将频谱移动到接近0。然而,由于您的信号包络非常快(0.25毫秒),这只会导致一个简短的点击,因此在这里没有用。

如果有进一步的要求,还可以找到其他的解决方案。包络频率和谐振频率似乎是比较接近的,这限制了选择。如果您需要对实时信号执行此操作,则挑战将是延长信封,因为随后必须检测到信封。否则,就不可能延长时间。

票数 3
EN

Stack Overflow用户

发布于 2014-08-14 12:09:53

我想对此发表评论,但我有一些例子。有很多种方法来表达这一点。您可以使用声音作为编码介质。如果您的原始波形没有什么属性,如frequency (常数)和envelope (变量/可以近似),例如,您可以使用简短的声音和沉默序列(1=generate sound/0=generate silence)以二进制形式对频率进行编码,然后可以用可变频率(例如,ex)表示恒定的声音。100 max的声音代表0的振幅,10000 max的声音代表最大的振幅)。要重建原始信封,可以使用插值。我希望你能明白我的意思。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25306838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档