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

20 vues (au cours des 30 derniers jours)
Anthony Buonassisi
Anthony Buonassisi le 31 Mai 2017
Commenté : Gonzalo le 18 Mai 2018
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 commentaires
David Goodmanson
David Goodmanson le 9 Juin 2017
Modifié(e) : David Goodmanson le 9 Juin 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 le 18 Mai 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.

Connectez-vous pour commenter.

Réponses (1)

Abel Babu
Abel Babu le 2 Juin 2017
  1 commentaire
Anthony Buonassisi
Anthony Buonassisi le 2 Juin 2017
Modifié(e) : Anthony Buonassisi le 2 Juin 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?

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by