Necesito calcular solo un pequeño número de componentes de Fourier de baja frecuencia de una matriz compleja de 2 dimensiones. Calcularé los mismos componentes de Fourier una y otra vez a medida que cambie la matriz de entrada. Claramente, en el límite donde solo quiero un componente de Fourier, sería más rápido construir una matriz DFT que proporcione el componente que busco, y multiplicar por esa matriz repetidamente.
En el otro límite, si quisiera todos los componentes de Fourier, sería más rápido usar un FFT.
¿En qué punto se vuelve más rápido calcular la FFT de la matriz y simplemente extraer los componentes que busco?
Si hace la diferencia, en mi situación particular, la matriz de entrada será algo así como . Estoy usando MATLAB, por lo que eso significa que mi FFT se hace usando FFTW, y una multiplicación de matriz para una DFT de matriz se realiza a través del algoritmo de multiplicación de matriz que MATLAB usa debajo del capó.
fuente
Respuestas:
17)
Mucho y mucho trabajo se ha invertido en buenas implementaciones fft y es poco probable que pueda superar de manera confiable una buena biblioteca fft. Por ejemplo, fftw "se adapta automáticamente a su máquina, su caché, el tamaño de su memoria, el número de registros y todos los demás factores que normalmente hacen imposible optimizar un programa para más de una máquina" ref esta página .
Tiene razón en que hay situaciones en las que es más rápido calcular algunos productos de puntos, pero dependerá mucho del sistema.
Un experimento:
Entonces, cuando hay 4096 puntos de datos que calculan todo el fft, solo tarda ~ 17 veces más que calcular un solo producto de punto.
fuente
Como alternativa, podría considerar el uso del algoritmo de Goertzel para calcular directamente los componentes de frecuencia que le interesan.
fuente