PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Digitaler Tiefpass höherer Ordnung



Christoph2
12.03.2013, 15:04
Hi,

ich will auf einem ATmega128 einen digitalen Tiefpass 4. Ordnung realisieren.
Er dient als Sanftanlauf für einen Radnabenmotor. Ich weiß, das kann man auch mit einer Rampe machen - ich würde aber gerne probieren, ob ich mit einem Tiefpass bessere Ergebnisse bekomme.

Ich habe es bis jetzt leider nur geschafft, einen Tiefpass 1. Ordnung nach dieser Formel zu bauen:
http://de.wikipedia.org/wiki/PT1-Glied#Zeitdiskretes_PT1-Glied

Nun habe ich in Matlab vier davon hintereinandergeschalten - hier der Code falls jemand Matlab hat:


t=1:48;
x=[0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];

y=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
y2=y;
y3=y;
y4=y;


K=1;
T=4;
dt=1;

for n=2:48; y(n)=(1/(T/dt+1))*(K*x(n)-y(n-1))+y(n-1); end

for n=2:48; y2(n)=(1/(T/dt+1))*(K*y(n)-y2(n-1))+y2(n-1); end

for n=2:48; y3(n)=(1/(T/dt+1))*(K*y2(n)-y3(n-1))+y3(n-1); end

for n=2:48; y4(n)=(1/(T/dt+1))*(K*y3(n)-y4(n-1))+y4(n-1); end

plot(t,y4);


Das funktioniert gut - auf dem PC.
Für den uC ist es aber etwas rechenaufwendig.
Gibt es da eine einfachere Methode, mit der er in einem Durchgang auf die letzten 4 Ausgangswerte + den aktuellen Eingangswert zugreift, und mir ein Ergebnis liefert?

Ein guter Link würde mir schon reichen... Ich hab heut den ganzen Tag gegoogled, aber leider nichts gefunden was ich auch verstanden habe.

lg
Christoph

rideyourstyle
12.03.2013, 19:52
Kennst oder hast du die DSP System Toolbox? mit der ist es einfach digitale Filter zu entwerfen. Das Resultat ist dann eine Reihe Faktoren die so y(n) = x(n)*k0 + x(n-1)*k1 + x(n-2)*k3 + .... miteinander verrechnet werden. Das heisst du musst pro Ausgabewert eine Anzahl Multiplikationen und Additionen machen. Die Architektur eines DSPs ist auf diese Funktionen optimiert, denn damit kann man sehr viele Filter realisieren (sogenannte FIR-Filter). Bei IIR-Filter werden zusätzlich mit einer zweiten Reihe Faktoren die y(n-1),y(n-2),... dazuaddiert. Damit können höhere Filterordnungen realisiert werden, aber auch instabile Filter sind möglich.

Einfacher würde ein "Moving Average"-Filter aussehen. Du speicherst zum Beispiel immer die letzten 10 Werte. Der gefilterte Wert besteht dann aus der Summe dieser letzten Werte geteilt durch die Anzahl. Das ergibt auch ein Tiefpassverhalten, abhängig von der Anzahl Werte. Wenn du das einigermassen schlau progorammierst, dann kannst du damit experimentieren bis dir das Ergebnis passt. Das geht auf dem uC und mit Matlab...

Soweit sogut? ;-)

Gruss
Peter

Christoph2
16.03.2013, 00:15
Hi,

vielen Dank für die Antwort!

Ich habe jetzt einen Moving Average filter mit einstellbarer Anzahl der zu mittelnden Werte programmiert.
Es funktioniert erstaunlich gut! Ich glaube das lass ich so.

lg
Christoph