641 views (last 30 days)

Dear MATLAB experts,

For a small project that I want to do, I need to compute the phase of a sine wave. However, I was unable to obtain a correct result. I have posted my code with this message (please see attachment) for your review and comments. If anyone could help me with this, I would greatly appreciate it.

Thank you!

Fuh

Star Strider
on 25 Mar 2016

Edited: Star Strider
on 25 Mar 2016

The code hasn’t posted. Use the angle function on the output of the fft function:

t = [...]; % Time Vector

s = [...]; % Signal Vector

Ts = mean(diff(t)); % Sampling Time

Fs = 1/Ts; % Sampling Frequency

Fn = Fs/2; % Nyquist Frequency

L = length(s);

fts = fft(s)/L; % Normalised Fourier Transform

Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector

Iv = 1:length(Fv); % Index Vector

amp_fts = abs(fts(Iv))*2; % Spectrum Amplitude

phs_fts = angle(fts(Iv)); % Spectrum Phase

Note — This is obviously UNTESTED CODE but it should work.

Min
on 25 May 2017

H S
on 6 Jan 2018

Dear Star Strider,

I think for the zero frequency (DC), your code after "amp_fts = abs(fts(Iv))*2;" should be corrected as follows:

amp_fts(1)=amp_fts(1)/2;

Fuh-Cherng
on 27 Mar 2016

Star Strider
on 27 Mar 2016

As always, my pleasure.

I would appreciate it then if you would Accept my Answer.

You can do that by deleting your Answer and then Accepting mine. (No one gets any credit for Accepting their own Answer, anyway.)

Opportunities for recent engineering grads.

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/275358-how-to-determine-phase-of-a-sine-wave-using-fft#comment_352978

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/275358-how-to-determine-phase-of-a-sine-wave-using-fft#comment_352978

Sign in to comment.