1

The final goal I am trying to achieve is the generation of a ten minutes time series: to achieve this I have to perform an FFT operation, and it's the point I have been stumbling upon.

Generally the aimed time series will be assigned as the sum of two terms: a steady component U(t) and a fluctuating component u'(t). That is

u(t) = U(t) + u'(t);

So generally, my code follows this procedure:

1) Given data

time = 600 [s];

Nfft = 4096;

L = 340.2 [m];

U = 10 [m/s];

df = 1/600 = 0.00167 Hz;

fn = Nfft/(2*time) = 3.4133 Hz;

This means that my frequency array should be laid out as follows:

f = (-fn+df):df:fn;

But, instead of using the whole f array, I am only making use of the positive half:

fpos = df:fn = 0.00167:3.4133 Hz;

2) Spectrum Definition

I define a certain spectrum shape, applying the following relationship

Su = (6*L*U)./((1 + 6.*fpos.*(L/U)).^(5/3));

3) Random phase generation

I, then, have to generate a set of complex samples with a determined distribution: in my case, the random phase will approach a standard Gaussian distribution (mu = 0, sigma = 1).

In MATLAB I call

nn = complex(normrnd(0,1,Nfft/2),normrnd(0,1,Nfft/2));

4) Apply random phase

To apply the random phase, I just do this

Hu = Su*nn;

At this point start my pains!

So far, I only generated Nfft/2 = 2048 complex samples accounting for the fpos content. Therefore, the content accounting for the negative half of f is still missing. To overcome this issue, I was thinking to merge the real and imaginary part of Hu, in order to get a signal Huu with Nfft = 4096 samples and with all real values.

But, by using this merging process, the 0-th frequency order would not be represented, since the imaginary part of Hu is defined for fpos.

Thus, how to account for the 0-th order by keeping a procedure as the one I have been proposing so far?

4

0 回答 0