Forum: Projekte & Code FIR Filter Generator


von Tobias M. (tm0991)


Lesenswert?

In meinem Job ist es mir nun schon häufig vorgekommen, dass ich immer 
mal wieder FIR Filter Koeffizienten berechnen musste.

Nun erwisch ich mich immer wieder dabei, die Filter anschließend mit 
Octave oder Python + Numpy zu entwerfen und mir dann die Koeffizienten 
als C, Verilog oder VHDL Array oder Memory Initialisation File 
auszugeben.

Nun hab ich mir überlegt, wie ich Filter am liebsten beschreiben würde 
um universell Koeffizienten zu berechnen und zu exportieren oder 
Dokumentation zu generieren.

Meine bevorzugte Eingabe ist Text von daher, habe ich mir ueberlegt, das 
das Eingabeformat des Tools eine json Beschreibung des Filters sein 
sollte.

Hier einmal ein Beispiel:
1
{
2
    "name": "FIR_Lowpass",
3
    "description": "Lowpass example",
4
    "fs": 100000,
5
    "taps": 101,
6
    "fc": 7000,
7
    "typ": "lowpass"
8
}

Diese json Beschreibung wird nun durch ein Python Tool geschickt, 
welcher das firFilterGen Module benutzt und die Koeffizienten berechnet 
und auch verschiedene export Möglichkeiten anbieten soll.

Die andere Möglichkeit ist es, das Python Modul in seine Pythonumgebung 
einzubinden, ein sehr schönes Beispiel ist hier ipython notebook.

Wie das ganze dann ausschaut kann man hier sehen:

http://nbviewer.ipython.org/github/TM90/firFilterGen/blob/master/examples/usage/NotebookToolFlow.ipynb#

Das Projekt kann auf github gefunden werden:

https://github.com/TM90/firFilterGen

Der aktuelle Stand ist eine Prototyp Version, welche FIR Tiefpaesse, 
Hochpaesse und Bandpaesse erstellen kann. Momentan noch ohne 
Koeffizienten Export als Arrays in andere Sprache und ohne Fensterung.

Nächste Schritte sind

 - erste Koeffizienten Export Funktionen
 - Fensterung (moeglichkeit verschiedene Fensterfunktionen zu parsen)
 - Zeit und Frequenzbereich als .jpg/.pdf usw. exportieren
 - Tool schreiben, welches json Beschreibung entgegen nimmt und Filter 
erzeugt

Meine Frage hier ist, wer könnte sich Vorstellen mit so einem Ansatz zu 
arbeiten, was sind eure Meinungen und hat wer Lust es mal zu probieren 
oder sich reinzu fuchsen und zu helfen.
Ich weiß die meisten FIR Tools sind grafisch und mein Ansatz mit den 
json Beschreibungen ist da etwas radikaler.

Den Vorteil, welchen ich mir dadurch verspreche, ist die Möglichkeit 
schnell und robust Filterkoeffizienten und Doku zu erzeugen.


Gruß

TM

von Purzel H. (hacky)


Lesenswert?

Hmmm ... ja. Graphischer, interaktiver Output hat den Vorteil, dass man 
sich auch gleich die Empfindlichkeit der Parameter zeigen lassen kann, 
und auch an der benoetigeten Anzahl Bits drehen kann. Stichwort 
Rundungsfehler.

von Tobias M. (tm0991)


Lesenswert?

Siebzehn Zu Fuenfzehn schrieb:
> Hmmm ... ja. Graphischer, interaktiver Output hat den Vorteil,
> dass man
> sich auch gleich die Empfindlichkeit der Parameter zeigen lassen kann,
> und auch an der benoetigeten Anzahl Bits drehen kann. Stichwort
> Rundungsfehler.

Da hast du Recht.

Eventuell baue ich mal eine GUI, welches ein Vorschaufenster für die 
Zeit und Frequenz Plots hat und in welchem sich die json Beschreibung in 
einem Textfeld mit vorgefertigtem Template modifizieren lässt.

Das schöne an der json Beschreibung ist, das man sie in Zukunft 
hoffentlich sehr flexibel beschreiben kann. Das heisst mal gebe ich 
tabs, fg, window und Typ an, mal gebe ich maximales Überschwingen, fg, 
Steilheit an.

Eine übersichtliche GUI ist mit dieser Flexibilität meiner Meinung nach 
nur schwer hinzubekommen

Gruss

Tobias

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
Noch kein Account? Hier anmelden.