2012-05-02 42 views
0

我正在從麥克風讀取數據並希望對其執行一些分析。我試圖產生一個頻譜分析儀是這樣的:從哪裏開始使用傅里葉分析

Spectrum Analyser

我目前所面對的是這樣的:

Input from microphone

我的理解是,我需要進行傅立葉分析 - 快速傅立葉變換? - 提取分量頻率及其幅度。

有人可以確認我的理解是正確的,究竟是什麼類型的傅立葉變換我需要申請?

目前,我正在從麥克風中獲取包含4k樣本的幀(使用NAudio)。我得到的緩衝區是16bits/sample(Signed Short)。作爲參考,上面的圖表顯示了大約一半的幀

我在VB中編碼,因此任何.Net庫/示例(最好在NuGet上)將是最有用的。我相信實現差異很大,所以我不得不按摩我的數據越好。

+1

許多重複,例如[光譜圖和它是什麼](http://stackoverflow.com/questions/8781556/spectrogram-and-what-it-is),[光譜圖C++庫](http://stackoverflow.com/questions/2133651/spectrogram -c-library),[Sound spectrogram](http://stackoverflow.com/questions/5730778/sound-spectrogram),[在Java中使用FFT算法進行音頻頻譜分析](http://stackoverflow.com/questions/6627288/audio-spectrum-analysis-using-fft-algorithm-in-java/6633679#6633679)等 - 嘗試搜索「光譜圖」。 –

+0

@Paul R - 我不同意。第一個鏈接只是描述一個光譜圖,而其他鏈接僅提供FFT級別的高級別概覽 - 具體來說,數據如何加窗並重新排序?爲什麼FFTW通過Kiss FFT?等等......可能有重複的地方,但我不認爲其中的任何一個是 – Basic

+0

請在SO上搜索「fft」和「spectrogram」並閱讀以前的一些答案 - 您的所有問題都已經被多次回答,我自己和其他人 - 你可能也想看看http://DSP.stackexchange.com –

回答

2

上圖是光譜儀的圖,其中每個垂直時間線根據輸入波形的時間片(可能重疊)的FFT(可能窗口化)結果的大小進行着色。繪製的垂直點數(頻率分辨率)與FFT的長度有關。幾乎所有的FFT都可以。如果使用最常見的複數到複數的FFT,只需將每個複數輸入採樣的虛數部分設置爲零,將輸入波形採樣的時間片複製到「實數」部分即FFT,並取大小或記錄每個複雜結果倉的大小,然後根據您的偏好將這些值映射到顏色。

+0

謝謝你的答覆 - 我理解的原則在繪製光譜儀之後,這是我之前沒有做過的FFT的應用。哪個是「最常見的複數複數FFT」?你一般說話還是有標準實施?我試過Accord.Audio,但FFT實現不完整。在我的情況下,DirectX實現使得假設無效(例如,使用DX來獲取輸入緩衝區)/ Mathnet似乎缺少'Mathnet.numerics.Transofrmations'命名空間...... – Basic

+0

如果在某些庫中找不到工作的FFT ,有數百個DSP教科書和網站具有示例基數2 FFT(許多包括派生)。它不到1頁的代碼可以翻譯成幾乎所有的計算機語言。 – hotpaw2

+0

謝謝 - radix-2可能是我之後的提示。我會做一些閱讀 – Basic