首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用matlab实现超声波发声

用matlab实现超声波发声
EN

Stack Overflow用户
提问于 2013-05-01 09:14:05
回答 2查看 2.1K关注 0票数 0

我正在做我的班级项目,制作一种猫驱避剂。应用程序应该检测猫(OpenCV实现)并对猫发出尖叫。然而,我想让我的软件发出超声波的尖叫声,这样它就不会打扰周围的任何人。有人知道我是怎么用matlab做到这一点的吗?

EN

回答 2

Stack Overflow用户

发布于 2013-05-01 09:48:10

为此,我在这个帖子中引用了@Gnovice所提供的答案:How do you generate dual tone frequencies in MATLAB?

他的解决方案概述了如何生成特定频率和持续时间的音调,以及如何在Matlab中播放和保存它们。

总而言之,要生成以1 1kHz采样并持续2秒的50 Hz音调的数据:

代码语言:javascript
复制
Fs = 1000;      % Samples per second
toneFreq = 50;  % Tone frequency, in Hertz
nSeconds = 2;   % Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));

要播放此声音:

代码语言:javascript
复制
sound(y, Fs);  % Play sound at sampling rate Fs

编辑:根据@Bjorn的新评论删除放大部分的行

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 22:41:02

Ryan的回答基本上是正确的,但还有更多的问题,我无法在评论中进行充分的解释。两个主要问题是:

  1. 选择标准采样率。您需要这样做,以防止您的操作系统采样率转换和添加进一步失真到您的信号。这通常不是什么大问题,因为采样率转换器的质量非常高,但当在高电平下生成接近niquist frequency的声音时,这是important.
  2. don't将您的信号乘以10。这将产生失真并产生各种问题。音频的标准范围是(-1,1),这就是y中的值。超出这个范围可能会导致失真。在一些OSes (例如mac )上,如果主音量足够低,超出这个范围的输出不会失真,但为什么要玩这个游戏?同样,像问题#1一样,这对普通代码来说可能不是什么大问题,但由于你接近niquist,失真将产生不再是超声波作为副作用的声音。如果需要提高音量,请调高计算机系统或扬声器的音量。

以下是我的具体建议:

代码语言:javascript
复制
Fs = 44100;        % Samples per second. 48000 is also a good choice
toneFreq = 17000;  % Tone frequency, in Hertz. must be less than .5 * Fs.
nSeconds = 2;      % Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));

sound(y,Fs); % Play sound at sampling rate Fs

如果需要提高音量,请调高计算机系统或扬声器的音量。如果它一直向上,你不能在matlab中使它变得更响亮。您可以通过增加toneFreq但使其小于.5 * Fs来修改它。大多数计算机扬声器在22050的音量下不会输出太多,所以我选择了17000,从技术上讲,这不是超声波。

此外,用toneFreq=440测试代码(应该与钢琴上的"A“音高相同)或其他东西,这样你就可以知道它是工作的,你可以听到它有多大。

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

https://stackoverflow.com/questions/16311377

复制
相关文章

相似问题

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