STM32 Audio Analyzer

STM32 Audio Analyzer — система реального времени для измерения уровня звука и доминантной частоты на базе STM32F103C8T6 (Blue Pill) с веб‑дашбордом и хранением истории в TimescaleDB.

Микроконтроллер оцифровывает сигнал с MAX4466, считает RMS (dBFS) и FFT (512 точек), отсылает метрики по USB CDC; на ПК коллектор пишет данные в PostgreSQL/TimescaleDB, FastAPI отдаёт REST/WS, Reactфронтенд показывает текущие значения и историю.

Архитектура

  • MCU (firmware)

    • STM32F103C8T6, FreeRTOS, TinyUSB, CMSISDSP.
    • ADC1 + DMA (circular, doublebuffer 2×512) с триггером от TIM3, частота дискретизации 22.05 кГц.
    • Обработка: удаление DC, RMS в dBFS, Hannокно, RFFT 512, поиск пика 1008000 Гц.
    • Передача каждые 100 мс пакетом 12 байт по USB CDC.
  • Collector (Python)

    • Читает бинарный протокол с /dev/ttyACM0, ресинхронизация по SOF=0xAA.
    • Проверка CRC8/ATM, диапазонов, подсчёт статистики ошибок.
    • Запись в TimescaleDB (audio_data), параллельно пушит JSON по WebSocket (ws://…/ws/live).
  • API (FastAPI)

    • REST /api/v1/audio/latest|range|export/csv, /api/v1/stats/summary, /api/v1/events/loud.
    • База: audio_data + непрерывный агрегат audio_data_1min (avg/max/min/доминирующая частота, доля тишины).
  • Frontend (React)

    • Liveдашборд: вертикальный аудио‑метр, peakhold за 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 <repo>
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
Измерение уровня звука и доминантной частоты на базе STM32F103
Readme 210 KiB
Languages
Python 34.1%
TypeScript 26.4%
C 26.2%
Assembly 5.8%
CSS 2.9%
Other 4.6%