Вступление: почему шум убивает разборчивость
Представьте: вы проводите совещание в Zoom, а на фоне работает кондиционер и стучит клавиатура. Стандартный шумоподавитель обрезает и голос, создавая металлический оттенок. В результате участники жалуются на усталость, а автоматическая расшифровка (STT) выдает 30% ошибок. Мы сталкивались с этим десятки раз: от VoIP-операторов с тысячами одновременных звонков до подкастеров, которые хотят сэкономить на студии. AI-шумоподавление — нейросетевые решения, такие как RNNoise и DeepFilterNet, — решают проблему радикально: чистый звук без артефактов. Наш опыт — 5+ лет в аудиообработке, более 50 успешных интеграций для разных сценариев.
Почему спектральное вычитание создает «музыкальный шум»?
Традиционные методы, например спектральное вычитание (noisereduce), основаны на вычитании оценки шумовой составляющей из сигнала. Но при низком SNR (<10 дБ) они начинают «вырезать» речевые гармоники, оставляя тонкие частотные искажения — тот самый «музыкальный шум». В одном проекте мы сравнивали noisereduce с нейросетью: PESQ у noisereduce составил 2.8, а у RNNoise — 3.2. Разница ощутима на слух, а для STT WER снижается на 15-25%. RNNoise лучше спектрального вычитания в 1.5 раза по PESQ. По данным исследований, опубликованных в Mozilla Research, RNNoise достигает PESQ 3.2 при задержке менее 10 мс.
Как AI-модели превосходят классику: RNNoise и DeepFilterNet
DeepFilterNet использует глубокие фильтры и выдает PESQ >3.8, но требует GPU. Обе модели обучаются на парах «чистая речь + шум» и адаптируются к конкретному профилю шума при fine-tuning. RNNoise — рекуррентная сеть от Mozilla — анализирует спектр в реальном времени с задержкой менее 10 мс.
noisereduce
Библиотека на основе спектрального вычитания с адаптивным профилем — проста в использовании, не требует GPU.
import noisereduce as nr
import soundfile as sf
def denoise(input_path: str, output_path: str) -> None:
audio, sr = sf.read(input_path)
noise_sample = audio[:int(sr * 0.5)]
reduced = nr.reduce_noise(y=audio, sr=sr, y_noise=noise_sample,
prop_decrease=0.75, stationary=False)
sf.write(output_path, reduced, sr)
RNNoise
Легковесная рекуррентная сеть, работает в реальном времени. Интегрируется через FFmpeg. RNNoise — open-source проект, который можно встроить в FreeSWITCH или Asterisk.
import subprocess
def rnnoise_denoise(input_wav: str, output_wav: str) -> None:
subprocess.run([
"ffmpeg", "-i", input_wav,
"-af", "arnndn=m=/usr/share/rnnoise/models/bd.rnnn",
output_wav
], check=True)
DeepFilterNet
SOTA-модель для студийного качества. Требует GPU, но дает PESQ >3.8. Поддерживает ONNX-экспорт для инференса на Triton.
from df import enhance, init_df
model, state, _ = init_df()
def enhance(audio: np.ndarray, sr: int) -> np.ndarray:
return enhance(model, state, audio)
Какие результаты дают модели?
DeepFilterNet превосходит noisereduce на 0.8 балла PESQ. Для реального кейса с VoIP-оператором мы замерили:
| Модель | PESQ | Задержка | GPU |
|---|---|---|---|
| noisereduce | 2.8 | offline | нет |
| RNNoise | 3.2 | <10 мс | нет |
| DeepFilterNet | 3.8 | ~20 мс | T4+ |
| Сценарий | Модель | Улучшение PESQ |
|---|---|---|
| VoIP | RNNoise | +0.4 |
| Подкаст offline | DeepFilterNet | +0.8 |
| STT-pipeline | DeepFilterNet | +0.8, WER -30% |
При 1000 одновременных звонков RNNoise держит p99 latency <15 мс, DeepFilterNet на GPU T4 — <30 мс. Экономия на ручной верификации в одном проекте составила до нескольких тысяч долларов в месяц.
Как интегрировать RNNoise в WebRTC пайплайн?
RNNoise можно встроить в WebRTC на серверной стороне, например, с использованием FreeSWITCH и mod_rnnoise. Мы разворачивали такое решение для оператора: 500 одновременных звонков, задержка 5 мс, снижение WER с 28% до 14%. Экономия на ручной верификации достигла тысяч долларов ежемесячно. Сравнение с классическим AEC: RNNoise уменьшает WER в 2 раза. Для высоконагруженных систем экономия на операционных расходах может быть значительной.
Для RNNoise достаточно CPU (одно ядро на поток). DeepFilterNet требует GPU (NVIDIA T4 или выше) и CUDA 11+. Рекомендуем контейнеризацию через Docker для простоты развертывания.
Процесс работы
- Анализ шумового профиля — запись 10 секунд аудио, измерение SNR и спектра. Определяем тип шума: стационарный (гул) или нестационарный (трафик).
- Выбор модели — на основе требований к latency и качеству. Для real-time — RNNoise или DeepFilterNet (если есть GPU).
- Интеграция — через API, Docker-контейнер, FFmpeg-фильтр или модуль FreeSWITCH.
- Нагрузочное тестирование — p99 latency, PESQ, STOI при 1000 потоков.
- Деплой — контейнеризация, мониторинг метрик (Grafana + Prometheus).
Сроки: от 3 до 10 рабочих дней. Стоимость рассчитывается индивидуально — зависит от сложности пайплайна и количества моделей.
Что входит в результат
- Оптимизированный инференс модели (ONNX, TensorRT) под вашу архитектуру
- Документация по интеграции и эксплуатации
- Нагрузочный отчет с метриками
- Обучение команды (2 часа вебинара)
- 3 месяца технической поддержки
Мы гарантируем улучшение PESQ минимум на 0.5 балла и снижение WER на 15-40%. Оцените ваш сценарий — свяжитесь с нами для предварительного анализа. Получите чистый звук без искажений. Закажите пилотный проект на ваших данных. Получите консультацию для вашего проекта.







