Berechnen und interpretieren Sie die momentane Frequenz

9

Ich bin neu im Prinzip der Berechnung der Momentanfrequenz und habe viele Fragen dazu gestellt. Sie finden sie alle in einer Aufzählungsliste am Ende dieses Textes. Der Text mag etwas lang sein, entschuldigen Sie das, aber ich habe wirklich versucht, dieses Problem selbst zu lösen.

Ich interessiere mich also für die Momentanfrequenz eines reellen Signals . Die Berechnung erfolgt mit Hilfe eines analytischen Signals , wobei die Hilbert-Transformation von .f(t)x(t)z(t)=x(t)+jy(t)y(t)x(t)

Um die Momentanfrequenzen aus dem analytischen Signal zu berechnen, folgte ich dem Papier:z(t)

Die Berechnung der Momentanfrequenz und der Momentanbandbreite durch Arthur E. Barns aus dem Jahr 1992. In diesem Artikel stellt er mehrere Methoden zur Berechnung der Momentanfrequenz vor. Ich schreibe alle Formeln auf, die er in einem Moment vorgeschlagen (und verwendet) hat.

Zum "Lernen" habe ich in MATLAB mit einem sehr einfachen und zwei etwas komplexeren Signalen herumgespielt und wollte ihre momentanen Frequenzen erhalten.

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

Die Diagramme im Zeitbereich dieser drei Signale sehen wie folgt aus: Zeitbereichsdiagramme

Die Diagramme aller Momentanfrequenzen, die ich nach Anwendung aller Methoden aus dem Papier erhalten habe, sind folgende:

Momentanfrequenzen des reinen Chirpsignals: Momentane Frequenzen des reinen Chirpsignals Momentanfrequenzen des Chirpsignals mit hinzugefügtem Sinus: Momentane Frequenzen des Chirpsignals mit zusätzlicher Sinuskurve Momentanfrequenzen des modulierten Chirpsignals: Momentanfrequenzen des modulierten Chirpsignals Bitte beachten Sie, dass in allen drei Bildern die y-Achse von Diagramm 3 und 4 vergrößert ist, also die Amplituden dieser Signale sind sehr klein!

Die erste Möglichkeit, vom analytischen Signal zur momentanen Frequenz zu gelangen, ist: wobei die momentane Phase ist. Ich denke, dies ist die heute am häufigsten verwendete Methode, zumindest auf der MATLAB-Webseite wird sie so berechnet. Der Code sieht folgendermaßen aus:

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

In der Arbeit schlagen Scheunen nun vier andere Möglichkeiten vor (oder besser gesagt die Zusammenstellungen), um Momentanfrequenzen aus dem analytischen Signal zu berechnen. Er erwähnt auch die obere Formel, ist jedoch der Meinung, dass sie aufgrund von Unklarheiten in der Phase unpraktisch ist. Ich denke, er kannte die unwrap()Methode nicht, genauer gesagt die Mathematik dahinter. (Ich selbst habe diese Methode erst heute kennengelernt, als ich mir einige andere Quellcodes auf Momentanfrequenzen angesehen habe.)

In seiner Arbeit hat die Formel die Bezeichnung Nummer (2), daher habe ich dem f (t) den Index 2 gegeben. Alle anderen Indizes entsprechen auf die gleiche Weise ihren Zahlen in der Arbeit.

Wegen der Unklarheiten in der Phase schlägt er eher vor:

f3(t)=12πx(t)y'(t)ein- -x'(t)y(t)bx(t)2c+y(t)2d
Ich habe die Symbole "a", "b", "c" und "d" eingeführt, um die Programmierung ein wenig zu vereinfachen:

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

Dann gibt Barner drei weitere Formeln an, die er "Momentanfrequenznäherungen" nennt:

f9(t)=12πT.Arctan[x(t)y(t+T.)ein- -x(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πT.Arctan[x(t- -T.)y(t+T.)ein- -x(t+T.)y(t- -T.)bx(t- -T.)x(t+T.)c+y(t- -T.)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.)ein- -x(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

In allen 3 Näherungsformeln wurde T auf Fs gesetzt (T = Fs = 1000 = 1s), wie in der Veröffentlichung vorgeschlagen.

Jetzt sind meine Fragen:

  • Die Formeln f2 und f3 geben das gleiche Ergebnis für das reine Chirpsignal zurück. Ich finde das gut, da sie das gleiche berechnen. Die drei Approximationsmethoden geben nicht dasselbe zurück, nicht einmal etwas, das nahe daran liegt! Warum ist das so? (Ich hoffe es ist nicht nur ein Programmierfehler ...)
  • Obwohl sie das Gleiche zurückgeben, fangen sie vor allem am Ende der Handlung an, viel zu wackeln . Was ist die Erklärung dafür? Ich habe zuerst an so etwas wie Aliasing gedacht, aber meine Abtastfrequenz ist im Vergleich zur Frequenz der Signale ziemlich hoch, daher denke ich, dass dies ausgeschlossen werden kann.
  • Zumindest f2 und f3 scheinen bei einem reinen Chirpsignal angemessen zu funktionieren, aber alle Methoden, einschließlich f2 und f3, scheinen schrecklich zu scheitern, wenn es um mehr als eine Frequenz im Signal geht. In der Realität ist es eher immer der Fall, mehr als eine Frequenz in einem Signal zu haben. Wie kann man also die (mehr oder weniger) korrekte Momentanfrequenz erhalten?

    • Ich weiß eigentlich gar nicht, was mich erwartet, wenn mehr als eine Frequenz im Signal vorhanden ist. Die Berechnung gibt eine Zahl für einen bestimmten Zeitpunkt zurück. Was ist also zu tun, wenn wie hier mehr Frequenzen vorhanden sind? Den Durchschnitt aller Frequenzen zurückgeben oder so?
  • Und meine wahrscheinlich wichtigste Frage ist, wie das in einer echten und ausgearbeiteten Software gehandhabt wird. Nehmen wir an, ich möchte die momentane Frequenz des modulierten Signals bei 1,75 s wissen und habe die Methode f2 gewählt, dann kann ich Glück haben und eine Zahl nahe 6 [Hz] erhalten, was höchstwahrscheinlich die richtige Antwort ist, oder ich Wähle meine Ergebnisse ein paar Proben daneben und plötzlich bekomme ich ein verdrahtetes, viel zu hohes Ergebnis, weil ich leider einen Wert in der Spitze ausgewählt habe. Wie kann damit umgegangen werden? Durch Nachbearbeitung mit Mittelwert oder noch besser einem Medianfilter? Ich denke sogar, dass dies sehr schwierig werden könnte, insbesondere in Regionen, in denen viele Stacheln nebeneinander liegen.

Und eine letzte, nicht so wichtige Frage, warum die meisten Artikel, die ich über Momentanfrequenzen finde, aus dem Bereich der Geographie stammen, insbesondere bei der Berechnung seismographischer Ereignisse wie Erdbeben. Auch Barnes Artikel nimmt dies als Beispiel. Ist die momentane Frequenz nicht in vielen Bereichen interessant?

Bis jetzt bin ich sehr dankbar für jede Antwort, besonders wenn mir jemand Tipps gibt, wie man sie in ein echtes Softwareprojekt implementiert ;)

Herzliche Grüße, Patrick

muuh
quelle

Antworten:

4

Keine wirkliche Antwort, aber vielleicht hilfreich: Ich persönlich fand, dass das Konzept der Momentanfrequenz nur für ausreichend schmalbandige Signale nützlich ist.

Betrachten Sie das einfache Beispiel von zwei stetigen Sinuswellen, beispielsweise 100 Hz und 934 Hz. In diesem Fall können Sie sicherlich die momentane Frequenz definieren und berechnen (wie auch immer Sie wollen), aber was sollte das Ergebnis sein? Welche möglichen Einsichten oder Eigenschaften kann die momentane Frequenz haben, die etwas Bedeutendes über das Signal aussagen? Die Anwendung des Konzepts der Momentanfrequenz auf Signale, die mehrere Frequenzen gleichzeitig haben, macht einfach nicht viel Sinn.

Deshalb erhalten Sie anständige Ergebnisse für die Sweeps, aber ungerade Kurven für den Sweep + Sinus. Es ist auch der Grund, warum Sie die Wackelbewegungen im oberen Teil des Sweeps sehen. Die Bandbreite des Signals wird zu hoch, um ihm eine einzelne Frequenznummer zuzuweisen, und die Ergebnisse springen herum.

Hilmar
quelle
Vielen Dank für den Hinweis, und ich denke, dieser Kommentar macht einen guten Punkt. Aber dann frage ich mich, warum die Berechnung der momentanen Phase des "reinen Chirpsignals" bei über 20 Hz in Schwierigkeiten gerät. Es ist immer noch nur eine Frequenz zu bestimmen.
Muuh
// Das Konzept der Momentanfrequenz ist nur für ausreichend schmalbandige Signale nützlich.// ------ Ja, wie eine einzelne AM- und FM-Sinuskurve.
Robert Bristow-Johnson
4

Zumindest f2 und f3 scheinen bei einem reinen Chirpsignal angemessen zu funktionieren, aber alle Methoden, einschließlich f2 und f3, scheinen schrecklich zu scheitern, wenn es um mehr als eine Frequenz im Signal geht. In der Realität ist es eher immer der Fall, mehr als eine Frequenz in einem Signal zu haben. Wie kann man also die (mehr oder weniger) korrekte Momentanfrequenz erhalten?

Wie Hilmar vorschlägt, funktioniert die Hilbert-Transformationsmethode (oder "Analytic Signal") nicht im Breitband, da es mehr als eine Frequenzkomponente gibt. Sie können diese Methode nur für eine einzelne sinusförmige Komponente ausführen.

Mit dem Analytic Signal-Ansatz möchten Sie also diese Identität verwenden:

Arctanu- -Arctanv=Arctan(u- -v1+uv)

|u- -v|f9

In der Hilbert-Transformationsberechnung darf es jedoch nur eine zeitlich variierende Sinuskurve geben, um dies korrekt durchzuführen. und Sie richten die "In-Phase" -Komponente besser auf den Ausgang der Hilbert-Transformation aus (die mit einem kausalen FIR-Filter verzögert wird). sonst bekommst du Mist.

robert bristow-johnson
quelle
1

Wow, was für eine große Frage. Ich werde zuerst die nicht so wichtige Frage beantworten:

Und eine letzte, nicht so wichtige Frage, warum die meisten Artikel, die ich über Momentanfrequenzen finde, aus dem Bereich der Geographie stammen, insbesondere bei der Berechnung seismographischer Ereignisse wie Erdbeben. Auch Barnes Artikel nimmt dies als Beispiel. Ist die momentane Frequenz nicht in vielen Bereichen interessant?

Der Grund ist, dass das seismografische System "Vibroseis" in der Ölindustrie für seismische Untersuchungen verwendet wird. Die Lastwagen, die ich verbunden habe, vibrieren von ungefähr 5 Hz bis ungefähr 90 Hz und können dazu gebracht werden, Zwitschersignale zu erzeugen. In der Ölindustrie gibt es viel Geld, und die Verarbeitung der Renditen dieser Signale kann sehr, sehr lukrativ sein. Daher haben viele Menschen viele Stunden damit verbracht, solche Signale zu analysieren, einschließlich der Betrachtung von Momentanfrequenztechniken.


T.M.

Schauen Sie sich dieses Papier an.

Bessere Ansätze tendieren dazu, "phasengewichtete Mittelwerte" zu verwenden, wie sie hier implementiert sind . Oder hier für einen direkten Link zum Matlab .

Peter K.
quelle
1

Es tut mir leid, ein Jahr später eine Antwort zu geben, aber ich bin auf diesen Beitrag gestoßen, als ich nach Artikeln zu diesem Thema gesucht habe. Ihre Fragen spiegeln die weit verbreiteten Meinungsverschiedenheiten und Interpretationen der "augenblicklichen Frequenz" wider, die das Feld seit seiner Gründung geplagt haben. Zahlreiche Leute werden Ihnen als einige der Antworten hier sagen, dass IF nur für "Schmalband" - oder "Monokomponenten" -Signale gilt. Tatsächlich ist das nicht wahr: Manchmal verhält sich die durch die Hilbert-Transformation erhaltene ZF für Breitband- und / oder "Mehrkomponentensignale" perfekt. Eine vorgeschlagene Größe, die viele dieser Schwierigkeiten vermeidet, ist die "gewichtete durchschnittliche Momentanfrequenz (WAIF)", die unter Verwendung eines Spektrogramms gemessen werden kann.

Siehe Loughlin in J. Acoust. Soc. Am., Jan. 1999. Andere gute Artikel über IF und häufige Missverständnisse stammen von Picinbono (IEEE Trans. Sig. Proc., März 1997) und Vakman (IEEE Trans. Sig. Proc., April 1996).

Gast
quelle