Сравнение сигнала двух микрофонов

Vannoo
Offline
Зарегистрирован: 07.03.2012

 Привет!

Господа Гуру, посоветуйте где я ошибаюсь?

Задача: взять сигнал от двух микрофонов (левого и правого), сравнить какой сильнее, по разнице высчитать угол поворота машинки и повернуть ее на этот угол в сторону более сильного звука.

Предусилители на транзисторе я спаял. Микрофоны подключаю на А1 и А2. При проверке каждого в отдельности (шкала из 6 светодиодов на D6-D12) все работает (светодиоды загораются в зависимости от уровня звука).

Подключаю оба микрофона и высчитываю угол (мик1/(мик1+мик2)*180). Подключаю машинку.

Машинка дергается как угорелая, иногда сваливается в безостановочное круговое вращение, и никак не хочет вертеться в сторону звука.

Подключил экранчик, вывел показатели сигнала с микрофонов. Когда тихо - топчутся в районе 185 оба, но если в какой-нить микрофон, например, подуть, то сигнал скачет в диапазоне 20 - 8000. 

Подозреваю, что я не совсем понимаю структуру микрофонного сигнала, но куда копать не нашел. Объясните вкратце или ткните в литературу (только не в талмуды типа "обработка аудиосигнала", а в конкретные примеры)

Спасибо!

carduino.ru
Offline
Зарегистрирован: 06.12.2011

 Я думаю что правильней будет сравнивать не по громкости , а по времени, какой микрофон быстрей получит сигнал

Vannoo
Offline
Зарегистрирован: 07.03.2012

carduino.ru пишет:

 Я думаю что правильней будет сравнивать не по громкости , а по времени, какой микрофон быстрей получит сигнал

Так-то оно так, но только, по моим представлениям, микрофоны получают сигнал более-менее постоянно, и при таком способе надо как-то анализировать спектр и сравнивать время прихода пиков...

Вопрос не в этом. Вопрос в том, что делает микрофон с теми +5v которые на него подаются. Я думал, что уменьшает, пропорционально (логарифмически?) громкости звука, но похоже, что это не так...

 

whoim
Offline
Зарегистрирован: 03.11.2011

 Я думаю, с нуля Вам скетч никто не напишет - проверять не на чем.

Vannoo
Offline
Зарегистрирован: 07.03.2012

whoim пишет:

 Я думаю, с нуля Вам скетч никто не напишет - проверять не на чем.

Написать скетч - не проблема. Вот, например, кусок который вполне себе работает с одним микрофоном и шестью диодами:

int sig = 0;
int mic = 1;
 
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void led() {
sig = analogRead(mic);
 
if (sig>285) {digitalWrite(2, HIGH);} else {digitalWrite(2, LOW);}
if (sig>300) {digitalWrite(3, HIGH);} else {digitalWrite(3, LOW);}
if (sig>315) {digitalWrite(4, HIGH);} else {digitalWrite(4, LOW);}
if (sig>330) {digitalWrite(5, HIGH);} else {digitalWrite(5, LOW);}
if (sig>345) {digitalWrite(6, HIGH);} else {digitalWrite(6, LOW);}
if (sig>360) {digitalWrite(7, HIGH);} else {digitalWrite(7, LOW);}
}
void loop() {
led();
}

Аналогичный кусок для второго микрофона. Добавляем машинку. А когда вводим строчку:

angle = 180*sigMicLeft/(sigMicLeft + sigMicRight)

машинка отнюдь не вертится в сторону большего сигнала. Дергается в районе 90 градусов (фоновый шум) и периодически мечется в непредсказуемых направлениях на большие углы, вплоть до срыва во вращение...

Видимо, нужно написать куски кода, отвечающие за 

1) Отсеивание слабого шума

2) Перевод высокочастотных колебаний от микрофона в понятия "громко-тихо", которыми уже можно было бы оперировать.

Во всем вышеизложенном опять же интересует не столько конкретный код, сколько физика процесса и матаппарат на конкретном примере (поскольку читать профильную литературу некогда и лень).