Programing

C #에서 FFT (고속 푸리에 변환) 구현

lottogame 2020. 10. 30. 07:37
반응형

C #에서 FFT (고속 푸리에 변환) 구현


C #에서 FFT의 매우 빠르고 안정적인 무료 구현은 어디에서 찾을 수 있습니까?

제품에 사용할 수 있습니까? 아니면 제한이 있습니까?


AForge.net 은 Fast Fourier Transform을 지원하는 무료 (오픈 소스) 라이브러리입니다. ( 사용법 은 Sources / Imaging / ComplexImage.cs , 구현은 Sources / Math / FourierTransform.cs 참조)


AForge를 한 사람은 꽤 좋은 일을했지만 상업적 품질은 아닙니다. 배우는 것은 좋지만 그가 배우고 있다는 것을 알 수 있으므로 픽셀 당 올바른 비트를 사용하는 대신 이미지 크기를 가정하는 것과 같은 매우 심각한 실수가 있습니다.

나는 그 사람을 두드리는 것이 아닙니다. 나는 그 모든 것을 배운 것에 대해 그를 존경하고 그것을 어떻게하는지 보여줍니다. 저는 그가 지금 박사 학위를 받았거나 적어도 그가 곧있을 것 같아서 그는 정말 똑똑해서 상업적으로 사용할 수있는 도서관이 아닙니다.

Math.Net 라이브러리는 푸리에 변환 및 복잡한 이미지 / 숫자로 작업 할 때 자체적으로 이상한 점이 있습니다. 예를 들어, 제가 착각하지 않았다면 푸리에 변환을 사람이 볼 수있는 형식으로 출력합니다. 이는 변환의 그림을보고 싶을 때 인간에게 좋지만 데이터가 특정 위치에있을 것이라고 기대할 때는 좋지 않습니다. 형식 (일반 형식). 나는 그것에 대해 착각 할 수 있지만 약간 이상한 점이 있다는 것을 기억하기 때문에 실제로 푸리에 재료에 사용한 원래 코드로 갔고 훨씬 더 잘 작동했습니다. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

Math.net은 또한 FFT의 데이터를 다룰 때 마음에 들지 않았던 다른 펑키함을 가지고있었습니다. ExoCortex DSP 라이브러리에서 원하는 것을 얻는 것이 훨씬 더 쉬웠다는 것을 알았습니다. 나는 수학 자나 엔지니어가 아닙니다. 그 사람들에게는 완벽하게 이해 될 수 있습니다.

그래서! 저는 Math.Net이 기반으로하는 ExoCortex에서 가져온 FFT 코드를 다른 것없이 사용하며 훌륭하게 작동합니다.

그리고 마지막으로 C #이 아니라는 것을 알고 있지만 FFTW ( http://www.fftw.org/ ) 를 사용하기 시작했습니다 . 그리고이 사람은 이미 C # 래퍼를 만들었 기 때문에 확인해 보려고했지만 아직 실제로 사용하지는 않았습니다. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )

오! 나는 당신이 학교 나 직장을 위해 이것을하고 있는지 모르겠지만, 어느 쪽이든 아이튠즈 대학의 스탠포드 교수가 제공하는 훌륭한 무료 강의 시리즈가 있습니다.

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


Math.NET의 Iridium 라이브러리 는 FFT를 포함하여 빠르고 정기적으로 업데이트되는 수학 관련 함수 모음을 제공합니다. LGPL에 따라 사용이 허가되었으므로 상용 제품에 자유롭게 사용할 수 있습니다.


나는 이것이 오래된 스레드라는 것을 알지만, 그만한 가치가있는 것은 여기에 무료 (MIT 라이선스) 1-D power-of-2length-only C # FFT 구현이 있습니다. http://gerrybeauregard.wordpress.com/2011 / 04 / 01 / an-fft-in-c /

다른 C # FFT 구현과 성능을 비교하지 않았습니다. 주로 Flash / ActionScript와 Silverlight / C #의 성능을 비교하기 위해 작성했습니다. 후자는 적어도 숫자 처리의 경우 훨씬 빠릅니다.


http://www.exocortex.org/dsp/ 는 FFT 알고리즘이 포함 된 오픈 소스 C # 수학 라이브러리입니다.


여기에 또 다른 것이 있습니다. Ooura FFT의 C # 포트. 상당히 빠릅니다. 이 패키지에는 MIT 라이센스에 따라 중첩 / 추가 회선 및 기타 DSP 항목도 포함됩니다.

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


오래된 질문이지만 여전히 Google 결과에 표시됩니다 ...

매우 제한적이지 않은 MIT 라이센스 C # / .NET 라이브러리는 다음 위치에서 찾을 수 있습니다.

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

이 라이브러리는 다중 코어에서 병렬 스레드로 빠르며 매우 완전하고 사용할 준비가되었습니다.


Numerical Recipes 웹 사이트 (http://www.nr.com/)에는 FFT를 입력해도 괜찮습니다. 저는 Labview 프로그램을 C # 2008, .NET 3.5로 변환하여 데이터를 수집하는 프로젝트를 진행하고 있습니다. 그런 다음 주파수 스펙트럼을보십시오. 안타깝게도 Math.Net은 최신 .NET 프레임 워크를 사용하므로 해당 FFT를 사용할 수 없습니다. Exocortex를 사용해 보았습니다. 작동했지만 결과는 Labview 결과와 일치했으며 문제의 원인을 알기에 충분한 FFT 이론을 모릅니다. 그래서 수치 레시피 웹 사이트에서 FFT를 시도해 보았고 효과가있었습니다! 또한 Labview 로우 사이드 로브 창을 프로그래밍 할 수있었습니다 (스케일링 계수를 도입해야 함).

Numerical Recipes 책의 장을 자신의 사이트에서 게스트로 읽을 수 있지만 책이 너무 유용해서 구입하는 것이 좋습니다. Math.NET FFT를 사용하는 경우에도 마찬가지입니다.


인텔 프로세서에 맞게 조정 된 다중 스레드 구현의 경우 인텔의 MKL 라이브러리를 확인합니다. 무료는 아니지만 (100 달러 미만) 무척 빠르며 매우 빠릅니다.하지만 P / Invokes를 통해 C dll이라고 불러야합니다. Exocortex 프로젝트는 6 년 전에 개발을 중단했기 때문에 이것이 중요한 프로젝트라면 신중하게 사용하겠습니다.

참고 URL : https://stackoverflow.com/questions/170394/an-implementation-of-the-fast-fourier-transform-fft-in-c-sharp

반응형