exponenta event banner

hilbert

Дискретно-временной аналитический сигнал с использованием преобразования Гильберта

Описание

пример

x = hilbert(xr) возвращает аналитический сигнал, x, из реальной последовательности данных, xr. Если xr является матрицей, то hilbert находит аналитический сигнал, соответствующий каждому столбцу.

пример

x = hilbert(xr,n) использует n-точное быстрое преобразование Фурье (FFT) для вычисления преобразования Гильберта. Входные данные заполнены нулями или усечены до длины nПо обстоятельствам.

Примеры

свернуть все

Определите последовательность и вычислите ее аналитический сигнал с помощью hilbert.

xr = [1 2 3 4];
x = hilbert(xr)
x = 1×4 complex

   1.0000 + 1.0000i   2.0000 - 1.0000i   3.0000 - 1.0000i   4.0000 + 1.0000i

Мнимая часть x является преобразованием Гильберта xr, и реальная часть xr сам.

imx = imag(x)
imx = 1×4

     1    -1    -1     1

rex = real(x)
rex = 1×4

     1     2     3     4

Последняя половина дискретного преобразования Фурье (DFT) x равно нулю. (В этом примере последняя половина преобразования является только последним элементом.) Элементы DC и Nyquist fft(x) чисто реальны.

dft = fft(x)
dft = 1×4 complex

  10.0000 + 0.0000i  -4.0000 + 4.0000i  -2.0000 + 0.0000i   0.0000 + 0.0000i

hilbert функция находит точный аналитический сигнал для конечного блока данных. Можно также сгенерировать аналитический сигнал с помощью фильтра гильбертового трансформатора с конечной импульсной характеристикой (FIR) для вычисления аппроксимации к мнимой части.

Генерируют последовательность, состоящую из трех синусоид с частотами 203, 721 и 1001 Гц. Последовательность отбирают при частоте 10 кГц в течение примерно 1 секунды. Используйте hilbert функция для вычисления аналитического сигнала. Постройте график между 0,01 и 0,03 секундами.

fs = 1e4;
t = 0:1/fs:1; 

x = 2.5 + cos(2*pi*203*t) + sin(2*pi*721*t) + cos(2*pi*1001*t);

y = hilbert(x);

plot(t,real(y),t,imag(y))
xlim([0.01 0.03])
legend('real','imaginary')
title('hilbert Function')

Figure contains an axes. The axes with title hilbert Function contains 2 objects of type line. These objects represent real, imaginary.

Вычислите оценки Уэлча спектральных плотностей мощности исходной последовательности и аналитического сигнала. Разделите последовательности на неперекрывающиеся участки длиной 256 с помощью окна Хэмминга. Убедитесь, что аналитический сигнал не имеет мощности на отрицательных частотах.

pwelch([x;y].',256,0,[],fs,'centered')
legend('Original','hilbert')

Figure contains an axes. The axes with title Power Spectral Density contains 2 objects of type line. These objects represent Original, hilbert.

Используйте designfilt функция для проектирования фильтра FIR трансформатора Гильберта 60-го порядка. Укажите ширину перехода 400 Гц. Визуализация частотной характеристики фильтра.

fo = 60;

d = designfilt('hilbertfir','FilterOrder',fo, ...
       'TransitionWidth',400,'SampleRate',fs); 

freqz(d,1024,fs)

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) and Phase Response contains an object of type line.

Фильтрация синусоидальной последовательности для аппроксимации мнимой части аналитического сигнала.

hb = filter(d,x);

Групповая задержка фильтра, grd, равно половине порядка фильтра. Компенсировать эту задержку. Удалить первый grd образцы мнимой части и последней grd выборки действительной части и вектора времени. Постройте график результата от 0,01 секунды до 0,03 секунды.

grd = fo/2;
   
y2 = x(1:end-grd) + 1j*hb(grd+1:end);
t2 = t(1:end-grd);

plot(t2,real(y2),t2,imag(y2))
xlim([0.01 0.03])
legend('real','imaginary')
title('FIR Filter')

Figure contains an axes. The axes with title FIR Filter contains 2 objects of type line. These objects represent real, imaginary.

Оцените спектральную плотность мощности (PSD) приближенного аналитического сигнала и сравните ее с hilbert результат.

pwelch([y;[y2 zeros(1,grd)]].',256,0,[],fs,'centered')
legend('hilbert','FIR Filter')

Figure contains an axes. The axes with title Power Spectral Density contains 2 objects of type line. These objects represent hilbert, FIR Filter.

Входные аргументы

свернуть все

Входной сигнал, заданный как действительный вектор или матрица. Если xr является сложным, то hilbert игнорирует его мнимую часть.

Пример: sin(2*pi*(0:15)/16) задает один период синусоиды.

Пример: sin(2*pi*(0:15)'./[16 8]) задает двухканальный синусоидальный сигнал.

Типы данных: single | double

Длина DFT, заданная как положительный целочисленный скаляр.

Типы данных: single | double

Выходные аргументы

свернуть все

Аналитический сигнал, возвращаемый в виде вектора или матрицы.

Подробнее

свернуть все

Аналитический сигнал

hilbert возвращает сложную спиральную последовательность, иногда называемую аналитическим сигналом, из действительной последовательности данных.

Аналитический сигнал x = xr + jxi имеет действительную часть, xr, которая является исходными данными, и мнимую часть, xi, которая содержит преобразование Гильберта. Мнимая часть - версия исходной вещественной последовательности со сдвигом фазы на 90 °. Следовательно, синусы преобразуются в косинусы, и, наоборот, косинусы преобразуются в синусы. Преобразованный Гильбертом ряд имеет ту же амплитуду и частотное содержание, что и исходная последовательность. Преобразование включает в себя информацию о фазе, которая зависит от фазы оригинала.

Преобразование Гильберта полезно для вычисления мгновенных атрибутов временного ряда, особенно амплитуды и частоты. Мгновенная амплитуда - амплитуда комплексного преобразования Гильберта; мгновенная частота - это временная скорость изменения мгновенного фазового угла. Для чистой синусоиды мгновенная амплитуда и частота постоянны. Мгновенная фаза, однако, является пилообразной, отражающей линейное изменение локального фазового угла в течение одного цикла. Для смесей синусоид атрибуты являются краткосрочными, или локальными, средними значениями, охватывающими не более двух-трех точек. Примеры см. в разделе Преобразование Гильберта и мгновенная частота.

В [1] описан метод Колмогорова для минимальной фазовой реконструкции, который включает в себя прием преобразования Гильберта логарифма спектральной плотности временного ряда. Функция панели инструментов rceps выполняет эту реконструкцию.

Алгоритмы

Аналитический сигнал для последовательности xr имеет одностороннее преобразование Фурье. То есть преобразование исчезает для отрицательных частот. Для аппроксимации аналитического сигнала hilbert вычисляет БПФ входной последовательности, заменяет те коэффициенты БПФ, которые соответствуют отрицательным частотам, нулями и вычисляет обратный БПФ результата.

hilbert использует четырехшаговый алгоритм:

  1. Вычислите БПФ входной последовательности, сохранив результат в векторе x.

  2. Создание вектора h элементы которых h(i) имеют значения:

    • 1 для i  = 1, (n/2)+1

    • 2 для i    = 2, 3, ... , (n/2)

    • 0 для i = (n/2)+2, ... , n

  3. Вычислить произведение по элементам x и h.

  4. Вычислите обратное БПФ последовательности, полученной на шаге 3, и вернете первое n элементы результата.

Этот алгоритм был впервые введен в [2]. Метод предполагает, что входной сигнал, x, является конечным блоком данных. Это предположение позволяет функции удалить спектральную избыточность в x точно. Методы, основанные на FIR-фильтрации, могут аппроксимировать только аналитический сигнал, но они имеют то преимущество, что работают непрерывно над данными. Другой пример преобразования Гильберта, вычисленного с помощью КИХ-фильтра, см. в разделе Односторонняя амплитудная модуляция.

Ссылки

[1] Клаербут, Джон Ф. Основы обработки геофизических данных с применением для поиска нефти. Оксфорд, Великобритания: Блэквелл, 1985.

[2] Марпл, С. Л. «Вычисление дискретно-временного аналитического сигнала посредством БПФ». Транзакции IEEE ® при обработке сигналов. Том 47, 1999, стр. 2600-2603.

[3] Оппенгейм, Алан В., Рональд В. Шефер и Джон Р. Бак. Дискретно-временная обработка сигналов. 2-я эд. река Верхнее Седло, Нью-Джерси: Прентис Холл, 1999.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

| |

Представлен до R2006a