Is it possible to convert a power specral density plot to a time-domain plot?

21 views (last 30 days)
Hello!
I have limited knowledge of signal processing and Fourier Transforms so I was wondering if it was possible to convert a PSD that I have to the time domain in MATLAB. I have been trying ifft() and referencing questions that others have asked about that function but overall I have very little familiarity with Fourier and I would like to be able to perform this conversion using a simple GUI/toolbox/download. Does anyone know if this task is possible with built-in MATLAB interfaces or readily available internet downloads like SPTool or Signal Analyzer?
Thanks for your help!
Note: I do not have phase information for the PSD. If I understand the concept correctly, I am not too concern with getting a single signal. I just need a signal that could potentially have this PSD. Cheers.
  4 Comments
David Goodmanson
David Goodmanson on 9 Jun 2017
Edited: David Goodmanson on 9 Jun 2017
It's a week later and you may have the answer by now, but PSD implies a signal that goes on indefinitely, possibly including noise. I just wanted to check that you are not referring to energy spectral density for a one-time waveform of limited duration.
Gonzalo
Gonzalo on 18 May 2018
Hi Anthony,
What you want to do involves resolving and inverse optimization problem since there might be many very different signals which yield the same PSD magnitude.
An approach that I have seen is to do a signal reconstruction from a spectrogram like for example in this paper http://recherche.ircam.fr/pub/dafx11/Papers/27_e.pdf
Another option is using the fsst and ifsst functions in the signal processing toolbox which perform the Fourier synchrosqueezed transform but in this cases you need the phase as well.

Sign in to comment.

Answers (1)

Abel Babu
Abel Babu on 2 Jun 2017
  1 Comment
Anthony Buonassisi
Anthony Buonassisi on 2 Jun 2017
Edited: Anthony Buonassisi on 2 Jun 2017
Thanks for the reply, Abel.
If I already have an ASD made up of x and y values, does it need to be prepared in any way in order to be input into the function you recommended as "Sxx"? I'm assuming the process is similar to this snippet of code found later in the function:
Hm0 = 2.2; % Significant Wave Height
Tp = 4.3*sqrt(Hm0); % Peak wave period (middle of acceptable range)
frequency_SingleSided = (0:(N/2))*df; % Single-Sided Frequency vector
wave = jonswap(2*pi.*frequency_SingleSided,[Hm0 Tp], 0);
% Scale Gxx to proper value (yours should already be in [m^2/Hz])
Gxx = abs(wave.S*(2*pi)); % Single-sided spectrum [m^2/Hz]
% Make it double-sided (Sxx shoud be your input)
Sxx_positiveFreq = Gxx/2;
Sxx_negativeFreq = flip(conj(Sxx_positiveFreq(2:end-1)));
Sxx = [Sxx_positiveFreq; Sxx_negativeFreq]; % [m^2/Hz]
Thanks again,
Anthony
EDIT: I think I got it working but when I use the Signal Analyzer tool to convert the timeseries back to PSD it looks like a white noise signal from 0Hz to 5Hz and not like the original PSD. Is this supposed to happen?

Sign in to comment.

Categories

Find more on Fourier Analysis and Filtering in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!