www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP moving window DFT auf DSP, begrenzter SRAM


Autor: MadTulip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: MadTulip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MadTulip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/exam...

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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.