[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Frozen noise generation

Enrique wrote:
We wish to generate two ".wav" files, each containing a burst of frozen
noise (N1 and N2) of the same duration (say 200 ms) but with different
frequency content.  Let's say that N1 has frequency components from 10 Hz
to 3000 Hz, and N2 from 3001 Hz to 4000 Hz.  Most importanly, we wish that
the SPL level for all frequencies be equal within each noise and equal for
the two noises.

So far, we have attempted to generate the noise by adding a large number of
equal-amplitude, random phase tones (phases are uniformly distributed
between 0 and 2pi).  We then normalize each of the noises to their maximum
amplitudes to produce a wav file.  The result is that the spectrum of each
noise is flat over their respective frequencies.  However, the levels are
different for the two noises (remember we wish for them to be equal).  It
is lower for the noise with the largest number of frequency
components.  This is probably the result of the normalization prior to
producing the wav file.

Is there a clever (analytical) solution to our problem, or do we have to
adjust the level of noises manually to make them equal?
I'm taking a stab at answering this question as much for the
self-tutorial value it provides me as anything else. I hope anyone
would let me know if I have made any errors. Also, Enrique, if I have
oversimplified, it doesn't imply that I think you are unaware of the
basics, it is there just to help make my argument coherent to myself.

Let me make sure I understand your procedure first.

You add equal-amplitude random-phase sine components, 200ms in
length, over the two ranges 10-3000 and 3001-4000 Hz. Am I right in
assuming that you are using equal linear frequency spacing of the
sine components in the two noises, and therefore summing more
components for your low freq noise?

If so, then at this point, by *definition*, the spectrum levels of
the two noises are the same, because that's how you made them. The
wider bandwidth noise would at this point have a greater *waveform
amplitude*, since it is the sum of more spectral components.

You then proceed to normalize each waveform to max amplitude. The
noise waveform with the fewer spectral components had the lower
waveform amplitude, so it increased more in the normalization
process. So as you said, the noise with the *more* components now
*must* have a lower spectrum level than the other one.

You *can't* have both equal spectrum level and equal amplitude
waveforms, *unless* the linear bandwidth of the two noises is equal.
If you want unequal bandwidth noises at equivalent spectrum level,
their waveforms amplitudes will have to be unequal.

Note that you won't be able to get around this in the construction
phase, by simply using the *same* number of components in the
construction of both noises (eg, by by using a wider frequency
spacing for the components summed to create the wider bandwidth
noise). The result of this procedure *would* be two waveforms of
equal amplitude, but if you were to calculate their spectrum levels,
you would find that they would differ. This is because they don't
*really* contain the same number of components. Yes, you made them
with the same number of components, but actually, in calculating the
spectrum of a noise, the components for the purpose of the fft
calculation become once again equally-spaced at fs/N (sampling
frequency divided by N points in the fft). Since you'd be using the
same fs and N in getting the spectrum of the two noises to compare
them, you'd once again find that the spectrum level of the narrower
bandwidth noise would be higher: That is, for two waveforms of equal
amplitude, the one having a narrower bandwidth would have a higher
spectrum level.