2011-12-18

Przesunięcie w czasie, a FFT

Przesunięcie w czasie nie wpływa na absolutne wartości amplitudy w FFT. Zmienia się tylko faza składowych sinusoid. Dla symetrycznego wykresu względem jego środka po stronie czasu część urojona amplitudy jest zerowa. Połówka symetrycznego wykresu będzie miała takie same absolutne amplitudy po stronie częstotliwości jak cały symetryczny wykres, różnica będzie w przesunięciach fazowych. Niesymetryczność po stronie FFT amplitud lub faz, powoduje, że po stronie czasu nasz wykres nie jest
rzeczywisty. Z uwagi na błędy zaokrąglenia rozsądnie jest jeśli spodziewamy się symetryczności dla bezpieczeństwa brać wartości bezwzględne
przy konwersji z czasu do częstotliwości, a przy konwersji odwrotnej część rzeczywistą wyniku.

Wpływ przesunięcia w czasie na FFT:
function [ k, t ] = sinc_gen( sampling_rate, cutfq, samples )

  T = 1 / sampling_rate; 

  if (nargin == 2)
    samples = 160 / (cutfq*2 / sampling_rate); % experimental
  end

  tout = T * (1:samples); 
  tout = tout - T*(samples+1)/2;
  B = 2*cutfq;
  k = sinc(B*tout);
  k = k / trapz(k);

  if (nargout == 2)
    t = tout;
  end

end

spectrum_cut = 20000;
fs = 3.5e6;

[k, t] = firwin(fs, spectrum_cut, 2047);

k1 = [zeros(1, 700), k];

K = fftshift(fft(k, 2047));
K1 = fftshift(fft(k1, 2747));
fx = linspace(-fs/2, fs/2, 2047);
fx1 = linspace(-fs/2, fs/2, 2747);

figure(1);
hold on;
plot(fx, abs(K), '.');
plot(fx1, abs(K1), 'r');
legend('org', 'shifted');

figure(2);
hold on;
plot(fx, unwrap(angle(K)), '.');
plot(fx1, unwrap(angle(K1)), 'r');
legend('org', 'shifted');



Niesymetryczność w czasie to niezerowa część urojona po stronie FFT:

figure(3);
hold on;
plot(fx, imag(K), '.');
plot(fx1, imag(K1), 'r');
legend('org', 'shifted');


Brak komentarzy:

Prześlij komentarz