Оптимальный Спектрально-Временной анализ сигналов
Добавлено: 27 мар 2017, 18:25
Почему-то я не могу найти подходящей литературы по этому вопросу. Допустим, у нас имеется звуковой сигнал. Сложный, мало предсказуемый реальный сигнал записанный на микрофон. Необходимо разложить его на компоненты с максимальным разрешением как по частоте, так и по времени. Нужно одновременно выделить компонент на нужной частоте, и локализовать его во времени. Получив при этом максимально детальную спектрограмму. Сонограммы есть во многих аудио редакторах, но вот реализованы они плохо, т.к. используют оконное БПФ.
Теоретически, анализатор должен мгновенно реагировать на изменения в сигнале, постепенно уточняя частоту, если гармоника продолжает "звенеть". Т.е. на длинных сигналах получается высокое разрешение по частоте, а на коротких - по времени. При этом шаг сетки частот должен быть логарифмический, равномерно темперированный. Соответственно, разрешение по времени будет расти с частотой (переходной процесс постоянен относительно количества периодов колебаний на данной частоте), а разрешение по частоте будет постоянно относительно текущей полосы. Каждая полоса должна иметь АЧХ формы sin^2(0...180°) и на 50% перекрывать смежные полосы. Тогда сумма амплитуд всегда будет стабильна, на любой промежуточной частоте, что позволит легко синтезировать сигнал обратно. Существуют ли готовые реализации подобных фильтров? Сколько искал - везде попса вроде оконного ДПФ, которая имеет целый ряд недостатков, не позволяющих нормально обрабатывать сигнал.
Теперь о моём велосипеде:
Существуют ли готовые полосовые фильтры с АЧХ, которую можно описать функцией sin^2(0...180°)? Похожа на функцию Гаусса, но только похожа. Если использовать набор колебательных контуров, то как ни крути - АЧХ такого анализатора будет с пульсациями. Поэтому остаётся только построить КИХ фильтр с нужной АЧХ и ФЧХ. Т.к. ГВЗ должно быть минимальным - фазолинейный фильтр не годится, а как с помощью БПФ рассчитать импульсную характеристику фильтра с минимальным ГВЗ - я не знаю.
Теоретически, будь у меня такой вейвлет, я бы смог построить пачку необходимых фильтров, вычислить огибающие и фазы в каждой полосе, а затем пропустить огибающие через специальные компенсирующие задержку фильтры, чтоб увеличить разрешение по времени на коротких сигналах (на длинных эти фильтры перестают влиять, они лишь компенсируют постоянную времени переходного процесса полосового фильтра, размазывая спектр из-за влияния на соседних полосах). Затем, после спец. обработки, синтезировать сигнал обратно.
Мне необходимо локализовать источники звука в пространстве, и кодировать моно дорожку в сферической системе координат, используя модель специального микрофонного массива, с которого была произведена запись. Для этого необходим хороший спектрально-временной анализатор...
Мне нужно 120 полос, по 12 на октаву, всего 10 октав (20...20000Гц). Для ускорения алгоритма я собираюсь после каждой октавы производить децимацию сигнала, поэтому мне необходимо семейство только из 12-ти импульсных характеристик, перекрывающих одну октаву. Если я реализую такой анализ "в лоб", с помощью какого-нибудь БПФ - разрешение по времени будет просто катастрофически низким на СЧ-ВЧ, а разрешение по частоте - низким на СЧ-НЧ. Более того - я не могу разбивать сигнал на фреймы из-за оконной функции. Окно должно скользить вдоль сигнала, а это не мало вычислительных ресурсов, с которыми БПФ становится не таким уж и быстрым...
Теоретически, анализатор должен мгновенно реагировать на изменения в сигнале, постепенно уточняя частоту, если гармоника продолжает "звенеть". Т.е. на длинных сигналах получается высокое разрешение по частоте, а на коротких - по времени. При этом шаг сетки частот должен быть логарифмический, равномерно темперированный. Соответственно, разрешение по времени будет расти с частотой (переходной процесс постоянен относительно количества периодов колебаний на данной частоте), а разрешение по частоте будет постоянно относительно текущей полосы. Каждая полоса должна иметь АЧХ формы sin^2(0...180°) и на 50% перекрывать смежные полосы. Тогда сумма амплитуд всегда будет стабильна, на любой промежуточной частоте, что позволит легко синтезировать сигнал обратно. Существуют ли готовые реализации подобных фильтров? Сколько искал - везде попса вроде оконного ДПФ, которая имеет целый ряд недостатков, не позволяющих нормально обрабатывать сигнал.
Теперь о моём велосипеде:
Существуют ли готовые полосовые фильтры с АЧХ, которую можно описать функцией sin^2(0...180°)? Похожа на функцию Гаусса, но только похожа. Если использовать набор колебательных контуров, то как ни крути - АЧХ такого анализатора будет с пульсациями. Поэтому остаётся только построить КИХ фильтр с нужной АЧХ и ФЧХ. Т.к. ГВЗ должно быть минимальным - фазолинейный фильтр не годится, а как с помощью БПФ рассчитать импульсную характеристику фильтра с минимальным ГВЗ - я не знаю.
Теоретически, будь у меня такой вейвлет, я бы смог построить пачку необходимых фильтров, вычислить огибающие и фазы в каждой полосе, а затем пропустить огибающие через специальные компенсирующие задержку фильтры, чтоб увеличить разрешение по времени на коротких сигналах (на длинных эти фильтры перестают влиять, они лишь компенсируют постоянную времени переходного процесса полосового фильтра, размазывая спектр из-за влияния на соседних полосах). Затем, после спец. обработки, синтезировать сигнал обратно.
Мне необходимо локализовать источники звука в пространстве, и кодировать моно дорожку в сферической системе координат, используя модель специального микрофонного массива, с которого была произведена запись. Для этого необходим хороший спектрально-временной анализатор...
Мне нужно 120 полос, по 12 на октаву, всего 10 октав (20...20000Гц). Для ускорения алгоритма я собираюсь после каждой октавы производить децимацию сигнала, поэтому мне необходимо семейство только из 12-ти импульсных характеристик, перекрывающих одну октаву. Если я реализую такой анализ "в лоб", с помощью какого-нибудь БПФ - разрешение по времени будет просто катастрофически низким на СЧ-ВЧ, а разрешение по частоте - низким на СЧ-НЧ. Более того - я не могу разбивать сигнал на фреймы из-за оконной функции. Окно должно скользить вдоль сигнала, а это не мало вычислительных ресурсов, с которыми БПФ становится не таким уж и быстрым...