Я пытаюсь вычислить обратный БПФ fft
-output вручную. Я использую следующий скрипт, который сначала использует fft
для вычисления БПФ набора данных. Затем я пытаюсь найти обратный БПФ вручную, но он не похож на результат, который я получаю от ifft
.вычислить обратный fft вручную
Можете ли вы определить мою ошибку? Я просто с помощью стандартной обратной формулы БПФ, представленный здесь, https://en.wikipedia.org/wiki/Fast_Fourier_transform#Definition_and_speed
data = [
-0.0005
-0.0004
-0.0003
-0.0002
-0.0001
-0.0000
0.0001
0.0001
0.0001
0.0002
0.0002
0.0002
0.0002
0.0002
0.0002
0.0002
0.0002
0.0002
0.0003
0.0004
0.0005
0.0006
0.0007
0.0009
0.0010
0.0011
0.0011
0.0012
0.0011
0.0011
0.0011
0.0010
0.0011];
delta = 0.0125;
fs = 1/delta;
x = (0:1:length(data)-1)/fs;
X=fft(data);
%find fft
N=length(data);
ws = 2*pi/N;
wnorm = -pi:ws:pi;
wnorm = wnorm(1:length(x));
w = wnorm*fs;
figure(2)
plot(w/(2*pi),abs(fftshift(X)))
%find inverse fft manually
for m=1:length(X)
for k=1:length(data)
X_real(m) = X(k)*exp(i*k*ws*(m-1));
end
end
figure(3)
plot(1:length(data), abs(X_real), 1:length(data), ifft(X))
Прежде всего, вам не хватает 'sum' вашего X_real (k) для каждого' m', во-вторых, я не уверен, что часть вашего 'exp' на самом деле правильная. – GameOfThrows
Per @GameOfThrows изменить 'X_real (m) = X (k) * exp (i * k * ws * (m-1));' to 'X_real (m) = X_real (m) + X (k) * exp (i * k * ws * (m-1)); '(вам может потребоваться инициализировать' X_real' до массива нулей раньше времени). –