Перетворення Гільберта в обчислення огинаючої сигналу?


27

Я чув, що перетворення Гільберта можна використовувати для обчислення огинаючої сигналу. Як це працює? І чим цей «конверт Гільберта» відрізняється від конверта, який ви отримуєте простим випрямленням сигналу?

Мені цікаво конкретно знайти спосіб обчислити конверт для використання в стисканні динамічного діапазону (тобто "зменшення гучності" голосних частин звукового сигналу автоматично).


у вас зараз є якийсь робочий код? або з трансформацією Гільберта, або іншим методом?
Бась

Відповіді:


18

Перетворення Гільберта використовується для обчислення "аналітичного" сигналу. Див., Наприклад, http://en.wikipedia.org/wiki/Analytic_signal . Якщо ваш сигнал є синусоїдою або модульованою синусоїдою, величина аналітичного сигналу дійсно буде схожа на огинаючу. Однак обчислення перетворення Гільберта не є тривіальним. Технічно він вимагає безпричинного фільтра FIR значної довжини, тому він вимагатиме неабиякої кількості MIPS, пам'яті та затримки.

Для широкосмугового сигналу це дійсно залежить від того, як ви визначаєте "конверт" для вашої конкретної програми. Для застосування стиснення динамічного діапазону потрібно метрику, яка добре співвідноситься із сприйняттям гучності з часом. Трансформація Гільберта не є правильним інструментом для цього.

Кращим варіантом буде застосувати A-зважений фільтр ( http://en.wikipedia.org/wiki/A- вагаing ), а потім зробити піковий збиток або детектор втрат RMS. Це буде досить добре співвідноситись із сприйнятою гучністю з часом і зробити це порівняно дешево.


І те й інше є непричинним, але чи метод FFT (викидає половину спектру та IFFT) зазвичай швидший, ніж фільтр FIR?
ендоліт

Крім того, як метод FFT для обчислення перетворення Гільберта вимагає непричинності? Напевно, просто потрібно досить велике вікно, щоб отримати корисні форми конвертів.
mavavilj

4

Ви можете використовувати перетворення Гільберта для обчислення конверта наступним чином. (Я напишу це як код MATLAB):

envelope = abs(hilbert(yourTimeDomainSignal));

Я не маю часу виписати математику прямо зараз (спробую згодом), але дуже просто, скажімо, ваш сигнал - це синусоїда. Перетворення Гільберта синуса є -козином. (Іншими словами, перетворення Гільберта завжди передасть вам сигнал, зміщений на фазу -90 градусів - його квадратуру іншими словами).

Якщо ви додасте свій сигнал (синусоїда) до jразів, ніж ваш сигнал, (-синова хвиля), ви отримаєте:

sin(wt) - j.*cos(wt)

Що також буває e ^ (j * (wt - pi / 2)).

Таким чином, приймаючи абсолютне значення цього, ви отримуєте 1, що є вашим конвертом. (Для цього випадку).


На жаль! Забув негативний знак - дякую Діліпу, виправлено зараз.
Космічний

2

Мені відомо щонайменше два окремих способи отримання амплітудної оболонки з сигналу.

Ключове рівняння:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

Найпростіший спосіб, про який я знаю, - отримати Q - це розкласти S (t) на купу синусоїдальних компонентів за допомогою FFT, обертати кожен компонент на чверть обороту проти годинникової стрілки (пам’ятайте, що кожен компонент буде складним числом, тому конкретний компонент x + iy -> -y + ix), а потім рекомбінуйте.

Цей підхід працює досить добре, хоча вимагає трохи налаштування (я ще не розумію математику достатньо добре, щоб пояснити це будь-яким кращим способом)

Тут є кілька ключових термінів, а саме: «Перетворення Гільберта» та «аналітичний сигнал»

Я уникаю використання цих термінів, тому що я майже впевнений, що став свідком значної неоднозначності в їх використанні.

Один документ описує (складний) аналітичний сигнал вихідного реального сигналу f (t) як:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

в цьому випадку амплітудна оболонка просто | Аналітична (f (t)) |, що повертає нас до початкового піфагорового рівняння

NB: Нещодавно я натрапив на більш вдосконалену техніку, що включає зміщення частоти та цифровий фільтр низьких частот. Теорія полягає в тому, що ми можемо побудувати аналітичний сигнал різними способами; ми розкладаємо f (t) на позитивні та негативні компоненти синусоїдальної частоти, а потім просто видаляємо негативні компоненти та подвоюємо позитивні компоненти. і це можливо зробити «видаленням негативної частотної компоненти» за допомогою комбінації частотного зсуву та фільтрації з низькою частотою. це можна зробити надзвичайно швидко за допомогою цифрових фільтрів. Я ще не вивчив цей підхід, тому це стільки, скільки я можу сказати на даний момент.


1
Це все просто різні способи обчислення однієї і тієї ж речі (величини аналітичного сигналу через перетворення Гільберта). "Просунута" методика полягає в тому, щоб просто зробити FFT, нульові відхилення негативних частот, а потім зробити зворотний FFT. Справжня частина - це вихідний сигнал, а уявна частина - перетворення його Гільберта. Чорт у деталях, таких як обрамлення, віконце, перекриття та лінійна проти кругової обробки.
Гільмар

2
Неприємно бачити, що хтось вважав за потрібне нагородити час та енергію, яку я віддав цій спільноті (через вищезгаданий пост) своєю головою. Пост, який містить добру ґрунтовну інформацію, яка буде корисною для когось.
П я

2
@Hilmar, Існує кращий спосіб "зняти негативні частоти", щоб досягти перетворення Гільберта. Як я вже сказав, спосіб, який не передбачає FFT. У світлі вищесказаного я зараз не відчуваю особливої ​​пристрасті до деталізації цього питання.
П я

Вдячний за детальну відповідь про перетворення Гільберта; хотіла запевнити, що це добре сприйнято, отже, не варто зневажати. Будь ласка, не звертайте уваги на голосування від кого завгодно.

0

тому ви в основному шукаєте автоматичний контроль посилення (AGC). Не впевнений, чи потрібно це робити цифровою обробкою, але є дуже хороші інтегральні мікросхеми, які дуже добре можуть виконувати це завдання, як правило, AGC інтегрований з безліччю інших функцій, але деякі схеми можна створити з транзисторами JFET і деякі діоди.

Але дуже легко зрозумілим способом зробити це за допомогою цифрової обробки було б спроектувати адаптивний оцінювач дисперсії, як, наприклад, взяти часове вікно з достатньою кількістю зразків для відображення 5 або 10 мсек, і застосувати фактор забуття альфа ^ n (альфа <1), так кожен новий зразок, який надходить, враховується більше, ніж попередні зразки. то на основі цієї оцінки дисперсії ви розробляєте відповідно до свого бажання функцію, яка відображає дисперсію до посилення, який ви застосовуєте до кожного звукового зразка. це може бути межею важкого прийняття рішення, тоді як, якщо дисперсія перевищує деякий поріг, ви зменшите коефіцієнт посилення на якийсь фактор.

Або може бути межею більш м'якого рішення, коли ви створюєте нелінійне перетворення від дисперсії до виграшу та застосовуєте перетворення до кожного зразка на основі останньої оцінки дисперсії.

Це більш евристичні методи, але принаймні це рятує вас від усієї важкої математики.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.