[sdiy] Non maximal-length LFSR
rburnett at richieburnett.co.uk
Thu Mar 3 16:59:53 CET 2016
> throwing away a byte every now and then sounds reasonable. I would be
> surprised if this causes any audible artefacts.
I think that's what I'll probably do. I'd rather generate 49 samples and
throw one away each time, than add two more XOR instructions into my loop
and increase the CPU load of that function by 100%.
> As far as I know the dsPIC has a CRC engine. CRC is in a nutshell just a
> LFSR so it can likely be abused as a cheap random generator. Have you
> tried that?
It does. I'm actually using that for CRC checking some downloaded data
packets in another project. It's only 16-bit though, so the sequence would
repeat after 65535 bits. That's only just under 4096 sample words, or every
85 ms at 48kHz. So, unfortunately it would be very noticeable.
> Also you can always mix two not-so-good random streams together to get a
> longer and often better random data stream. Say you have a stream with a
> sequence length N and another one with a sequence length M the xor of
> the two streams yields a random stream of length GCD(m,n).
I can try this, although it is not really "quality" in a mathematical purist
or Cryptographic sense that I am aiming for as much as "super efficient
noise source". The ability to produce 16-bit noise samples with poor
correlation between the bits in just two instructions per sample is what is
appealing to me about this technique.
I didn't invent this idea, BTW. I came across the R250 Random Number
Generator that uses an array of 250 words in a circular buffer and takes its
feedback from taps 147 and 250 to produce a sequence of 16-bit random
numbers that is (2^250)-1 in length!!!! Obviously this is far longer than
necessary for audio, but the efficiency of the algorithm is very tempting
when run on DSP hardware. Hence me trying to modify it to fit a buffer
length of 48 words. (You might say that 48 words is a lot of RAM resources
to use up generating some random numbers, but I would use this space for the
1ms output buffer of the noise source anyway.)
More information about the Synth-diy