Construct phase spectrum before IFFT

Technical Source
2 min readDec 22, 2021

--

Dear all,

I would like to produce a signal in time domain from a given set of regular waves in the frequency domain. Say 4 regular waves with known wave frequency, amplitude and phase.

To understand how the commands work, I plotted all four waves in a time sequence, used FFT on this time sequence and plotted the amplitude (abs(FFT_output)*2/length(time_series)) and phase spectrum (angle(FFT_output)*2/length(time_series)), both scaled by 2/length(time_series). Building up the amplitude spectrum from my known frequencies and amplitudes in the frequency domain, I insert the amplitudes in a vector with the same length as the frequency vector, at the positions of the corresponding frequency and use fliplr to make the spectrum symmetric. This works fine and corresponds exactly to the outputted amplitude spectrum from the FFT command.

For the phase spectrum I perform the same trick, insert all known phases into a vector at the positions of the frequency they belong to. This constructed phase spectrum however does in no way correspond to the phase spectrum constructed from the FFT output. The phase spectrum outputted by the FFT command contains phase information for all frequencies in the spectrum, though it is only an addition of 4 waves. How should I interpret this?

NOTE:-

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

Hi,

I see that what I said about dividing your angles by a factor of 2*length(…) was incorrect because that factor was inside the argument of the angle function. So I will start over. [1] I believe your time array has one too many points. For true periodicity, the value of T_addition should not be the same at the end point as at the first point. Going with something like

N  = 1000;
dt = .01
Max_t = N*dt;
df = 1/Max_t;
t = (0:N-1)*dt
f = (0:N-1)*df

gives single-point amplitudes at the desired frequencies, zero everywhere else. The extra time point messes that up. If you try plotting the fft either way you will see a significant difference. [2] Sometimes phase variations make good sense, such as with filters, but there is not exactly such a thing as a phase spectrum in all cases.

SEE COMPLETE ANSWER CLICK THE LINK

--

--

Technical Source
Technical Source

Written by Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.

No responses yet