Преобразование Гильберта и мгновенная частота

Преобразование Гильберта оценивает мгновенную частоту сигнала для сигналов монокомпонента только. Сигнал монокомпонента описан в плоскости частоты времени одним "гребнем". Набор сигналов монокомпонента включает одну синусоиды и сигналы как щебеты.

Сгенерируйте щебет, произведенный на уровне 1 кГц в течение двух секунд. Задайте щебет, таким образом, его частота - первоначально 100 Гц и увеличивается до 200 Гц после одной секунды.

fs = 1000;
t = 0:1/fs:2-1/fs;
y = chirp(t,100,1,200);

Оцените спектрограмму щебета с помощью кратковременного преобразования Фурье, реализованного в pspectrum функция. Сигнал хорошо описан одной пиковой частотой в каждом моменте времени.

pspectrum(y,fs,'spectrogram')

Figure contains an axes. The axes with title Fres = 10.267 Hz, Tres = 250 ms contains an object of type image.

Вычислите аналитический сигнал и дифференцируйте его фазу, чтобы измерить мгновенную частоту. Масштабированная производная дает к значимой оценке.

z = hilbert(y);
instfrq = fs/(2*pi)*diff(unwrap(angle(z)));

clf
plot(t(2:end),instfrq)
ylim([0 fs/2])

Figure contains an axes. The axes contains an object of type line.

instfreq функция вычисляет и отображает мгновенную частоту за один шаг.

instfreq(y,fs,'Method','hilbert')

Figure contains an axes. The axes with title Instantaneous Frequency Estimate contains an object of type line.

Метод перестал работать, когда сигнал не монокомпонента.

Сгенерируйте сумму двух синусоид частот 60 Гц и 90 Гц, произведенных на уровне 1 023 Гц в течение двух секунд. Вычислите и постройте спектрограмму. Каждый момент времени показывает присутствие этих двух компонентов.

fs = 1023;
t = 0:1/fs:2-1/fs;
x = sin(2*pi*60*t)+sin(2*pi*90*t);

pspectrum(x,fs,'spectrogram')
yticks([60 90])

Figure contains an axes. The axes with title Fres = 10.257 Hz, Tres = 250.2444 ms contains an object of type image.

Вычислите аналитический сигнал и дифференцируйте его фазу. Увеличьте масштаб области, заключающей частоты синусоид. Аналитический сигнал предсказывает мгновенную частоту, которая является средним значением частот синусоиды.

z = hilbert(x);
instfrq = fs/(2*pi)*diff(unwrap(angle(z)));

plot(t(2:end),instfrq)
ylim([60 90])
xlabel('Time (s)')
ylabel('Frequency (Hz)')

Figure contains an axes. The axes contains an object of type line.

instfreq функционируйте также оценивает среднее значение.

instfreq(x,fs,'Method','hilbert')

Figure contains an axes. The axes with title Instantaneous Frequency Estimate contains an object of type line.

Чтобы оценить обе частоты как функции времени, используйте spectrogram найти степень спектральной плотностью и tfridge отслеживать эти два гребня. В tfridge, задайте штраф за изменение частоты как 0,1.

[s,f,tt] = pspectrum(x,fs,'spectrogram');

numcomp = 2;
[fridge,~,lr] = tfridge(s,f,0.1,'NumRidges',numcomp);

pspectrum(x,fs,'spectrogram')
hold on
plot3(tt,fridge,abs(s(lr)),'LineWidth',4)
hold off
yticks([60 90])

Figure contains an axes. The axes with title Fres = 10.257 Hz, Tres = 250.2444 ms contains 3 objects of type image, line.

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

|

Похожие темы