Как ответить
Для удаления нестационарных шумов чаще всего использую подходы на основе глубокого обучения, потому что классический спектральный субтракшн даёт сбои на быстроменяющихся помехах. Основная идея — обучить нейросеть восстанавливать коротковременную спектрограмму (STFT) чистого сигнала по зашумлённой. Я обычно работаю с архитектурой типа CRNN (convolutional + recurrent layers) или более современной DCCRN, где и кодировщик, и декодировщик — сверточные, а между ними двунаправленный LSTM. Вход — комплексная STFT (или magnitude + phase), выход — комплексная маска (cRM), которая умножается на входный STFT.
Ключевая проблема нестационарных шумов — они занимают те же частоты и время, что и речь, поэтому сеть должна учитывать контекст. Потому я добавляю аугментацию: беру чистые записи речи из LibriSpeech, смешиваю с записями бытового шума (Freesound, Audioset) с разными SNR. Чтобы модель не сглаживала быстрые шумы (например, стук клавиш), использую loss не только по magnitude (L1), но и по комплексному спектру (SI-SNR, SISDR).
На практике для offline-обработки ставлю полную длину аудио (до 30 секунд) — LSTM/BiLSTM хорошо держит контекст. Для low-latency инференса перехожу на causal свертки и GRU, ограничивая лаг до 10 мс. После получения маски применяю синтез Griffin-Lim или прямой ISTFT, если сохранял фазу.
Отдельно важно контролировать музыкальный шум (артефакты от маскирования). Я борюсь двумя способами: добавляю adversarial loss (циклический GAN для гладкости) или использую ограничение на max изменение маски между соседними кадрами. Но в большинстве продакшен-систем, где я работал, хватает CRNN с L1 loss и dropout 0.3.
В итоге, для нестационарных шумов 2024 года стандарт — обученные модели на смесях с аугментацией, работающие во временно-частотной области. Разница со стационарными — в выборе архитектуры (рекуррентные + контекст) и аугментации, имитирующей нестационарность.