0

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

4

2 回答 2

1

瑞安的回答基本上是正确的,但是我无法通过充分的解释在评论中挤进更多的问题。两个主要问题是:

  1. 选择标准采样率。您需要这样做以防止您的操作系统进行采样率转换并为您的信号增加进一步的失真。这通常不是什么大问题,因为采样率转换器的质量非常高,但是当生成接近高电平奈奎斯特频率的声音时,这一点很重要。

  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,但保持它小于0.5 * Fs。大多数电脑扬声器在 22050 时不会输出太多,所以这就是我选择 17000 的原因,这在技术上不是超声波。

另外,使用toneFreq=440(应该与钢琴上的“A”相同的音高)或其他东西测试该代码,这样您就知道它正在工作并且您可以听到它的响度。

于 2013-05-01T14:41:02.033 回答
1

为此,我将在此线程中引用@gnovice 提供的答案:如何在 MATLAB 中生成双音频率?

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

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

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 的新评论删除了关于放大的行

于 2013-05-01T01:48:10.050 回答