Korg Poly800/EX800 Users group photo

Yahoo Groups archive

Korg Poly800/EX800 Users

Index last updated: 2026-04-28 23:27 UTC

Message

Re: random LFO

2008-09-21 by korgpolyex800

Yeah, the lookup table is looking more and more the right way to go.

But it's not going to stop me from releasing the latest software. :-)

Mike.



--- In korgpolyex@yahoogroups.com, ASSI <Stromeko@...> wrote:
>
> On Samstag 20 September 2008, korgpolyex800 wrote:
> > Wow, now that I look at it in C, it definitely needs improvement.
> 
> If it's really implemented like you've commented, that would be so bad 
> you should have heard as the longest cycle would be 9.  Maybe your 
> assembler uses different mnemonics, but I think RLC should be "rotate 
> circular", not "rotate through carry".  If so, then the C expression 
> transforms to something more complicated:
> 
> m = ((m ? m : -m) << 1) + (m&0x80 ? 44 : 43);
> 
> Since you're not using a homogeneous recurrence (by virtue of adding 
> 43) zero is actually not a forbidden state and by excluding zero you 
> indeed shorten the longest cycle from 128 to 121.  A better 
> recurrence would therefore be:
> 
> m += (m&0x80 ? 44 : 43);
> 
> or equivalently:
> 
> ; my pseudo random number generator - used for the LFO randomiser
> ; returns a random number in A
> 
> RANDOMIZE:      push    h ; save HL
>                 lxi     h, M_RANDOM ; point at the previous value
>                 mov     a, m ; put the seed value into A
> RANDOMIZEA:     rlc ; rotate A circular
>                 adi     43 ; add 43 offset
>                 mov     m, a ; save in seed
>                 pop     h ; load HL
>                 ret ; return with pseudo random in A
> 
> The cycles associated with different seed values then are (seed before 
> the colon, cycle length at the end in brackets):
> 
> 0:	43, 129, 46, 135, 58, 159, 106, 255, 42, 127, 41, 125, 37, 117, 21, 
> 85, 213, 214, 216, 220, 228, 244, 20, 83, 209, 206, 200, 188, 164, 
> 116, 19, 81, 205, 198, 184, 156, 100, 243, 18, 79, 201, 190, 168, 
> 124, 35, 113, 13, 69, 181, 150, 88, 219, 226, 240, 12, 67, 177, 142, 
> 72, 187, 162, 112, 11, 65, 173, 134, 56, 155, 98, 239, 10, 63, 169, 
> 126, 39, 121, 29, 101, 245, 22, 87, 217, 222, 232, 252, 36, 115, 17, 
> 77, 197, 182, 152, 92, 227, 242, 16, 75, 193, 174, 136, 60, 163, 114, 
> 15, 73, 189, 166, 120, 27, 97, 237, 6, 55, 153, 94, 231, 250, 32, 
> 107, 1, 45, 133, 54, 151, 90, 223, 234, 0, 
> [128]
> 2:	47, 137, 62, 167, 122, 31, 105, 253, 38, 119, 25, 93, 229, 246, 24, 
> 91, 225, 238, 8, 59, 161, 110, 7, 57, 157, 102, 247, 26, 95, 233, 
> 254, 40, 123, 33, 109, 5, 53, 149, 86, 215, 218, 224, 236, 4, 51, 
> 145, 78, 199, 186, 160, 108, 3, 49, 141, 70, 183, 154, 96, 235, 2, 
> [60]
> 9:	61, 165, 118, 23, 89, 221, 230, 248, 28, 99, 241, 14, 71, 185, 158, 
> 104, 251, 34, 111, 9, 
> [20]
> 30:	103, 249, 30, 
> [3]
> 44:	131, 50, 143, 74, 191, 170, 128, 44, 
> [8]
> 48:	139, 66, 175, 138, 64, 171, 130, 48, 
> [8]
> 52:	147, 82, 207, 202, 192, 172, 132, 52, 
> [8]
> 68:	179, 146, 80, 203, 194, 176, 140, 68, 
> [8]
> 76:	195, 178, 144, 76, 
> [4]
> 84:	211, 210, 208, 204, 196, 180, 148, 84, 
> [8]
> 212:	212, 
> [1]
> 
> There is a slight DC bias to the longest sequence and a strong one to 
> all the others.  I think it would be easier to just put a random 
> table into memory (if you can spare the 256 bytes).  That way you 
> could even make this a general waveform by allowing to load new 
> tables into memory and/or switch between different ones later on.
> 
> 
> Achim.
> -- 
> +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk]>+
> 
> Factory and User Sound Singles for Waldorf Blofeld:
> http://Synth.Stromeko.net/Downloads.html#WaldorfSounds
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.