A pre amplifier for vinyl discs

In the golden era of recording, grooves were cut into a disc by a lathe. The grooves physically represented the waveform that was recorded.

Playback is achieved by having a needle (connected to a magnetic pickup) riding in the groove. The side-to-side variations of the groove move the needle and magnetic pickup. The electrical output from the pickup is our audio signal, just waiting to be amplified.

To get a certain amount of time on a 12" disc that is spinning at 33-1/3 RPM, the grooves could only be cut so big. If you varied the groove too much it would cut over into an adjacent groove, destroying it. This is where mastering engineers really earned their pay!

There was still one problem to overcome. As frequency increases, the amplitude of the waveform required to reproduce the same sound level drops. Therefore, low frequencies need a bigger groove than high frequencies. That also means that high frequencies would get lost in the noise floor as their groove size got smaller.

To overcome this effect, pre-emphasis, an equalization curve, was applied to the signal. This artificially increased the size of the higher frequency wiggles in the record to keep them detectable above the noise floor. To recover the audio properly, the preamp used on the magnetic pickup must “de-emphasize” the boost in the highs.

How to build an Arduino compatible board for very little money

Now plug the ATMega chip in, carefully, to its socket, making sure the little notch on the top edge matches the notch on the socket (i.e. at the top, nearest to the power supply circuit). Usually chips come with their feet splayed a little wider than the socket – just gently bend them in on a flat surface if this is the case. When you’re inserting the chip make sure none of the legs get folded under rather than going into their sockets – it’s an easy thing to do if you’re not careful.

So, we’re finished as far as the hardware is concerned. Here’s the finished product:

I have 3 Arduino boards: my first one is the Duemilanove, which I use for prototyping with a small protoboard. I also have 2 Nanos which are assigned to projects that I'm building (a Happy Printer and a Midi Cajon). SInce I'm out of spare boards I was considering buying more Nanos, but this post made me want to build my own.

Building data structures that are smaller than an Array AND faster (in C)

In developing software for large data sets (billions of records, terabytes in size) the way you store your data in memory is critical – and you want your data in memory if you want to be able to analyse it quickly (e.g. minutes not days).

Any data structure that relies on pointers for each data element quickly becomes unworkable due to the overhead of pointers.  On a 64 bit system, with one pointer for each data element across a billion records you have just blown near 8GB of memory just in pointers.

Thus there is a need for compact data structures that still have fast access characteristics.