2013-05-01 105 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」等音高相同)測試該代碼或其他東西,這樣您就知道它正在工作,您可以聽到它有多大聲。