STM32 Audio Analyzer
STM32 Audio Analyzer — система реального времени для измерения уровня звука и доминантной частоты на базе STM32F103C8T6 (Blue Pill) с веб‑дашбордом и хранением истории в TimescaleDB.
Микроконтроллер оцифровывает сигнал с MAX4466, считает RMS (dBFS) и FFT (512 точек), отсылает метрики по USB CDC; на ПК коллектор пишет данные в PostgreSQL/TimescaleDB, FastAPI отдаёт REST/WS, React‑фронтенд показывает текущие значения и историю.
Архитектура
-
- STM32F103C8T6, FreeRTOS, TinyUSB, CMSIS‑DSP.
- ADC1 + DMA (circular, double‑buffer 2×512) с триггером от TIM3, частота дискретизации 22.05 кГц.
- Обработка: удаление DC, RMS в dBFS, Hann‑окно, RFFT 512, поиск пика 100–8000 Гц.
- Передача каждые 100 мс пакетом 12 байт по USB CDC.
-
- Читает бинарный протокол с /dev/ttyACM0, ресинхронизация по SOF=0xAA.
- Проверка CRC‑8/ATM, диапазонов, подсчёт статистики ошибок.
- Запись в TimescaleDB (
audio_data), параллельно пушит JSON по WebSocket (ws://…/ws/live).
-
- REST
/api/v1/audio/latest|range|export/csv,/api/v1/stats/summary,/api/v1/events/loud. - База:
audio_data+ непрерывный агрегатaudio_data_1min(avg/max/min/доминирующая частота, доля тишины).
- REST
-
- Live‑дашборд: вертикальный аудио‑метр, peak‑hold за 3 секунды, история частоты, текущая нота.
- Источник данных — WebSocket
VITE_WS_URL, REST для исторических запросов при необходимости.
Структура репозитория
.
├── README.md
├── docker-compose.yml
├── db/
│ └── init.sql # схема TimescaleDB + агрегаты/retention
├── firmware/ # прошивка STM32 (FreeRTOS + TinyUSB + CMSIS-DSP)
└── services/
├── collector/ # serial→WS→DB
├── api/ # FastAPI REST + DB
└── frontend/ # React/Vite дашборд
Быстрый старт
git clone --recurse-submodules https://git.yolgins.ru/Iwwww/sound-analyze.git
cp .example.env .env
docker compose up --build
- БД: TimescaleDB на
localhost:5432(DB_NAME=audio_analyzerпо умолчанию). - API:
http://localhost:8000/api/v1. - WebSocket коллектора:
ws://localhost:8001/ws/live. - Frontend:
http://localhost:3000(dev‑режим Vite).
Description
Languages
Python
34.1%
TypeScript
26.4%
C
26.2%
Assembly
5.8%
CSS
2.9%
Other
4.6%