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 и элементы Найквиста 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