2012-03-28 108 views
-1

確定FFT(快速傅立葉變換)通常是時間頻率的折衷。如果我們計算更長時間(15到20秒)的FFT,我們可以得到更準確的頻率,但數量​​卻非常少。對於較小的時間間隔頻率通常會出現明顯變化 什麼是最好的時間間隔,我們可以擁有足夠數量的頻率點的可靠數據?確定java中給定時間的頻率

+2

「足夠數量的頻點」 - 足夠用於什麼? – 2012-03-28 20:52:47

+0

足以匹配兩個樣本..感謝您指出.. :) – sumit 2012-03-28 20:56:35

+2

理論上,隨着您增加處理樣本的數量,您可以提高精確度,唯一的「成本」是處理時間/空間。如果您需要更頻繁的測量,請使用滑動窗口,例如每2000個樣本處理8000個樣本「窗口」,重新處理您已處理的一些樣本(6000個)。然而,「正確的」時間間隔是最適合您需要的時間間隔,可以是每秒10次,可以是每分鐘10次。 – 2012-03-28 20:57:50

回答

1

這取決於您的音頻類型。也許你應該考慮使用小波分析。有了這個,你可以提取非常準確的高頻率而不會失去對低頻的識別。

+0

我正在接受麥克風的輸入。音頻格式爲: float sampleRate = 44100; int sampleSizeInBits = 8; int channels = 1; \t boolean signed = true; \t boolean bigEndian = true; – sumit 2012-03-28 20:54:02

+0

是不是像1秒的FFT給你人類可以聽到的所有東西(2Hz到22.5Khz)?之後,你*混合1秒的結果。 ..我完全錯了嗎?我沒有看到問題(除了低振幅噪聲,我認爲可以通過其他方法減少) – user978548 2012-03-28 21:29:35

1

讀取Nysquist-Shannon Sampling Theorem - 在1/2B處採樣,其中B是信號中的最大頻率,應該使您能夠在不丟失數據的情況下重建它。

這意味着對我說,你可以通過抽樣樣本中的最低頻率的兩倍期間得到不錯的FFT的信號 - 那就是,我想,如果樣品是週期性的:P

+1

當B是最大頻率時,您至少需要它的兩倍大小,而不是一半。 – 2012-03-29 11:45:22

1

「最佳」取決於你的需求。

如果時間分辨率更重要,那麼較少的點數可能會更好。

如果頻率分辨率比更大數量的點更重要可能會更好。

如果本底噪聲很高,那麼甚至更多的點可能會更好。

如果你不關心,那麼使用一個簡短的FFT來節省計算時間和能量。 (或者不要爲FFT而煩惱,只是從/ dev/random中獲取一些結果)。如果感興趣的信號不是平穩的(例如它們隨時間變化),那麼你可能想要一個足夠短的FFT來將感興趣的所有單獨的頻譜事件分離到它們自己的FFT窗口中。

如果您需要頻率分辨率能夠清楚地區分相鄰噪聲峯值的頻譜信號峯值,那麼您需要的FFT長度至少爲採樣率的兩倍除以您想要分離的峯值之間的最小增量頻率,如果你開窗。如果你不需要這個精度,那麼一個更短的FFT就可以做到。

如果與您感興趣的信號相比,噪聲水平和干擾足夠低,您可以使用更短的FFT內插來自獨立峯值的頻率估計,或者甚至不用FFT。對於零噪聲中的單個正弦波,少至3或4個無鋸齒樣點可能會有效。