1
$\begingroup$

I'm trying to use the FFT to plot the phase spectrum of the DTFT of a sampled rect impulse function. Here's the Matlab code I've written.

fs=10; % sampling frequency Hz
Ts=1/fs;
T=4; % length of time vector in seconds
t=-T/2:Ts:T/2-Ts; %vector of 40 time samples -2:0.1:1.9
y=rectpuls(t); %unit length rect impulse
z=fft(y,10000).*Ts; 
%fft multiplied by Ts to get rid of the 1/Ts factor in the spectral replicas
%of the DTFT of the signal
f=linspace(0, (length(z)-1)/length(z),length(z));
figure
plot(f,abs(z));
grid on

%plot of the phase of z as it is, so with the time sequence
%considered to be shifted by length(y)/2 samples by fft.
figure
plot(f,unwrap(angle(z)),'r');
grid on

%I try to get rid of the linear phase delay component to get the phase
%spectrum of the DTFT of the signal in its frequency period.
%I divide each fft sample by its own exponential delay factor.
delay=length(y)/(2*length(z));
expd=zeros(1,length(z));
for index=1:1:length(z)
expd(index)=exp(-1i*2*pi*(index-1)*delay);
end
z2=z./expd;
figure
plot(f,unwrap(angle(z2))./pi,'r');
grid on

Phase spectrum of non time delayed sequence

Now the problem is that this phase plot is wrong, the DTFT is the sum of real sinc functions so its phase spectrum con only assume k*pi values. There's still a linear component in the phase plot and the slope is positive so the exponentials that I'm using are over compensanting the delay. I have found out that the problem is that the fft function introduces a linear phase delay as if the sequence was shifted by 19.5 samples instead of 20 samples as it should be in my example. Infact if I set in my code delay=19.5/10000 I get the correct phase plot (or at least one that makes sense :D):

Supposedly correct phase plot

So what's going on here, is it a precision problem? Are there mistakes in my Matlab code and/or my dsp theory formulas? Thank you!!

Unfortunately I can't link more than two images in the post :/

$\endgroup$
  • $\begingroup$ Welcome to DSP.SE! I don't understand why you say its phase spectrum con only assume k*pi values as I can't think of a non-trivial phase spectrum for which that will ever be true. The trivial example is the phase spectrum of a constant. $\endgroup$ – Peter K. Oct 12 '15 at 12:40
  • $\begingroup$ Thanks for your comment. This is what I mean: If x(t)=rect(t/T) we know that its Fourier Transform is Tsinc(fT). I want to plot the DTFT of this signal sampled with a sampling period Ts. I know that such DTFT is the sum of Tsinc((f-kfs)T) functions for k assuming all the infinite integer values. Such spectrum is the sum of real functions so at each frequency it can only have 0 or pi phase. I'm trying to use the FFT as a way of sampling such DTFT. $\endgroup$ – Frank Oct 12 '15 at 15:03
  • $\begingroup$ Since the sequence is considered to be time shifted by the fft function (the first sample is associated with t=0 and not t=-T/2 as in the actual sequence) each fft k-th sample is multiplied by exp(-i*2*piklengthofdelay/fftlength). I try to get rid of this exp factor to get the actual phase of the DTFT. $\endgroup$ – Frank Oct 12 '15 at 15:12
  • $\begingroup$ Ah! Thanks for the clarification. Yes, the FFT assumes that the time indices start at 0 and go to $N-1$ (for a signal of length $N$). $\endgroup$ – Peter K. Oct 12 '15 at 15:59
1
$\begingroup$

In order for the result of an even number N length FFT to be strictly real, the input vector data vector has to be exactly symmetric around sample N/2, which is the sample point before t=0, given your sample window, which is offset slightly to the left.

$\endgroup$
  • $\begingroup$ Thank you, you really helped me in finding out the reason of the problem. $\endgroup$ – Frank Oct 14 '15 at 1:26
1
$\begingroup$

I've found out the reason of the problem. The problem is that to get a real FFT (as it should be in my case) the sequence must be symmetric relatively to x[N/2] which in my case would be x[20]. This doesn't happen (notwithstading the fact that the rect signal is even so its countinous Fourier Transform is real) because of how the rectpuls function I used is defined. Rectpuls(-0.5)=1 and rectpuls(0.5)=0 If instead I create a symmetric sequence using the value 1/2 at times t=-0.5s and t=0.5s (also according to the Dirichlet conditions), I get a real FFT and the results I wanted to obtain.

1)Phase spectrum of real DTFT with linear delay factor introduced by fft shifting

2)Phase spectrum of real DTFT I wanted to plot

Phase spectrum of real DTFT with linear delay factor

Phase spectrum of real DTFT

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.