# [sdiy] Logs on a micro? Was: Reverse engineer an EPROM encoding?

rsdio at sounds.wa.com rsdio at sounds.wa.com
Wed Nov 13 07:29:06 CET 2013

```I believe "exponential" is the more general term, but it might be
"logarithmic."

There's no need to avoid floating point, just make sure you convert
the result to 12-bit integer with the correct scaling. e.g. if your
floating point calculation ranges from 0.0 to < 1.0, then simply
multiply the result by 2048 and round. Not sure what you do for the
sign bit.

I recommend that you create a short array[0x010000] to hold the
calculated results of the conversion, then simply use faster lookups
to translate from your original samples to the 12-bit format. Using
float, you might even be able to start with 24-bit samples and
maintain slightly more resolution than if you convert to 16-bit
before converting to the log-12 format. In other words, you could go
directly from 24-bit to 12-bit log.

Brian Willoughby
Sound Consulting

p.s. I spent a while investigation exponential curves in order to map
a control value to LED brightness while accounting for the gamma
curve. Taylor Series allow you to approximate exponential functions
on something like an 8-bit micro, but you might as well use the full
32-bit float math libraries - provided that they're not also taking
short cuts that have insufficient accuracy.

On Nov 12, 2013, at 19:27, MTG wrote:
> OK, thanks for the tip. I'm *assuming* "log" is the correct word
> here, but in any event it is their "compression" technique. I was
> able to perform some tests to validate the basic operation... I
> created a small table of values that output a linear ramp from the
> drum machine over it's full range.
>
> I'm doing the computation on a PC, not a micro, but since the
> result has to be stuffed in an 16 or 12 bit number, I need to avoid
> the floating point mess that a typical PC program would use. I need
> the result to be in a format that the drum machine understands (16-
> bit data, 12 of which are used and one of those is a sign bit).
>
> GB

```