MATLAB: Transformation de Fourier discrète une approche dumthe

J’essaie de comprendre comment fonctionne DFT exactement. Cependant, lors de l’expérimentation, j’ai comparé les deux résultats FFT générés par Matlab avec un résultat d’approche factice et j’obtiens un résultat similaire. Cependant, la partie imaginaire des deux résultats est annulée. Le code ci-dessous est mon implémentation. L’approche factice est basée sur http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition
 
Fs = 500; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
x = cos(2*pi*100*t)+randn(size(t));
% Calculate by using Matlab build-in FFT
fdft = fft(x);
% A dummy way to calculate DFT
n = 0:L-1;
k = 0:L-1;
table = bsxfun(@times, n.', k);
dummydft = x * exp(-i * 2 * pi .* table ./ L )';
 
Y a-t-il quelque chose qui me manque? Je vous remercie.

Meilleure réponse

  • Oui, le seul problème que vous rencontrez est l’utilisation de l’opérateur de transposition. L’opérateur de transposition avec des données à valeur complexe renvoie la transposition conjuguée par défaut que vous souhaitez utiliser. ‘
     

    Fs = 500; % Sampling frequency
    T = 1/Fs; % Sample time
    L = 1000; % Length of signal
    t = 0:T:(1000*T)-T;
    x = cos(2*pi*100*t)+randn(size(t));
    x = x(:);
    n = 0:L-1;
    k = 0:L-1;
    table = bsxfun(@times, n.', k);
    dftmatrix = exp(-i * 2 * pi .* table ./ L ).';
    dft1 = dftmatrix*x;
    dft2 = fft(x);