Аналитический сигнал и преобразование Гильберта

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

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

|