Uma implementação da transformada rápida de Fourier (FFT) em C #

Onde posso encontrar uma implementação gratuita, muito rápida e confiável de FFT em C #?

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

    O AForge.net é uma biblioteca gratuita (de código aberto) com suporte a Fast Fourier Transform. (Veja Sources / Imaging / ComplexImage.cs para uso, Sources / Math / FourierTransform.cs para implementação)

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

    Eu não estou batendo no cara, eu respeito o heck fora dele por aprender tudo isso e nos mostrar como fazer isso. Eu acho que ele é um Ph.D agora ou pelo menos ele está prestes a ser, então ele é realmente esperto, não é apenas uma biblioteca comercialmente utilizável.

    A biblioteca Math.Net tem sua própria estranheza ao trabalhar com transformadas de Fourier e imagens / números complexos. Tipo, se não estou enganado, ele gera a transformada de Fourier em formato de visualização humana, o que é bom para humanos se você quiser olhar para uma imagem da transformação, mas não é tão bom quando você espera que os dados estejam em uma certa formato (o formato normal). Eu poderia estar enganado sobre isso, mas eu só lembro que havia alguma estranheza, então eu realmente fui para o código original que eles usaram para as coisas de Fourier e funcionou muito melhor. (ExocortexDSP v1.2 http://www.exocortex.org/dsp/ )

    O Math.net também tinha alguns outros funkyness que eu não gostei quando lidei com os dados da FFT, não me lembro o que era. Eu sei que era muito mais fácil conseguir o que eu queria da biblioteca do ExoCortex DSP. Eu não sou um matemático ou engenheiro; para aqueles caras, pode fazer perfeito sentido.

    Assim! Eu uso o código FFT arrancado do ExoCortex, no qual o Math.Net é baseado, sem mais nada e funciona muito bem.

    E, finalmente, sei que não é C #, mas comecei a usar o FFTW ( http://www.fftw.org/ ). E esse cara já fez um wrapper C #, então eu ia dar uma olhada, mas ainda não usei. ( http://www.sdss.jhu.edu/~tamas/bytes/fftwcsharp.html )

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

    http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu.1617315771

    A biblioteca Iridium do Math.NET fornece uma coleção rápida e regularmente atualizada de funções relacionadas à matemática, incluindo a FFT. É licenciado sob a LGPL, então você está livre para usá-lo em produtos comerciais.

    Eu vejo este é um segmento antigo, mas para o que vale a pena, eu tenho um livre (MIT License) 1-D power-of-2-length-only C # FFT implementação aqui: http://gerrybeauregard.wordpress.com/2011 / 04/01 / an-fft-in-c /

    Eu não comparei seu desempenho com outras implementações do C # FFT. Eu escrevi principalmente para comparar o desempenho do Flash / ActionScript e Silverlight / C #. Este último é muito mais rápido, pelo menos para o processamento de números.

    http://www.exocortex.org/dsp/ é uma biblioteca de matemática C # de código aberto com algoritmos FFT.

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

    http://github.com/hughpyle/inguz-DSPUtil/commits/master/Fourier.cs

    O site de Receitas Numéricas (http://www.nr.com/) tem uma FFT se você não se importar em digitá-la. Estou trabalhando em um projeto que converte um programa Labview em C # 2008, .NET 3.5 para adquirir dados e então olhe para o espectro de freqüência. Infelizmente, o Math.Net usa o mais recente framework .NET, então eu não poderia usar esse FFT. Eu tentei o Exocortex one – funcionou, mas os resultados para coincidir com os resultados do Labview e eu não sei o suficiente teoria FFT para saber o que está causando o problema. Então eu tentei a FFT no site de receitas numéricas e funcionou! Também fui capaz de programar a janela de baixo lóbulo lateral Labview (e tive que introduzir um fator de escala).

    Você pode ler o capítulo do livro Receitas Numéricas como convidado em seu site, mas o livro é tão útil que recomendo comprá-lo. Mesmo se você acabar usando o Math.NET FFT.

    Para uma implementação multi-thread ajustada para processadores Intel eu verificaria a biblioteca MKL da Intel. Não é grátis, mas é aveludado (menos de US $ 100) e muito rápido – mas você precisa chamar de C dll’s via P / Invokes. O projeto Exocortex parou o desenvolvimento há 6 anos, então eu tomaria cuidado ao usá-lo se este for um projeto importante.

    Uma pergunta antiga, mas ainda aparece nos resultados do Google …

    Uma biblioteca MIT Licensed C # / .NET muito restritiva pode ser encontrada em,

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

    Esta biblioteca é rápida como threads paralelas em múltiplos núcleos e é muito completa e pronta para uso.