Forum: Digitale Signalverarbeitung / DSP / Machine Learning Koeffizienten von DGL berechnen


von Maik R. (kiamur)


Lesenswert?

Hallo!

Ich möchte mal zum Üben einen Tiefpass Filter in meinem Microcontroller 
implementieren.

Dazu habe ich die Differentialgleichung aufgestellt und mit der Explizit 
Euler Methode digitalisiert. Das habe ich dann in Matlab/Simulink 
getestet und es läuft auch.

Jetzt ist mein Problem das ganze in den Microcontroller zu bekommen. In 
meiner digitalisierten DGL habe ich die beiden Koeffizienten a und b, 
die folgendermaßen aussehen:

a=1-ts/RC, b=ts/RC

Wie komme ich auf den Wert für ts? Dass das die Samplingfrequenz ist 
habe ich schon herausbekommen. Aber wie ermittele ich die für meinen 
Microcontroller?
Es handelt sich dabei um einen PIC18f458 mit 4MHz Kristall. Die Frequenz 
für die A/D Wandlung ist Fosc/8. Aber eigentlich glaube ich nicht, dass 
das der Wert für mein ts ist. Ich denke viel mehr, dass mit ts die Zeit 
zwischen 2 A/D Wandlungen gemeint ist, oder?
Muss ich dann die Zeiten der Befehle addieren, die die Berechnung der 
DGL im Microcontroller in Anspruch nehmen? Oder wie geht man da generell 
vor?

Kann mir jemand von euch Literatur zu dem Thema empfehlen? Damit meine 
ich keine Theorieschinken zur digitalen Signalverarbeitung, denn davon 
habe ich schon ein paar. Ich suche etwas, wo die Implementierung der 
Theorie in echten Controllern beschrieben wird. Gerne auch in englisch.

Vielen Dank schon mal
Maik

von Oschi (Gast)


Lesenswert?

Die Samplingfrequenz muss ev. vorgegeben werden. Denn in einem 
physikalischen Systemn ist sie nicht beliebig frei waehlbr. Sie muss 
naemlich einiges oberhalb von Grenzfrequenzen und Resonanzen sein.

O.

von Matthias (Gast)


Lesenswert?

"Ich denke viel mehr, dass mit ts die Zeit
zwischen 2 A/D Wandlungen gemeint ist, oder?"
RICHTIG.

"Muss ich dann die Zeiten der Befehle addieren.."
FALSCH.

Aber die Berechnung von Tiefpassen, Hochpassen etc... in digitalen IC's 
geschieht nicht über Differentialgleichungen, sondern über 
Differenzengleichungen. Die macht man mittels Z-Transformation.

von Maik R. (kiamur)


Lesenswert?

Hallo und danke für die Antworten.

Okay, das ist ja schon mal was.

"Ich denke viel mehr, dass mit ts die Zeit
zwischen 2 A/D Wandlungen gemeint ist, oder?"
RICHTIG.
-Diese Bestätigung habe ich gebraucht. DANKE!!

"Muss ich dann die Zeiten der Befehle addieren.."
FALSCH.
-Wie komme ich denn dann auf die Samplingzeit? Gut, sie muss mindestens 
die doppelte Frequenz haben, von dem, was ich sampeln möchte, aber ich 
muss ja zusehen, dass ich alles an Berechnungen "erledige", die nötig 
sind, oder? (ich bin halt noch ganz am Anfang . . . )

"Aber die Berechnung von Tiefpassen, Hochpassen etc... in digitalen IC's
geschieht nicht über Differentialgleichungen, sondern über
Differenzengleichungen. Die macht man mittels Z-Transformation."
Sorry, bei den mathematischen Ausdrücken bin ich mir auch nie so sicher. 
Ich habe echt gedacht, dass das, was ich da für den Tiefpass erstellt 
habe eine digitalisierte DGL erster Ordnung ist:

u_c(k)=a*u_c(k-1)+b*u_e(k-1)

mit a und b, wie oben angegeben.

Mit den ganzen Transformationen stehe ich auf Kriegsfuß, weil ich die 
noch nie so richtig durchschaut habe. . . (trotz meiner Theorieschinken)

Gruß
Maik

von Matthias (Gast)


Lesenswert?

"Ich habe echt gedacht, dass das, was ich da für den Tiefpass erstellt
habe eine digitalisierte DGL erster Ordnung ist: 
u_c(k)=a*u_c(k-1)+b*u_e(k-1)
mit a und b, wie oben angegeben...."

Das ist keine DGL mehr!! Aber schon eine Differenzengleichung, da kannst 
du dir die Transformationen sparen...  ;-)
Das siehst du daran, das deine werte (hier c, u_c, u_e) NICHT von der 
Zeit (direkt) abhängig sind (es heißt ja nicht c(t)  ), sonder c(k), 
wobei k den aktuellen Abtastzeitpunkt t=k*ts beschreibt.

den Begriff "digitalisierte DGL" habe ich noch nie gehört, wills deshalb 
weder als richtig noch als falsch einstufen, ist nur ein Begriff und 
jetzt denk ich nicht so wichtig hier...

Die Samplingzeit musst du mittels deiner Taktfrequenz des AD-Wandlers 
ermitteln können, welcher Zusammenhang zwischen dieser Taktfrequenz und 
der Samplingfrequenz besteht, kann/muss dir das Datenblatt sagen. Ich 
kenne die PIC's nicht, und kann dir das demzufolge nicht beantworten...

Richtig, die Berechnungen sollten erledigt sein, bevor der nächste 
Samplingwert "eintrudelt", also innerhalb ts erfolgen..
Da dieses Ergebnis zwingenderweise mit dem (nächsten) Takt auszugeben 
ist, erfolgt dadurch eine Verzögerung um exakt einen Takt. Dies ist bei 
Filteranwendungen normal, und muss besonders bei der Realisierung von 
digitalen Reglern beachtet werden (Totzeit)...

noch Fragen...?

von Dennis (Gast)


Lesenswert?

>>den Begriff "digitalisierte DGL" habe ich noch nie gehört

er meint bestimmt "diskretisiert"

von Maik R. (kiamur)


Lesenswert?

Hi Matthias!

 "Digitalisierte" DGL habe ich es deswegen genannt, weil ich zunächst 
die DGL des Tiefpasses in Abhängigkeit von t erstellt habe:

u_c'(t)=-u_c(t)/RC+u_e(t)/RC

Danach habe ich diese Gleichung mit Hilfe der "explizit Euler" Methode, 
die wir so in der FH gelernt haben, "digitalisiert":

u_c'(t)=(u_c(k)-u_c(k-1))/ts
u_c(t)=u_c(k-1), u_e(t)=u_e(k-1)

Das Ganze dann in die DGL oben eingesetzt, nach u_c(k) aufgelöst und die 
"digitalisierte DGL" erhalten.
Ob man das nun so nennen darf, oder nicht, weiß ich nicht. Nur so zur 
Info, wie ich darauf gekommen bin.

Du scheinst ja etwas Erfahrung zu haben mit der digitalen 
Signalverarbeitung. Kannst du mir vielleicht ein Buch empfehlen, dass, 
wie gesagt, auch mal die Umsetzung der Theorie in den DSP/Controller 
beschreibt, und auf was man da alles achten muss? Ich komme da nämlich 
mit meinen Recherchen nicht so richtig weiter.

Gruß
Maik

von Matthias (Gast)


Lesenswert?

nein. Sorry mein Studium (E-Technik FH) ging bisher ohne Bücher. Ausser 
einem guten Mathebuch. Da ich das auch als Hobby mache (wenn µC, dann 
allerdings Atmel AVR) habe ich ziemlich viel Erfahrung bzgl Elektronik. 
Mit DSPs selbst habe ich allerdings noch nie zutun gehabt...
Ich rechne solche Differenzengleichungen meist per Hand von der 
Differtialgleichung/Übertragungsfkt (im s-Bereich) direkt in den 
Z-Bereich und dann nach Ausgang(k) umstellen...
Aber frag ruhig...

von Maik R. (kiamur)


Lesenswert?

"Ich rechne solche Differenzengleichungen meist per Hand von der
Differtialgleichung/Übertragungsfkt (im s-Bereich) direkt in den
Z-Bereich und dann nach Ausgang(k) umstellen..."

Irgendwie sind das für mich immer noch bömische Dörfer . . . gerade was 
diese ganzen Transformationen betrifft. Ich weiß zwar, das die sehr 
nützlich sind, um die Gleichungen nicht mehr mit Integral- oder 
Differentialrechnung lösen zu müssen, sondern mit algebraischen 
Methoden, aber wann man was und wie am Besten macht, dafür fehlt es mir 
an Durchblick.

Wenn du jetzt hier z.B. die z-Transformation erwähnst, dann frage ich 
mich, wo jetzt dieses Euler Verfahren einzuordnen ist, dass ich 
verwendet habe?
Naja, das würde wohl jetzt zu weit führen . . .

Wie gehst du denn dann an die AVR Programmierung ran, wenn du was auf 
dem Papier ausgerechnet hast, und das dann in den Controller bekommen 
willst. So unterschiedlich werden doch die Methoden zwischen PIC und AVR 
nicht sein.

Ich versuche das jetzt erst mal in den PIC zu bekommen, bin aber für 
jeden Praxistip dankbar.

Gruß
Maik

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Na wenn du die konrekete umzusetzende Differenzengleichung hast, dann 
musst du "nur" sehen, wie du diese realisieren kannst. Wichtig ist dort 
zB das Vermeiden von gebrochenen Werten, also musst du alle Werte mit 
einem Faktor versehen, den du zuletzt wieder herausrechnest. 
Mathematisch ist das so gemeint:
Aus
y(n) = 0.1234*x(n) - 0.4321*y(n-1)
wird zB

256*y(n) = 32*x(n) - 111*y(n-1)
somit umgehst du die Brüche.

Und ganz wichtig ist immer dass die EIngangswerte in gleichen Zeiten 
gesampelt werden..
Gucke dir dazu mal den Anhang an, ist zwar für AVR, aber sollte 
helfen...

von Maik R. (kiamur)


Lesenswert?

Hey, danke!

Das sind genau die Art von Tips, die ich suche.

Und Danke auch für das Dokument. Da werde ich mich mal durcharbeiten. 
Wie gesagt, vom Grundsatz her müsste das für die PICs ja genauso gehen.

Gruß
Maik

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.