2011-11-27 93 views
6

我已經編程了一個語音識別程序,並且我在聽電腦的麥克風上播放音樂時遇到問題。我需要的軟件可以濾除離開揚聲器的聲音進入麥克風。有源噪聲消除

是否有軟件或組件(德爾福),將解決我的問題?

+0

您需要在fft監視器中捕獲噪聲配置文件(例如,它會將帶36,67,123,...定義爲需要減少xdb的帶寬),使用此配置文件製作一個fft過濾器並將其應用於您的信號。我不喜歡,因爲這有點偏離主題。你需要一個沒有初步工作的軟件或組件。也許它更適合質量保證網站'信號處理'? – az01

+0

作爲提示,爲了消除噪音,您可以在相位顛倒的情況下播放它。 –

+0

我一直在尋找一段時間,所有我發現是無意義的!那麼這個。這是實際情況!請問,它是如何爲你工作的? – Fardin

回答

7

你需要捕獲:

  1. 計算機輸出
  2. 麥克風。輸入

然後,你需要找到兩個參數,這取決於你的話筒。位置和音響系統延遲。這兩個參數是n延遲和k放大。

Stream1[t+n]*k=Stream2[t] 

其中t =時間。當你找到這個參數,然後你的結果流,只有speek麥克風。輸入將

Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t] 
+0

真的很喜歡這個整潔的解決方案。該等式中的「n」取決於音頻輸出的緩衝器大小,即輸出的等待時間。 – Alex

+0

在發送到音頻輸出緩衝區本身之前,您可以根據需要通過創建自己的'x'個樣本幀緩衝區來了解'n'。這很好,但它可能會讓最終用戶無法忍受延遲時間。 – Alex

+4

這不會很好,因爲系統的脈衝響應不可能是單個延遲抽頭。由於房間裏有反射聲,揚聲器相位響應等,聲音會及時傳播。 – hotpaw2

6

我想你想要做什麼noise canceling microphones做。這些系統使用至少一個額外的麥克風來計算「周圍噪音」與直接針對麥克風(它必須註冊的語音)的噪音之間的差異。我不認爲你可以通過純軟件解決方案獲得同樣的效果。

第一步顯然是把音樂關小:-)

+1

-1:你的評論,而不是答案。該請求是針對軟件解決方案從其收到的聲音中去除計算機產生的聲音的。 – Argalatyr

+0

@ Argalatyr但是,這是有效的一點,如果沒有額外的信息,噪聲消除是非常困難的,而噪聲消除麥克風具有。 – Harriv

+0

@Argalatyr我明白你的觀點,我在回答和評論之間猶豫了一段時間。然而,這個問題很難在軟件中正確解決,而且硬件解決方案的難以置信的簡單性(第二個麥克風,或現成的噪聲消除成本不高)使我決定將其作爲答案這個問題。但我同意它有點朦朧.. – fvu

1

我覺得Speex的預處理器有回聲消除功能。您需要將所錄製的音頻數據以及要取消的音頻提供給它,並嘗試將其刪除。

的主要問題是找出哪些音頻您的計算機播放。不知道是否有一個好的API。

它還具有降噪功能,和語音活動檢測。你可以將它編譯爲一個dll,然後編寫一個delphi頭文件。

5

退房的AsioVST庫。

  • 100%開源的Delphi代碼
  • 免費
  • 非常完整
  • 活動(用於XE2/x64的支持正在添加例如)

Examples\Plugins\Crosstalk Cancellation\你會發現插件的源代碼可能會做你想要的。

Screenshot

魔術發生在DAV_DspCrosstalkCancellation.pas

1

您需要估計揚聲器和室等的脈衝響應,其可以與精確揚聲器和麥克風的定位和尺寸與房間的內容等,以及知道改變/估計系統延遲。

如果人或麥克風是可移動的,則需要不斷重新估計脈衝響應和延遲。

一旦您估計了脈衝響應,就可以將其與輸出信號進行卷積並嘗試從話筒輸入中減去延遲版本的結果,直到可以將語音輸入的無聲部分置零。互相關可能對估計延遲有用。