I have a project where I have a vibration PSD profile (G^2/Hz). I'd like to use this to create random time-series displacement data to feed into a dynamic model to evaluate performance in the presence of vibe.

The problem occurs when I convert from G^2/Hz to displacement/time, and then back to the identical (or very near it) G^2/Hz profile. I create random time-series data, but when I convert back to the frequency domain, it doesn't match up. The re-created PSD has content up to twice the frequency domain I'm initially putting in, and the RMS values don't match up. This sanity check needs to work before I can confidently put the time-series data into the model, so I'm a bit hung up...

% Create time and displacementt = linspace(0, N*dt, N);x = (1/sqrt(N))*real(ifft(sqrt(PSD_noise)));x = (x*9.81)./sqrt(std(x));disp('Parceval"s Theorem says this result should = gRMS')sum(abs(x).^2)%This answer is similar to the gRMS of my noisy/input PSD, but now off by ~10%