Реализация быстрого преобразования Фурье (БПФ) в C#
Где я могу найти бесплатную, очень быструю и надежную реализацию FFT в C#?
Что можно использовать в продукте? Или есть какие-то ограничения?
9 ответов
AForge.net - это бесплатная (с открытым исходным кодом) библиотека с поддержкой быстрого преобразования Фурье. (См. Источники / Imaging / ComplexImage.cs для использования, Источники / Math / FourierTransform.cs для реализации)
Парень, который сделал AForge, проделал довольно хорошую работу, но это не коммерческое качество. Учиться приятно, но вы можете сказать, что он тоже учился, поэтому у него есть довольно серьезные ошибки, такие как допущение размера изображения вместо использования правильных битов на пиксель.
Я не нокаутирую парня, я уважаю его за то, что он изучил все это, и покажу нам, как это сделать. Я думаю, что он доктор философии сейчас или, по крайней мере, он собирается быть таким, он действительно умный, это просто не коммерчески используемая библиотека.
Библиотека Math.Net имеет свои странности при работе с преобразованиями Фурье и сложными изображениями / числами. Например, если я не ошибаюсь, он выводит преобразование Фурье в видимом для человека формате, что хорошо для людей, если вы хотите посмотреть на изображение преобразования, но не очень хорошо, когда вы ожидаете, что данные находятся в определенном формат (нормальный формат). Я мог ошибиться в этом, но я просто помню, что была какая-то странность, поэтому я пошел к оригинальному коду, который они использовали для вещей Фурье, и он работал намного лучше. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/)
У Math.net также были некоторые другие особенности, которые мне не нравились при работе с данными из БПФ, я не могу вспомнить, что это было, я просто знаю, что гораздо проще получить то, что я хотел, из библиотеки ExoCortex DSP. Я не математик или инженер, хотя; для тех парней это может иметь смысл.
Так! Я использую FFT-код, полученный от ExoCortex, на котором основан Math.Net, без всего прочего, и он прекрасно работает.
И, наконец, я знаю, что это не C#, но я начал изучать использование FFTW ( http://www.fftw.org/). И этот парень уже сделал C# обертку, поэтому я собирался проверить это, но на самом деле еще не использовал его. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html)
ОЙ! Я не знаю, делаете ли вы это для школы или работы, но в любом случае есть БОЛЬШАЯ бесплатная серия лекций, прочитанная профессором Стэнфорда в Университете iTunes.
http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.1617315771
Библиотека Iridium в Math.NET предоставляет быстрый, регулярно обновляемый набор математических функций, включая FFT. Он лицензирован по лицензии LGPL, поэтому вы можете свободно использовать его в коммерческих продуктах.
Я вижу, что это старая ветка, но, несмотря на это, у меня есть бесплатная (MIT License) 1-D реализация C# FFT, рассчитанная только на мощность 2 длины, здесь: http://gerrybeauregard.wordpress.com/2011/04/01/an-fft-in-c/
Я не сравнивал его производительность с другими реализациями C# FFT. Я написал это в основном для сравнения производительности Flash/ActionScript и Silverlight/C#. Последнее намного быстрее, по крайней мере, для сокращения чисел.
Старый вопрос, но он все еще отображается в результатах Google...
Очень неограниченную библиотеку MIT Licensed C# / .NET можно найти по адресу:
https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net
Эта библиотека является быстрой, поскольку она параллельна потокам на нескольких ядрах, и она очень полная и готова к использованию.
Вот еще один; порт C# Ooura FFT. Это достаточно быстро. В пакет также входит свертка с перекрытием / добавлением и некоторые другие DSP-компоненты под лицензией MIT.
http://github.com/hughpyle/inguz-DSPUtil/commits/master/Fourier.cs
http://www.exocortex.org/dsp/ - это математическая библиотека с открытым исходным кодом C# с алгоритмами FFT.
На сайте Numeric Recipes (http://www.nr.com/) есть БПФ, если вы не против набрать его. Я работаю над проектом по преобразованию программы Labview в C# 2008, .NET 3.5 для сбора данных и затем посмотрите на частотный спектр. К сожалению, Math.Net использует новейшую платформу.NET, поэтому я не смог использовать этот FFT. Я попробовал Exocortex-1 - он работал, но результаты совпадали с результатами Labview, и я не знаю достаточно теории БПФ, чтобы понять причину проблемы. Так что я попробовал БПФ на сайте числовых рецептов, и это сработало! Я также смог запрограммировать окно нижней боковой доли Labview (и мне пришлось ввести коэффициент масштабирования).
Вы можете прочитать главу книги "Численные рецепты" в качестве гостя на своем сайте, но книга настолько полезна, что я настоятельно рекомендую ее приобрести. Даже если вы в конечном итоге использовать Math.NET FFT.
Для многопоточной реализации, настроенной для процессоров Intel, я бы заглянул в библиотеку Intel MKL. Это не бесплатно, но это неплохо (менее 100 долларов) и очень быстро, но вам нужно будет называть его C dll через P/Invokes. Проект Exocortex прекратил разработку 6 лет назад, поэтому я буду осторожен с его использованием, если это важный проект.