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

21 次查看(过去 30 天)
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 个评论
David Goodmanson
David Goodmanson 2017-6-9
编辑:David Goodmanson 2017-6-9
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 2018-5-18
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.

请先登录,再进行评论。

回答(1 个)

Abel Babu
Abel Babu 2017-6-2
  1 个评论
Anthony Buonassisi
编辑:Anthony Buonassisi 2017-6-2
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?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by