mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Rückgewinnung der Übertragungsfunktion aus Koeffizienten beim FIR


Autor: WS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte einige Filter, die durch Länge und Amplitude des 
Koeffizientenfeldes gegeben sind und möchte diese qualifizieren.
Ich könnte nun den Frequenzgang bei einem Sweep mit einer Simulation 
berechnen und aufzeichnen lassen, habe aber keine Sollfrequenz für die 
Abtastrate. Wie gibt man das am sinnvollsten an?

Gefunden habe Ich nur das hier, aber da steht nicht viel:
Beitrag "Von Koeffizienten zu Übertragungsfunktion"

Am Liebsten wäre mir eine Art Übertragungsfunktion, die die Qualität des 
ripples in Form eines Verzerrungsgrades angibt.

Wie gelangt man mathematisch am einfachsten an diese Funktion?

Die Abtastfrequenz und der Frequenzbereich, über den Ich dann letztlich 
summiere (integriere ?) um die Verzerrungen in dem Betrachungsfall zu 
haben, wären dann idealer weise Parameter und vom Anwender einzusetzen.

Geht das irgendwie über LaPlace oder Fourier?

Das Koeffizientenfeld sieht etwa so aus:

n = Zahl der Koeffizienten z.B. 7,11,13,17,21,23

und jeweils (n+1)/2 Koeffizienten also für n=7 4 Stück für die ersten 3 
links, den mittleren und dann gespieglt die letzten drei, die wieder die 
ersten sind:

K(1), K(2), K(3), K(4!), K(3), K(2), (K1)

Autor: Martin O. (ossi-2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was bitteschön soll das sein:
Am Liebsten wäre mir eine "Art Übertragungsfunktion", die die "Qualität 
des
ripples" in Form eines "Verzerrungsgrades" angibt.

Das hab ich noch in keinem Buch über digitale Filter gesehen. Aber
in jedem Buch/Artikel über digitale Filter findet man, wie man
den Frquenzgang (und Phasengang) ausrechnet.

Autor: WS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meinem Buch habe Ich nichts konkretes gefunden. Tipp?

Was Ich meine ist eine Funktion, die die Abtastfrequenz mit ins Spiel 
bringt, also als Parameter frei hat. Oder anders ausgedrückt, bei der 
das Ergebnis der Darstellung unabhängig von diesem Parameter ist.

Für eine U-Funktion benötige Ich eigentlich immer Ausgangsfunktion / 
Eingangsfunktion - mir ist aber nicht klar, wie ich direkt die 
Koeffizienten in Polynome übersetzen könnte.

?

Autor: John (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WS schrieb:
> ... habe aber keine Sollfrequenz für die
> Abtastrate. Wie gibt man das am sinnvollsten an?

Da kannst du jede Frequenz für die Simulation nehmen.
Parameter wie Grenzfrequenzen sind ohnehin immer auf die Abtastrate 
bezogen.

WS schrieb:
> mir ist aber nicht klar, wie ich direkt die
> Koeffizienten in Polynome übersetzen könnte.

sei froh, das wäre viel zu aufwändig. Praktisch umsetzbar ist das 
Folgende:

Gewinne durch Simulation einen Frequenzgang. Daraus kannst du den 
Filtertyp und das Toleranzschema erkennen. Die Filterordnung kannst du 
anscheinen aus dem vorliegenden Code ableiten. (Wenn nicht, kannst du 
probieren.)

Mit dieser Info gehst du in ein Berechnungsprogramm für digitale Filter 
und lässt das Filter nachbauen. Den Frequenzgang gannst du mit deinem 
Simulationsergebnis vergleichen.

Sollte es dir aber um die Mathematischen Zusammenhänge gehen, dann musst 
du sehr viel tiefer in die hinter der Filterentwicklung liegende 
mathematische Theorie einsteigen. Das ist aber für deine eingangs 
beschriebene praktische Aufgabenstellung nicht nötig oder sinnvoll. Du 
solltest aber ohnehin die  Zielsetzung deiner Aufgabe genauer 
darstellen, damit dir gezielt geholfen werden kann.

John

Autor: WS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info.

Eigentlich hatte Ich aber gehofft, durch ein begrenzt tiefes Einsteigen 
in die Mathematik eine Formel zu bekommen, um genau so ein "ungefähres" 
(iteratives) Vorgehen vermeiden zu können. Ich denke zudem, dass das 
abschätzende Vorgehen mir nicht die Genauigkeit liefern wird, die Ich 
brauche, um die gewünschten Entscheidungen zu treffen.

Nehmen wir z.B. die Werte für ein Filter mit 17 Koeffizienten:

-8, -32, -70, -102, -91, -18, 100, 210, 255, ....

Die Grenzfrequenz liegt so etwa bei einem Drittel der Abtastrate würde 
Ich schätzen. Den ripple, den Ich bekomme, kann Ich aber nicht wirklich 
ablesen, weil er von der Auflösung der Koeffizienten und den Frequenzen 
abhängt, die reinkommen. Wenn Ich das minimal umbaue, liegt die 
Verstärkung bei 1,0 statt 0,91 und es gibt andere Rundungsfehler:

-1, -15, -50, -87, -84, -18, 98, 209, 255, ...

Welches Filter hat weniger Verzerrung?

Autor: Detlef _a (detlef_a)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Hier die beiden Betragsübertragungsfkt.
>>>>
Die Grenzfrequenz liegt so etwa bei einem Drittel der Abtastrate würde
Ich schätzen.

Naja, Grenzfrequenz, was soll das sein bei den Dingern, 3dB unter dem 
Maximum. Das ist bei vllt. 255, 2048 entspricht der Abtastfrequenz.

>>>>
Den ripple, den Ich bekomme, kann Ich aber nicht wirklich
ablesen, weil er von der Auflösung der Koeffizienten und den Frequenzen
abhängt, die reinkommen.

??. Die Dinger haben keinen ripple, als ripple bezeichnet man was 
anderes.
Die Eigenschaften des Filters hängen nicht von den Frequenzen ab, die 
reinkommen.

>>>>>>>>
Wenn Ich das minimal umbaue, liegt die
Verstärkung bei 1,0 statt 0,91 und es gibt andere Rundungsfehler:

Die Dinger haben unnormiert ca. Faktor 1000 Verstärkung, nicht 1.

>>>>
Welches Filter hat weniger Verzerrung?

Unklar, was Du unter 'Verzerrung' verstanden haben willst.

Cheers
Detlef




clear

fb= [-8, -32, -70, -102, -91, -18, 100, 210, 255];
fb=[fb fliplr(fb(1:end-1))];
fc=[-1, -15, -50, -87, -84, -18, 98, 209, 255]
fc=[fc fliplr(fc(1:end-1))];
H=freqz(fb,1,1024);
H1=freqz(fc,1,1024);
plot(1:1024,20*log10(abs(H)),'b',1:1024,20*log10(abs(H1)),'r');
grid

return

: Bearbeitet durch User
Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Ein FIR-Filter hat die Übertragungsfunktion
wobei die a_i deine Koeffizienten sind.

Setze
und du erhälst mit |G(z)| den Betragsfrequenzgang, und mit arc(G(z)) den 
Phasengang. In Matlab oder Octave gibts dazu den Befehl freqz().
Beachte, dass Omega die normierte Kreisfrequenz ist, d.h. sie ist auf 
die halbe Abtastfrequenz normiert.

Gruss

: Bearbeitet durch User
Autor: Marek N. (bruderm)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Substituriere z durch exp(j Omega)

Autor: Sabberalot W. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Welches Filter hat weniger Verzerrung?

Verzerrungen, sind ganzzahlige Oberwellen, die gibt es bei nichtlinearem 
Betrieb, wenn man am Eingnag uebersteuert. Hat also so gesehen nichts 
mit einem Filter zu tun, denn das Filter ist gerechnet als ein lineares 
Element.

Filter sind Elemente, die arbeiten Fourier Raum. Nichtlineare 
Elemente/Funktionen darf man nicht im Fourierraum betrachten.

: Bearbeitet durch User
Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WS schrieb:
> Ich hätte einige Filter, die durch Länge und Amplitude des
> Koeffizientenfeldes gegeben sind und möchte diese qualifizieren.
> Ich könnte nun den Frequenzgang bei einem Sweep mit einer Simulation
> berechnen und aufzeichnen lassen, habe aber keine Sollfrequenz für die
> Abtastrate. Wie gibt man das am sinnvollsten an?

Also zunächst eines: Frequenzen im herkömmlichen Sinne in Hertz oder so 
gibt es bei digitaler Signalverarbeitung überhaupt nicht. Stattdessen 
hat man es immer mit einem Bruchteil der Samplingfrequenz zu tun. Du 
brauchst also keine konkrete Abtastrate, um den Frequenzgang dir 
auszurechnen.

So.
Nun frag ich dich (WS) und nicht mich (W.S.), was du denn mit einer 
etwaig rückgewonnenen Übertragungsfunktion anstellen willst? Dich 
interessiert doch der Frequenzgang und die Phase. Also wobble das mal 
softwaremäßig durch, denn damit wirst du noch am ehensten fündig.

Ich hatte mir dazu per Delphi ein Filterbastler-Programm geschrieben, 
das per DDS zunächst einen Kurvenverlauf erzeugt, der ein Stückchen 
länger ist als der Filterkernel, dann selbigen durch das Filter mit dem 
zu testenden Kernel gejagt und anschließend Amplitude und  Phase des 
Outputs ausgemessen. Sowas ist nicht schwer, das kannst du auch.

W.S.

Autor: Thomas U. (thomasu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Also zunächst eines: Frequenzen im herkömmlichen Sinne in Hertz oder so
> gibt es bei digitaler Signalverarbeitung überhaupt nicht. Stattdessen
> hat man es immer mit einem Bruchteil der Samplingfrequenz zu tun.

Wirklich? Wie siehst Du dann die Fälle, bei denen das Ganzzahlverhältnis 
nicht passt oder die abgetastete Frequenz größer ist, als die Sample 
Frequenz?

Üblicherweise wird bei der Betrachtung und Beurteilung von Filtern gerne 
von 0 bis unendlich integriert, oftmals von 0 bis fs/2 ... dabei aber 
unterschlagen, dass die Frequenz auch höher sein kann. Und die liefern 
bekanntlich sehr wohl Beiträge zu dem Ergebnis am filterausgang - 
meistens ungewollte.

Eine Übertragungsfunktion wäre da schon hilfreich, um das Verhalten 
vollständig beschreiben zu können.

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.

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