DSP TMS320 Nulldurchgangserkennung

OP #390391
Hallo,


ich habe einen TMS32067 und möchte aus einem Signal welches grob
mathematisch so ( y(t)= exp(-t/a)+cos(2*pi*f*t) ) aussieht den
Nulldurchgang bestimmen. Dabei habe ich das Problem das ich den
Nulldurchgang um eine Periode vorraussehen (Zukunft) muss .Meine Idee
war bis jetzt einfach eine lineare Regression zu machen und die
Funktion später wieder zusammenzusetzen leider bin ich dabei zu
ungenau. Vielleicht hat einer ne Idee wie man das anstellen könnte.
Gast #390392
Hallo Christoph,

die Nulldurchgangserkennung selbst stellt ja wohl kein Problem dar.
Was ich nicht verstehe, warum willst Du wissen wann der Durchgang in
der Zukunft erfolgen wird?

Gruß

Olaf
OP #390394
Hallo Alex,

ich möchte den Nulldurchgang in der Zukunft haben damit ich
entsprechend reagieren kann zu diesem Zeitpunkt also ein mechanisches
Problem, deswegen muss ich wissen ob es dort einen Durchgang gibt.

Leider kann ich nicht alle zukünftigen Nulldurchgänge Vorraussehen da
ich mitunter noch keinen hatte wenn die Kurve sehr steil abfällt also
der exponentielle Anteil größer als die Amplitude der Schwingung ist.
Das passiert leider auf alle Fälle . In alle Ewigkeit kann ich denn
Nulldurchgang erst erkennen wenn der Exp Anteil sehr nahe bei 0 liegt.


Ich denke ich muss nun sehen das ich das Signal analysiert bekomme und
eine mathematische Beschreibung finde die mir erlaubt den Nulldurchgang
vorrauszusehen.
Gast #390396
Hallo Olaf,


also Rechenzeit habe ich genug die Frequenz ist niedrig, Problem ist
das ich ein mechanisches delay ausgleichen muss und deswegen auch
vorher wissen muss wann der Nulldurchgang ist. Also ich muss definitiv
in die Zukunft "Warsagen".
Gast #390397
Dann erscheint mir die lineare Regression doch am geeignetsten. Worin
lagen die Ursachen für die Ungenauigkeit?

- Zu kleines Messintervall?
- Verrauschte Größen?
- Evtl. ungenauer Ansatz des Gleichungssystems?

Hast du versucht, evtl. einen IIR-Filter o.Ä. vorzuschalten, falls das
Rauschen ein Problem darstellt?
Was für ein mechanisches System ist es genau? Evtl. existieren weitere
Zeitkonstanten, die du nicht vernachlässigen darfst?!


Alex
Gast #390399
normiert auf 20ms brauche ich einen Fehler von 0.9 % also z.B. einen
absoluten Fehler von 0.00002 s  wäre günstig bis zu 1% Fehler wäre noch
ausreichend.
Gast #390400
also das Rauschen habe ich herausgefiltert und dann in Matlab eine
lineare regression gemacht. Ohne Filter war die lineare Regression
überhaupt nicht zu gebrauchen aber so geht es besser...aber der Fehler
ist zu groß.

Ich hab versucht das Fenster in der Größe zu variieren aber der Fehler
blieb relativ konstant. Ich bin dabei auch beschränkt auf 2 Perioden in
der ich mich entscheiden muss.


Ungenauer Ansatz (y(t) = (m*t+n)+a*cos(2*pi*t+phi) das ist meine
zusammengesetze Funktion und die Regression lasse ich in Matlab über
polyfit() berechnen.


Weitere Konstanten gibt es nicht das habe ich überprüft.


Ich bin gerade dabei zu schauen ob es eine Art Approximierung gibt oder
ich berechnen kann indem ich sage y(t)= exp(-b*t)+a*cos(2*pi*t+phi) ist
die Funktion und passe mir nur noch die Parameter an. Da schau ich grad
wie der Fehler ist.
Gast #390401
"2 Perioden in denen ich mich entscheiden muss"

Dann hast du also doch eine Chance im Anlaufen. Dort müsstest du doch
die Perioden sehr genau ausmessen können und deinen Prädiktor
entsprechend einstellen. In der Folge adaptierst du nur noch mit
entsprechenden Regelalgorithmen deine Parameter.
Gast #390402
Hallo Alex

ich bin jetzt soweit dass ich eine Regression auf die Funktion
y(t)=a*exp(-b*x)+c*cos(2*pi*50*x+d)+e hinbekommen habe. Und die
Parameter soweit stimmen. Das alles ist noch sehr russisch und ohne
Filter. Ich komme auf einen max. Fehler von ca. 2 % normiert auf die
20ms.

Ich hoffe das ich das noch mit einem Filter verbessern kann. Ich sample
das Signal mit 10 Khz und die cos Schwingung hat 50 Hz. Was für einen
IIR Filter würdest du nehmen?
Gast #390403
Nimm z.B. einfach ein DT2-System der Form:

f = 50;
KI = 2*pi*f;
KP = 1;
num = [KP*KI 0];
den = [1 KP*KI KI*KI];
Gp = tf(num,den);
bode(Gp);

Das ist ein einfaches System 2. Ordnung (Bandpass) und liefert bei
geringem Rechenaufwand bereits ordentliche Ergebnisse. Programmieren
kann man es z.B. mit 2 diskreten Integratoren und einem P-Glied.

Alex

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.