2009-10-20 110 views
7

我想找到一個非常快速和高效的傅里葉變換(FFT)。有誰知道任何好的。我需要在iPhone上運行它,所以它不能是密集的。相反,也許你知道一個像小波那樣的,我需要頻率分辨率,但只有一個窄帶(人聲音頻範圍最高10khz最大...甚至10Khz可能太高)。我也想截斷這個FFT來保持頻率分辨率,同時消除不需要的頻帶。這是一個iPhone你知道一個好的和有效的FFT嗎?

...我看了看Aurio觸摸的FFT,但它似乎這是一個int FFT,但我的應用程序使用浮動.....它會給一個大的性能提高嘗試並適應程序的int FFT或不(我真的不想這樣做...加上aurio touch使用基數2 FFT不是那麼好)。

+0

考慮小波變換以同樣的方式爲DFT不計算,我會說沒有小波般的FFT算法。 – rlbond 2009-10-20 03:55:41

+0

從一個方形矩陣(4096by4096用於4096個採樣的FFT)的意義上來說,我們使用4096個時間採樣,採用1024個頻率箱,這種小波類似的fft怎麼樣?這些不會覆蓋整個nyquist頻段,所以會保持所需的頻率分辨率而不需要全部計算它們......這是小波的多分辨率尺度方面,但只有一個尺度......所以它就像我應用了一個濾波器......它是WFT的一部分 – 2009-10-20 06:14:49

回答

3

FFTW的性能爲任意長度的FFT設置了標準 - 特別是對於2維和更大維度的2個長度的非功率。 FFTW的商業許可證是$ 5000,這可能會或可能不符合您的預算。

但是,這聽起來像是你有一個一維信號處理問題,在這種情況下,你有更多的選擇 - 如果你可以進一步填充或採樣你的數據2長度的權力,那麼許多圖書館將提供性能合理。查看FFTW用於比較的FFT算法的這個list - 許多是免費的,有些可能是足夠的。我可能會從舊的數字recipes開始,它提供了一個簡單的2,1DFFT實現免費和一些打字的功能 - 並且會非常有效率。

順便說一句 - 對於語音你可能只需要去3-4Khz .... 10Khz是方式在那裏爲人的聲音 。

+0

我同意但使用標準的FFT,低頻段的頻率分辨率受到FFT大小的減小的打擊,因爲頻率箱變得太大 – 2009-10-20 06:21:33

+0

謝謝,我會研究這些鏈接,因爲我總是處於2個長度的電源 – 2009-10-20 06:23:42

4

在西方給予最快的傅里葉變換(FFTW)a,性能相對於其他方面是好的,但它不是完全免費的。詳見商業用途here。顯然是一個C庫,你應該沒有問題,它作爲一個靜態庫鏈接到你的iPhone應用程序。

+1

它確實使用共享內存FYI,但不能安全地並行運行它。不知道這是否是iPhone上的問題(可能不是?) – 2009-10-20 04:54:30

+1

如果你不介意在GPLv2下發布你的應用程序(你不能在一個iPhone應用程序中使用GPLv3),它是完全免費的。如果這與您的商業模式不兼容,則必須檢查商業選項。 – 2009-10-20 21:59:19

7

我已經在Objective-C中包裝了Ooura的FFT庫。 Ooura的代碼具有與FFTW相媲美的性能,但完全免費。

此代碼使用雙精度,並有幾個內置的窗口類型(矩形,布萊克威爾,三角形,漢明)。我使用Ooura的FFT代碼實現Welch's method,隨着時間的推移,這將產生更平滑的光譜。

瞧瞧吧: http://github.com/alexbw/iPhoneFFT

+0

只是一個後續(三年後) - 你應該儘量不要在你的項目中使用iPhoneFFT。 Apple已經在iPhone上發佈了vDSP和Accelerate.h,並且您應該使用vDSP_fft_zrip()等函數來計算FFT。他們比我寫的任何內容都快得多。 – alexbw 2012-04-21 17:51:31

+0

確實偉大的作品Alex,檢查了Octave和Oscope。我想知道是否有任何iOS庫可以成功包裝vDSP來檢測人聲 - 現在讓我告訴你,我不知道它是否意味着音高檢測或帶通或什麼。 – 2013-03-22 08:58:11

+0

這本身就是計算機科學中一個開放的研究問題(要可靠地做)。如果您對某種聲音感興趣,請記錄一些示例,並查看其聲譜圖。這應該有助於您構建一個能夠選擇性響應的過濾器。 – alexbw 2013-03-22 15:10:51

2

這裏是一個主要來源鏈接Ooura的數值計算軟件:

http://www.kurims.kyoto-u.ac.jp/~ooura/

我一直在使用許多Ooura的快速傅里葉變換多年來,我應該送他至少是一個「domo」,並且我正在開發幾款iPad和iPhone應用程序中使用他的真正基數-4。我沒有將代碼轉換爲32位單精度操作來提高ARM的性能。查看使用XCode 3.2.2生成的程序集,它非常好地與NEON SIMD指令進行了矢量化。實際上我有一半是失望的,因爲我願意爲自己更多的表現向量化代碼。如果不先將FFT轉換爲單精度,這些優化是不可能的。我很積極地開發使用它,甚至使用它來教授一個面向對象的編程課程,但我沒有準備這樣一個包裝器(雖然我在1992年做了同樣的事情,一個不同的FFT)出於性能原因。

我至少在10年內沒有對Ooura的FFT進行FFTW測試,但是當我做Ooura的庫時,對於1024點真實FFT來說速度更快。但是,現在FFTW很可能會做得更好 - 但是爲ARM進行授權和交叉編譯並不方便,我總是發現FFTW對我的DSP需求來說過於笨重和突兀。蘋果的VecLib非常好,但不幸的是他們沒有將它移植到iPhoneOS上。我在BugReporter開了一個功能要求你也可以做到:https://bugreport.apple.com/

+0

對於不是二進制整數的長度,FFTW應該快很多,例如爲素數。 – 2010-08-10 19:28:27

12

The iPhone OS4 SDK will include the Accelerate framework,這將(最終)給美國蘋果公司編寫的FFT功能

加速提供了數百個 數學函數 iPhone和iPod優化包括 信號處理例程,快速 傅立葉變換,基本矢量和 矩陣運算,以及 保代碼矩陣和求解系統的行業標準函數 線性方程組。

相關問題