Microphone sensitivity and noise

I had tried various microphone circuits, like MAX4466 or MAX9812 with standard and autonomous power, with or without shielding of wires and even whole circuit.
Noise is very high, sensitivity very low and in fact input varying in a range only of few values, far from [1-1027] and therefore input stream cannot be used for further analysis (fourier or similar)
Looks like I need more powerful preamplifier/dac, but I cannot identify such on market.
I know Arduino is weak with sound processing, but I am not worrying about quality, but sensitivity.
I had found a lot of examples, but most of them is from Yes/No category - recognition of whistles, claps,,,
Tried this on various Chinese Unos, probably this is a reason?
Any hint would be helpful.

The arduino DUE provides an 12-bit ADC peripheral (0 to 4095) and a 12-bit DAC.

There are several methods to remove most of the input noise and some of them can give rather good results.

What are you trying to do with this setup?
The Arduino Uno has not got enough memory to even begin to contemplate performing a speech or sound type recognition system, even if you get a noise free input to the analogue pins.

1Pats:
I had tried various microphone circuits, like MAX4466 or MAX9812 with standard and autonomous power, with or without shielding of wires and even whole circuit.
Noise is very high, sensitivity very low and in fact input varying in a range only of few values, far from [1-1027] and therefore input stream cannot be used for further analysis (fourier or similar)
Looks like I need more powerful preamplifier/dac, but I cannot identify such on market.

Those chips are micropower opamps, optimized for low power consumption. They are not low-noise in the slightest. Marketing dross on the datasheet I'm afraid. A low noise opamp for low impedance source would have much less than 10nV/rtHz voltage noise, whereas both these are far higher.

A mic preamp normally requires at least a couple of stages of gain to get from mV levels up to volts.

I've been playing a bit recently with coherent audio direction finding and acoustic modem experiments. Inexpensive microphone modules based on the max9814 provide adequate sensitivity for the stuff I've been doing. The max4466 and max9812 based modules, as you've discovered, have pretty low output levels for sound levels typical of a sound source at some range from the microphone.

A lot of the microphone modules are AC coupled so it may be necessary to bias the output or to bypass the coupling capacitor to get a stable center voltage at the ADC. High gain amplifiers will tend to pass power supply noise, so ideally one wants to isolate and filter microphone power from the Arduino digital power.

If characterization of a sound is required, look for correlation /convolution functions. These functions are provided in the ARM DSP library that you can upload on a DUE (select Cortex M3). I have seen, but not tested, that these functions remove most of the noise and are independant from the amplitude of the signal to be compared with.

There does seem to be a dearth of decent mic preamp modules, and a glut based on mobile phone chips (which are deaf as a post as they are designed to stick in front of your mouth, not listen to a room).

ard_newbie:
If characterization of a sound is required, look for correlation /convolution functions. These functions are provided in the ARM DSP library that you can upload on a DUE (select Cortex M3). I have seen, but not tested, that these functions remove most of the noise and are independent from the amplitude of the signal to be compared with.

My problem is not with this- my problem is low sensitivity/high noise of microphone.

Grumpy_Mike:
What are you trying to do with this setup?
The Arduino Uno has not got enough memory to even begin to contemplate performing a speech or sound type recognition system, even if you get a noise free input to the analogue pins.

No problem with memory, this is not important.

ard_newbie:
The arduino DUE provides an 12-bit ADC peripheral (0 to 4095) and a 12-bit DAC.

There are several methods to remove most of the input noise and some of them can give rather good results.

I know, but my understanding - this would improve granularity, not sensitivity, it is not helping with noise. Regarding noise reduction - could you point me to these methods? I had tried to found them,but without success.

Grumpy_Mike:
What are you trying to do with this setup?
The Arduino Uno has not got enough memory to even begin to contemplate performing a speech or sound type recognition system, even if you get a noise free input to the analogue pins.
[ystem, even if you get a noise free input to the analogue pins.

I had build coffee table with infinity mirror like surface with addressable leds. My initial intend was - do slow light changes in “silence” mode, light music in a case of sound/music in the room. But due to these problems, I even cannot distinguish silence from sound. Now LEDs in a table are changing without it, it is already implemented and works- I do not need advice in this area. In other words- “silence” mode is working, but no more. As, in fact, this is a spectral analysis, but only for 3 bands (->RGB), no need for precise values (no need for much memory)

MrMark:
I’ve been playing a bit recently with coherent audio direction finding and acoustic modem experiments. Inexpensive microphone modules based on the max9814 provide adequate sensitivity for the stuff I’ve been doing. The max4466 and max9812 based modules, as you’ve discovered, have pretty low output levels for sound levels typical of a sound source at some range from the microphone.

A lot of the microphone modules are AC coupled so it may be necessary to bias the output or to bypass the coupling capacitor to get a stable center voltage at the ADC. High gain amplifiers will tend to pass power supply noise, so ideally one wants to isolate and filter microphone power from the Arduino digital power.

Thanks. It would be worth a try. Will look for max9814

I do not need advice in this area.

Yes you do. You simply do not know what you do not know. A bit arrogant in my opinion.

Grumpy_Mike:
Yes you do. You simply do not know what you do not know. A bit arrogant in my opinion.

You are right, but I am not sure smbdy can answer this:
For LED Driver I had taken idea from Kevin Darrah (see youtube), had found his excellent LED driver function and adjusted it a bit. Works perfectly. Recommend. I think, most interesting part of it - no libraries at all and this is fastest LED driver in the World (direct port manipulations etc). This function has one restriction - it is tight to port 8, but I think, with some manipulations might be adjusted for another ports as well. Unfortunately Kevin used oscilloscope for exact timings, I do not have such. To remove this restriction one or more bitwise operations should be added for each processed bit . As Kevin used “nops” one or several should be removed. (see his code)
Going to do such experiments, but hopefully you have advice here.
For example, I assume each command on Arduino is executed in one processor loop - duration of each command is the same. This is my guess, but I am not sure. If so - to keep timings, I can replace nop with command…

BTW had ordered DUE and max9814. Probabaly this combination will work.
But - not figured out - DUE has different power requirements (3.3V). Is it means USB power supply cannot be used?

The DUE can be powered thru the programming port or the Native USB port or a (7V to 12V) battery pack with the jack. The voltage regulator does the conversion job.

My problem is not with this- my problem is low sensitivity/high noise of microphone.

I'd suggest you listen to the noise to identify/diagnose it.

You can connect it to line-in on a soundcard and record it, or connect it to your stereo system, or plug-into regular powered/amplified computer speakers.

Either way, put a capacitor (0.1uF or more) in series with the microphone-board output to block the DC bias.

The mic input on a laptop (or soundcard) is probably too sensitive and the mic preamp built-into a laptop/soundcard will usually add some noise of it's own but it might work if the signal is very weak.

If you plug-into your stereo system be careful of acoustic feedback.

Acoustic/ambient noise from the room is most-likely the worst noise source. If that's the problem you'll have to make the room quieter or make the sound louder (to increase the signal-to-noise ratio).

Power supply noise can be power line hum, or high-pitch "mosquito" noise from a switching supply or other digital switching/clock signals leaking-back into the power supply (or through ground loops).

Preamp noise from the op-amp is white noise hiss and it is often audible, but it's usually not as bad as the other possible noise sources, and not often noticeable above the acoustic noise picked-up by the microphone.

DVDdoug:
Acoustic/ambient noise from the room is most-likely the worst noise source. If that's the problem you'll have to make the room quieter or make the sound louder (to increase the signal-to-noise ratio).

If the noise has a spectral bias enough different from the target sound range, you might be able to filter it out.For instance, if the noise has, mostly, a frequency component lower than any of the sounds you plan to trigger on, then a High Pass filter might do the trick.

To suppress most of the noise, I would select the fully differential mode between e.g AD0 and AD1. Sample AD0 (your input signal) with AD1 connected to Gnd. Select a gain of 2, oversample and average.

Looking at the preamp with those Max chip they’re not bad. Maybe it’s an impedance issue.

I assume each command on Arduino is executed in one processor loop - duration of each command is the same. This is my guess,

Sorry this is not correct. Each command is translated into as many machine code instructions as is needed, this is done by the compiler. One command may result in tens or hundreds of machine code instructions.

I can replace nop with command...

No. A nop is a machine code, it takes one clock cycle, most machine code instructions take one or two clock cycles, but there are exceptions that take more. You can include machine code direct into your C program by using the "in line assembler".

Yes direct port addressing can be done in two clock cycleswhere as the digitalWrite call take about 80 clock cycles.

Grumpy_Mike:
Sorry this is not correct. Each command is translated into as many machine code instructions as is needed, this is done by the compiler. One command may result in tens or hundreds of machine code instructions.
No. A nop is a machine code, it takes one clock cycle, most machine code instructions take one or two clock cycles, but there are exceptions that take more. You can include machine code direct into your C program by using the "in line assembler".

Yes direct port addressing can be done in two clock cycleswhere as the digitalWrite call take about 80 clock cycles.

One command may result in tens or hundreds of machine code instructions
For more complex commands -yes, but my knowledge in C and assembler says - C bitwise operation is compiled to one assembler/machine command. As Kevin code is based on timing according to addressable LEDs technical specification, goal is to keep this timing.
This might be done by replacing nops, which are used in his code,by bitwise command(s) equal in time. Oscilloscope might be used to detect this, but as i do not have such, table with execution length for each command would be useful. Had tried to found such, but without success. Probably you know where it is..

ReverseEMF:
If the noise has a spectral bias enough different from the target sound range, you might be able to filter it out.For instance, if the noise has, mostly, a frequency component lower than any of the sounds you plan to trigger on, then a High Pass filter might do the trick.

analogRead() gives value. It is all. No clue how to differentiate noise from sound. Probably you might point mr to some good example

wolframore:
Looking at the preamp with those Max chip they’re not bad. Maybe it’s an impedance issue.

Yes, I had considered, this and now even had ordered one. Problem that i see- output is not adjusted to be an input for arduino. Some additional circuit required, but I am weak in electronics..

DVDdoug:
I'd suggest you listen to the noise to identify/diagnose it.

You can connect it to line-in on a soundcard and record it, or connect it to your stereo system, or plug-into regular powered/amplified computer speakers.

Either way, put a capacitor (0.1uF or more) in series with the microphone-board output to block the DC bias.

The mic input on a laptop (or soundcard) is probably too sensitive and the mic preamp built-into a laptop/soundcard will usually add some noise of it's own but it might work if the signal is very weak.

If you plug-into your stereo system be careful of acoustic feedback.

Acoustic/ambient noise from the room is most-likely the worst noise source. If that's the problem you'll have to make the room quieter or make the sound louder (to increase the signal-to-noise ratio).

Power supply noise can be power line hum, or high-pitch "mosquito" noise from a switching supply or other digital switching/clock signals leaking-back into the power supply (or through ground loops).

Preamp noise from the op-amp is white noise hiss and it is often audible, but it's usually not as bad as the other possible noise sources, and not often noticeable above the acoustic noise picked-up by the microphone.

No "room noise". microphone is located under coffee table. No intend to replace it with direct input from external devices, no whistles, claps...planned. I am just listen "room". Noise, per my understanding, is cpmming from power sypply, even in a case if microphone circuit is powered by batteries, even in a case if wires. circuits.. are shielded. This, I guess, depends on circuit quality..
My goal is not to make one more table style experimental combination on breadboard,, my goal is to have coffee table with LED lights (and I had created such, but without sound detection so far.)

ard_newbie:
To suppress most of the noise, I would select the fully differential mode between e.g AD0 and AD1. Sample AD0 (your input signal) with AD1 connected to Gnd. Select a gain of 2, oversample and average.

I am afraid, I cannot recognise these keywords, Could you explain it wider or point me to some explanations?