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.
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
Wenn du die ersten zwei Nulldurchgänge ordentlich erkennst kannst du doch bis in alle Ewigkeit die zukünftigen Durchgänge vorhersagen ?!
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.
Hallo Christoph, warum muß das ganze in der Zukunft funktionieren? Ist die Frequenz der Schwingung so hoch? Gruß Olaf
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".
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
Mit was für einer Genauigkeit in welchem Zahlenformat rechnest du?
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.
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.
"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.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.