Twierdzenie przesunięcie mówi :
Mnożenie przez fazę liniową e 2 π i niektórych całkowitąmodpowiadakołowym zmianywyjściaXk:XKzastąpionoXk-m, gdzie wskaźnikiem jest interpretowane moduloN(to znaczy periodycznie).
Ok, to działa dobrze:
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))
Przesunęły się o 3 próbki, jak się spodziewałem.
Pomyślałem, że możesz to zrobić, aby przesuwać się o ułamki próbki, ale kiedy próbuję, mój sygnał staje się wyobrażony i wcale nie przypomina oryginału:
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--'
W ogóle się tego nie spodziewałem. Czy to nie jest równoważne zwojowi z prawdziwym impulsem, który został przesunięty o 3,5 próbki? Więc impuls powinien być nadal prawdziwy, a wynik powinien być prawdziwy? I powinien mieć mniej więcej taki sam kształt jak oryginał, ale interpolować sinc?
Odpowiedzi:
Jeśli chcesz, aby przesunięte wyjście IFFT było prawdziwe, skręcenie / obrót fazowy w dziedzinie częstotliwości musi być sprzężony symetrycznie, podobnie jak dane. Można to osiągnąć przez dodanie odpowiedniego przesunięcia wykładnika złożonego exp () dla danego nachylenia fazy, tak aby faza górnej (lub ujemnej) połowy, modulo 2 Pi, odzwierciedlała dolną połowę w otworze FFT . Złożoną funkcję przesunięcia wykładniczego można również przekształcić w sprzężoną symetryczną, indeksując ją od -N / 2 do N / 2 z fazą zero przy indeksie 0.
Zdarza się tak, że odpowiednie przesunięcie dla skrętów fazowych lub spiral, które wypełniają dokładną wielokrotność liczby całkowitej 2 obrotów Pi w aperturze, aby być sprzężonym symetrycznym w aperturze, wynosi zero.
W przypadku sprzężonego symetrycznego wektora skrętu fazowego wynik powinien następnie zakończyć się kołową interpolacją Sinc dla przesunięć niecałkowitych.
Opracowanie przez OP:
Twój wybór k = [0, 1, 2, 3, 4, 5, 6, 7, 8] daje asymetryczny złożony wykładniczy:
Jeśli użyjesz zamiast tego k = [0, 1, 2, 3, 4, -4, -3, -2, -1], otrzymasz wykładniczy kompleks Hermite-symetryczny:
a teraz, gdy użyjesz tej samej formuły wykładniczej do przesunięcia o 0,5 lub 3,5 próbek, otrzymasz prawdziwy wynik:
źródło
k = [0, 1, 2, 3, 4]
powinienem używaćk = [0, 1, 2, -2, -1]