2013-05-01 106 views
0

我正在为我的班级项目制作猫驱蚊剂。该应用程序应该检测猫(OpenCV实现)并对猫进行尖叫。但是,我希望我的软件能够尖叫超声波,这样它就不会打扰周围的人。 有谁知道我可以在matlab中做到这一点?使用matlab的超声波声音

+1

听起来像你有硬件问题。大多数电脑扬声器被设计用来在人类可以听到的频率上产生噪音。为了惹恼猫(和狗)而不被人听到,你需要比平常更小的扬声器。也许是[超声波高音扬声器*](https://www.google.com/search?q=ultrasonic+tweeter)。 – 2013-05-01 02:04:17

+0

大多数声卡可以达到20 kHz,没有任何问题(CD采样频率为44.1 kHz - 这应该是截止频率的2倍,以满足Nyqvist的要求,即将其置于22 kHz)。随着年龄的增长,人们对更高频率的敏感度下降。几乎没有人可以听到20 kHz,所以这是一个很好的开始(我51岁,听力停止在8 kHz左右 - 你不会讨厌我!)。你将不得不在振幅上进行一些尝试 - 如果你过度使用它们,一些卡片将不会执行任何操作。 – Floris 2013-05-01 03:55:29

+0

@Shai,你的回答不适合我的问题。请不要评论无用。 – Prashant 2013-05-01 08:02:12

回答

1

在此,我引用的@gnovice在这个线程提供了答案:How do you generate dual tone frequencies in MATLAB?

他的解决方案概述了如何产生特定的频率和持续时间的色调,以及如何发挥,并将它们保存在Matlab。

总之,以产生所述数据在1kHz采样50Hz的音调和持续2秒时:

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))); 

要播放此声音:

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

编辑:删除行上的放大根据来自@Bjorn的新评论

+0

这应该会有很大的帮助 - 但是你需要更高的频率(和采样率)。尝试40k采样/秒和20 kHz - 基本上变成“+ 1-1 + 1-1 + 1-1 ...”波形。使用'soundsc'而不是'sound'来自动缩放到最大幅度(范围[-1,1])。调高卡上的音量。先以可听频率进行测试。 – Floris 2013-05-01 04:00:18

+1

不要将y乘以10,并选择标准采样率,如44100或48000.请参阅我的答案以获得解释。 – 2013-05-01 14:41:43

1

瑞恩的答案基本上是正确的,但是我有更多的问题比我能够充分解释的意见。两个主要问题是:

  1. 选择标准采样率。你需要这样做,以防止你的操作系统进行采样率转换,并增加信号的失真。这通常不是什么大问题,因为采样率转换器的质量非常高,但当产生接近niquist frequency的声音时,这很重要。

  2. 不会将您的信号乘以10.这会造成失真并产生各种问题。音频的标准范围是(-1,1),这是你在y中获得的。超出该范围可能会导致失真。在某些操作系统上(例如mac OSX),如果主音量足够低,在此范围之外输出不会变形,但为何要玩该游戏?再次,像问题#1一样,这对普通代码可能不是什么大问题,但是由于您接近于niquist,因此失真会产生不再是超声波的声音作为副作用。如果需要变大,请调高电脑的系统或扬声器音量。

这里是我的具体建议:

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”等音高相同)测试该代码或其他东西,这样您就知道它正在工作,您可以听到它有多大声。