2 votes

Une façon efficace de faire un décalage FFT en matlab (sans utiliser la fonction fftshift)

http://www.mathworks.com/help/techdoc/ref/fftshift.html

Si vous consultez ce lien, c'est ce que je veux faire dans la première image - échanger les quadrants d'une matrice.

Cependant, je n'arrive pas à trouver un bon moyen de le faire sans avoir plusieurs boucles pour extraire les sous-matrices pertinentes.

J'ai besoin qu'il fonctionne avec des matrices MxN, où M et N peuvent être n'importe quelle combinaison de pair et impair.

Merci

2voto

Mike Schnell Points 21

Les éléments suivants devraient fonctionner

sz = ceil(size(A)/2)
A = A([sz(1)+1:end, 1:sz(1)], [sz(2)+1:end, 1:sz(2)])

Cela ne fonctionne que pour les matrices 2d, mais peut être facilement généralisé au cas Nd.

1voto

r.m. Points 25280

Si vous saisissez type fftshift.m à la ligne de commande de MATLAB, vous verrez le code source de l'implémentation de la fonction par MATLAB (utilisez la commande edit fftshift.m si vous voulez le visualiser dans l'éditeur avec la coloration syntaxique). Je ne posterai pas le code ici, car il est protégé par un copyright. Cependant, vous pouvez l'essayer sur votre machine et réimplémenter la même chose en C. C'est à vous de comprendre les termes de la licence etc, si vous êtes dans tout cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X