Este wikibook indica que la salida de MATLAB FFTcorresponde con los números de onda ordenados como:
Sin embargo, en los códigos de ejemplo en la misma página, los números de onda se codifican como
k = [0:n/2-1 0 -n/2+1:-1];
que es lo mismo que el primero, pero con el onda n / 2 (el "número de onda máximo") reemplazado por 0 . Parece extraño que incluirían 0 dos veces.
Parece que el orden correcto es necesario para tomar derivados a través de transformadas de Fourier, como se describe en el wikibook. ¿Cuál de estos es correcto? ¿MATLAB documenta esto en alguna parte?
matlab
fourier-analysis
Duda
fuente
fuente

Respuestas:
Quiero ampliar mi comentario y reelaborar el ejemplo al que hace referencia de una manera que debería ser más comprensible que el original y explicar por qué
fftdevuelve los coeficientes de la manera en que lo hace.Como referencia, la parte fft del ejemplo es:
Agregué otra sección de código directamente debajo de ella:
y envolvió los dos trozos de código en un momento
tic; tocde rought. En un formato más legible, el segundo método usa:La primera diferencia es que el segundo ejemplo tiene un aspecto mucho más intuitivo
k. Esta es la principal ventaja del segundo ejemplo, ya que k está ahora en la forma en que pensamos sobre ellos. En la segunda y tercera línea tuve que agregarfftshiftalrededor de la llamada afft, luego una llamada aifftshiftdirectamente dentro de la llamada aifft. Estas llamadas de función adicionales reordenan los coeficientes de lo que se requiere para que la computadora trabaje con ellos a la forma en que los humanos generalmente piensan en ellos.El problema con el segundo ejemplo es que, si bien
kes más intuitivo para nosotros, deja las matrices internas para resolver e invertirfften formas que no son tan ventajosas. Entonces, o tenemos que cambiar el orden con llamadas afftswitchyifftswitcho tiene que estar codificado en lasfftfunciones. Esto es menos propenso a errores de los usuarios (suponiendo que no estén familiarizados con el funcionamiento de fft, como muchas personas lo están), pero usted paga un precio en tiempo de ejecución.Como dije antes, agregué llamadas de tiempo alrededor de los dos bloques para comparar y corrí por múltiples N. Los resultados de tiempo fueron:
Como puede ver, el acto de cambiar los valores de un lado a otro ralentiza el proceso considerablemente, especialmente a bajo N (donde es 30 veces más lento). Esto es solo un ejemplo, y su computadora puede mostrar tendencias ligeramente diferentes dependiendo de cosas como la velocidad de la memoria, los núcleos / velocidad del procesador, etc. pero es ilustrativo del punto. La razón por la
fftsalida confusa es porque le está ahorrando una fracción no trivial de su tiempo de computación.fuente
Su pregunta sobre el 'reemplazo' del número de onda es bastante complicada. En general, la modificación del número de onda de este tipo no está destinada a salvar los fracasos, como algunos han sugerido aquí, sino que está diseñada para respetar las peculiaridades analíticas de, por ejemplo, ciertos operadores diferenciales. Estoy muy sorprendido de que no haya podido encontrar una discusión relacionada en los Métodos espectrales de Trefethen. Para continuar, supondré que está preocupado por la diferenciación espectral basada en FFT y que está realizando transformaciones en un dominio de cardinalidad uniforme.
La regla general, para derivadas impares, es establecer
y para derivados pares, establecer
Si se trata de un relleno, el tratamiento de la frecuencia de Nyquist es igualmente tedioso. Hay un excelente reportaje que prueba y los comentarios sobre estos temas aquí !
fuente
Para una breve explicación y demostración del alias, vea mi cuaderno de IPython aquí .
fuente
fuente