2009-01-07 83 views
6

我試圖找到一種算法來檢測用戶在WM6設備上用C#吹入麥克風(如Ninentdo DS或iPhone)時的情況。如何監聽麥克風的噪音?

我正在考慮使用波形從麥克風實時讀取到一個小緩衝區,但我有點失去了如何識別吹的聲音,我想這聽起來像白噪聲。任何人有想法如何做到這一點?

任何幫助將不勝感激。

+0

「噪音」..似乎是一個尷尬的配對。 – mmcdole 2009-02-14 06:31:27

+0

你是否在意這種聲音是吹的,而不僅僅是響亮的東西?如果你不關心聲音是什麼,這個問題變得更容易。 – 2009-02-14 06:31:44

回答

4

如果我要解決這個問題,我會吹進麥克風和record that。然後對波數據運行an FFT以獲得主頻(或少數)。我會這樣做幾次「打擊」,看看他們是否會產生類似的結果。如果他們這樣做(我確信他們會這樣做),那麼我會使用算法來尋找相同的頻率。

這不是一項簡單的任務,但是由於大量的錄音和數學工作已經完成,您可能可以在沒有太多痛苦的情況下工作。

+0

我不知道OpenNetCF有一個FFT函數。很酷。 – MusiGenesis 2009-01-08 02:24:32

+0

事實上,我們有兩種不同的實現方式,我很久以前就做過了(可能在1.2版本左右)。 – ctacke 2009-01-08 02:48:57

+0

我認爲「噪音」(至少是白噪聲,這是吹入麥克風應該產生的噪音)是所有頻率的混合;一個主導頻率意味着音調,這會使聲音「不是噪音」 – 2009-02-14 07:16:26

1

這是不完全一樣,但這裏是我回答關於音符開始檢測問題:

Note onset detection

答案描述了依賴於信號強度的上升高於給定的閾值的方法。這種方法可以檢測吹氣噪音,儘管它也會響應任何噪音,所以說話等也會觸發它。

您可以使用FFT,但我認爲這樣做實時使用速度太慢,尤其是在Windows Mobile設備上(儘管它可能足夠快)。但是,吹風機噪音不太可能具有主導頻率,除非鼓風機鳴笛特定音符。如果FFT速度足夠快,您可能實際上想要查找沒有主頻的噪聲(假設任何具有主導頻率或頻率的是語音或某種儀器)並且權重很大朝着可聽範圍的上端(大約10,000hz左右)。

3

麥克風的擊中不一定會顯示高頻範圍(10,00hz +)的主頻率。吹出PC麥克風很可能會導致信號失真和失真,同時也會產生很多低頻率的頻率。產生的信號將只是一個大的飽和突發。

幾年前,我不得不做一個類似的項目,我所做的只是尋找音量高於正常水平的音量。工作很好。

3

sthg的回答提到變形可能是吹入話筒的結果。我只做了一個快速測試,並且我的吹風錄音(在便宜的麥克風上)顯示了大量樣本的最小值和最大值(例如,每個樣本16位WAV文件中的32767和-32768),其中看起來像一個平頂已被應用到每個峯值。檢測吹氣聲音的一種非常簡單的方法可能是對所有處於最小/最大值的樣本進行計數,並且如果它們佔總數(或其他閾值)的5%以上,則認爲吹氣發生。

1

我沒有看過這個頻譜,但我認爲你應該看到一個頻帶限制的噪聲頻譜,大部分能量低於幾百赫茲。這意味着你不需要完整的音頻帶寬FFT,16K點是矯枉過正的。即使是在一個小帶寬上的256點FFT,你也應該能夠告訴從話音中吹出麥克風的噪音。