2011-05-23 140 views
1

我的代碼實現了一個低通濾波器,以檢測麥克風的擊球。 我不明白如何確定的頻率,並挑選我自己的ALPHA:iPhone中的低通濾波器

lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; 

這應該檢測的麥克風打擊。

我想獲得一個新的ALPHA來實現fc = 1 khz或更高的低通濾波器。

我如何挑選另一個ALPHA來做到這一點?

他們花了ALPHA = 0.05,根據維基百科公式,他們所做的每秒採樣率爲30次,我得到1.2 Hz的fc。

或者我應該採取44.1 kHz的採樣率?我們在30赫茲採樣信號。

+0

我不知道我必須接受答案!我只是提到現在.. :) – Curnelious 2011-05-23 16:02:26

回答

5

這是一個簡單的遞歸低通濾波器,它只是用來平滑麥克風的測量(瞬時)功率。通常你需要一個低截止頻率,例如1 Hz,以便濾除所有噪音並獲得平滑的功率測量。增加截止頻率(增加ALPHA)會使輸出響應更快,但會引入更多噪聲。反過來,降低截止頻率(降低ALPHA)會使輸出反應更慢,但也會減少噪音量。

請注意,如果您只更新30 Hz的濾波器,則無法將截止頻率設置爲1 kHz。 Nyquist rate是15赫茲,因此您只能在低於此頻率的頻率下進行濾波。另外,如果您想要做的只是檢測麥克風吹氣,那麼在如此高的頻率下嘗試和過濾是沒有意義的。

+0

感謝您的答案,我不想檢測到一擊。最後的目標是通過SUB在2個低通濾波器之間檢測一定的頻率,並得到一個帶通濾波器。對你來說似乎是邏輯?他們是如何在30Hz採樣?他們需要檢測低於400赫茲?這裏是鏈接:http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/ – Curnelious 2011-05-23 15:01:18

+0

好吧 - 那麼你應該真的重新考慮你的方法然後 - 使用FFT來獲得一個功率譜,然後檢查感興趣的頻率範圍的垃圾箱 - 有很多SO的帖子已經涵蓋了如何做到這一點。 – 2011-05-23 15:31:42

+0

FFT很棒,但我找不到這樣簡單的東西。 aurioTouch並不那麼簡單。你可以指示我發佈一篇文章,我可以帶我的代碼並使用它實現一個fft?謝謝。 – Curnelious 2011-05-23 15:37:52

0

This page或許給出了公式的更清晰的版本,代碼選擇阿爾法:

void lowPassFrequency(double* input, double* output, int points) 
{ 
    double RC = 1.0/(CUTOFF*2*3.14); 
    double dt = 1.0/SAMPLE_RATE; 
    double alpha = dt/(RC+dt); 
    output[0] = input[0] 
    for(int i = 1; i < points; ++i) 
    { 
     output[i] = output[i-1] + (alpha*(input[i] - output[i-1])); 
    } 
}  

注意,它適用於所有的樣本點一次,而不是隨着時間的推移在原來的問題。