Generating correlated data with a given power spectrum.
I'm working with realizations of random correlated data using a given
power spectra (no correlation matrix is given).
What I do to perform such realizations is that I generate a vector of
normally distributed data, calculate the fft of this
vector and multiply that by the square root of the given power spectra.
Then I make the ifft of this product, which
I expect to represent the realization of my random variable. My problem
is that the correlation of my data
looks O.K. but the amplitude gets smaller as I increase the # of points
in my original vector.
Any hints on what's going on?
This is a demo file of what I'm doing:
N = 201;
rmax = 2000;
dr = rmax/(N-1);
kmax = 2*pi/dr;
k = linspace(0,kmax,N);
r = [0:dr:rmax];
l = 17; rms_h = 5;
R = fft( randn( size( r ) ) );
ksq = k.^2;
lsq = l*l;
variance = rms_h*rms_h;
P = variance*l/( 2*sqrt( pi ) )*exp( -ksq*lsq/4 );
H = sqrt( P ).*R; realiz = real( ifft(H) );
plot(r,realiz), box on, grid on, title('\lambda_0 = 17
m'),ylabel('h(m)'),axis([0 rmax -20 20]);