Multipliant par une phase linéaire e 2 π i pour un entiermcorrespond à undécalage circulairede la sortieXk:Xkest remplacé parXk-m, où l'indice est interprété moduloN(c'est-à-dire périodiquement).
Ok, ça marche bien:
plot a
N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))
Il s'est déplacé de 3 échantillons, comme je m'y attendais.
Je pensais que vous pouviez également faire cela pour décaler par fractions d'un échantillon, mais quand je l'essaye, mon signal devient imaginaire et pas du tout comme l'original:
plot real(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N)))
plot imag(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N))), 'b--'
Je ne m'y attendais pas du tout. N'est-ce pas équivalent à convoluer avec une véritable impulsion décalée de 3,5 échantillons? Donc, l'impulsion devrait toujours être réelle, et le résultat devrait toujours être réel? Et il devrait avoir plus ou moins la même forme que l'original, mais sinc interpolé?
Réponses:
Si vous voulez que la sortie décalée de l'IFFT soit réelle, la torsion / rotation de phase dans le domaine fréquentiel doit être conjuguée symétrique, ainsi que les données. Cela peut être accompli en ajoutant un décalage approprié à l'exposant de votre exp complexe (), pour la pente de phase donnée, de sorte que la phase de la moitié supérieure (ou négative), modulo 2 Pi, reflète la moitié inférieure de l'ouverture FFT . La fonction de décalage exponentiel complexe peut également être rendue conjuguée symétrique en l'indexant de -N / 2 à N / 2 avec une phase de zéro à l'indice 0.
Il se trouve que le décalage approprié pour les torsions de phase ou les spirales, qui complètent un multiple entier exact de 2 rotations Pi en ouverture, pour être conjugué symétrique en ouverture, est nul.
Avec un vecteur de torsion de phase symétrique conjugué, le résultat devrait alors se terminer par une interpolation circulaire Sinc pour des décalages non entiers.
Elaboration par OP:
Votre choix de k = [0, 1, 2, 3, 4, 5, 6, 7, 8] produit une exponentielle complexe asymétrique:
Si vous utilisez k = [0, 1, 2, 3, 4, -4, -3, -2, -1] à la place, vous obtenez une exponentielle complexe hermite symétrique:
et maintenant, lorsque vous utilisez la même formule exponentielle pour décaler de 0,5 ou 3,5 échantillons, vous obtenez un vrai résultat:
la source
k = [0, 1, 2, 3, 4]
, je devrais utiliserk = [0, 1, 2, -2, -1]