Forum: Digitale Signalverarbeitung / DSP / Machine Learning DSP TMS320 Nulldurchgangserkennung


von Christoph G. (jantar)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

Wenn du die ersten zwei Nulldurchgänge ordentlich erkennst kannst du
doch bis in alle Ewigkeit die zukünftigen Durchgänge vorhersagen ?!

von Christoph G. (jantar)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

Hallo Christoph,

warum muß das ganze in der Zukunft funktionieren?
Ist die Frequenz der Schwingung so hoch?

Gruß

Olaf

von Christoph (Gast)


Lesenswert?

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".

von Alex (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

Mit was für einer Genauigkeit in welchem Zahlenformat rechnest du?

von Christoph (Gast)


Lesenswert?

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.

von Christoph (Gast)


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

"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.

von Christoph (Gast)


Lesenswert?

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?

von Alex (Gast)


Lesenswert?

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

von Christoph (Gast)


Lesenswert?

Hallo Alex,


hab noch bissl was geändert aber so funktioniert es soweit also danke
für deine Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.