Filter mit variabler Grenzfrequenz

Gast #662940
Lesenswert?

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
Gast #662952
Lesenswert?

>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
Gast #662982
Lesenswert?

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
#663017
Lesenswert?

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?
Gast #663028
Lesenswert?

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
Gast #663039
Lesenswert?

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.
#663057
Lesenswert?

@ 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
Gast #663230
Lesenswert?

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.
Gast #663574
Lesenswert?

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
Gast #664683
Lesenswert?

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?
#664731
Lesenswert?

> 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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren