Гильберт

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

Синтаксис

x = hilbert(xr)
x = hilbert(xr,n)

Описание

пример

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 и элементы Найквиста 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, и 1 001 Гц. Последовательность выбирается на уровне 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')

Вычислите валлийские оценки степени спектральная плотность исходной последовательности и аналитического сигнала. Разделите последовательности на Hamming-оконные, неперекрывающиеся разделы длины 256. Проверьте, что аналитический сигнал не имеет никакой силы на отрицательных частотах.

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

Используйте функцию designfilt, чтобы разработать 60-й порядок КИХ-фильтр преобразователя Гильберта. Задайте ширину перехода 400 Гц. Визуализируйте частотную характеристику фильтра.

fo = 60;

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

freqz(d,1024,fs)

Отфильтруйте синусоидальную последовательность, чтобы аппроксимировать мнимую часть аналитического сигнала.

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')

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

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

Входные параметры

свернуть все

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

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

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

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

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

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

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

свернуть все

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

Больше о

свернуть все

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

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

Аналитический x сигнала  = xr + j xi имеет действительную часть, 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 точно. Методы на основе КИХ-фильтрации могут только аппроксимировать аналитический сигнал, но у них есть преимущество, которым они управляют постоянно на данных. Смотрите Амплитудную Модуляцию Одно Боковой полосы для другого примера Гильбертова преобразования, вычисленного с КИХ-фильтром.

Ссылки

[1] Claerbout, Джон Ф. Основные принципы Геофизической Обработки данных с Приложениями к Нефтяной Разведке. Оксфорд, Великобритания: Блэквелл, 1985, стр 59–62.

[2] Марпл, S. L. “Вычисляя Дискретное время Аналитический Сигнал через БПФ”. IEEE® Transactions на Обработке сигналов. Издание 47, 1999, стр 2600–2603.

[3] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

| |

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