Minha pergunta é sobre o tamanho de entrada de um sinal que não é uma potência de 2 e temos que tomar o fft dele. Algumas soluções dizem que, se quisermos tirar o fft de 1800, devemos zerá-lo até o comprimento de 2048 para torná-lo 2 e depois aplicar o algoritmo radix 2. Mas também existem outras soluções que aplicam uma combinação de algoritmos diferentes, sem preenchimento zero e calculando a FFT necessária. Minha pergunta é: zero preenchendo um sinal com comprimento de 2048, caso tenhamos que tomar ftft de 1800, faça alguma diferença nos resultados, se usarmos uma combinação de algoritmos diferentes para calcular a ftft de tamanho 1800. Haveria alguma diferença ou a resultado seria o mesmo.
9
x
. FormaX = fft(x,123456);
(ou algum outro comprimento estranho). Encontrexx = ifft(X);
. Veja o quesum(abs(x-xx(1:length(x))));
é.Respostas:
A FFT resultante será diferente: em vez de calcular a FFT nas frequências para , você as calculará em para . No entanto, não há degradação das informações.2 πn / 1800 n = 0 … 1799 2 πn / 2048 n = 0 … 2047
Ambas as abordagens estão corretas: usando 1800 ou 2048. Eu usaria a "solução de energia mínima" (ou seja, a solução mais simples e mais preguiçosa). Isso normalmente usaria a transformação de comprimento 2048.
As pessoas tendem a usar as transformações radix-2 porque não conhecem melhor. Parece haver muita informação incorreta sobre as FFTs que têm potência de 2. Não existe essa restrição. Além disso, eles provavelmente não sabem sobre algoritmos decentes não-radix-2, como os disponíveis no FFTW e em outras bibliotecas.
Para verificar se a FFT de qualquer tamanho preserva informações:
Veja também esta pergunta e suas respostas.
fonte
É preciso entender que, como o resultado (e a fonte) são discretos, a FFT não é realmente uma transformação de Fourier, mas, na realidade, é o desenvolvimento da série de Fourier. Isso significa que o resultado de qualquer FFT não é a transformação de um único bloco de dados, mas a transformação de um sinal periódico que consiste em uma concatenação infinita do mesmo bloco de dados, com ou sem uma separação consistindo no comprimento do preenchimento . (Supondo que meus dados analisados se pareçam com «m», a transformação será o desenvolvimento de «... mmmmm ...» ou de «... mmmmm ...», que não são o mesmo sinal.)
Como conseqüência, não ter preenchimento significa adicionar ou remover implicitamente a falha de alta frequência nos dados de origem provenientes da descontinuidade na junção do final de um bloco e no início do próximo (que é o mesmo). O exemplo extremo seria analisar um bloco contendo o mesmo valor. O preenchimento de não preenchimento fará a diferença entre um sinal contínuo e um retangular.
A outra conseqüência disso é que, quanto mais longo o preenchimento, mais próximo o resultado será da transformação de uma única explosão de dados e maior será a resolução da transformação. Não é totalmente preciso dizer que, independentemente da passagem, não haverá degradação das informações. Haverá (de maneira limitada), por causa dos erros de arredondamento e o uso de um buffer mais longo, pode ajudar a evitá-lo (novamente, de uma maneira muito limitada).
fonte