www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP DSP TMS320 Nulldurchgangserkennung


Autor: Christoph Gulich (jantar)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

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

Autor: Christoph Gulich (jantar)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph,

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

Gruß

Olaf

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit was für einer Genauigkeit in welchem Zahlenformat rechnest du?

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.