Pergunta

Onde posso encontrar um muito rápido e implementação livre, confiável de FFT em C #?

Isso pode ser usado em um produto? Ou existem quaisquer restrições?

Foi útil?

Solução

AForge.net é um (open-source) biblioteca livre com o Fast Fourier Transform apoio . (Ver Fontes / Imagens / ComplexImage.cs para uso, Fontes / Math / FourierTransform.cs para implemenation)

Outras dicas

O cara que fez AForge fez um bom trabalho, mas não é qualidade comercial. É ótimo para aprender, mas você pode dizer que ele estava aprendendo também, então ele tem alguns erros muito graves, como assumindo o tamanho de uma imagem em vez de usar os bits corretos por pixel.

Não estou criticando o cara, eu respeito o Parreira fora dele para aprender tudo isso e nos mostrar como fazê-lo. Eu acho que ele é um Ph.D agora ou, pelo menos, ele está prestes a sê-lo, ele é muito inteligente, não é apenas uma biblioteca comercialmente utilizáveis.

A biblioteca Math.Net tem a sua própria estranheza quando se trabalha com transformadas de Fourier e imagens complexas / números. Como, se não me engano, ele gera a transformada de Fourier em formato visível humana que é bom para os seres humanos, se você quiser olhar para uma imagem da transformação, mas não é tão bom quando você está esperando os dados para estar em um determinado formato (formato normal). Eu poderia ser confundido com isso, mas eu só lembro que havia alguma estranheza, então eu realmente fui para o código original que usou para as coisas Fourier e funcionou muito melhor. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

Math.net também teve algum outro funkyness eu não gostava quando se lida com os dados da FFT, eu não me lembro o que era eu só sabia que era muito mais fácil conseguir o que eu queria sair da ExoCortex DSP biblioteca. Eu não sou um matemático ou um engenheiro embora; para aqueles caras que poderia fazer sentido.

Assim! Eu uso o código FFT arrancada de ExoCortex, que Math.Net baseia-se, sem qualquer outra coisa e ele funciona muito bem.

E, finalmente, eu sei que não é C #, mas eu comecei a olhar para usando FFTW ( http: // www .fftw.org / ). E esse cara já fez um C # wrapper para que eu estava indo para verificá-la, mas realmente não tenho usado ainda. ( http://www.sdss.jhu.edu/~tamas/bytes /fftwcsharp.html )

OH! Eu não sei se você está fazendo isso para a escola ou trabalho, mas de qualquer forma, há uma grande série palestra gratuita dada por um professor de Stanford na Universidade iTunes.

https://podcasts.apple .com / us / podcasts / os-transformadas de Fourier-e-seus-aplicações / id384232849

O Math.NET Iridium biblioteca fornece um rápido, coleta regularmente actualizada de funções relacionadas com a matemática, incluindo a FFT . É licenciado sob a LGPL então você é livre para usá-lo em produtos comerciais.

Eu vejo esta é uma discussão antiga, mas para o que vale a pena, eu tenho uma (licença MIT) livre 1-D power-of-2-length-única implementação C # FFT aqui: http://gerrybeauregard.wordpress.com/2011/04/ 01 / an-fft-in-c /

Eu não têm comparado o seu desempenho com outras implementações C # FFT. Escrevi-o principalmente para comparar o desempenho do Flash / ActionScript e Silverlight / C #. Este último é muito mais rápido, pelo menos para trituração de número.

http://www.exocortex.org/dsp/ é um open-source C # matemática biblioteca com algoritmos FFT.

Aqui está outro; uma porta C # do Ooura FFT. É razoavelmente rápido. O pacote também inclui sobreposição / convolução add e algumas outras coisas DSP, sob a licença MIT.

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

O site Numerical Recipes (http://www.nr.com/) tem uma FFT, se você não se importa digitando-o. Eu estou trabalhando em um projeto de conversão de um programa Labview para C # 2008, .NET 3.5 para dados adquirir e, em seguida olhar para o espectro de frequência. Infelizmente, a Math.Net usa a estrutura mais recente .NET, então eu não poderia usar esse FFT. Eu tentei o Exocortex um - ele funcionou, mas os resultados para coincidir com os resultados Labview e eu não sei teoria FFT suficiente para saber o que está causando o problema. Então eu tentei a FFT no site numérica receitas e funcionou! Eu também era capaz de programar janela sidelobe baixo o Labview (e teve de introduzir um fator de escala).

Você pode ler o capítulo do livro Numerical Recipes como convidado no mudando o site, mas o livro é tão útil que eu recomendo comprá-lo. Mesmo se você acabar usando o Math.NET FFT.

Uma questão de idade, mas ele ainda aparece nos resultados do Google ...

A MIT muito un-restritiva Licenciado C # / .NET biblioteca pode ser encontrada em,

https: // www .codeproject.com / artigos / 1107480 / dsplib-fft-DFT-Fourier-transform-biblioteca-para-net

Esta biblioteca é rápido como ele segmentos paralelos em vários núcleos e é muito completo e pronto para uso.

Para uma implementação de multi-threaded atento para processadores Intel eu confira biblioteca MKL da Intel. Não é gratuito, mas é afforable (menos de US $ 100) e super rápido - mas você precisa chamá-lo de C dll da via P / Invoca. O projeto Exocortex parou desenvolvimento 6 anos atrás, então eu teria cuidado de usá-lo se este é um projeto importante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top