Dlaczego FFT jest „dublowany”?

36

Jeśli wykonasz wykres FFT prostego sygnału, na przykład:

t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )

Sinusoida 1 Hz + DC

1Hz

FFT powyżej

fft

Rozumiem, że liczba w pierwszym przedziale to „ile DC” jest w sygnale.

y(1)  %DC
  > 101.0000

Liczba w drugim przedziale powinna wynosić „ile 1 cyklu w całym sygnale” to:

y(2)  %1 cycle in the N samples
  > 50.6665

Ale to nie 101! To około 50,5.

Na końcu sygnału fft jest inny wpis, równy pod względem wielkości:

y(101)
  > 50.2971

Więc 50,5 ponownie.

Moje pytanie brzmi: dlaczego FFT jest tak dublowane? Dlaczego nie jest to po prostu 101 w y(2)(co oczywiście oznacza, że ​​wszystkie 101 przedziałów twojego sygnału ma sinusoidę 1 Hz?)

Czy dobrze byłoby zrobić:

mid = round( N/2 ) ;

% Prepend y(1), then add y(2:middle) with the mirror FLIPPED vector
% from y(middle+1:end)
z = [ y(1), y( 2:mid ) + fliplr( y(mid+1:end) ) ];

stem( z )

Odwróć i dodaj drugą połowę wektora FFT

wprowadź opis zdjęcia tutaj

Pomyślałem teraz, że część lustrzana po prawej stronie jest poprawnie dodana, dając mi pożądane „wszystkie 101 pojemników FFT zawiera sinusoidę 1 Hz”

>> z(2)

ans =

  100.5943
Bobobobo
źródło
Odpowiedzi na podobne pytanie udzielił tutaj: dsp.stackexchange.com/questions/3466/…
pichenettes
Ale dotyczy to w szczególności symetrii sygnału (uważam, że nazywa się to symetrią hermetyczną?).
bobobobo
Dla czystych sygnałów rzeczywistych F (k) = sprzężenie (F (Nk)) właśnie dlatego transformacja Fouriera czystego sygnału rzeczywistego jest symetryczna.
WebMonster,
Zadaj sobie pytanie: czego byś oczekiwał, gdyby twój sygnał wynosił 1 + cos (2 * pi t) ... I 1 + i cos (2 * pi t) ... I 1 + i sin (2 * pi * t) ...
pikenety
2
Ponieważ transformata Fouriera dzieli sygnał na złożone wykładnicze, a fala sinusoidalna jest sumą 2 złożonych wykładniczych. dsp.stackexchange.com/a/449/29
endolit

Odpowiedzi:

39

Rzeczywiste sygnały są „odzwierciedlone” w rzeczywistych i ujemnych połówkach transformaty Fouriera ze względu na naturę transformaty Fouriera. Transformata Fouriera jest zdefiniowana następująco:

H(f)=h(t)ej2πftdt

Zasadniczo koreluje sygnał z szeregiem złożonych sinusoid, z których każda ma własną częstotliwość. Jak więc wyglądają te złożone sinusoidy? Poniższy obrazek ilustruje jedną złożoną sinusoidę.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

„Korkociąg” to wirująca złożona sinusoida w czasie, podczas gdy dwie sinusoidy, które za nią podążają, są wydobytymi rzeczywistymi i wyobrażonymi składnikami złożonej sinusoidy. Bystry czytelnik zauważy, że rzeczywiste i urojone elementy są dokładnie takie same, tyle że są poza fazą o 90 stopni ( ). Ponieważ mają 90 stopni przesunięcia w fazie, są ortogonalne i mogą „złapać” dowolny element sygnału na tej częstotliwości.π2

Zależność między wykładniczym a cosinus / sinus podaje formuła Eulera:

ejx=cos(x)+jsin(x)

To pozwala nam zmodyfikować transformatę Fouriera w następujący sposób -

H(f)=h(t)ej2πftdt=h(t)(cos(2πft)jsin(2πft))dt

Przy częstotliwościach ujemnych transformata Fouriera staje się następująca -

H(f)=h(t)(cos(2π(f)t)jsin(2π(f)t))dt=h(t)(cos(2πft)+jsin(2πft))dt

Porównanie wersji częstotliwości ujemnej z wersją częstotliwości dodatniej pokazuje, że cosinus jest taki sam, podczas gdy sinus jest odwrócony. Są jednak nadal pod kątem 90 stopni względem siebie, co pozwala im wychwycić dowolny składnik sygnału przy tej (ujemnej) częstotliwości.

Ponieważ zarówno sinusoidy o częstotliwości dodatniej, jak i ujemnej mają 90 stopni przesunięcia w fazie i mają tę samą wielkość, oba reagują na sygnały rzeczywiste w ten sam sposób. A raczej skala ich reakcji będzie taka sama, ale faza korelacji będzie inna.

EDYCJA: W szczególności ujemna korelacja częstotliwości jest koniugatem dodatniej korelacji częstotliwości (z powodu odwróconej urojonej składowej sinusoidalnej) dla sygnałów rzeczywistych. W kategoriach matematycznych jest to, jak zauważył Dilip, następujące:

H(f)=[H(f)]

Inny sposób myślenia o tym:

Wyimaginowane elementy są po prostu… Wyimaginowane! Są narzędziem, które pozwala na zastosowanie dodatkowej płaszczyzny do oglądania rzeczy i umożliwia znaczną cyfrową (i analogową) obróbkę sygnału, jeśli nie dużo łatwiejszą niż zastosowanie równań różniczkowych!

Ale nie możemy złamać logicznych praw natury, nie możemy zrobić niczego „prawdziwego” z wyimaginowaną treścią a więc musi skutecznie się skasować, zanim powróci do rzeczywistości. Jak to wygląda w transformacie Fouriera sygnału opartego na czasie (domena o złożonej częstotliwości)? Jeśli dodamy / zsumujemy składową dodatnią i ujemną częstotliwości sygnału, części urojone anulują, to rozumiemy przez to, że elementy dodatnie i ujemne są sprzężone ze sobą. Zauważ, że kiedy FT jest pobierana z sygnału czasu, istnieją te sprzężone sygnały, z „rzeczywistą” częścią każdego dzielącą wielkość, w połowie w domenie dodatniej, w połowie w ujemnej, więc w efekcie dodanie koniugatów razem usuwa fikcyjne treści i zapewnia tylko rzeczywistą treść.

Oznacza, że ​​nie możemy wytworzyć napięcia, które wynosi woltów. Oczywiście możemy użyć liczb urojonych do przedstawienia sygnałów w świecie rzeczywistym, które są dwuwektorowe, takich jak spolaryzowane kołowo fale elektromagnetyczne.5i

Jim Clay
źródło
Dobra odpowiedź - choć jeden drobiazg, nie jestem na pokładzie z „Ponieważ są one takie same, wszystko, z czym jedno koreluje, drugie też będzie miało dokładnie taką samą wielkość i przesunięcie fazowe o 90 stopni”. Wiem, co próbujesz powiedzieć, jednak (jak wiesz) sinus koreluje z sinusem (wynik 1), ale wcale nie będzie korelował z cosinusem (wynik 0). Są to ten sam sygnał, ale mimo wszystko z różnymi fazami.
Spacey,
Masz rację. Jest jeszcze jeden poważniejszy problem. Naprawię to później.
Jim Clay
Byłoby miło, gdybyś mógł edytować swoją odpowiedź, aby lepiej odpowiadać na pytanie dotyczące DFT (choć w tytule jest napisane FFT), zamiast podawać ogólną teorię transformacji Fouriera.
Dilip Sarwate
@DilipSarwate Moim celem jest pomóc pytającemu zrozumieć i myślę, że moje podejście jest do tego najlepsze. Poparłem jednak twoją odpowiedź za wykonanie dyskretnej matematyki.
Jim Clay
@JimClay Twoje podejście jest bardzo ceniona przez wszystkich czytelników dsp.SE i mam nadzieję, że znajdziesz czas, aby odpowiedź naprawdę wielki odpowiedź przez jawnie włączając w swojej odpowiedzi, co jest obecnie w lewo dla czytelnika wydedukować: mianowicie . że równania pokazują, że (a zatem ), gdy jest sygnałem o wartości rzeczywistej i że o to „dublowanie”, o które pytał PO. Innymi słowy, proszę o zredagowanie odpowiedzi, aby lepiej odpowiadała na faktycznie zadane pytanie (tak jak prosiłem w poprzednim komentarzu). H(f)=[H(f)]|H(f)|=|H(f)|x(t)
Dilip Sarwate
20

FFT (Fast Fourier Transform lub) w rzeczywistości jest algorytm do obliczania tej dyskretnej transformaty Fouriera lub DFT. Typowa implementacja przyspiesza konwencjonalne obliczenia DFT, wykorzystując fakt, że , liczba punktów danych, jest liczbą całkowitą złożoną, co nie ma miejsca w tym przypadku, ponieważ jest liczbą pierwszą. (Chociaż FFT istnieją w przypadku, gdy jest liczbą pierwszą, używają innego sformułowania, które może, ale nie musi być zaimplementowane w MATLAB). Rzeczywiście, wiele osób celowo wybiera aby mieć postać lub , aby przyspieszyć obliczenia DFT za pomocą FFT.N101NN2k4k

Przechodząc do pytania, dlaczego występuje tworzenie kopii lustrzanej, hotpaw2 zasadniczo podał przyczynę, dlatego poniższe informacje to tylko uzupełnienie szczegółów. DFT na sekwencji z punktów danych, określa się sekwencję gdzie gdzie . Będzie oczywiste, że jest ogólnie sekwencją o wartościach zespolonych , nawet jeśli jest sekwencją o wartościach rzeczywistych . Ale zauważ, że kiedyx=(x[0],x[1],x[2],,x[N1])NX=(X[0],X[1],X[2],,X[N1])

X[m]=n=0N1x[n](exp(j2πmN))n,m=0,1,,N1
j=1Xxx to ciąg wartościowy, to liczba rzeczywista. Ponadto, jeśli jest liczbą parzystą , to skoro , mamy również jest liczbą rzeczywistą. Ale niezależnie od tego, czy jest nieparzyste, czy parzyste, DFT sekwencji o wartościach rzeczywistych ma właściwość symetrii hermitowskiej , o której wspomniałeś w komentarzu. Mamy dla każdego ustalonego ,X[0]=n=0N1x[n]Nexp(jπ)=1
X[N2]=n=0N1x[n](exp(j2πN/2N))n=n=0N1x[n](1)n
NXx m1mN1, Tak więc dla , . Jako szczególny przypadek tego, zauważmy, że jeśli wybierzemy gdy jest parzyste, otrzymamy , potwierdzając w ten sposób nasz wcześniejszy wniosek, że
X[m]=n=0N1x[n](exp(j2πmN))nX[Nm]=n=0N1x[n](exp(j2πNmN))n=n=0N1x[n](exp(j2π+j2πmN))n=n=0N1x[n](exp(j2πmN))n=(X[m])
1mN1X[Nm]=(X[m])m=N/2NX[N/2]=(X[N/2])X[N/2]jest liczbą rzeczywistą. Zauważ, że efekt własności hermetycznej symetrii jest taki

w -tego pojemnika w DFT wartościach rzeczywistych kolejności ma taką samą wielkość jak -tego pojemnika.m(Nm)

Ludzie MATLABi będą musieli to przetłumaczyć, aby uwzględnić fakt, że tablice MATLAB są ponumerowane od górę.1


Przechodząc do rzeczywistych danych, twój jest wartością DC równą plus nieco więcej niż jeden okres sinusoidy o częstotliwości Hz. Rzeczywiście, otrzymujesz gdzie . Zatem pierwsza i ostatnia z próbek ma tę samą wartość. Obliczany DFT jest więc podawany przez Niedopasowanie między a powoduje zakłócenia w DFT: wartości x11

x[n]=1+sin(2π(0.01n)), 0n100
x[0]=x[100]=1101
X[m]=n=0100(1+sin(2π(n100)))(exp(j2πm101))n
100101X[m]dla są niezerowe, choć małe. Z drugiej strony, załóżmy, że dostosowałeś tablicę w swoim programie MATLAB, aby pobierać próbek o wartości tak że masz Zatem DFT to zobaczysz, że twój DFT będzie dokładnie (lub przynajmniej w ramach błędu zaokrąglenia), a odwrotne DFT da to za , 2m99t100t=0,0.01,0.02,,0.99
x[n]=1+sin(2π(0.01n)), 0n99.
X[m]=n=099(1+sin(2π(n100)))(exp(j2πm100))n,
X=(100,50j,0,0,,0,50j)0n99
x[n]=1100m=099X[m](exp(j2πn100))m=1100[10050jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)exp(j2πn100)]=1+sin(2π(0.01n))
- dokładnie od tego zacząłeś.
Dilip Sarwate
źródło
Czy można zatem stwierdzić z FFT, czy sygnał ma charakter okresowy, czy nie ?
nazwa wyświetlana
@ nazwa wyświetlana Jest to osobne pytanie, które należy zadać samo w sobie (i być może zostało już zadane i udzielono odpowiedzi).
Dilip Sarwate,
Kiedy ostrożnie podważam sprzężone symetryczne pojemniki [Zapisując w nich 0 + 0i] i rekonstruuję sygnał w dziedzinie czasu za pomocą ifft, wielkość zrekonstruowanego sygnału w dziedzinie czasu zmniejszyła się o połowę. Czy to naturalne, czy problem z narzędziami? Zajmuję się normalizacją wyjścia FFT i jego odwróceniem po iFFT.
Raj,
14

Zauważ, że wynik FFT jest dublowany (jak w sprzężeniu symetrycznym) tylko wtedy, gdy dane wejściowe są prawdziwe.

W przypadku ściśle realnych danych wejściowych dwa sprzężone obrazy lustrzane w wyniku FFT anulują wyimaginowane części dowolnych złożonych sinusoid, a tym samym sumują się do ściśle rzeczywistej sinusoidy (z wyjątkiem niewielkiego szumu zaokrąglania numerycznego), pozostawiając w ten sposób reprezentację ściśle prawdziwe fale sinusoidalne.

Gdyby wynik FFT nie był sprzężony z odbiciem lustrzanym, reprezentowałby kształt fali, który miałby złożone wartości (niezerowe składowe urojone), a nie coś ściśle wartościowego.

hotpaw2
źródło