MATLAB Answers

use FFT in matlab and get phase plot

Asked by Passband Modulation on 14 Aug 2012

i have some polymers characterized by transmission terahertz time domain spectroscopy (THz-TDS).

ive now the time domain data in Excel, with column A being (Delay ps), column B (Reference), column C (Amplitube nA) as follows.

i would like to have "FFT phase of column C" minus "FFT phase of column B", and then plot the phase (after deduction) as a function of frequency.

i am told this could be done by adding



   [X,TXT,RAW] = xlsread('yourfile.xls');
   xdft = fft(X(:,2));   xdft = fft(X(:,2));
   % sampling interval -- assuming equal sampling
   DT = X(2,1)-X(1,1);
   % sampling frequency
   Fs = 1/DT;
   DF = Fs/size(X,1);
   freq = 0:DF:Fs/2;
   xdft = xdft(1:length(xdft)/2+1);   phi = angle(xdft);

anyway it does not work

the command window shows

??? Error using ==> plot Vectors must be the same lengths.

Error in ==> Untitled at 12 plot(freq,angle(fft(X(:,3)))-angle(fft(X(:,2))))


Michael Quinn
on 14 Aug 2012

Not knowing your data size/shape, I can only offer some suggestions on what to look at. Instead of your plot() command, make a new variable:

PhaseDifference = angle(fft(X(:,3)))-angle(fft(X(:,2)));

Then look at its size compared to the size of freq:


It looks like (from the error) that they are different. You'll need to figure out how to fix this so that you can successfully plot them.

thank you Michael Quinn, but i am not familiar with this. anway thx again.


No products are associated with this question.

1 Answer

Answer by Elige Grant
on 14 Aug 2012
Edited by Elige Grant
on 14 Aug 2012
 Accepted answer

Here are the frequencies associated with the output from FFT:

Nt =              % Number of time samples
Fs =              % sample frequency (= 1/dt)
df = Fs/Nt;       % frequency increment
Nyq = Fs/2;       % Nyquist frequency
if mod(Nt,2) == 0 % Nt is even
   freq = ifftshift(-Nyq : df : Nyq-df);
else              % Nt is odd
   freq = ifftshift([sort(-1*(df:df:Nyq)) (0:df:Nyq)]);

Then you can just do a xlim on the plot to zoom in on a specific frequency range.

  1 Comment

really thx a lot. these are the background info and the related questions on them.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!