Tue Jul 10 16:26:28 EDT 2012


Bitstream i in, bitstream o out, such that i _|_ o but /i = /o.

Someting like this: circular shift register, read from a random
position n, then send out that bit and read into position n.  Repeat.
This guarantees there is no average energy lost, but the result is
probably not very correlated with the input.

Implementation: barrel shifter with log_n random input bits, or an
addressable memory.

There has to be a relation between the size of the store and the
quality of decorrelation.  How does this work?

1-bit: no decorrelation
2-bit: either pass or bump

Note that while this might reduce correlation (sum of element-wise
product) it does not mean streams are statistically independent,
because they are related through the property of average.

Even if this doesn't work for anything hi-fi, there must be some
pretty interesting effects hidden here.  Convert a PCM signal to S/D,
then apply this bit algo.  Such a thing is not so hard to build, so
let's try a Pd external.

What are the statistical properties of such a decorrelator?  It's
probabl simplest to start with a couple of concrete examples and work
from there.

2 bit
50% D=1 input
50% state
    50% D=2 input
    50% state

The output bit is:
1/2 x[1]
1/4 x[2]
1/8 x[3]

This looks suspiciously much like a lowpass filter.  On average, the
effect is a filtering with h[t] = 2^-t for t>0 ad h[t] = 0 otherwise.

3 bit
1/3 D=1
2/3 state
    1/3 D=2
    2/3 state
        1/3 D=3
        2/3 state

The output bit is:
1/3    x[1]
2/9    x[2]
4/27   x[3]


1/2 (2/3)^n = x[n]

Looks lke this generalizes..

4 bit
1/4 D=1
3/4 state
    1/4 D=2
    3/4 state


for p>1 bits, the shape is:

  1/(p-1) (p-1 / p)^n

meaning that if p grows, the tail gets longer.

It seems that the "interesting effects" is just one-pole low-pass
fitering.  But hey, that's a nice primitive!

Still, it's quite an inefficient way of storing the data.  It seems
that this can be implemented in a black box way.

Actually, it doesn't look like this is correct.  The state shrinks in
the different cases:

1/4 D=1
3/4 state
    1/3 D=2
    2/3 state
        1/2 D=3
        1/2 state

actually that can't be true.  This is only for a non-recursive
variant, where we shift out, then write in a random place.  The first
swapper algo is definitely infinite tail.

The question is though: what kind of baseband noise does this