I'm building several voice-controlled embedded systems based on a RPi 3B. When complete, it's embedded in an old phone. Details here.
I'm using a generic USB audio dongle to interface to speakers and microphone. When I test using an old computer headset, it performs reasonably well, but when I use the phone handset the speech recognition degrades significantly. I think this is due to the extra noise I'm getting using the phone's original microphone. The headset mic seems to have an impedance of around 500-800 ohms, whereas the old carbon mic in the phone has an impedance of around 5Kohm.
It would seem that I have two options:
A) Build some sort of impedance matching circuit, maybe using a simple transistor circuit. I'm a little out of my depth here.
2) Replace the original microphone with one that has a better impedance match. Would this electret mic or this one be a good candidate?
Thanks for any advice,
-- Mitch
Microphone impedance matching
Moderators: adafruit_support_bill, adafruit
Please be positive and constructive with your questions and comments.
- pneumatic
- Posts: 186
- Joined: Sun Jul 26, 2009 3:59 pm
Microphone impedance matching
Last edited by pneumatic on Fri Apr 05, 2019 5:54 pm, edited 1 time in total.
- pneumatic
- Posts: 186
- Joined: Sun Jul 26, 2009 3:59 pm
Re: Microphone impedance matching
I did a little research, and it seems that with most digital inputs impedance matching isn't really necessary, so I came up with another theory, that the "noise" was coming from the unconnected side of a stereo mic chip. This might actually be what's happening based on a test I just ran. I'm using a pair of these to hook up the handset to the audio dongle, and I'd hooked up the mic across tip and sleeve leaving the ring NC, thinking that would mimic a mono plug. I might have been wrong.
First I tried shorting the ring to the sleeve, and that yielded no audio recorded at all, so then I tried connecting ring to tip, and that seems to have improved speech recognition, though when I play back the recording, there's still a bit of static on the line and recognition still isn't where I'd like it to be. Any other tips on reducing audio noise?
Thanks,
-- Mitch
First I tried shorting the ring to the sleeve, and that yielded no audio recorded at all, so then I tried connecting ring to tip, and that seems to have improved speech recognition, though when I play back the recording, there's still a bit of static on the line and recognition still isn't where I'd like it to be. Any other tips on reducing audio noise?
Thanks,
-- Mitch
- pneumatic
- Posts: 186
- Joined: Sun Jul 26, 2009 3:59 pm
Re: Microphone impedance matching
On third thought, maybe it was a lousy soldering job that was causing so much noise. Who knows. It's somewhat better know that I've redone one leg of the soldering job.
- adafruit_support_mike
- Posts: 67901
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Microphone impedance matching
If you just need human speech, you can probably eliminate a lot of noise with a simple filter. Human speech usually falls between about 300Hz and 3kHz, which is fairly low in the audio spectrum.
If your mic's output impedance is in the 500-800 Ohm range, connecting a 100nF capacitor between its output and GND should leave most of the voice signal intact while filtering out the sudden changes that make up high fequency noise.
Reducing the frequency range of the input should probably make life easier for the voice recognition software. The FFT components that remain will be better defined.
If your mic's output impedance is in the 500-800 Ohm range, connecting a 100nF capacitor between its output and GND should leave most of the voice signal intact while filtering out the sudden changes that make up high fequency noise.
Reducing the frequency range of the input should probably make life easier for the voice recognition software. The FFT components that remain will be better defined.
- pneumatic
- Posts: 186
- Joined: Sun Jul 26, 2009 3:59 pm
Re: Microphone impedance matching
The impedance of the mic is 5K, so I guess I should use a 10nF instead, if I remember my capacitive reactance formula correctly.
Thanks for the tip!
Thanks for the tip!
- adafruit_support_mike
- Posts: 67901
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Microphone impedance matching
Yep.. F=1/(2piRC), and F can swap places with either R or C if you need to calculate the value of either component.
It's also handy to remember that a 1uF cap and a 1.5k resistor have a corner frequency of about 100Hz. It's fairly easy to scale those up and down on the back of an envelope.
It's also handy to remember that a 1uF cap and a 1.5k resistor have a corner frequency of about 100Hz. It's fairly easy to scale those up and down on the back of an envelope.
- pneumatic
- Posts: 186
- Joined: Sun Jul 26, 2009 3:59 pm
Re: Microphone impedance matching
Well, I tried with 10, 47 and 100 nF caps across the terminals, and the performance was if anything worse than without any caps. Back to the drawing board.
- adafruit_support_mike
- Posts: 67901
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Microphone impedance matching
If you want to replace the mic, the MAX9814 would be a good choice for general voice control:
https://www.adafruit.com/product/1713
It has automatic gain control, and will keep the output to the audio software at a more or less even level.
https://www.adafruit.com/product/1713
It has automatic gain control, and will keep the output to the audio software at a more or less even level.
Please be positive and constructive with your questions and comments.