Реализация быстрого преобразования Фурье (FFT) в С#

Где я могу найти бесплатную, очень быструю и надежную реализацию FFT в С#?

Что можно использовать в продукте? Или существуют ограничения?

Ответ 1

AForge.net - это бесплатная (с открытым исходным кодом) библиотека с поддержкой быстрого преобразования Фурье. (См. Sources/Imaging/ComplexImage.cs для использования, Sources/Math/FourierTransform.cs для реализации)

Ответ 2

Парень, который сделал AForge, проделал довольно хорошую работу, но это не коммерческое качество. Учиться приятно, но вы можете сказать, что он тоже учился, поэтому у него есть довольно серьезные ошибки, такие как принятие размера изображения вместо использования правильных бит на пиксель.

Я не нокаутирую парня, я уважаю его за то, что он изучил все это, и покажу нам, как это сделать. Я думаю, что он доктор философии сейчас или, по крайней мере, он собирается быть таким, он действительно умный, но не коммерчески доступная библиотека.

Библиотека Math.Net имеет свои странности при работе с преобразованиями Фурье и сложными изображениями/числами. Например, если я не ошибаюсь, он выводит преобразование Фурье в видимом для человека формате, что хорошо для людей, если вы хотите посмотреть на изображение преобразования, но не очень хорошо, когда вы ожидаете, что данные находятся в определенном формат (нормальный формат). Я мог ошибиться в этом, но я просто помню, что была какая-то странность, поэтому я пошел к оригинальному коду, который они использовали для вещей Фурье, и он работал намного лучше. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/)

У Math.net также были некоторые другие особенности, которые мне не нравились при работе с данными из БПФ, я не могу вспомнить, что это было, я просто знаю, что гораздо проще получить то, что я хотел, из библиотеки ExoCortex DSP. Я не математик или инженер, хотя; для тех парней это может иметь смысл.

Так! Я использую код FFT, полученный от ExoCortex, на котором основан Math.Net, без всего прочего, и он прекрасно работает.

И, наконец, я знаю, что это не С#, но я начал изучать использование FFTW (http://www.fftw.org/). И этот парень уже сделал С# обертку, так что я собирался проверить это, но на самом деле еще не использовал его. (http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html)

ОЙ! Я не знаю, делаете ли вы это для школы или работы, но в любом случае есть БОЛЬШАЯ бесплатная серия лекций, прочитанная профессором Стэнфорда в Университете iTunes.

https://podcasts.apple.com/us/podcast/the-fourier-transforms-and-its-applications/id384232849

Ответ 3

Math.NET Библиотека Iridium предоставляет быстрый, регулярно обновляемый набор связанных с математикой функций, включая FFT. Он лицензирован под LGPL, поэтому вы можете использовать его в коммерческих продуктах.

Ответ 4

Я вижу, что это старый поток, но для чего он стоит, у меня есть свободная (MIT License) 1-D версия 2-длины только для 2-футовой реализации FFT: http://gerrybeauregard.wordpress.com/2011/04/01/an-fft-in-c/

Я не сравнивал его производительность с другими реализациями С# FFT. Я написал это в основном для сравнения производительности Flash/ActionScript и Silverlight/С#. Последнее намного быстрее, по крайней мере, для хруста числа.

Ответ 5

http://www.exocortex.org/dsp/ - библиотека математики с открытым исходным кодом С# с алгоритмами FFT.

Ответ 6

Здесь другой; порт С# Ooura FFT. Это достаточно быстро. В пакет также входит свертка с перекрытием/добавлением и некоторые другие DSP-компоненты под лицензией MIT.

https://github.com/hughpyle/inguz-DSPUtil/blob/master/Fourier.cs

Ответ 7

На веб-сайте Numerical Recipes (http://www.nr.com/) есть FFT, если вы не против впечатывать его. Я работаю над проектом, конвертирующим программу Labview в С# 2008,.NET 3.5, чтобы получить данные, а затем посмотреть на частотный спектр. К сожалению, Math.Net использует последнюю платформу .NET, поэтому я не мог использовать этот FFT. Я попробовал Exocortex один - он работал, но результаты соответствовали результатам Labview, и я не знаю достаточно теории FFT, чтобы знать, что вызывает проблему. Поэтому я попробовал БПФ на сайте цифровых рецептов, и это сработало! Я также смог запрограммировать окно Labview low sidelobe (и должен был ввести коэффициент масштабирования).

Вы можете прочитать главу книги "Численные рецепты" в качестве гостя на своем сайте, но книга настолько полезна, что я очень рекомендую ее купить. Даже если вы в конечном итоге используете MFT.NET FFT.

Ответ 8

Старый вопрос, но он все еще отображается в результатах Google...

Очень не ограничивающую лицензированную библиотеку С#/.NET MIT можно найти на странице

https://www.codeproject.com/articles/1107480/dsplib-fft-dft-fourier-transform-library-for-net

Эта библиотека работает быстро, как параллельные потоки на нескольких ядрах, и является очень полной и готовой к использованию.

Ответ 9

Для многопоточной реализации, настроенной для процессоров Intel, я проверил библиотеку Intel MKL. Он не бесплатный, но он славный (менее 100 долларов США) и быстро пылающий, но вам нужно будет назвать его C dll через P/Invokes. Проект Exocortex прекратил разработку 6 лет назад, поэтому я буду осторожно использовать его, если это важный проект.