instfreq

Оцените мгновенную частоту

Синтаксис

ifq = instfreq(x,fs)
ifq = instfreq(x,t)
ifq = instfreq(xt)
ifq = instfreq(tfd,fd,td)
ifq = instfreq(___,Name,Value)
[ifq,t] = instfreq(___)
instfreq(___)

Описание

пример

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

ifq = instfreq(x,t) оценивает мгновенную частоту x, выбранного в то время, когда значения сохранили в t.

пример

ifq = instfreq(xt) оценивает мгновенную частоту сигнала, сохраненного в расписании MATLAB® xt. Функция обрабатывает все переменные в расписании и все столбцы в каждой переменной независимо.

пример

ifq = instfreq(tfd,fd,td) оценивает мгновенную частоту сигнала, плотность распределения времени которого, tfd, выбирается в значениях частоты, сохраненных в fd и временных стоимостях, сохраненных в td.

пример

ifq = instfreq(___,Name,Value) задает дополнительные опции для любого из предыдущих аргументов пары "имя-значение" использования синтаксисов. Можно указать, что алгоритм раньше оценивал мгновенную частоту или пределы частоты, используемые в вычислении.

пример

[ifq,t] = instfreq(___) также возвращает t, вектор шагов расчета, соответствующих ifq.

пример

instfreq(___) без выходных аргументов строит предполагаемую мгновенную частоту.

Примеры

свернуть все

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

fs = 5000;
t = 0:1/fs:4-1/fs;

s = besselj(0,1000*(sin(2*pi*t.^2/8).^4));

plot(t,s)

Оцените зависящую от времени частоту сигнала как первый момент спектрограммы степени. Постройте спектрограмму степени и наложите мгновенную частоту.

instfreq(s,fs)

Создайте двухканальный сигнал, выбранный на уровне 1 кГц в течение 2 секунд, состоя из двух управляемых напряжением осцилляторов. В одном канале мгновенная частота меняется в зависимости от времени как в зависимости от пилообразной волны, максимум которой в 75% периода. В другом канале мгновенная частота меняется в зависимости от времени как в зависимости от прямоугольной волны с рабочим циклом 30%. Постройте спектрограммы двух каналов. Задайте разрешение времени 0,1 секунд для пилообразного канала и разрешение частоты 10 Гц для квадратного канала.

fs = 1000;
t = (0:1/fs:2)';
x = vco(sawtooth(2*pi*t,0.75),[0.1 0.4]*fs,fs);
y = vco(square(2*pi*t,30),[0.1 0.3]*fs,fs);

subplot(1,2,1)
pspectrum(x,fs,'spectrogram','TimeResolution',0.1)
subplot(1,2,2)
pspectrum(y,fs,'spectrogram','FrequencyResolution',10)

Сохраните сигнал в расписании. Вычислите и отобразите мгновенную частоту.

xt = timetable(seconds(t),x,y);

clf
instfreq(xt)

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

instfreq(xt,'Method','hilbert')

Сгенерируйте квадратичный щебет, модулируемый Гауссовым. Задайте частоту дискретизации 2 кГц и длительность сигнала 4 секунд.

fs = 2000;
t = 0:1/fs:4-1/fs;

q = chirp(t-1,0,1/2,20,'quadratic',100,'convex').*exp(-1.7*(t-2).^2);
plot(t,q)

Используйте функцию pspectrum с настройками по умолчанию, чтобы оценить спектр мощности сигнала. Используйте оценку, чтобы вычислить мгновенную частоту.

[p,f,t] = pspectrum(q,fs,'spectrogram');

instfreq(p,f,t)

Повторите вычисление с помощью synchrosqueezed преобразования Фурье. Используйте окно Hann с 500 выборками, чтобы разделить сигнал на сегменты и окно их.

[s,sf,st] = fsst(q,fs,hann(500));

instfreq(abs(s).^2,sf,st)

Сравните мгновенные частоты нашли использование двух различных методов.

[psf,pst] = instfreq(p,f,t);
[fsf,fst] = instfreq(abs(s).^2,sf,st);

plot(fst,fsf,pst,psf)

Сгенерируйте синусоидальный сигнал, выбранный на уровне 1 кГц в течение 0,3 секунд и встроенный в белый Гауссов шум отклонения 1/16. Задайте частоту синусоиды 200 Гц. Оцените и отобразите мгновенную частоту сигнала.

fs = 1000;
t = (0:1/fs:0.3-1/fs)';

x = sin(2*pi*200*t) + randn(size(t))/4;

instfreq(x,t)

Оцените мгновенную частоту сигнала снова, но теперь используйте плотность распределения времени с крупным разрешением частоты 25 Гц, как введено.

[p,fd,td] = pspectrum(x,t,'spectrogram','FrequencyResolution',25);

instfreq(p,fd,td)

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

свернуть все

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

Пример: sin(2*pi*(0:127)/16)+randn(1,128)/100 задает шумную синусоиду

Пример: [2 1].*sin(2*pi*(0:127)'./[16 64]) задает двухканальную синусоиду.

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

Частота дискретизации, заданная как положительная скалярная величина. Частота дискретизации является количеством выборок в единицу времени. Если модуль времени является секундами, то частота дискретизации находится в Гц.

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

Шаги расчета, заданные как вектор действительных чисел, скаляр duration, массив duration или массив datetime.

  • Скаляр duration — временной интервал между последовательными выборками x.

  • Вектор действительных чисел, массив duration или массив datetime — момент времени, соответствующий каждому элементу x.

Пример: seconds(1) задает 1 вторую ошибку между последовательными измерениями сигнала.

Пример: seconds(0:8) указывает, что сигнал выбирается на уровне 1 Гц в течение 8 секунд.

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

Введите расписание. xt должен содержать увеличение, конечные времена строки.

Если расписание имеет пропавших без вести или дублирующиеся моменты времени, можно зафиксировать его с помощью советов в Чистом Расписании с Пропавшими без вести, Копией, или Неоднородные Времена (MATLAB).

Пример: timetable(seconds(0:4)',randn(5,1)) задает вероятностный процесс, выбранный на уровне 1 Гц в течение 4 секунд.

Пример: timetable(seconds(0:4)',randn(5,3),randn(5,4)) содержит вероятностный процесс с тремя каналами и вероятностный процесс с четырьмя каналами, оба выбранные на уровне 1 Гц в течение 4 секунд.

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

Плотность распределения времени, заданная как матрица, выбранная на частотах, сохраненных в fd и временных стоимостях, сохранена в td. Этот входной параметр поддерживается только, когда 'Method' установлен в 'tfmoment'.

Пример: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,'spectrogram') задает плотность распределения времени синусоиды на 1 Гц, выбранной на уровне 4 Гц в течение 128 секунд, и также частот и времена, в которые это вычисляется.

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

Частота и временные стоимости для плотности распределения времени, заданной как векторы. Эти входные параметры поддерживаются только, когда 'Method' установлен в 'tfmoment'.

Пример: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,'spectrogram') задает плотность распределения времени синусоиды на 1 Гц, выбранной на уровне 4 Гц в течение 128 секунд, и также частот и времена, в которые это вычисляется.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Method','hilbert','FrequencyLimits',[25 50] вычисляет мгновенную частоту в диапазоне от 25 Гц до 50 Гц путем дифференциации аналитического сигнала входа.

Частотный диапазон, заданный как пара, разделенная запятой, состоящая из 'FrequencyLimits' и двухэлементного вектора в герц. Этот аргумент поддерживается только, когда 'Method' установлен в 'tfmoment'.

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

Метод вычисления, заданный как пара, разделенная запятой, состоящая из 'Method' и или 'tfmoment' или 'hilbert'.

  • 'tfmoment' — Вычислите мгновенную частоту как первый условный спектральный момент плотности распределения времени x. Если x неоднородно выбирается, то instfreq интерполирует сигнал к регулярной координатной сетке, чтобы вычислить мгновенные частоты.

  • 'hilbert' — Вычислите мгновенную частоту как производную фазы аналитического сигнала x, найденного с помощью Гильбертова преобразования. Этот метод принимает только однородно выбранные сигналы и не поддерживает вход плотности распределения времени.

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

свернуть все

Мгновенная частота, возвращенная как вектор, матрица или расписание с теми же размерностями как вход.

Времена оценок частоты, возвращенных как вектор действительных чисел, массив duration или массив datetime.

Больше о

свернуть все

Мгновенная частота

Мгновенная частота неустановившегося сигнала является изменяющимся во времени параметром, который относится к среднему значению частот, существующих в сигнале, когда это развивается [1], [2].

  • Если 'Method' установлен в 'tfmoment', то instfreq оценивает мгновенную частоту как первый условный спектральный момент плотности распределения времени входного сигнала. Функция:

    1. Вычисляет спектр мощности спектрограммы P (t, f), входа с помощью функции pspectrum и использует спектр в качестве плотности распределения времени.

    2. Оценивает мгновенное использование частоты

      finst(t)=0fP(t,f)df0P(t,f)df.

  • Если 'Method' установлен в 'hilbert', то instfreq оценивает мгновенную частоту как производную фазы аналитического сигнала входа. Функция:

    1. Вычисляет аналитический сигнал, x A, входа с помощью функции hilbert.

    2. Оценивает мгновенное использование частоты

      finst(t)=12πdϕdt,

      где ϕ является фазой аналитического сигнала входа.

Ссылки

[1] Boashash, Boualem. "Оценивая и Интерпретируя Мгновенную Частоту Сигнала — Часть 1: Основные принципы". Продолжения IEEE®. Издание 80, апрель 1992, стр 520–538.

[2] Boashash, Boualem. "Оценивая и Интерпретируя Мгновенную Частоту Сигнала — Часть 2: Алгоритмы и Приложения". Продолжения IEEE. Издание 80, апрель 1992, стр 540–568.

Введенный в R2018a