我正在为我的类项目做防蚊剂工作。该应用程序应该检测到cat(OpenCV实现)并向cat尖叫。但是,我希望我的软件发出超声波声音,以免打扰周围的人。
有谁知道我怎么能在matlab中做到这一点?

最佳答案

Ryan的回答本质上是正确的,但是有太多的问题超出了我对适当解释的评论范围。两个主要问题是:

  • 选择标准采样率。您需要执行此操作,以防止操作系统进行采样率转换并进一步加重信号失真。由于采样率转换器的质量很高,所以通常这不是什么大问题,但是在生成接近niquist frequency的声音时,这很重要。
  • 请勿将信号乘以10。这会产生失真并产生各种问题。音频的标准范围是(-1,1),这是您输入的y。超出该范围可能会导致失真。在某些操作系统(例如mac OSX)上,如果主音量足够低,输出不会超出此范围,但是为什么要玩该游戏?同样,与第1个问题一样,这与普通代码可能没什么大不了的,但是由于您接近尼奎斯特,失真会产生声音,而超声波不再是副作用。如果需要更大的声音,请调高计算机的系统或扬声器的音量。

  • 这是我的具体建议:
    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来修改toneFreq。大多数计算机扬声器在22050时不会输出太多,所以这就是为什么我选择17000,这在技术上不是超声波。

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

    10-06 04:56