Google & Signal
Привет, копаюсь тут, как улучшить качество голосовых вызовов во время грозы с помощью продвинутой обработки сигналов. Может, у тебя есть какие-то идеи, как оптимизировать это для работы в реальном времени?
Конечно, главное – чистый сигнал с самого начала, сразу после микрофона. Начни с адаптивного фильтра с минимальной задержкой, который будет отслеживать импульсный отклик канала в реальном времени – это поможет убрать эхо и многолучевое распространение. Добавь к нему легкий шумовой гейт, работающий по принципу спектрального взвешивания, чтобы подавить широкий спектр шумов от грозы; нужна быстрая реакция, чтобы не создавать задержку. Используй надёжную схему модуляции, например, OFDM с перераспределением поднесущих – она устойчива к глубоким затуханиям и позволяет перераспределять мощность на поднесущие, которые работают нормально. И, наконец, реализу простую схему быстрой повторной передачи потерянных кадров – снижение задержки критически важно, поэтому время восстановления не должно превышать 20 миллисекунд. С этими шагами ты заметишь ощутимое улучшение чёткости, при этом сохранится работа в реальном времени.
Звучит убедительно – адаптивные фильтры и спектральное взвешивание – это классика. Интересно, как перераспределение поднесущих OFDM повлияет на обычные ограничения мобильной полосы пропускания? И вообще, какие у тебя мысли, как избежать блокировки конвейера из-за повторной передачи пакетов?
ОФДМ может поместиться в диапазон LTE шириной 10 МГц, или даже в 5 МГц для 5G NR, если поддерживать расстояние между поднесущими на уровне 15 или 30 кГц. Просто уменьши количество активных поднесущих, чтобы они соответствовали доступному спектру, и используй адаптивное кодирование для оставшихся. Так ты не тратишь полосу пропускания и при этом сохраняешь отказоустойчивость, присущую ОФДМ.
Для повторной передачи пакетов – сделай это максимально легко: используй схему подтверждения с раздвижным окном и ограничь размер окна несколькими пакетами. Забудь про логику "go-back-N" и переходи на выборочный повтор. Так конвейер будет работать быстрее, потому что пересылаются только действительно потерянные пакеты, и это можно сделать в отдельном потоке, чтобы аудиопоток не прерывался. Время – критически важно: стремись к окну повторной передачи 10–15 мс, чтобы задержка оставалась ниже порогового значения в 20 мс для реального времени.
Здорово, так мы сохраняем узкий "спектральный отпечаток", но при этом используем надёжность OFDM. Селективное повторение с окном в три пакета, кажется, вполне реально – главное, чтобы подтверждения (ACKs) шли вместе с восходящим каналом, чтобы не добавлять лишние пересылки. Окно в 10–15 миллисекунд – отличный вариант, кодеку будет комфортно, и мы не уйдём в джиттер. Что-нибудь ещё доводишь?
Погоди, ещё пара правок: добавь детектор активности голоса, чтобы можно было отключать шумоподавитель, когда тишина – так меньше ложных срабатываний во время грозы. И подумай о компактном фильтре подавления помех, который будет искать конкретные импульсы от молний. Высокочастотный фильтр с вырезом на частоте сети может немного снизить шум. И, напоследок, оставь небольшой буфер для кодека, чтобы можно было переключиться на режим более высокого порядка, если канал станет лучше, но не превышай 20 миллисекунд запаса.
Звучит как изощрённый план – VAD, чтобы заглушить защиту, прорез для импульсов молнии и гибкий буфер кодека. Только убедись, что прорез случайно не обрезает высокочастотные гармоники речи; мягкая, адаптивная глубина будет безопаснее. В целом, здорово!