Ich versuche eine sehr schnelle und effiziente Fourier-Transformation (FFT) zu finden. Kennt irgendjemand von irgendwelchen guten. Ich muss es auf dem iPhone laufen, damit es nicht intensiv sein muss. Stattdessen, vielleicht weißt du eines, das Wavelet ist, ich brauche Frequenzauflösung, aber nur ein schmales Band (Vokalaudiobereich bis zu 10kHz max ... sogar 10Khz könnten zu hoch sein). Ich denke auch an das Abschneiden dieser FFT, um die Frequenzauflösung beizubehalten, während das unerwünschte Frequenzband eliminiert wird. Dies ist für ein iPhone
... Ich habe mir die FFT in Aurio touch angeschaut, aber es scheint, dass dies eine int FFT ist, aber meine App Floats verwendet ..... würde es eine große Leistungssteigerung geben, um das Programm an ein int anzupassen FFT oder nicht (was ich wirklich nicht tun möchte ... plus aurio touch verwendet eine Radix 2 FFT, die nicht so toll ist).
Die Leistung der FFTW setzt den Standard für FFTs mit beliebiger Länge - insbesondere für Nicht-Power von 2 Längen in 2 und größeren Dimensionen. Die kommerzielle Lizenz für FFTW beträgt $ 5000, die in Ihr Budget passen oder nicht.
Es klingt jedoch so, als ob Sie ein 1D-Signalverarbeitungsproblem haben. In diesem Fall haben Sie noch ein paar weitere Optionen - und wenn Sie Ihre Daten auf zweifache Länge auffüllen oder abtasten können, werden viele Bibliotheken vernünftig sein Performance. Sehen Sie sich diese Liste von FFT-Algorithmen an, die FFTW zum Vergleich verwendet hat - viele sind kostenlos und einige sind möglicherweise ausreichend. Ich würde wahrscheinlich mit guten alten numerischen Rezepten beginnen, die eine einfache Leistung von 2, 1D FFT bieten Implementation kostenlos und etwas Tipparbeit - und wäre sehr speichereffizient.
BTW - für die Stimme müssen Sie wahrscheinlich nur 3-4Khz gehen .... 10Khz ist weit oben für die menschliche Stimme.
Das iPhone OS4 SDK enthält das Accelerate-Framework , das (endlich) geben Sie uns Apple-geschriebene FFT-Funktionen
Beschleunigen bietet Hunderte von mathematische Funktionen optimiert für iPhone und iPod touch, einschließlich Signalverarbeitungsroutinen, schnell Fourier-Transformationen, Grundvektor und Matrixoperationen und Industriestandard-Funktionen für Factoring von Matrizen und Lösen von Systemen von linearen Gleichungen.
Ich habe Oouras FFT-Bibliothek in Objective-C eingepackt. Oouras Code ist vergleichbar mit FFTW, aber absolut kostenlos.
Dieser Code verwendet doppelte Genauigkeit und verfügt über mehrere integrierte Fenstertypen (rechteckig, Blackwell, Dreieck, Hamming). Ich benutze Oouras FFT-Code, um Welchs Methode zu implementieren, die im Laufe der Zeit ein viel glatteres Spektrum erzeugen wird. p>
Schau es dir an: Ссылка
Geben Sie die schnellste Fourier-Transformation im Westen ( FFTW ), die Leistung ist gut im Vergleich zu anderen, aber es ist nicht komplett frei. Siehe die Details zur kommerziellen Nutzung hier . Da es sich um eine c-Bibliothek handelt, sollte es kein Problem sein, sie als statische Bibliothek mit Ihrer iPhone-App zu verknüpfen.
Hier ist eine primäre Quellenverknüpfung zu Oouras numerischer Software:
Ich habe viele von Oouras FFTs über die Jahre hinweg benutzt, ich sollte ihm zumindest einen "Domo" schicken, und ich benutze seine echte radix-4 in mehreren iPad- und iPhone-Anwendungen in der Entwicklung. Ich habe den Code so übersetzt, dass er mit 32-Bit-Single-Precision für Performance auf ARM funktioniert. Betrachtet man die Baugruppe, die mit XCode 3.2.2 erzeugt wurde, vektorisiert sie mit NEON SIMD Anweisungen sehr schön. Ich war tatsächlich halb enttäuscht, da ich bereit war, den Code selbst für noch mehr Leistung ein wenig zu vektorisieren. Diese Optimierungen sind nicht möglich, ohne zuerst die FFT offensichtlich in einfache Genauigkeit zu übersetzen.
Während ich Objective-C schon seit vielen Jahren benutze, entwickle ich es aktiv und unterrichte sogar einen objektorientierten Programmierkurs. Ich habe einen solchen Wrapper nicht vorbereitet (obwohl ich das 1992 schon einmal gemacht hatte) verschiedene FFT) aus Leistungsgründen.
Ich habe FFTW in mindestens 10 Jahren nicht gegen Oouras FFT getestet, aber als ich das tat, war Oouras Bibliothek schneller für echte FFTs mit 1024 Punkten. Es ist jedoch durchaus möglich, dass FFTW jetzt viel besser ist - aber die Lizenzierung und Cross-Compilierung für ARM ist unbequem und ich habe immer gefunden, dass FFTW für meine DSP-Anforderungen viel zu sperrig und aufdringlich ist. Apples VecLib ist sehr nett, aber leider haben sie es nicht auf iPhoneOS portiert. Ich habe eine Feature-Anfrage in BugReporter geöffnet und Sie können auch: Ссылка
Wie bereits erwähnt, bietet das Accelerate Framework jetzt einige APIs, die Ihnen helfen könnten.
Überprüfen Sie: