Сравнение сигнала двух микрофонов
- Войдите на сайт для отправки комментариев
Привет!
Господа Гуру, посоветуйте где я ошибаюсь?
Задача: взять сигнал от двух микрофонов (левого и правого), сравнить какой сильнее, по разнице высчитать угол поворота машинки и повернуть ее на этот угол в сторону более сильного звука.
Предусилители на транзисторе я спаял. Микрофоны подключаю на А1 и А2. При проверке каждого в отдельности (шкала из 6 светодиодов на D6-D12) все работает (светодиоды загораются в зависимости от уровня звука).
Подключаю оба микрофона и высчитываю угол (мик1/(мик1+мик2)*180). Подключаю машинку.
Машинка дергается как угорелая, иногда сваливается в безостановочное круговое вращение, и никак не хочет вертеться в сторону звука.
Подключил экранчик, вывел показатели сигнала с микрофонов. Когда тихо - топчутся в районе 185 оба, но если в какой-нить микрофон, например, подуть, то сигнал скачет в диапазоне 20 - 8000.
Подозреваю, что я не совсем понимаю структуру микрофонного сигнала, но куда копать не нашел. Объясните вкратце или ткните в литературу (только не в талмуды типа "обработка аудиосигнала", а в конкретные примеры)
Спасибо!
Я думаю что правильней будет сравнивать не по громкости , а по времени, какой микрофон быстрей получит сигнал
Я думаю что правильней будет сравнивать не по громкости , а по времени, какой микрофон быстрей получит сигнал
Так-то оно так, но только, по моим представлениям, микрофоны получают сигнал более-менее постоянно, и при таком способе надо как-то анализировать спектр и сравнивать время прихода пиков...
Вопрос не в этом. Вопрос в том, что делает микрофон с теми +5v которые на него подаются. Я думал, что уменьшает, пропорционально (логарифмически?) громкости звука, но похоже, что это не так...
Я думаю, с нуля Вам скетч никто не напишет - проверять не на чем.
Я думаю, с нуля Вам скетч никто не напишет - проверять не на чем.
Написать скетч - не проблема. Вот, например, кусок который вполне себе работает с одним микрофоном и шестью диодами:
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(); }Аналогичный кусок для второго микрофона. Добавляем машинку. А когда вводим строчку:
машинка отнюдь не вертится в сторону большего сигнала. Дергается в районе 90 градусов (фоновый шум) и периодически мечется в непредсказуемых направлениях на большие углы, вплоть до срыва во вращение...
Видимо, нужно написать куски кода, отвечающие за
1) Отсеивание слабого шума
2) Перевод высокочастотных колебаний от микрофона в понятия "громко-тихо", которыми уже можно было бы оперировать.
Во всем вышеизложенном опять же интересует не столько конкретный код, сколько физика процесса и матаппарат на конкретном примере (поскольку читать профильную литературу некогда и лень).