If you have ever thought about using white or pink noise in one of your project, here is something for you:
The noise.block miniature white and pink audio noise generator.
noise.block is a small 8-pin breakout module that you can easily integrate in your DIY projects! It outputs high quality analog white and pink audio noise and also a digital 32 bit pseudo random bit sequence, which can be used as a random number generator.
I came up with this after some search for a noise generator module/kit, which turned out that these are quite rare and bulky, especially if you need high quality pink noise. I thought it would be very handy to have a small plug-in component that can be used in DIY projects.
There are many ways of approaching this, ranging from pure analog circuits to digital noise generation. Digital noise generation seems to be the "modern" way of doing this, however, especially pink noise is not trivial to generate and you probably need to use in a digital signal processor (DSP) with a high resolution DAC for high quality. Fortunately, white noise is pretty easy to generate even with a 8 bit microcontroller, using pseudorandom binary sequences (PRBS).
From PRBS a high quality and stable white noise can derived with an analog filter quite easily. To generate pink noise, this white noise is sent through a so-called "pinking" analog filter that approximates the -3 dB/octave characterisitc of pink noise over the audio band. You can get a very good idea of how this works from Rod Elliots pink noise generator project.
Here is a basic block diagram of the noise.block:
For the PRBS generation I used a PIC10F320 Microcontroller from Microchip, which comes in a tiny 6 pin SOT-23 package. I implemented a 32 bit PRBS sequence with a linear shift register with feedback in assembler code. The routine takes only 12 instruction cycles to calculate the next value, resulting in a PRBS frequency of about 333 kHz. This means that the sequence takes approximately 3.5 h to reapeat itself, which is hardly noticable to hear.
Here is a FFT of the white and pink noise output spectrum of the noise.block module:
As you can see, the white noise spectrum is very flat from 20 Hz to almost 20 kHz. The pinking filter provides a smooth -3 dB/oct (-10 dB/decade) slope. The output levels are normalized to ~1 Vrms, which gives a peak-to-peak voltage output of about +/- 3V. Very low frequencies (<20 Hz) are filted by a high pass filter and frequencies above 20 kHz by a 2nd order low pass filter.
Note however, that the DC levels of the noise outputs are centered at half the supply range (V+ - V-)/2. So if you use a unipolar supply, you should use AC-coupling with external capacitors to block the DC offset from your circuit. With symmetrical bipolar supply, the output voltages are centered at 0V, however there might be a small offset left, so AC-coupling is never a bad idea probably.
The PRBS is provided with 0..5V output levels from the microcontroller. It also gives you a synchronized clock of the PRBS with rising edges centered to each bit. This makes interfacing with other digital circuits very easy. For example, you could use the SPI interface of another microcontroller to read out some random numbers from the PRBS sequence. This makes the noise.block usable for a variety of other applications!
If you are interested in a noise.block module, just send me an email and I likely might have an assembled PCB left over.