Jerry Avins wrote:
> Andor wrote:
> > Jerry Avins wrote:
> >> hbarcellos wrote:
> >>> Hi all,
> >>> I'm working whit ADSP 21161 analog devices, I'm looking for a way to
> >>> generate a white noise in assembly, something like a random function
=
in C.
> >>> kind regard's
> >> A linear congruential generator is probably good enough. Thay are
easy
> >> to code. If you don't need all the bits, discard the lower-order
ones.=
http://en.wikipedia.org/wiki/Linear_congruential_generator
>
> > For DSP, the linear congruential generators might be good enough.
> > There is a particular pair of numbers "a" and "b", such that
>
> > x(n) =3D (a x(n-1) + b ) % 2^32
>
> > produced what looks and sounds like uniform random integers and has a
> > period of 2^32 - 1. For processors that sup****t 32bit fixed-point
> > arithmetic (like the SHARC), this is extremely fast (the % is for
> > free). The numbers "a" and "b" are in one of Knuth's volumes and the
> > old Numerical Recipes in C (in the new version, they completely
> > discourage the use of linear congurential generators - a pity, because
> > for dithering and simple randomization, the above generator works just
> > fine).
>
> > Hey wait, the old version of NR is available online here:
>
> >http://www.nrbook.com/a/bookcpdf.php
>
> > Chapter 7.1 (Uniform Deviates), section Quick and Dirty Generators. So
> > "a" is 1664525 and "b" is 1013904223.
>
> The link I cited gives several pairs.
Yeah, I read it after I posted.
> Knuth (TACP, chap 3) has a
> lot of good discussion, but makes no specific recommendations.
In the second edition of NR, they say that all LC PRNG are about
equally non-random, and the quick and dirty solution above is just as
good (or bad) as the others. As I wrote, in the current edition (3),
they discourage the use of LC PRNGs all together.
> A general Linear congruential RNG has the form =A0X_{n+1} =3D (a*X_n +
c)
> mod m.
> For the ANSI C RNG, m=3D2^32, a=3D1103515245, c=3D12345, and bits 30..16
=
are
> returned.
It makes sense only to return the higher bits. It can be shown that
each bit in a sequence of LC PRNs has a period of at most 2^(bit
position+1), eg. the LSB has a period of at most 2. I learned that the
hard way :-).
Regards,
Andor


|