Mi pregunta es con respecto al tamaño de entrada de una señal que no es una potencia de 2 y tenemos que aprovecharla. Algunas soluciones dicen que supongamos que si queremos tomar el fft de 1800 debemos ponerlo a cero hasta la longitud de 2048 para que sea potencia de 2 y luego aplicar el algoritmo radix 2. Pero también hay otras soluciones que aplican una combinación de algoritmos diferentes sin relleno de cero y luego calculan la FFT requerida. Mi pregunta es: ¿el relleno de cero es una señal con una longitud de 2048 en caso de que tengamos que tomar fft de 1800 hace alguna diferencia en los resultados, si utilizamos una combinación de algoritmos diferentes para calcular el fft de tamaño 1800? El resultado sería el mismo.
9
x
. FormaX = fft(x,123456);
(o alguna otra longitud extraña). Encuentraxx = ifft(X);
. Mira lo quesum(abs(x-xx(1:length(x))));
es.Respuestas:
La FFT resultante será diferente: en lugar de calcular la FFT en las frecuencias2 πn / 1800 para n = 0 ... 1799 , los calcularás en 2 πn / 2048 para n = 0 ...2047 . Sin embargo, no hay degradación de la información.
Ambos enfoques son correctos: usando 1800 o 2048. Yo usaría la "solución de energía mínima" (es decir, la solución más simple, la más perezosa). Esto usualmente usaría la transformación de longitud 2048.
Las personas tienden a usar transformaciones radix-2 porque no saben nada mejor. Parece que hay mucha información errónea sobre las FFT que TIENEN poder de 2. No hay tal restricción. Además, probablemente no sepan sobre algoritmos decentes que no sean radix-2, como los disponibles en FFTW y otras bibliotecas.
Para ver que la FFT de cualquier longitud preserva la información:
Vea también esta pregunta y sus respuestas.
fuente
Es necesario comprender que, dado que el resultado (y la fuente) son discretos, FFT no es realmente una transformación de Fourier, sino que en realidad es el desarrollo de la Serie Fourier. Esto significa que el resultado de cualquier FFT no es la transformación de un solo bloque de datos, sino la transformación de una señal periódica que consiste en una concatenación infinita del mismo bloque de datos, con o sin una separación que consiste en la longitud del relleno . (Suponiendo que mis datos analizados se vean como «m», la transformación será el desarrollo de «... mmmmm ...» o de «... mmmmm ...», que no son la misma señal).
Como consecuencia, no tener relleno significa que uno agregará o eliminará implícitamente la falla de alta frecuencia en los datos de origen provenientes de la discontinuidad en la unión del final de un bloque y el comienzo del siguiente (que es lo mismo). El ejemplo extremo sería analizar un bloque que contiene el mismo valor. El relleno de no relleno marcará la diferencia entre una señal continua y una rectangular.
La otra consecuencia de esto es que cuanto más largo sea el relleno, más cerca estará el resultado de la transformación de una sola ráfaga de datos, y mayor será la resolución de la transformación. No es del todo exacto decir que, sin importar el paso, no habrá degradación de la información. Habrá (de forma limitada), debido a los errores de redondeo y el uso de un búfer más largo podría ayudar a prevenirlo (nuevamente, de manera muy limitada).
fuente