Recentemente, percebi que os FFT não são perfeitos. Ou seja, se eu pegar um sinal e depois pegar FFT, e depois fazer uma FFT inversa, a saída resultante não será exatamente a mesma da entrada. Aqui está uma imagem para mostrar o que eu quero dizer:
Eu acho que a imagem é bastante auto-explicativa. O sinal IFFT é apenas uma transformação inversa do "espectro FFT" e o gráfico "Diferença" é a diferença entre o sinal IFFT e o sinal original ( ).
Claramente, existem alguns artefatos, embora sejam realmente pequenos. Eu gostaria de saber por que eles ocorrem em primeiro lugar. Isso é devido à janela finita da transformação de Fourier? Ou por causa de algo no algoritmo FFT?
Nota: Este gráfico tem 32 pontos, mas verifiquei com 100, 1000, 1024, 256 e 64 pontos, e sempre há esse resíduo na diferença de magnitude semelhante ( ou ).
fonte
Respostas:
As diferenças que você vê são devidas a erros numéricos no formato de ponto flutuante. Todas as operações necessárias para executar uma FFT e uma FFT inversa só podem ser feitas com precisão finita e você mostrou o resultado dessa precisão finita no gráfico inferior direito.
fonte
Em geral, um número não pode ser representado exatamente na forma digital. Um erro é introduzido. Se você está no Matlab, pode escrever eps no comando, ele fornece um número.
O erro que você vê no gráfico está no intervalo retornado por eps (ou seja, 2 ^ (- 52)).
Mesmo que você espere valores reais em sua saída do IFFT, poderá ver que sua parte imaginária não é exatamente igual a zero. Mesma coisa.
fonte