Изменение битрейта аудиозаписи и взятие сэмплов из аудио в arduino
Я ищу, чтобы сделать модуль обнаружения крика ребенка, который является частью более крупного проекта, т. Е. системы мониторинга ребенка на основе IOT. Используя AI, у меня есть набор данных (плач ребенка и не плач) для обучения модели с использованием бинарной классификации через логистическую регрессию. Проблема в том, что набор данных имеет частоту дискретизации 10 Кбит / с. и arduino записывает аудио на 192kbps, вероятно. поэтому мне нужно, чтобы записанный arduino звук был 10 Кбит / с. во-вторых, мне нужно 100 весов или образцов из записанного аудио arduino. итак, скажем, звук составляет 5 секунд, поэтому мне нужен образец через каждые 50 мс, чтобы общее количество образцов было 100. основная проблема заключается в том, что я не знаю, как взять образцы из записываемого аудио или предварительно записанного аудио с помощью arduino. Затем 100 образцов будут умножены на 100 образцов из обученной модели, а затем добавлены, а затем сигмоидная функция будет использоваться, чтобы в конце мы могли знать, плачет ли ребенок или нет. Все развертывание модели будет сделано в arduino. Любая помощь, касающаяся взятия образцов или битрейта, была бы очень признательна. Заранее спасибо! :)
1 ответ
Во-первых, я почти уверен, что ваша идея использовать дискретные образцы АЦП в качестве предикторов для вашей модели безнадежно наивна. Как пояснил Майенко, нельзя ожидать ничего значимого от записи звука , взятого со скоростью 20 проб в секунду. Возможно, вам больше повезет с использованием спектральных интенсивностей в качестве предикторов. Я предлагаю вам начать с частотно–временного анализа ваших тренировочных данных, просто чтобы получить некоторые идеи о том, какие предикторы, возможно, стоит попробовать. В любом случае, я настоятельно рекомендую вам потренироваться и протестировать свою модель на компьютере, прежде чем передавать какой-либо код в Arduino.
Тем не менее, выборка сигнала на частоте 20 Гц довольно проста:
50 мс (или 50 000 мкс для большей точности), возьмите один образец,
повторите. Единственное предостережение заключается в том, что вы должны использовать millis()
или micros ().
вместо delay()
или delayMicroseconds()
, в противном
случае период выборки будет больше, чем ожидалось, из-за времени, необходимого для
выполнения кода.
Применение сигмовидной функции только для сравнения результата с 0,5 делает мало смысла. Вы знаете, что сигмоида больше 0,5 только тогда, когда ее аргумент положителен, поэтому вы можете тривиально сэкономить дорогостоящие операции с плавающей точкой.
Вот примерная реализация (мое понимание) идеи, которую вы предлагаете:
const uint8_t mic_pin = A0;
const size_t sample_count = 100;
const uint32_t sample_period = 50000; // 50,000 us = 50 ms
const int weights[sample_count] = { 12, -42, 23 /* etc... */};
void setup() {
Serial.begin(9600);
}
void loop() {
// Записать образцы.
int samples[sample_count];
uint32_t last_sample = micros();
for (size_t i = 0; i < sample_count; i++) {
while (micros() - last_sample < sample_period) { /* wait */ }
samples[i] = analogRead(mic_pin);
last_sample += sample_period;
}
// Вычислите взвешенную сумму.
long sum = 0;
for (size_t i = 0; i < sample_count; i++) {
sum += (long) samples[i] * weights[i];
}
// Предсказать.
if (sum >= 0) {
Serial.println("The baby is crying!");
}
}
конечно, я изучаю больше методов машинного обучения, большой недостаток остальных моделей заключается в том, что они не могут быть развернуты на arduino. И да, я изучал спектрограммы, они гораздо более ценны. большое спасибо за предоставленную вами информацию и код :), @Muhammad Waqar Anwar
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
- Как подключить ардуино к разъему для наушников?
- Подключить Arduino к телефонной линии?
- DFPlayer Noise: исследован, испытан и бип бип бип бип
- Генерация белого шума звуковой частоты с помощью Arduino Mini Pro
- Транзисторный усилитель для управления динамиком с использованием ШИМ Arduino
- Передавать аудио с Arduino на устройство по Wi-Fi
- Ардуино - Воспроизведение файлов WAV с помощью зуммера
"kbps” означает _kilobits per second_. Это единица измерения _bit rate, а не _sample rate. Если вам нужна помощь для управления частотой дискретизации Arduino, скажите нам, какая частота дискретизации вам нужна и какую модель Arduino вы используете., @Edgar Bonet
Какой arduino вы используете, который может работать со скоростью 192ksp?, @Majenko
С чем именно вам нужна помощь? У вас уже есть код, который пробует аудио и отправляет его в остальную часть вашей установки? Или вы начинаете с нуля в этой части?, @chrisl
@EdgarBonet то, что мне нужно в конце, - это качество записи arduino 10 Кбит / с или преобразование любого кбит / с в 10 Кбит / с. я использую arduino mega и node mcu. наконец-то будет работать над любым из них. Спасибо, @Muhammad Waqar Anwar
@Majenko я слышал, что качество записи arduino составляет 192 Кбит / с, я еще не тестировал его. Спасибо, @Muhammad Waqar Anwar
Где вы слышали такую чушь?, @Majenko
@chrisl в конце дня мне нужно 100 сэмплов из записанного аудио на arduino. это может быть реальное время, что означает, что arduino просто записывает 100 выборочных значений, а не аудио, или это может быть постобработка, которая означает, что сначала arduino записывает аудио, а затем извлекает 100 выборок из этого аудио. в любом случае мне нужно 100 образцов. так что затем на 100 образцах можно будет сделать некоторые вычисления, чтобы, наконец, развернуть модель на arduino, чтобы проверить, плачет ребенок или нет. Спасибо, @Muhammad Waqar Anwar
@Majenko любезный гид, я довольно новичок в arduino, и это мой последний проект в университете. Спасибо, @Muhammad Waqar Anwar
Ну, во-первых, Arduino (как и в большинстве базовых 8-битных фирменных плат Arduino, самый распространенный тип) *действительно* не делает аудио. Может быть, очень низкое качество, короткие, царапающие звуки, но не правильный звук. Во-вторых, абсолютная максимальная частота дискретизации одного канала АЦП составляет 9615 Гц., @Majenko
В-третьих, большинство ардуино имеют такой крошечный объем памяти, что вы никогда не сможете получить многосекундную выборку, чтобы вписаться в нее., @Majenko
@Majenko я путаюсь в Гц и кбит / с. во-вторых, я знаю, что у arduino не так много памяти, поэтому я буду использовать вместе с ним устройство чтения карт памяти. я видел учебники о том, как записывать звук с помощью arduino на карту памяти. Более того, я подумал, что если я напрямую подключу микрофон к A0 и получу из него аналоговый сигнал через каждые 50 мс. это составит 100 образцов, но я сомневаюсь, что это сработает. Спасибо, @Muhammad Waqar Anwar
1 Гц-это один образец в секунду. 1000 Гц-это 1 кГц, а 1000 образцов в секунду-1 кгц. Один образец состоит из нескольких битов в зависимости от разрешения. BPS - это количество битов в секунду, или количество битов на выборку, умноженное на количество выборок в секунду., @Majenko
Чего вы на самом деле пытаетесь достичь? Не говорите нам, что вы думаете, что вы хотите сделать, но скажите нам, чего вы хотите достичь в качестве конечного результата., @Majenko
Если вы берете 1 образец каждые 50 мс, это частота дискретизации 20 кадров в секунду. Согласно теореме Найквиста-Шеннона, это означает, что максимальная обнаруживаемая частота составляет 10 Гц. Я не вижу в этом никакой пользы, если только ты не синий кит., @Majenko
@Majenko спасибо за ценную информацию. на самом деле я пытаюсь обучить модель распознаванию детского плача. а потом развернуть эту модель на arduino. поскольку многие алгоритмы машинного обучения требуют больших вычислительных мощностей для развертывания, но метод логистической регрессии очень легок в развертывании. в этом методе мы берем 100 выборок из записанного звука на arduino и 100 весов из обученной модели из набора данных. затем мы умножаем эти два числа и затем складываем их. а затем примените сигмовидную функцию. затем дайте порог 0,5. Результат будет числовым значением и скажет, плачет ли ребенок, @Muhammad Waqar Anwar
@Majenko да, это будет 20SPS, и у нас будет 100 сэмплов для 5-секундного аудио, @Muhammad Waqar Anwar
@Majenko, Baby whale doo doo doo doo, baby whale doo... вот, теперь он застрял в твоей *твоей* голове. Спасибо за это., @timemage