arduino uno+усилитель на ОУ+электретный микрофон.

GrigoriyBaranov
Offline
Зарегистрирован: 05.11.2012

Вопрос в следующем: кто-нибудь пробовал нечто подобное? Собрать схему усилителя на ОУ, взять электретный микрофон и считывать данные сигналы по аналоговому сигналу?

Какова вообще чувствительность микрофона относительно внешнего воздействия?

Собрал значит схемку, написал программку, но трабл, считывает малое кол-во значений. Переписал часть кода на asm, стало хорошо. Но проблема не в этом, значения все время пляшут не зависимо от того тишина вокруг, или шум, кроме этого микрофон нормально не реагирует на голос, хотя находишься в 15 см от него. Если дуть в микрофон все нормально, значения есть, но запредельные, собственно и понятно. 

Кто-нибудь пробовал что-то подобное собрать? Задача распознать пару речевых команд для дальнейшего применения? В чем может быть особенность сей странности? Много смотрел в интернете относительно микрофона и ардуино, но все что предложенно толком не работает, начиная с банальных хлопков на RC усилителе и микрофоном с обратной связью. Может кто собирал что-то наподобие, что требуется мне?Какие схемы усиления сигнала использовали?Какой микрофон брали?

Дурачёк
Дурачёк аватар
Offline
Зарегистрирован: 25.11.2012

Ой, что бы распознать пару речевых команд, нужно сначала понять что такое звук вообще и речь в частности.

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

Если хочется поискать какие-то частотные компоненты, то тот-же микрофон шунтируем ёмкостью, на которой будем мерить напряжение. Тупо, грубо, но для АЦП дурины хватит.

Zapek@n
Offline
Зарегистрирован: 16.02.2012

Для распонавания речи есть готовый модуль. Правда я сам не пробовал

http://domit.co.uk/ru/arduino-shields/arduino-veear-easyvr-shield.html

GrigoriyBaranov
Offline
Зарегистрирован: 05.11.2012

Дурачёк пишет:

Ой, что бы распознать пару речевых команд, нужно сначала понять что такое звук вообще и речь в частности.

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

Если хочется поискать какие-то частотные компоненты, то тот-же микрофон шунтируем ёмкостью, на которой будем мерить напряжение. Тупо, грубо, но для АЦП дурины хватит.

 

Понятие о физике звука имею. Схема рабочая, проверялась на осцилографе. Вопрос: что значит мы измеряем громкость? Мы считываем аналоговые значения по напряжению со схемы усилителя, подключенного к микрофону. Значение АЦП по опорному напряжению 5v это не есть громкость. А вот про шунт хочу узнать поподробнее?Что и как, и сколько? Вообще трудности возникают в следующих местах:
1)Время последовательного считывание сигналов(решается чистым C или ASM или гибридом);
2)Опорное напряжение(не многовато ли 5v? есть вариант 1.1v штатных, но тогда вопрос о том как смещать напряжение с усилителя);
3)Потенциальное влияние конкретных микрофонов, усилителей, схем;

Алгоритмы для распознавания есть, даже с условием обработки данных с микрофона, возможно разбирать значения в реальном времени у arduino и микроконтроллера есть!

GrigoriyBaranov
Offline
Зарегистрирован: 05.11.2012

Zapek@n пишет:

Для распонавания речи есть готовый модуль. Правда я сам не пробовал

http://domit.co.uk/ru/arduino-shields/arduino-veear-easyvr-shield.html

Модули категорически не подходят! Нужна именно специфика подхода. Чтобы понять где узкие места в распознавании речи с микроконтроллеров и АЦП. Сейчас уже узкие места выявляются понемногу. Вот ищю подходы избавления от них. Нужно создать некоторое среднеуниверсальное устройство и протестировать различные алгоритмы обработки, arduino как наиболее успешный и был выбран по этому критерию. + неплохая поддержка сообщества и энтузиастов.

Дурачёк
Дурачёк аватар
Offline
Зарегистрирован: 25.11.2012

Ну, про громкость, я в смысле про огибающую, звукового сигналла, но не суть важно, на одной ей, распозновалку не сваришь, хотя...

Вот что у вас происходит сейчас, на вход АЦП, поступает сигнал спектр которого простирается далеко за пределы частоты выборки АЦП, вспоминаем теорему Найквеста\Котельникова :-)

Ещё один момент связан с АЦП, я право не знаю что представляет из себя дуринровская обёртка, и на сколько её можно улучшить, но выборка должна производиться через равные промежутки времени инче спектр этой не стабильности так-же наложится на ваши измерения превращая их в хаос. И здесь сама природа шим даёт о себе знать, ведь время измерения не детерминированно и зависит от измеряемого сигнала. Вы уверены что ваша программа обеспечивает стабильность частоты дискретизации.

Ну и в любом случае, раз уж вы истользовали ОУ, тем лучше, охватите его отрицательно обратной связью через конденсатор, превратив в фильтр высоких частот, дабы отрезать частоты выше частоты выборки. А лучше ещё ниже, ибо высокодобротный фильтр будет "звенеть" а вам это тоже не к стати.

Про условия, которые есть у меги, я бы не был столь уверен, у вас одно сэмплирование скольно крови пьёт, и к стати с какой частотой сэмплируем? Уж если хочется по упражняться в математике, то личто я бы смотрел в сторону дельта модуляции, как с точки зрения оцифровки, так и с точки зрения оптимизации последующего анализа.

GrigoriyBaranov
Offline
Зарегистрирован: 05.11.2012

Дурачёк пишет:

Про условия, которые есть у меги, я бы не был столь уверен, у вас одно сэмплирование скольно крови пьёт, и к стати с какой частотой сэмплируем? Уж если хочется по упражняться в математике, то личто я бы смотрел в сторону дельта модуляции, как с точки зрения оцифровки, так и с точки зрения оптимизации последующего анализа.

Частота дискретизации порядка 7-8 кГц теоритически достаточно для речи, все наиболее хорошие для нас нужно ловить на 1000-7000 Гц . Уже подумываю об создании полноценной теор.модели распознавания,но пока существует в виде нескольких прогонках тестов на Си. Обработка значений будет довольно ресурсоемкой задачей, но по мне так вполне влезает в силы arduino.

GrigoriyBaranov
Offline
Зарегистрирован: 05.11.2012

Микрофон:ECM-66E

Рабочее напряжение, В

1.5…10
Диапазон частот, Гц 50…13000
Шум, дБA 40
Чувствительность, мВ/Па 72

ОУ:OP291

На данный момент без низкоуровнего программирования: считываются порядка 8000 значений за 1 с. По мне так вполне достаточно, можно выжить максимум, но у нас еще должна происходить обработка, и возможно в реальном времени. Рост числа данных приводит к росту сложности вычисления, и времени на обработку.

Дурачёк
Дурачёк аватар
Offline
Зарегистрирован: 25.11.2012

8 килогерц считываем, значит фильтр высоких частот должен срезать всё что выше 4 килогерц, это в теории, а на практике расчитывайте на 3, а то знаете-ли шипящие...

Но, повторюсь, особенно если вы без "низкоуровневого программирования", потрудитесь убедиться что интервал между выборками одинаковый и задержку на скорость ЦАПа вы с компенсировали... У ардуино время считывания аналогового входа, зависит от измеряемого значения.

duha
Offline
Зарегистрирован: 22.11.2012

для распознания речевых команд нужно всего 10 герц, и проще работать с выпремленными и почти стабилизированными токами (как стрелочный индикатор уровня звука).

В речевых командах главное длительность и количество пиков и спадов.

8 кгц, это уже можно для распознания самой речи.