Hallo allerseits. Ich möchte einen FIR oder IIR Filter in einem Mikrocontroller softwaremäßig einbauen.Die Koeffizientenberechnung überlasse ich dabei Matlab Studio. Dabei werden ja immer statische bzw. konstante Koeffizienten ermittelt, in Abhängigkeit der Sample Rate und gewünschter Bandbreite. Folgende Frage stellte sich mir beim Filterentwurf: Beispiel: Filter mit Abtastrate F(a)=1MHz, Bandbreite mit B = F(a)/4 = 1MHz/4 = 250kHz, Zeit zwischen 2 Abtastwerte beträgt: T(a)=1/F(a)=1µs Wie verhält sich der Filter wenn ich T(a)=1µs in meinem µC Programm nicht als konstant voraussetzten kann? Eine ISR Anfrage kann mir z.b. einen 2.Task aktivieren,wodurch sich die Zeit zur Berechnung eines neuen Ausgangswertes verändert: ISR_Routine() { task2_enabled=1; } while(1) { if(task2_enabled==1) { Task2(); } Task1() { Filter(new_sample); } } Da die Bandbreite auch von F(a)=1/T(a) abhängt verändert sich diese durch oben beschriebenes Problem. Gibt es Filteralgorithmen mit z.b. variablen Koeffizienten? (die man auch in einem µC umsetzten kann!) Oder kann man eine variable Zeit T(a) unberücksichtigt lassen? Gruß Christian
Dann bist du bei dem Thema irreguläre bzw. nichtäquidistante Abtastung. Sowas sollte im Allgemeinen vermieden werden. Ich denke in deinem Fall kommt es darauf an, wie oft und besonders wie stark die Verschiebung der Abtastwerte ist, die durch deinen 2. Task verursacht werden. Neue Filterparameter lassen sich nicht so einfach annehmen, weil natürlich ein digitales Filter FIR/IIR-Filter auf konstante Abtastraten angewiesen ist. Die ganze Theorie die da hinter steckt, basiert auf der äquidistanten Abtastung der Signale. MfG Marius
Also gibt es keine triviale Lösung? Was kann bei maximaler Verschiebung von F(a) passieren? Wird der Filter instabil(oszilliert)? Oder verändert sich einfach nur die Bandbreite(Grenzfrequenz)? Gruß Christian
Um zu sagen, was da passiert bin ich nicht genug in der Thematik drin. Außerdem sagst du ja nicht, was maximale Verschiebung von F(a) bedeutet. Dauert Task2 nun 1 µs oder 1 Stunde? Was du machen könntest, wäre eine Simulation deines Systems. Wenn du dein Eingangssignal irgendwie deterministisch beschreiben kannst (Fourier-Reihe), dann könntest du in MATLAB eine Simulation schreiben, die dir die irreguläre Abtastung simuliert. In der Simulation kannst du ja dann den Jitter in der Abtastfrequenz modellieren (z. B. 10 x mit 1 µs abtasten, danach 1 x 1.5 µs usw.). MfG Marius
Du willst Echtzeitverarbeitung, ja? Dann solltest Du garantieren, dass Deine Hardware schnell genug rechnen kann um in der Zeitspanne zwischen zwei Abtastwerten alle benötigten Rechnungen zu erledigen.
Oder vielleicht muss Task 2 ja gar nicht komplett auf einmal durchgerechnet werden bzw. hängt vielleicht nicht von den Abtastwerten ab. Dann böte sich an: 1. Interrupt (hohe Priorität): Abtastung, 1 neuer Signalwert pro Zyklus 2. Interrupt (niedere Priorität) oder Hauptprogramm: Berechnung Task 2
Hi! Zur Stabilität: Ein FIR ist immer stabil. Wenn ein IIR Filter bei einer Abtastrate stabil ist, ist er es auch bei jeder anderen (auch wenn die Abtastung nicht äquidistant ist). Gruß PP
Christian schrieb: > Wird der Filter instabil(oszilliert)? Nein. > Oder verändert sich einfach nur die Bandbreite(Grenzfrequenz)? Ja.
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.