Why does FFT subtract PI/2 phase shift for sine wave

51 views (last 30 days)
I know that very similar questions have already been asked, but I'm still confused. If I do the following:
t = 0:0.0001:1.0;
signal = 10*sin(2*pi*10*t-pi/2);
n = length(signal);
z = fft(signal, n); %do the actual work
%generate the vector of frequencies
halfn = n / 2;
deltaf = 1 / ( n / ScanRate);
frq = (0:(halfn-1)) * deltaf;
% convert from 2 sided spectrum to 1 sided
%(assuming that the input is a real signal)
amp(1) = abs(z(1)) ./ (n);
amp(2:halfn) = abs(z(2:halfn)) ./ (n / 2);
phase = angle(z(1:halfn));
When I plot the phase versus the frequency, I get a phase shift of about -pi at a frequency of 10 Hz. I believe that this is coming from the fact that the sine wave is shifted pi/2 from the cosine wave. However, if this was an arbitrary signal, I wouldn't know if it was sine or cosine input. And, if I use this phase shift directly with a sine wave to do the inverse transform, it won't match my original input signal. Does this mean that the basis function in some sense is a cosine wave?
Will someone please clear this confusion up? thanks so much.

Accepted Answer

Rick Rosson
Rick Rosson on 7 Oct 2014
Think of it this way. Cosine is the real-part of the complex exponential, whereas sine is the real-part of the complex exponential multiplied by -i. And -i is equivalent to exp(-i*pi/2). So that means that sine is out-of-phase by -pi/2 compared with cosine. In other words,
sin(w*t) = cos(w*t - pi/2)
So that means the phase of cosine is 0, whereas the phase of sine is -pi/2.
  2 Comments
Marc
Marc on 7 Oct 2014
That's a good explanation and is great. However, it means that the phase I'm calculating is only valid (given that I want to reproduce my input signal) if I use the cosine wave to represent that frequency of my original signal. Where in the fft implementation is it specified that the angle defined by the complex outputs of the fft function are referenced to a cosine wave and not a sine wave?
I don't expect someone to answer that last question, but am I understanding that correctly then?
Thanks again.
Rick Rosson
Rick Rosson on 7 Oct 2014
Edited: Rick Rosson on 7 Oct 2014
It is not specified in the fft because the fft is a mathematically correct implementation of the Discrete Fourier Transform (DFT), which is a well known and precisely defined mathematical transform. The DFT is, in turn, specified in terms of complex exponentials, which are related to sine and cosine by Euler's well-known formula.
At the risk of oversimplifying, the real-part of Euler's formula is cosine, whereas the imaginary part is sine. So, assuming a real-valued signal, it is a convenient method to assume that the signal of interest can be represented as the real-part of some other, complex signal (which is called an analytic signal). Since cosine is the real-part, and sine is the imaginary-part, it is merely a common convention to specify that cosine has a phase of 0. It then follows that sine has a phase of -pi/2.
It would be equally valid to specify that sine has a phase of 0, as long as you then conclude that cosine has a phase of +pi/2. And in this case, the signal of interest would represent the imaginary-part of some analytic signal.
In other words, the absolute phase is completely arbitrary. All that matters is the relative phase. And that you follow a consistent convention.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!