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[N−1])NX=(X[0],X[1],X[2],…,X[N−1])
X[m]=∑n=0N−1x[n](exp(−j2πmN))n,m=0,1,…,N−1
j=−1−−−√Xxx 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=0N−1x[n]Nexp(−jπ)=−1X[N2]=∑n=0N−1x[n](exp(−j2πN/2N))n=∑n=0N−1x[n](−1)n
NXx m1≤m≤N−1,
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]X[N−m]=∑n=0N−1x[n](exp(−j2πmN))n=∑n=0N−1x[n](exp(−j2πN−mN))n=∑n=0N−1x[n](exp(−j2π+j2πmN))n=∑n=0N−1x[n](exp(j2πmN))n=(X[m])∗
1≤m≤N−1X[N−m]=(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(N−m)
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)), 0≤n≤100
x[0]=x[100]=1101X[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 ,
2≤m≤99t
100t=0,0.01,0.02,…,0.99x[n]=1+sin(2π(0.01n)), 0≤n≤99.
X[m]=∑n=099(1+sin(2π(n100)))(exp(−j2πm100))n,
X=(100,−50j,0,0,…,0,50j)0≤n≤99x[n]=1100∑m=099X[m](exp(j2πn100))m=1100[100−50jexp(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ś.