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

25 visualizaciones (últimos 30 días)
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 comentarios
David Goodmanson
David Goodmanson el 9 de Jun. de 2017
Editada: David Goodmanson el 9 de Jun. de 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 el 18 de Mayo de 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.

Iniciar sesión para comentar.

Respuestas (1)

Abel Babu
Abel Babu el 2 de Jun. de 2017
  1 comentario
Anthony Buonassisi
Anthony Buonassisi el 2 de Jun. de 2017
Editada: Anthony Buonassisi el 2 de Jun. de 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?

Iniciar sesión para comentar.

Categorías

Más información sobre Fourier Analysis and Filtering en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by