Hallo Leute, ich moechte fuer ein kleines Projekt einen Tiefpass und einen Hochpass FIR-Filter in einem FPGA realisieren. Die Grenzfrequenzen der beiden Filter sollen unabhaengig veraenderbar sein (zw. 0.1 und 150 Hz), ohne dass die Filterform veraendert wird. Beide Filter sollen in Reihe geschaltet werden und somit einen variablen Bandpass darstellen. Die Eingangsdaten kommen mit einer Samplingrate von 2kHz in den FPGA. Liege ich richtig, dass ich "einfach" durch unterschiedlicher Samplingfrequenzen der FIR-Filter die Grenzfrequenzen aendern kann? Muessen die unterschiedlichen Samplingraten aufeinander angepasst werden? Gibt es vielleicht noch eine besser Realisierungsform, bei der die Grenzfrequenzen ohne grossen overhead geaendert werden koennen? Vielen Dank fuer ein paar Anregungen. Stefan
>Filter sollen unabhaengig veraenderbar sein (zw. 0.1 und 150 Hz), ohne >dass die Filterform veraendert wird. die filterform wirst du auch nicht ändern müssen. höchstens die fir-koeffizienten. die kannst du dir evtl. aus einem extern angeschlossenen speicher holen (ist sicherlich am einfachsten, die berechnung ist sehr aufwendig für nen fpga) >Liege ich richtig, dass ich "einfach" durch unterschiedlicher >Samplingfrequenzen der FIR-Filter die Grenzfrequenzen aendern kann? mit dem thema kenn ich mich nicht aus, es ist aber nicht gerade trivial. vor allem wenn du das 2 mal hintereinander machen willst. gruß rene
Hi, danke fuer deine Antwort. Beim FIR Filterdesign werden die Grenzfrequenzen fc doch auf die Samplingfrequens fs normiert Qc=fc/fs und damit die Koeffizienten berechnet. Wenn sich bei gleichen Koeffizienten die Samplingfrequenz aendert, ergibt sich meiner Meinung nach eine andere Grenzfrequens des Filters, oder doch nicht? Die Koeffizienten wollte ich eigentlich nicht auf dem FPGA berechnen. Stefan
Deine Sampling-Frequenz ist doch fix, diese hast Du mit 2 KHz angegeben ! Außerdem willst Du die beiden Grenzfrequenzen ja getrennt einstellen, dazu würdest Du also 2 verschiedene Sampling-Frequenzen benötigen. Kann es sein, dass dir der Begriff Sampling-Frequenz nicht ganz klar ist?
Hi Klaus, ja das ist der Knackpunkt. Zitat: "Muessen die unterschiedlichen Samplingraten aufeinander angepasst werden?" Es muesste also die Samplingrate zwischen den einzelnen Stufen angepasst werden, was auch nicht ganz trivial ist!? Stefan
Es gibt Multiraten Filter. Da wird schrittweise mit verringerter Abtastrate gearbeitet um effizient digitale Filter zu realisieren. Dabei muß aber auf einiges geachtet werden, damit das Signal am Ende korrekt gefiltert ist. Stichworte Antialiasing, Antiimaging. Das hat aber mit Deinen Anforderungen bzgl. einstellbarer Hochpaß/Tiefpaß nichts zu tun. Ausgangspunkt ist in der Regel immer ein digitales Signal, welches mit einer konstanten Rate abgetastet wurde. Du kannst - wie bereits geschrieben - einfach nur vorberechnete Koeffizienten in einer Tabelle ablegen und dann entsprechend abrufen. Oder aber z.B. mittels fft/ifft einen Filter realisieren.
@ Nami (Gast) >Du kannst - wie bereits geschrieben - einfach nur vorberechnete >Koeffizienten in einer Tabelle ablegen und dann entsprechend abrufen. Eben. Und wenn die FPGA internen RAMs zu klein sind, dann kann man auf einen exteren seriellen EEPROM zugreifen. Entweder per State Machine oder Softcore uC (Picoblaze & Co). MfG Falk
Hallo Stefan, ich habe sowas mal mit IIR-Filtern 2.Ordnung gemacht, die per Koeffizienten frei konfigurierbar waren. Bei IIR-Filtern ist der Vorteil, dass Du nur sehr wenige Ressourcen brauchst - im Vergleich zu FIR. Wenn das Verhältnis von Abtast- zu Cutoff-Frequenz sehr groß wird (wie bei Dir z.B. 2000Hz / 0.1Hz = 20000) dann benötigt man allerdings hohe Bitbreiten um die benötigte Genauigkeit zu erreichen. Du solltest Dich erstmal mit einem DSP-Profi unterhalten um das Konzept zu erstellen. Vielleicht wäre eine Möglichkeit noch das Signal mit einem NCO hochzumischen und dann mit fester Cutoff-Frequenz zu filtern, danach wieder runtermischen. Durch Änderung der NCO Mischfrequenz wäre der Frequenzgang veränderbar. Ist aber vermutlich auch zu kompliziert.
Hallo Leute, Danke! die Idee mit dem NCO und Mischer ist gar nicht so schlecht. Aber da die Grenzfrequenzen nicht taeglich geandert werden muessen ist es vielleicht doch am Einfchsten mit verschiedenen Sets von Koeffizienten zu arbeiten und ein einfaches Interface fuer den Download zur Verfuegung zu stellen. Gibt es irgendwo brauchbare Informationen fuer einen Loesungsansatz wegen dem grossen Verhältnis von Abtast- zu Cutoff-Frequenzwegen? Einen DSP-Profi habe ich leiter nicht zur Hand :-( Stefan
Hallo Stefan, der Lösungsansatz heisst MATLAB oder SIMULINK oder Octave .... wenn Du Dich entschieden hast, welchen Filtertyp Du verwendest und z.B. wieviele Taps das FIR-Filter haben soll oder wieviele IIR-Filter kaskadiert werden sollen dann schreibst Du Dir ein Modell dazu und generierst je einen Satz Koeffizienten für die niedrigste und höchste Cutoff-Freq. Mit den Koeffizienten gehst Du in Dein Modell und simulierst den Frequenzgang. Erstmal mit Fließkomma. Dann auf Festkommaformat wechseln und die Bitbreite solange anpassen, bis Deine Filter- Anforderungen erfüllt sind. Bei IIR ist die Optimierung recht schwierig, zwischendrin könnten z.B. an einem Addierer 52 Bit nötig sein, während an anderer Stelle 16 Bit reichen. Ich hoffe Du bist sattelfest in der Fixkomma-Darstellung?
> der Lösungsansatz heisst MATLAB oder SIMULINK oder Octave .... Eine weitere Möglichkeit ist Python mit den Paketen scipy und zum Plotten matplotlib zu nehmen. http://www.scipy.org/ http://matplotlib.sourceforge.net/ Dann gibt es einen Fixed-Point Datentypen auf sourceforge: http://fixedpoint.sourceforge.net/ und einen auf der Seite von Dillon Engineering: http://www.dilloneng.com/documents/downloads/demodel/ Damit ist es möglich eine Fixed-Point Modellierung von dem Algorithmus durchzuführen. Gruß, Günter
Günter .. wrote: > Eine weitere Möglichkeit ist Python mit den Paketen scipy und zum > Plotten matplotlib zu nehmen. jo, ich benutze auch gerne Python mit Pylab für DSP-Aufgaben. Ausserdem gibts noch Pygame und PyOpenGL die ich auch gerne für Real-Time Visualization benutze.
Unbekannter schrieb: > Die Dillonseite scheint nicht mehr zu existieren. (?) Und für einen Dead-Link habe ich jetzt einen 4 Jahre alten Thread gelesen? Toll... :-/ BTW: Meinst du die: http://www.dilloneng.com/documents/downloads/demodel/ Bei mir geht sie noch.
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.