Filtering White noise to produce desired Coloured Noise

Started by dilpreet06 November 1, 2007

I am trying to produce a coloured noise from white noise in the discrete
time domain. I do it by producing an FIR filter of coefficients b,a from
the Noise Floor (V/sqrt(Hz)), which filters white noise produced by the
randn function. 

Here is the code again: 

%Filter coefficients of Noise floor of circuit
[b,a]  = invfreqz(PSD_N.^0.5,(2*pi/fs)*(nn_f_scale),70,0,[],20,0.01);

%Generate White Noise
n_white = randn([1 B])';      % multiply of power 1
n_white = n_white - mean(n_white); % white noise must be DC free

%Generate Coloured Noise
n_out   = filter(b,a,n_white);     % filtering operation produces coloured

Is this correct? Because, according to my simulation, i have a bias of
some 40dB between my analytical calculation and simulation.

Thanks for all answers! :-)

Watch out when subtracting the mean value from random numbers. The
resulting noise isn't white anymore.
When observing an actual white Gaussian random process over a finite
lenght of time the observation will include a random DC term.
The longer your signal, the smaller the resulting error, though.

But this does not account for a 40 dB difference (unless your signal is a
single sample :)

One thing that comes to mind is bandwidth: Assume my sampling rate allows
for a bandwidth of 1 MHz, and the filtered noise should have a noise
bandwidth of 1 kHz. 
Since we're discarding 99.9 % of the initial noise power, it needs to be
scaled by a factor of 1000 in terms of power=variance, or sqrt(1000)=std.

Hi Markus, 

thanks for your tip on the mean part. i havent had the time to figure out
yet, what the cause of the 40dB difference is, but i will put it up, once
i get the answer. thanks!