Обчисліть та інтерпретуйте миттєву частоту


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 збільшена, тому амплітуди цих сигнали дуже крихітні!

Перша можливість дістатись від аналітичного сигналу до миттєвої частоти: де - миттєва фаза. Я думаю, що це найпоширеніший метод, який сьогодні використовується, принаймні на веб-сторінці MATLAB він розрахований саме так. Код виглядає наступним чином:

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

У статті Барнс тепер пропонує (а точніше сказане компілює) чотири інші способи обчислення миттєвих частот з аналітичного сигналу. Він також згадує верхню формулу, але вважає, що це недоцільно через неоднозначності у фазі. Я здогадуюсь, він не знав unwrap()методу, а якщо бути точнішим математикою за ним. (Я сам дізнався про цей метод саме сьогодні, коли дивився на деякі інші вихідні коди миттєвих частот)

У своїй роботі формула має мітку Number (2), тому я дав f (t) індекс 2. Всі інші індекси відповідають однаково до їх номерів у роботі.

Через неоднозначності на етапі він радше пропонує:

f3(t)=12πx(t)y(t)ax(t)y(t)bx(t)2c+y(t)2d
Я ввів символи "a", "b", "c" та "d", щоб трохи спростити програмування:

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

У всіх 3-х наближеннях формули T було встановлено на Fs (T = Fs = 1000 = 1s), як було запропоновано у статті.

Тепер моє запитання:

  • Формули f2 і f3 повертають однаковий результат для чистого щебетання сигналу. Я думаю, що це добре, оскільки вони обчислюють те саме. Три методи наближення не повертають одне і те ж, навіть не те, що близьке до нього! Чому це так? (Я сподіваюся, що це не просто помилка програмування ...)
  • Хоча вони повертають те саме, особливо в кінці сюжету вони починають сильно хитатися . Яке пояснення цьому? Я спершу придумав щось на зразок псевдоніму, але моя частота вибірки досить висока, порівняно з частотою сигналів, тому я думаю, що це можна виключити.
  • Принаймні, f2 і f3, здається, підходять для чистого щебетання сигналу, але всі методи, включаючи f2 і f3, здаються жахливими, коли мова йде про більш ніж одну частоту в сигналі. Насправді наявність сигналу більше однієї частоти - це завжди завжди. Тож як можна отримати (більш-менш) правильну миттєву частоту?

    • Я насправді навіть не знаю, чого очікувати, коли в сигналі присутня більше однієї частоти. Обчислення повертає одне число за певний момент часу, так що робити, коли, як і тут, більше частот? Повернути середнє значення всіх частот чи щось подібне?
  • І моє, мабуть, найважливіше запитання - як це обробляється в реальному і розробленому програмному забезпеченні? Скажімо, я хочу знати миттєву частоту модульованого сигналу на 1,75 с, і я вибрав метод f2, ніж мені може пощастить і отримати число, близьке до 6 [Гц], що, швидше за все, є правильною відповіддю, або я підбирайте мої результати кілька зразків поруч із нею і раптом я отримую деякий провід, шлях до високого результату, тому що я, на жаль, вибрав значення у шипі. Як це можна впоратися? Після обробки його середнім або навіть краще середнім фільтром? Я думаю, що навіть це може стати справді важким, особливо в регіонах, де багато шипів знаходяться поруч.

І одне останнє, не настільки важливе питання, чому так, що більшість робіт, які я знаходжу на миттєвих частотах, стосуються географічної області, особливо в обчисленні сейсмографічних подій, таких як землетруси. Папір Барна також бере це як приклад. Хіба миттєва частота не цікава в багатьох областях?

Ось це поки що, я дуже вдячний за кожну відповідь, особливо коли хтось дає мені поради, як її реалізувати в реальному програмному проекті ;)

З повагою, Патріку

Відповіді:


4

Не дуже відповідь, але може бути корисною: Особисто я виявив, що концепція миттєвої частоти корисна лише для досить вузьких смугових сигналів.

Розглянемо простий приклад двох стійких синусоїд, скажімо, 100 Гц і 934 Гц. У цьому випадку ви, безумовно, можете визначити та обчислити миттєву частоту (будь-яким способом), але яким повинен бути результат? Які можливі уявлення чи властивості можуть мати миттєві частоти, які говорять про щось важливе щодо сигналу? Застосування концепції миттєвої частоти до сигналів, які мають декілька частот одночасно, просто не має великого сенсу.

Ось чому ви отримуєте гідні результати для розгортки, але непарні криві для Sweep + sine. Це також причина, чому ви бачите ворушіння високою частиною підмітання. Пропускна здатність сигналу стає занадто високою, щоб призначити йому одне частотне число, і тому результати стрибають навколо.


Подяка за підказку поки що, і я вважаю, що цей коментар робить хороший момент. Але тоді мені цікаво, чому обчислення миттєвої фази "чистого сигналу чирикання" натрапляє на проблеми, коли вище 20 Гц Існує ще одна частота для визначення, присутності.
muuh

// Поняття миттєвої частоти корисне лише для досить вузьких смугових сигналів .// ------ так, як один синусоїд AM'd і FM'd.
Роберт Брістоу-Джонсон

4

Принаймні, f2 і f3, здається, підходять для чистого щебетання сигналу, але всі методи, включаючи f2 і f3, здаються жахливими, коли мова йде про більш ніж одну частоту в сигналі. Насправді наявність сигналу більше однієї частоти - це завжди завжди. Тож як можна отримати (більш-менш) правильну миттєву частоту?

як пропонує Гільмар, метод перетворення Гільберта (або "Аналітичний сигнал") не працює на широкосмуговому діапазоні, оскільки є більш ніж одна частотна складова. ви можете зробити цей метод лише для одного синусоїдального компонента.

тож, із підходом аналітичного сигналу, ви хочете скористатися цією ідентичністю:

arctanuarctanv=arctan(uv1+uv)

якщоє досить маленькою, з якої можна отримати формулу Барнера " ".|uv|f9

але в розрахунку перетворення Гільберта має бути лише один синусоїд, що змінюється за часом, щоб це зробити правильно. і вам краще вирівняти "пофазний" компонент з виходом трансформації Гільберта (який затримується з причинним фільтром FIR). інакше ви отримаєте лайно.


1

Нічого собі, яке величезне питання. Я спершу відповім на не дуже важливе питання:

І одне останнє, не настільки важливе питання, чому так, що більшість робіт, які я знаходжу на миттєвих частотах, стосуються географічної області, особливо в обчисленні сейсмографічних подій, таких як землетруси. Папір Барна також бере це як приклад. Хіба миттєва частота не цікава в багатьох областях?

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


Що стосується ваших більш важливих питань: зазвичай, арифметичні відмінності та обчислення арктангентів за сигналами дискретного часу - це погана річ . Це тому, що оцінки дискретних часових частот потрібно обчислювати за допомогою "кругової арифметики" (векторної арифметики AKA).TM

Ознайомтеся з цим документом.

Кращі підходи, як правило, використовують "середньозважені середні фази", як реалізовано тут . Або тут для прямого посилання на матлаб .


1

Вибачте, що надали відповідь через рік після факту, але я наткнувся на цю публікацію під час пошуку статей на цю саму тему. Ваші запитання відображають поширені розбіжності та інтерпретації "миттєвої частоти", які страждають на полі з моменту його створення. Чимало людей скажуть вам, як деякі відповіді тут, що ІФ застосовується лише для сигналів "вузькосмугового" або "монокомпонентного". Насправді це не вірно: іноді ПЧ, отриманий перетворенням Гільберта, чудово сприймається для широкосмугових та / або «багатокомпонентних» сигналів. Одна із запропонованих величин, яка дозволяє уникнути багатьох цих труднощів, - це "середньозважена миттєва частота (WAIF)", яку можна виміряти за допомогою спектрограми.

Див. Лофліна в J. Acoust. Соц. Am., Січень 1999 р. Інші хороші документи щодо ІФ та поширених помилок - Пікінбоно (IEEE Trans. Sig. Proc., Березень 1997 р.) Та Вакман (IEEE Trans. Sig. Proc., Квітень 1996 р.).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.