Moin moin. Auf meinem DSP habe ich einen konstanten Strom von 2000Hz gesampleten Zeitdaten (vorgefiltert um Freq. über 1kHz zu entfernen(Nyquist). Diese Daten erreichen mich in Stücken von 125 Sample je Paket und werden in der Größe in ein Protokoll eingebettet wieder aus dem DSP geschickt. Diese Größe sei fix. Ich möchte jetzt diese Zeitdaten Freq filtern. z.B. einen 50Hz Nodge Filter gemeinsam mit einer DC entfernenden Hochpass bei 0,5Hz. Ich bin mir jetzt nicht sicher, ob ich das mit dieser Blockgröße machen kann, oder ob ich mindestens eine Fenstergröße von 1000 oder 2000 Sampel brauche. Wenn ich die Zeitdaten mit einem Filtervektor von der Größe 1000 falte, dann irgendwas zwischenspeicher und dann mit dieser Vorbedingung das nächste Paket filter, müsste der Filter doch ab 2000/125 Paketen "eingeschwungen" sein (keinen Leck Effekt mehr aufweisen) und sinnvolle Ausgaben liefern oder? Man sieht sicher schon an diesem letzten Absatz, wo die Verständnissprobleme liegen. Die Faltung mit einem Zeitvektor der den Filter darstellt sei als Funktion gegeben. Der Zeitvektor sei gegeben. Was speicher ich zwischen? Ist dieser Aufbau prinzipiell möglich? Wieviel Speicher benötige ich dafür? Stichworte, Beispielcode oder nähere Erläuterungen währen sehr hilfreich. Vielen Dank für eure Zeit!
Oder anders: Kann ich mit einem konstanten Strom von 125 Sample großen Paketen eine Filterung mit DFT auf Daten durchführen, welche bei 2kHz gesampelt worden sind ? Wieviel Speicher in Samples brauche ich dafür mindestens und wie sollte man soetwas machen ? Ich möchte jetzt nicht die 125 Sample großen Pakete solange speichern, bis ich gleichzeitig 2000 Sample habe und darauf den Filter anwenden! - dafür reicht der SRAM nicht.
Also ich hab das mal so gelesen, dass du Daten in 125er Paketen bekommst, die aber eigentlich nur filtern willst. Also eine DFT/FFT wäre bei dir ein Weg für die Filterung, aber nicht notwendig. Dann solltest du dir überlegen, was für ein Filter du tatsächlich brauchst. Also Übertragungsfunktion finden. Im Hinblick auf den Speicher wäre ein IIR Filter nicht schlecht, falls das nicht wegen seiner Eigenschaften ausscheidet. Ansonsten bliebe ein FIR, da sollte dann die Ordnung klein sein. Du musst aber mindestens die Filterordnung an Speicherstellen bereithalten. Ich kenne keinen Weg, mit weniger auszukommen. Grüße!
Das geht ohne Probleme. Für den 50Hz notch würde ich ein IIR 2.Ordnung nehmen, die wurden hier schon lang und breit diskutiert. Und für den DC-Entferner tuts' je nach Anforderung auch ein Filter kleiner Ordnung. Die kannst direkt auf Deinen 125er Stücken filtern, das wird gehen. Cheers Detlef
Ok, vielen Dank schonmal für die Antworten. Ich habe jetzt mit Matlab R2009b "fdatool" einen IIR Filter designed. Apass1 = 2 dB F_pass1 = 47Hz F_stop1 = 49Hz Astop2 = 40 dB (attenuation) F_stop1 = 51Hz F_pass2 = 53Hz Apass2 = 2 dB Das ganze kann man direkt als C-Code ausgeben lassen in welchem einem dann Numerator, Denominator, Numerator Läenge und Denominator Länge als die berechneten Variablen erstellt werden. Ich vermute es handelt sich hier um die Koeffizienten der Übertragungsfunktion des Filters. Das praktische daran direkt die Übertragungsfunktion zu speichern ist ja im Vergleich mit der Faltung mit der Impulsantwort eines FIR Filters im Zeitbereich, dass man wesentlich weniger Bytes SRAM für die Koeffizienten der Übertragungsfunktion als für die ganze (infinite :)) Impulsantwort braucht. Ich hoffe richtig verstanden zu haben, dass Ihr vorgeschlagen habt die Zeitdaten lieber als Parameter an eine Übertragungsfunktion zu übergeben, als mit der Impulsantwort dieser Übertragungsfunktion zu falten? Danke für den Tip. Auf C Seite wollte ich mit dieser Übertragungsfunktion nun mit der Funktion "dsp32_filt_iir" des AT32UC3 Framework DSPLib http://asf.atmel.no/avr32/services/dsp/dsplib/examples/dsp16_fir/at32uc3b0256_evk1101/doc/html/a00012.html#gacde330d4789e2c1de70baeb93555ff53 auf meine Zeitdaten anwenden. Leider kann ich für diese Lib nur für den FIR Teil Beispiele finden und bin mir bei deren Parametern noch nicht ganz im Klaren. Ich bin mir auch immer noch nicht ganz sicher, ob die kürze von 125 Samples welche bei 2kHz aufgenommen worden sind wirklich ausreichen um sie zu filtern. Ich meine mich von der Verwendung von FIR Filtern noch daran zu erinnern, dass z.b. ein kurzes Datenstück, welches mit einem hohem Offset beginnt und bei diesem hohen Offset auch das ganze Datenstück über bleibt, (z.B. nen Sinus von 10Hz mit einer Amplitude von 0.0001 V aber 3V Offset) nach der Faltung mit dem FIR fast genauso aussieht wie der Filterkernel selbst. Das ist ja auch verständlich, wenn man sich das 3V Offset als Einheitssprung vorstellt und den aufgesetzten minimalen Sinus mal ignoriert. Na, ich denke ich werde IIR morgen erstmal in Matlab ausprobieren. Evtl. ist das ja auch nur ein Problem der FIR und kommt bei den IIR garnicht vor. Vielen Dank für eure Ratschläge bisher!
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.