Я слышал, что преобразование Гильберта можно использовать для расчета огибающей сигнала. Как это работает? И чем этот «конверт Гильберта» отличается от конверта, получаемого простым выпрямлением сигнала?
Я заинтересован, в частности, в том, чтобы найти способ расчета огибающей для использования в сжатии динамического диапазона (т. Е. «Уменьшить громкость» громких частей аудиосигнала автоматически).
Ответы:
Преобразование Гильберта используется для вычисления «аналитического» сигнала. Смотрите, например, http://en.wikipedia.org/wiki/Analytic_signal . Если ваш сигнал является синусоидальной волной или модулированной синусоидальной волной, величина аналитического сигнала действительно будет выглядеть как огибающая. Однако вычисление преобразования Гильберта не тривиально. Технически это требует не причинного КИХ-фильтра значительной длины, поэтому он потребует достаточного количества MIPS, памяти и задержки.
Для широкополосного сигнала это действительно зависит от того, как вы определяете «огибающую» для вашего конкретного приложения. Для вашего применения сжатия динамического диапазона вам нужна метрика, которая хорошо коррелирует с восприятием громкости во времени. Преобразование Гильберта не является подходящим инструментом для этого.
Лучшим вариантом было бы применить A-взвешенный фильтр ( http://en.wikipedia.org/wiki/A-weighting ), а затем использовать RMS-детектор с потерями или RMS с потерями. Это будет довольно хорошо коррелировать с воспринимаемой громкостью с течением времени и будет относительно дешевым.
источник
Вы можете использовать преобразование Гильберта для вычисления огибающей следующим образом. (Я напишу это как код MATLAB):
У меня нет времени, чтобы написать математику прямо сейчас (я попробую позже), но очень просто, скажем, ваш сигнал - синусоида. Гильбертово преобразование синуса - это -козина. (Другими словами, преобразование Гильберта всегда будет давать вам сдвиг вашего сигнала на фазу -90 градусов - другими словами, его квадратуру).
Если вы добавите свой сигнал (синусоидальную волну) к
j
временам своего наклонного сигнала (-козиновой волны), вы получите:Который также, случается, e ^ (j * (wt - pi / 2)).
Таким образом, когда вы берете абсолютное значение, вы получаете 1, что является вашим конвертом. (Для этого случая).
источник
Мне известны по крайней мере два отдельных способа получения огибающей амплитуды из сигнала.
Ключевое уравнение:
Самым простым способом, который мне известен, является получение Q, состоящий в том, чтобы разложить S (t) на группу синусоидальных компонентов, используя FFT, повернуть каждый компонент на четверть оборота против часовой стрелки (помните, что каждый компонент будет комплексным числом, поэтому конкретный компонент x + iy -> -y + ix) и затем рекомбинировать.
Этот подход работает довольно хорошо, хотя требует некоторой настройки (я еще недостаточно хорошо понимаю математику, чтобы объяснить это лучше)
Здесь есть пара ключевых терминов, а именно «преобразование Гильберта» и «аналитический сигнал».
Я избегаю использовать эти термины, потому что я почти уверен, что стал свидетелем значительной неоднозначности в их использовании.
Один документ описывает (сложный) аналитический сигнал исходного реального сигнала f (t) как:
в этом случае огибающая амплитуды просто | Analytic (f (t)) |, что возвращает нас к исходному уравнению Пифагора
NB: Недавно я столкнулся с более продвинутой техникой, включающей сдвиг частоты и фильтр нижних частот. Теория состоит в том, что мы можем построить аналитический сигнал различными способами; мы разлагаем f (t) на положительные и отрицательные синусоидальные частотные компоненты, а затем просто удаляем отрицательные компоненты и удваиваем положительные компоненты. и возможно сделать это «удаление отрицательной частотной составляющей» путем сочетания сдвига частоты и фильтрации нижних частот. это можно сделать очень быстро, используя цифровые фильтры. Я еще не исследовал этот подход, так что это столько, сколько я могу сказать на данный момент.
источник
так что вы в основном ищете автоматический контроль усиления (AGC). Не уверен, что вам нужно делать это с помощью цифровой обработки, но есть очень хорошие интегральные схемы, которые могут очень хорошо выполнить эту задачу, обычно AGC интегрируется с множеством других функций, но некоторые циркулирующие схемы могут быть созданы с помощью транзисторов JFET. и некоторые диоды.
Но очень легко понять способ сделать это с цифровой обработкой было бы разработать адаптивный оценщик дисперсии, как взять временное окно достаточного количества выборок, чтобы представить 5 или 10 мсек, и применить коэффициент забывания alpha ^ n (alpha <1), так каждый новый образец учитывается больше, чем предыдущий. затем, основываясь на этой оценке дисперсии, вы разрабатываете в соответствии с вашим желанием функцию, которая отображает дисперсию в усиление, которое вы применяете к каждому аудиосэмплу. это может быть граница жесткого решения, тогда как если дисперсия превышает некоторый порог, вы уменьшаете усиление на некоторый коэффициент.
Или это может быть более мягкая граница принятия решения, когда вы создаете нелинейное преобразование из дисперсии в усиление и применяете преобразование к каждой выборке на основе последней оценки дисперсии.
Это более эвристические методы, но, по крайней мере, это спасает вас от всей тяжелой математики.
источник