Issue with getting correct FFT phase plot
Show older comments
I am converting a time-domain synthetic 1D signal to frequency domain using MATLAB fft. In the frequency domain, the amplitude vs frequency plot is coming reasonable which means it is showing the correct amplitudes at the desired frequencies. But in the phase vs frequency plot, things are not coming any close to being reasonable. It is showing incorrect phase values at the frequency values present in the fabricated signal. I have pasted my code here:
Ws=100; % sample @ 100 Hz
T=10; % collect data long enough for at least a couple cycles
N=T*Ws; % compute number samples needed for above
t = linspace(0,T,N); % and generate time vector
y = (2.2*cos((2*pi*4*t)+(pi/3)))+(1.4*cos((2*pi*10*t)+(pi/6)))+(0.8*cos((2*pi*16*t))); % and a sample signal
subplot(1,3,1)
plot(t,y)
xlabel('Time(s)')
ylabel('Amplitude')
Y = fft(y)/N; % FFT
PSD = 2*abs(Y(1:N/2+1)); % and the PSD one-sided
f = linspace(0,Ws/2,N/2+1); % compute freq vector for Fs
subplot(1,3,2)
stem(f,PSD) % plot the result
xlabel('Frequency(Hz)')
ylabel('Amplitude')
Y2=Y; %store the FFT results in another array
%detect noise (very small numbers (eps)) and ignore them
threshold = max(abs(Y))/10; %tolerance threshold
Y2(abs(Y)<threshold) = 0; %mask out values that are below the threshold
phase=rad2deg(atan2(imag(Y2),real(Y2))); %phase information
subplot(1,3,3)
stem(f,phase(1:length(f))) % plot the result
xlabel('Frequency(Hz))')
ylabel('Phase')
I am also attaching the plot which I got. Any help would be greatly appreciated.
Accepted Answer
More Answers (0)
Categories
Find more on Discrete Fourier and Cosine Transforms in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!