Рассчитать и интерпретировать мгновенную частоту


9

Я новичок в принципе вычисления мгновенной частоты и придумал много вопросов по этому поводу. Вы найдете их все в списке маркеров в конце этого текста. Текст может быть немного длинным, извините за это, но я действительно пытался решить эту проблему самостоятельно.

Поэтому меня интересует мгновенная частота f(t) действительного сигнала x(t) . Расчет производится с помощью аналитического сигнала z(t)=x(t)+jy(t) , где y(t) - гильбертово преобразование x(t) .

Чтобы вычислить мгновенные частоты из аналитического сигнала z(t) я следовал работе:

Расчет мгновенной частоты и мгновенной полосы пропускания Артур Э. Барнс с 1992 года. В этой статье он вводит несколько методов для расчета мгновенной частоты. Я записываю все формулы, которые он предложил (и я использовал) в одно мгновение.

Для «обучения» я играл с очень простым и двумя немного более сложными сигналами в MATLAB и хотел получить их мгновенные частоты.

Fs = 1000;                                            % sampling-rate = 1kHz
t = 0:1/Fs:10-1/Fs;                                    % 10s 'Timevector'
chirp_signal = chirp(t,0,1,2);                         % 10s long chirp-signal, signal 1
added_sinusoid = chirp_signal + sin(2*pi*t*10);        % chirp + sin(10Hz), signal 2
modulated_sinusoid = chirp_signal .* sin(2*pi*t*10);   % chirp * sin(10Hz), signal 3

Графики этих трех сигналов во временной области выглядят следующим образом: Земельные участки времени

Графики всех мгновенных частот, которые я получил после применения всех методов из статьи, следующие:

Мгновенные частоты чистого ЛЧМ-сигнала: Мгновенные частоты чистого звукового сигнала мгновенные частоты ЛЧМ-сигнала с добавленной синусоидой: Мгновенные частоты звукового сигнала с добавленной синусоидой Мгновенные частоты модулированного ЛЧМ-сигнала: Мгновенные частоты модулированного ЛЧМ-сигнала обратите внимание, что на всех трех изображениях ось Y графиков 3 и 4 увеличена, поэтому амплитуды этих сигналы очень крошечные!

f2(t)=12πddtθ(t)
θ(t)

function [instantaneous_frequency] = f2(analytic_signal,Fs)
    factor =  Fs/(2*pi);
    instantaneous_frequency = factor * diff(unwrap(angle(analytic_signal)));
    % Insert leading 0 in return-vector to maintain size
    instantaneous_frequency = [0 instantaneous_frequency];
end

В статье Barns теперь предлагают (или, скорее, упомянутые компиляции) четыре других способа вычисления мгновенных частот из аналитического сигнала. Он также упоминает верхнюю формулу, но считает, что она нецелесообразна из-за неясностей в фазе. Я думаю, он не знал о unwrap()методе, или, точнее, о математике, стоящей за ним. (Я сам узнал об этом методе только сегодня, когда смотрел на некоторые другие исходные коды на мгновенных частотах)

В его статье формула имеет метку Number (2), поэтому я дал f (t) индекс 2. Все остальные индексы точно так же соответствуют их номерам в статье.

Из-за неоднозначности в фазе он скорее предлагает:

f3(t)=12πx(t)y(t)ax(t)y(t)bx(t)2c+y(t)2d

function [instantaneous_frequency] = f3(analytic_signal,Fs,T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    diff_x = diff(x);
    diff_y = diff(y);
    factor = Fs/(2*pi);
    a = x(2:end).*diff_y;
    b = y(2:end).*diff_x;
    c = x(2:end).^2;
    d = y(2:end).^2;
    instantaneous_frequency = factor * ((a-b)./(c+d));
    % Insert leading 0 in return-vector to maintain size
    instantaneous_frequency = [0 instantaneous_frequency];
end

f9(t)=12πTarctan[x(t)y(t+T)ax(t+T)y(t)bx(t)x(t+T)c+y(t)y(t+T)d]

function[instantaneous_frequency] = f9(analytic_signal, Fs, T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = Fs/(2*pi*T);
    a = x(1:end-T).*y(1+T:end);
    b = x(1+T:end).*y(1:end-T);
    c = x(1:end-T).*x(1+T:end);
    d = y(1:end-T).*y(1+T:end);
    instantaneous_frequency = factor.*atan((a-b)./(c+d));
    % Append 0 to return-vector to maintain size
    instantaneous_frequency = [instantaneous_frequency zeros(1,T)];
end

f11(t)=14πTarctan[x(tT)y(t+T)ax(t+T)y(tT)bx(tT)x(t+T)c+y(tT)y(t+T)d]

function [instantaneous_frequency] = f11(analytic_signal, Fs, T)
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = Fs/(4*pi*T);
    a = x(1:end-2*T).*y(1+2*T:end);
    b = x(1+2*T:end).*y(1:end-2*T);
    c = x(1:end-2*T).*x(1+2*T:end);
    d = y(1:end-2*T).*y(1+2*T:end);
    instantaneous_frequency = factor.*atan((a-b)./(c+d));
    % Append and insert 0s to maintain size
    instantaneous_frequency = [zeros(1,T) instantaneous_frequency zeros(1,T)];
end

f14(t)=2πT[x(t)y(t+T)ax(t+T)y(t)b(x(t)+x(t+T))2c+(y(t)+y(t+T))2d]

function [instantaneous_frequency] = formula14(analytic_signal, Fs, T);
    x = real(analytic_signal);
    y = imag(analytic_signal);
    factor = 2*Fs/(pi*T);
    a = x(1:end-T).*y(1+T:end);
    b = x(1+T:end).*y(1:end-T);
    c = (x(1:end-T)+x(1+T:end)).^2;
    d = (y(1:end-T)+y(1+T:end)).^2;
    instantaneous_frequency = factor * ((a-b)./(c+d));
    % Append and insert 0s to maintain size
    instantaneous_frequency = [instantaneous_frequency zeros(1,T)];
end

Во всех трех приближениях Формулы T были установлены на Fs (T = Fs = 1000 = 1 с), как это предлагается в статье.

Теперь мой вопрос:

  • Формулы f2 и f3 возвращают один и тот же результат для чистого сигнала ЛЧМ. Я думаю, что это хорошо, так как они рассчитывают одинаково. Три метода приближения не возвращают то же самое, даже то, что близко к нему! Почему это так? (Я надеюсь, что это не просто ошибка программирования ...)
  • Несмотря на то, что они возвращают то же самое, особенно в конце сюжета они начинают «покачивания» много . Чем это объясняется? Сначала я подумал о чем-то вроде псевдонимов, но моя частота дискретизации довольно высока по сравнению с частотой сигналов, поэтому я думаю, что это можно исключить.
  • По крайней мере, f2 и f3 кажутся подходящими для чистого сигнала ЛЧМ, но все методы, включая f2 и f3, не работают ужасно, когда речь идет о более чем одной частоте в сигнале. В действительности наличие в сигнале более одной частоты - это всегда так. Так как же получить (более или менее) правильную мгновенную частоту?

    • Я даже не знаю, чего ожидать, когда в сигнале присутствует более одной частоты. Вычисление возвращает одно число для данного момента времени, так что он должен делать, когда, как здесь, присутствует больше частот? Вернуть среднее значение всех частот или что-то в этом роде?
  • И мой, пожалуй, самый важный вопрос , как это обрабатывается в реальном и разработанном программном обеспечении? Допустим, я хочу узнать мгновенную частоту модулированного сигнала за 1,75 с, и я выбрал метод f2, чем я могу «повезти» и получу число, близкое к 6 [Гц], что, скорее всего, является правильным ответом, или я выберите мои результаты в нескольких образцах рядом с ним, и внезапно я получу какой-нибудь проводной, очень высокий результат, потому что я, к сожалению, выбрал значение в пике. Как это можно сделать? Постобработкой со средним или даже лучше медианным фильтром? Я думаю, что даже это может быть очень сложно, особенно в регионах, где много шипов находятся рядом друг с другом.

И последний, не очень важный вопрос, почему большинство статей, которые я нахожу на мгновенных частотах, относятся к области географии, особенно при расчете сейсмографических событий, таких как землетрясения. Бумага Барна также берет это как пример. Разве мгновенная частота не интересна во многих областях?

Вот и все, я очень благодарен за каждый ответ, особенно когда кто-то дает мне советы о том, как реализовать его в реальном программном проекте ;)

С уважением, Патрик

Ответы:


4

Не совсем ответ, но, возможно, полезно: лично я обнаружил, что концепция мгновенной частоты полезна только для достаточно узкополосных сигналов.

Рассмотрим простой пример двух устойчивых синусоидальных волн, скажем, 100 Гц и 934 Гц. В этом случае вы, безусловно, можете определить и рассчитать мгновенную частоту (как хотите), но каким должен быть результат? Какое возможное понимание или свойства может иметь мгновенная частота, которая говорит о значении что-либо о сигнале? Применение концепции мгновенной частоты к сигналам, которые имеют несколько частот одновременно, просто не имеет большого смысла.

Вот почему вы получаете приличные результаты для разверток, но странные кривые для развертки + синус. Это также причина, по которой вы видите покачивания в верхней части развертки. Пропускная способность сигнала становится слишком высокой, чтобы присвоить ему одночастотное число, и поэтому результаты скачут вокруг.


Спасибо за подсказку, и я думаю, что этот комментарий имеет смысл. Но тогда я удивляюсь, почему расчет мгновенной фазы «чистого чирпа-сигнала» приводит к проблемам при работе выше 20 Гц. Там все еще есть только одна частота, чтобы определить, присутствует.
muuh

// концепция мгновенной частоты полезна только для достаточно узкополосных сигналов .// ------ да, как синусоида AM'd и FM'd.
Роберт Бристоу-Джонсон

4

По крайней мере, f2 и f3 кажутся подходящими для чистого сигнала ЛЧМ, но все методы, включая f2 и f3, не работают ужасно, когда речь идет о более чем одной частоте в сигнале. В действительности наличие в сигнале более одной частоты - это всегда так. Так как же получить (более или менее) правильную мгновенную частоту?

как предполагает Хильмар, метод преобразования Гильберта (или «Аналитический сигнал») не работает в широкополосной связи, поскольку имеется более одного частотного компонента. Вы можете сделать этот метод только для одного синусоидального компонента.

Итак, с подходом Analytic Signal вы хотите использовать эту идентичность:

arctanuarctanv=arctan(uv1+uv)

|uv|f9

но в вычислениях преобразования Гильберта должна быть только одна изменяющаяся во времени синусоида, чтобы сделать это правильно. и вам лучше выровнять «синфазный» компонент с выходным сигналом преобразования Гильберта (которое задерживается причинным КИХ-фильтром). в противном случае вы получите дерьмо.


1

Вау, какой огромный вопрос. Сначала я собираюсь ответить на не столь важный вопрос:

И последний, не очень важный вопрос, почему большинство статей, которые я нахожу на мгновенных частотах, относятся к области географии, особенно при расчете сейсмографических событий, таких как землетрясения. Бумага Барна также берет это как пример. Разве мгновенная частота не интересна во многих областях?

Причина в том, что сейсмографическая система "вибросейс" используется в нефтяной промышленности для проведения сейсморазведочных работ. Грузовики, с которыми я работал, вибрируют с частотой от 5 до 90 Гц, и их можно заставить подавать звуковые сигналы. В нефтяной промышленности много денег, и обработка доходов от этих сигналов может быть очень, очень прибыльной. Следовательно, многие люди потратили много часов, анализируя такие сигналы, в том числе рассматривая методы мгновенных частот.


TM

Проверьте эту бумагу.

Лучшие подходы, как правило, используют «усредненные по фазе», как здесь реализовано . Или здесь для прямой ссылки на Matlab .


1

Извините, что предоставил ответ через год после свершившегося факта, но я наткнулся на этот пост, когда искал статьи на эту тему. Ваши вопросы отражают широко распространенные разногласия и интерпретации «мгновенной частоты», которые преследуют поле с момента его создания. Многочисленные люди скажут вам, как некоторые из ответов здесь, что ЕСЛИ применимо только к «узкополосным» или «однокомпонентным» сигналам. На самом деле это не так: иногда ПЧ, полученная с помощью преобразования Гильберта, идеально подходит для широкополосных и / или «многокомпонентных» сигналов. Одна из предложенных величин, которая позволяет избежать многих из этих трудностей, - это «средневзвешенная мгновенная частота (WAIF)», которую можно измерить с помощью спектрограммы.

Смотри Loughlin в J. Acoust. Soc. Am., Jan. 1999. Другие хорошие работы по IF и распространенным заблуждениям принадлежат Picinbono (IEEE Trans. Sig. Proc., March 1997) и Вакману (IEEE Trans. Sig. Proc., April 1996).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.