FFT (или быстрое преобразование Фурье) на самом деле алгоритм для вычисления дискретного преобразования Фурье или ДПФ. Типичная реализация достигает ускорения по сравнению с обычным вычислением ДПФ, используя тот факт, что , число точек данных, является составным целым числом, что здесь не так, поскольку является простым числом. (Хотя БПФ существуют для случая, когда - простое число, они используют другую формулировку, которая может или не может быть реализована в MATLAB). Действительно, многие люди сознательно выбирают
в форме или чтобы ускорить вычисление DFT через FFT.N101NN2k4k
Обращаясь к вопросу о том, почему происходит зеркалирование, hotpaw2, по сути, изложил причину, поэтому следующее - это просто заполнение деталей. ДПФ последовательности из
точек данных определяется как последовательность где
где . Очевидно, что , в общем случае, является комплексной последовательностью, даже если является вещественной последовательностью. Но учтите, что когдаx=(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 - вещественная последовательность, - действительное число. Кроме того, если -
четное число, то, поскольку , у нас также есть
- действительное число. Но, независимо от того, является ли нечетным или четным, DFT вещественной последовательности
обладает свойством
эрмитовой симметрии, которое вы упомянули в комментарии. Имеем для любого
фиксированного ,
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,
Таким образом, для , . Как частный случай этого, обратите внимание, что если мы выберем когда четное, мы получим, что , подтверждая тем самым наше более ранний вывод, что
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]это реальное число. Обратите внимание, что эффект свойства эрмитовой симметрии заключается в том, что
в -го бен в ДПФ вещественной последовательности имеет ту же величину , что -го бункера.m(N−m)
Люди MATLABi должны будут перевести это, чтобы учесть тот факт, что массивы MATLAB пронумерованы от выше.1
Обращаясь к вашим фактическим данным, ваш является значением постоянного тока плюс
чуть более одного периода синусоиды с частотой Гц. Действительно, вы получаете
где . Таким образом, первая и последняя из выборки имеют одинаковое значение. Таким образом, вычисляемое вами ДПФ определяется как
Несоответствие между и вызывает помехи в DFT: значения
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]для отличны от нуля, хотя и малы. С другой стороны, предположим, что вы должны были отрегулировать массив в вашей программе MATLAB, чтобы иметь выборок, взятых при чтобы
Тогда ДПФ будет
вы увидите, что ваш DFT будет
точно (или, по крайней мере, в пределах ошибки округления), и
обратное DFT даст это для ,
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))
это именно то, с чего вы начали.