PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hoch-Tiefpass per Software?



Richard
20.10.2008, 12:50
Moin moin allerseits,

Ich hoffe unter "Sensoren" bin ich im richtigen Forum. Unter RN-Wissen
habe ich zwar verschiedene Filter gefunden, allerdings nur als Hardware
Lösung. Wie kann ich ein Signal am AD Eingang per Software Hoch B.zw
Tiefpass filtern?

Grüße Richard

pongi
20.10.2008, 13:05
Indem Du einen Filterentwurf machst (Signalverarbeitung - FIR bzw. IIR Filter) :-D Matlab kann das automatisch.

Eine Hardwarelösung ist aber vorzuziehen, da damit Aliasing vermieden wird. Bei der Softwarelösung können die Aliasingfrequenzen in Dein Nutzspektrum eingespiegelt werden.

thewulf00
20.10.2008, 13:07
Mit dem Filter erreichts Du ja das Wegfiltern eines Frequenzbandes. Das heißt, Du müsstest kontinuierlich dutzende, ja tausende Werte aufzeichnen und dann mathematisch bearbeiten. Das wird zu aufwendig und rechenlastig.

Davon abgesehen ist der interne AD im Atmel nicht schnell genug für einen Hochpass.

Besserwessi
20.10.2008, 17:43
Man wird keine besonders aufwendigen Filter im AVR programmieren, aber einiges ist doch schon möglich. Es ist dabei auch relativ egal ob das ein Hochpass,Tiefpass, Bandpass oder so hat, man wird halt mehr bei Frequenzen unter etwa 10 kHz bleiben.

Richard
20.10.2008, 18:03
Moin moin allerseits, danke für die Antworten. Aber es sieht so aus
als wenn man das dann doch besser Hatrwaremäßig machen sollte. :-(

Ich hätte aber noch eine Frage, ich versuche meine RN_Dualmotor
Steuerung zu Programmieren (Mega16) die pwm Anschlüsse liegen
an Portd. (4/5) die Steuersignale an,aus,Bremsen Motor1/2 wollte
ich dann auch über Portd laufen lassen. Nur bekomme ich Portd. (0/1)
nicht zum Schalten? Möglicherweise liegt das daran weil Portd Pin1
und Pin2 von der Internen RS232 belegt sind, kann man das ändern?

Grüße Richard

Vitis
21.10.2008, 09:33
och, es gibt da durchaus Lösungen für FFT auf dem AVR ...
hab da mal was gemacht für ne lichtorgel mit dmx, das war recht
schnell ... 64 messpunkte brauchte 10ms bei 16mhz die fft.

Richard
21.10.2008, 10:00
och, es gibt da durchaus Lösungen für FFT auf dem AVR ...
hab da mal was gemacht für ne lichtorgel mit dmx, das war recht
schnell ... 64 messpunkte brauchte 10ms bei 16mhz die fft.

Moin moin.
Im Konkretem Fall geht es hier darum einen Beschläunigungssensor
zu "beruhigen". Der sitzt auf den Kopf und steuert die Rundumsicht
beim Flugsimulator. Das klappt ziemlich gut, aber es kommt halt auch
ellerkleinste "Zitterbewegungen" durch dadurch ist die Ansicht etwas
sehr verwaggelt. :-(

Ich habe aber leider überhaupt keine ahnung wie man so einen Hoch7
Tiefpass Softwaremäßig realisiren kann, sonst würde ich das einfach mal
auf einen Testboard ausprobieren. Ich brauche ja quasie beinahe nur
sehr langsame Änderungen wie sie beim normalen Kopf heben/neigen
entstehen, also einen extremen Tiefpass.

Hast Du einen Link wo ich lesen kann wie so etwas per Software gemacht
wird?

Gruß Richard

thewulf00
21.10.2008, 10:00
Kannst Du uns die Lösung darlegen?

Markus4004
21.10.2008, 21:18
Im Konkretem Fall geht es hier darum einen Beschläunigungssensor
zu "beruhigen".

Der einfachste Tiefpass ist einfach Durchschnittsbildung. Du nimmst einfach mehrere Messwerte und berechnest den Durchschnitt davon. Wenn das eine 2er Potzenz ist (z.B. 8), dann kann man das Teilen durch ein Shift ersetzen, was dann viel schneller ist.

Markus

Felix G
22.10.2008, 00:01
Das heißt, Du müsstest kontinuierlich dutzende, ja tausende Werte aufzeichnen und dann mathematisch bearbeiten. Das wird zu aufwendig und rechenlastig.

Davon abgesehen ist der interne AD im Atmel nicht schnell genug für einen Hochpass.Also mal ganz davon abgesehen, daß man im Normalfall nicht tausende Werte speichern muss... wer sagt denn bitte daß der ADC für einen Hochpass zu langsam wäre?



Die richtige Lösung für das Problem wurde bereits genannt: FIR- oder IIR-Filter
Sowohl FIR (Finite Impulse Response) als auch IIR (Infinite Impulse Response) Filter sind leicht zu programmieren, und benötigen nur wenig Speicher und Rechenleistung.

Übrigens haben FIR-Filter die Eigenschaft grundsätzlich stabil zu sein, wohingegen IIR Filter unter Umständen auch instabil werden können (dem muss man entsprechend vorbeugen), dafür haben sie aber andere Vorteile.

thewulf00
22.10.2008, 08:45
Im Konkretem Fall geht es hier darum einen Beschläunigungssensor
zu "beruhigen".

Der einfachste Tiefpass ist einfach Durchschnittsbildung. Du nimmst einfach mehrere Messwerte und berechnest den Durchschnitt davon. Wenn das eine 2er Potzenz ist (z.B. 8), dann kann man das Teilen durch ein Shift ersetzen, was dann viel schneller ist.

Markus

@Richard: Dann schau bitte in diesen Thread (https://www.roboternetz.de/phpBB2/viewtopic.php?p=403610). Da wurde für Deinen Anwendungsfall eine gute Lösung diskutiert.

Richard
22.10.2008, 10:19
[quote]
Die richtige Lösung für das Problem wurde bereits genannt: FIR- oder IIR-Filter
Sowohl FIR (Finite Impulse Response) als auch IIR (Infinite Impulse Response) Filter sind leicht zu programmieren, und benötigen nur wenig Speicher und Rechenleistung.


Moin moin, danke für die Antworten, allerdings (hat) mir FIR b.z.w. IIR
Filter bisher NIX gesagt. Ich bin aber bei Google auf eine Site gestoßen
wo das auch für "Dummis" Verständlich erklärt wird.

http://www.sprut.de/electronic/pic/16bit/dsp/fir/fir.htm

Mit dem sollte sich schon mal ein kleines Testprogramm realisieren
lassen. :-)

Gruß Richard