digitale Filter mit veränderlicher Abtastrate

Gast #2176055
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
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.