Mathematische Bastelei

Begonnen von ABel, 09. Juli 2023, 15:59

⏪ vorheriges - nächstes ⏩

ABel

Hallo,

statt in Hardware hab ich in den vergangenen Tagen in Software gebastelt.

Herausgekommen ist – bisher – ein Octave-Skript (Freie Software von https://octave.org/), das einen Trapezimpuls als Fourier-Reihe annährt und aus dieser Näherung mit Hilfe einer Fourier-Transformation einen Frequenzgang berechnet. Der Frequenzgang lässt sich dann mit den Parametern der Fourier-Reihe vergleichen. Es hat einige Zeit gebraucht, bis ich die Ergebnisse der Fourier-Transformation so aufgearbeitet hatte, bis dieser Vergleich möglich war.

Leider habe ich keine Fourier-Reihe für einen Trapezimpuls mit unterschiedlicher Steigung für aufsteigende und abfallende Flanke gefunden. Diese könnte wohl noch besser als Nachbildung eines Detektorimpulses dienen. Wenn es das gibt, wäre ich für Hinweise darauf dankbar.

Im nächsten Schritt will ich durch Faltungen hinter die theoretischen Geheimnisse von Signalfiltern kommen.

Um das Programm in Octave ausführen zu können, muss "Trapezimpuls.txt" in "Trapezimpuls.m" umbenannt werden.

Gruß Andreas

ABel

Hallo,

in dem Beispielprogramm von gestern ergeben sich mit einem Tau (zeitliche Länge des Impulses von A/2 im steigenden bis A/2 im fallenden Ast) von 9,375 μsec eine Grundfrequenz f0 von 53,333 kHz.

Die Amplituden der Oberschwingungen n*f0 sind für n=2,4,6,8 (fmax war zu 8 gesetzt) nahe Null, für n=1 +6,079..., n=3 -1,35..., n=5 +0,243... und n=7 +0,124...

Die Amplitudenwerte aus der Fourier-Transformation unterscheiden sich für die relevanten Frequenzen (n=1,3,5,7) maximal an de 3ten Stelle von denen der Fourier-Reihe.

Der Trapezimpuls lässt sich nun auch in LTspice nachbilden. Die dort vorgenommene Fourier-Transformation liefert (wenn die betrachtete Zeitspanne 2*Tau=T0=1/f0 ist) die ersten Wertepaare für die Frequenzen 53,619 kHz, 107,238 kHz, 160,857 kHz, ... Also auch sehr nahe an den Werten der zugrundeliegenden Fourier-Reihe. Für längere Zeitspannen (z.B. 10*T0) wird der Frequenzgang feiner aufgelöst, die Amplituden der wichtigen Frequenzen werden dabei verbreitert und sind nicht mehr zu identifizieren.

Gruß Andreas

ABel

Hallo,

in der Zwischenzeit hab ich etwas weiter gebastelt.

In LTspice lässt sich mit einem ,,Current source" und den Optionen ,,PULSE(0 0.4uA 1u 2u 2u 2u 440u)" sowie mit ,,.tran 0 419u 0" ein schöner Trapezimpuls mit langer Nachlaufzeit erzeugen. LTspice kann daraus auch eine Fast-Fourier-Transformation (FFT) errechnen, die sich in eine Text-Datei exportieren lässt (per Default macht er das im Format ,,Polar (dB,deg)", besser lässt sich aber mit dem Format ,,Cartesian: re,im" weiterarbeiten.

Die exportierte txt-Datei lässt sich in das freie Mathematikprogramm Octave einlesen. Allerdings muss die Datei zuvor von Hand bearbeitet werden.

- Die ersten beiden Zeilen müssen gelöscht werden.
- Die weiteren Zeilen sehen so aus:
  1.32978723404255e+04 2.82682361337981e-08,-9.81306239668774e-09
  zwischen erster und zweiter Zahl befindet sich ein "Tab", zwischen zweiter und dritter ein ",".
  Es muss entweder aus dem "Tab" ein ",", oder aus dem  "," ein "Tab" gemacht werden.
- Was in der 1ten Spalte (das ist die Frequenz) über 3 Zehnerpotenzen hinausgeht sollte gelöscht werden, sonst dauern weitere Berechnungen zu lange und die erzeugten Diagramme werden unanschaulich.

In der Anlage das Octave-Programm Trapezimpuls_Car.txt  (die Endung .txt muss in .m geändert werden), mein Ausgangsdatensatz (Trapezimpuls_1x2x2x2u_419u.txt) und ein paar der erzeugten Diagramme.

Die Frequenzen der Fourierreihe für einen Trapezimpuls lassen sich durch eine Nullstellensuche im Imaginärwert (3te Spalte) finden. Schwierigkeit: Es sind nicht nur einfache Nullstellen, sondern auch Wendepunkte und Sattelpunkte.

Gruß Andreas

ABel

Hallo,

mein Octave-Programm kann inzwischen Signale als .war-Datei (leider zwingend in mono) oder Tabelle als .txt-Datei einlesen. Es führt dann selbst eine Fourier-Transformation durch und berechnet eine Näherung des Signals als Fourier-Reihe.

Für weiteres Ausprobieren könnte ich Dateien mit hochaufgelösten Signalen direkt aus einem Detektor brauchen. Also zum Beispiel aus einem Oszilloskop mit GHz-Bandbreite. Hat Jemand so etwas für mich?


Für Interessierte hier noch weitere Information zum Programm:

Komprimierte Audio-Formate (z.B. mp3) dürfen nicht verwendet werden!
Text-Dateien müssen in der ersten Spalte äquidistante Zeitschritte in Sekunden enthalten.
Achtung: Aus LTspice lässt sich das Signal exportieren, dieses ist oft nicht äquidistant! Darf also hier nicht eingelesen werden!

TSign (die Länge des Signals in Sekunden) muss vorgegeben werden, es muss länger als das einzulesende Signal sein (min. 3 Mal so lang). Das Signal wird dann bis zu dieser Zeit verlängert und mit dem letzten Wert des eingelesenen Signals gefüllt.
Grund für diese Verlängerung:
Die kleinste Frequenz der FFT ist durch 1/TSign bestimmt. Wenn diese Zeit zu klein und damit die kleinste Frequenz zu groß ist, kann ein Frequenzanteil des Signals nicht gefunden werden. Das aus der FFT zurückgerechnete Signal hat dann keine Ähnlichkeit mit dem eingelesenen Signal. Eine weiteren Vergrößerung von TSign kann dann eine Analyse doch noch möglich machen.

Die Ergebnisse dieses Programms lassen sich mit den Werten der FFT-Analyse aus LTspice vergleichen. Diese Werte müssen in Cartesischen Koordinaten in eine Datei exportiert werden.
Diese Datei muss vor dem Einlesen in dieses Programm mit einem Editor bearbeitet werden.
Die ersten beiden Zeilen müssen gelöscht werden. Die weiteren Zeilen sehen so aus:
    1.32978723404255e+04   2.82682361337981e-08,9.81306239668774e-09
nach dem Editieren müssen sie so aussehen
    1.32978723404255e+04   +2.82682361337981e-08+9.81306239668774e-09i
wichtig sind die Ergänzung von +-Zeichen vor 2ter und 3ter Zahl und das "i" am Ende. So werden 2te und 3te Zahl als Real- und Imaginärteil einer komplexen Zahl eingelesen.
Die FFT-Berechnungen von LTspice liefern sehr viele Werte, es macht daher Sinn alle Zeilen nach der Frequenz von 1.0e+05 zu löschen.

Der Parameter anz_null_max legt die Anzahl der für das zurückgerechnete Signal zu berücksichtigende Frequenzen fest. Für ein aufgezeichnetes Signal sollte der Wert durchaus 100 oder größer sein. Stammt das eingelesene Signal aus einer Fourier-Reihe (z.B. ein Trapezimpuls) darf dieser Wert kleiner als 10 sein.

In der Anlage ein paar Ergebnisse:
Zum einen ein Signal, das mit 7 Frequenzen einen Trapezimpuls annährt. Zum anderen ein Impuls der mit der Soundkarte bei 192000Hz aufgezeichnet wurde.
Im zip-Archiv das Programm und ein paar Beispieldateien.

Gruß Andreas