mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Entwurf eines digitalen FIR-Filters


Autor: Daniel K. (daniel_k80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte gerne einen digitalen FIR-Filter entwerfen und auch verstehen 
wie ich die Koeffizienten berechne.
Dafür habe ich diese Seite hier gefunden:

http://www.iem.thm.de/telekom-labor/zinke/fourier/...

Ich denke auf der Seite wird der Weg doch recht gut erklärt.
Ich verstehe nun noch nicht so ganz das Prinzip mit der 
Übertragungsfunktion. Wenn ich mir auf der Seite das Bild 2.22 anschaue, 
dann ist da ja der Verlauf der Übertragungsfunktion dargestellt.
Wenn ich mir nun einen Tiefpass aufbaue, bestehend aus einem Widerstand 
mit 100 Ohm und einem Kondensator mit 50 mF, dann komme ich auf ein Tau 
von 5 (R*C).
Bei einem t von 0 s, was ja eine Gleichspannung darstellt (oder?) habe 
ich dann ja als Ergebnis der Übertragungsfunktion den Wert 1/5 = 0,2. 
Dem entsprechend gilt für die Ausgangsspannung dann U_a = U_e * 0,2.
Allerdings lädt sich der Kondensator doch bis zur Maximalspannung auf, 
weshalb bei einer Frequenz von 0 Hz ja irgendwann gilt U_c = U_e.

Ich denke ich habe die Übertragungsfunktion wohl falsch verstanden. 
Vielleicht kann mir jemand noch einmal genauer erklären, warum meine 
Überlegung nicht passt oder sogar falsch ist?
Vielen Dank schon mal.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Daniel K. schrieb:
> Wenn ich mir nun einen Tiefpass aufbaue, bestehend aus einem Widerstand
> mit 100 Ohm und einem Kondensator mit 50 mF, dann komme ich auf ein Tau
> von 5 (R*C).
sicherheitshalber: Einheiten nicht vergessen - sonst merkt man nicht, 
wenn man schon lange voellig im Wald steht:-); also Tau =5sec.

> Bei einem t von 0 s, was ja eine Gleichspannung darstellt (oder?) habe
Nein, t von 0 s stellt keine Gleichspannung da. Zum Zeitpunkt t=0s liegt 
da irgendeine Spannung an; die kann aber zum naechsten Abtastzeitpunkt 
schon wieder voellig anders ausschauen.

> ich dann ja als Ergebnis der Übertragungsfunktion den Wert 1/5 = 0,2.
> Dem entsprechend gilt für die Ausgangsspannung dann U_a = U_e * 0,2.
> Allerdings lädt sich der Kondensator doch bis zur Maximalspannung auf,
> weshalb bei einer Frequenz von 0 Hz ja irgendwann gilt U_c = U_e.

Der "Kondensator" laed sich aber nicht nach den 3 Samples aus dem 
Beispiel auf die Maximalspannung auf. Dazu muesste fuer mindestens 4 
Samples die Maximalspannung anliegen. Dann waere der "Kondensator" auf 
seine End-Spannung aufgeladen.

Gruss
WK

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel K. schrieb:
> ich möchte gerne einen digitalen FIR-Filter entwerfen und auch verstehen
> wie ich die Koeffizienten berechne.

Dann lies besser hier: "http://www.dspguide.com/";
Das Buch läßt sich von dort auch als PDF herunterladen.
Das Angenehme daran ist, daß der Autor seine Kapitel auch mit kleinen 
realen Programmstückchen in BASIC als Beispiele versehen hat und nicht 
nur bei hochtrabenden Bemerkungen wie "zuerst berechnen Sie mal so eben 
H(x) und dann die zugehörige XYZ".

Ich geb dir mal ne Geschmacksprobe in Pascal:
// Filterkoeffizienten nach sin(x)/x * Blackmann erzeugen
procedure TFiForm.DoGenerate(Cutoff : double);
var
  D : double;
  P, Q, R : double;
  i : integer;
  M : integer;
  M2: integer;
begin
  D:= Cutoff;
  M:= FilterTapnum;
  M2:= M div 2;
  for i:= 0 to M-1 do
  begin
    if i = M2
    then
      P:= D
    else
      P:= (sin(D * (i - M2))) / (i - M2);

    // Blackman-Fenster
    Q:= 0.42 - 0.5 * cos((2 * PI * i)/M) + 0.08 * cos((4 * PI * i)/M);
    R:= P * Q;
    FilterTaps[i]:= R;
  end;
end;

Zu bemerken ist noch, daß alle Frequenzen nicht in Hz zu rechnen sind, 
sondern relativ zur Samplefrequenz, also 2  PI  (Frequenz / 
SampleFrequenz).
Naja, und den eigentlichen Filter (for i:= 0 to..) kannst du ja gewiß 
selber schreiben


W.S.

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: 2 mal PI mal (D1 / SampleFrequenz)

Autor: Daniel K. (daniel_k80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke für die Antworten.

Dergute W. schrieb:
> sicherheitshalber: Einheiten nicht vergessen - sonst merkt man nicht,
> wenn man schon lange voellig im Wald steht:-); also Tau =5sec.

Natürlich. Normalerweise bin ich nicht so unachtsam was Einheiten angeht 
(vor allem weil ich mit den Einheiten auch immer die Formel 
kontrollieren kann :) ).

Dergute W. schrieb:
> Der "Kondensator" laed sich aber nicht nach den 3 Samples aus dem
> Beispiel auf die Maximalspannung auf. Dazu muesste fuer mindestens 4
> Samples die Maximalspannung anliegen. Dann waere der "Kondensator" auf
> seine End-Spannung aufgeladen.

Das verstehe ich nicht so ganz wie du das meinst. Ein Kondensator ist 
doch nach 5 Tau nahezu komplett geladen bzw. entladen. Wie kommst du auf 
4? Kannst du das etwas genauer erklären?

W.S. schrieb:
> Dann lies besser hier: "http://www.dspguide.com/";
> Das Buch läßt sich von dort auch als PDF herunterladen.
> Das Angenehme daran ist, daß der Autor seine Kapitel auch mit kleinen
> realen Programmstückchen in BASIC als Beispiele versehen hat und nicht
> nur bei hochtrabenden Bemerkungen wie "zuerst berechnen Sie mal so eben
> H(x) und dann die zugehörige XYZ".

Danke den Link werde ich mir direkt mal anschauen.

W.S. schrieb:
> Naja, und den eigentlichen Filter (for i:= 0 to..) kannst du ja gewiß
> selber schreiben

Genau. Um den Code geht es mir auch in erster Linie nicht..da habe ich 
zur Not auch fertige Beispiele. Es geht mir in erster Linie um das 
Verständnis wie ich aus einer Forderung (z. B. ein 10 kHz Signal aus 
einem Audiosignal zu filtern) einen Filter entwerfe und wie ein 
digitales Filter funktioniert.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Daniel K. schrieb:
> Das verstehe ich nicht so ganz wie du das meinst. Ein Kondensator ist
> doch nach 5 Tau nahezu komplett geladen bzw. entladen. Wie kommst du auf
> 4? Kannst du das etwas genauer erklären?

Die 4 hat in dem Fall nichts mit irgendwelchen "nach 3..5 Tau ist alles 
vorbei" Faustregeln zu tun.
Auf die 4 komm' ich durch scharfes Betrachten vom Bild 2.21 aus deinem 
Link. Bei dieser Stossantwort des Filters sind 4 Koeffizienten ungleich 
0.

(Die Werte sind in diesem Beispiel etwas "vereinfacht". Eigentlich 
wuerde ich ja als exponentiell abfallende Stossantwort z.b. sowas 
erwarten:
1  0.6  0.36  0.216  0.1296  0.07776 ....
Aber dann muss man halt mehr rechnen und die Werte nach der Faltung sind 
nicht so "schoen".)

Wenn ich jetzt eben diese Stossantwort mit den 4 Koeffizenten mit einem 
Eingangssignal, das eine Sprungfunktion (also sowas wie ein 
Schaltvorgang im Analogen) darstellt, falte, dann ist eben nach 4 Takten 
das Ausgangssignal konstant. Wenn das Eingangssignal so ausschaut:
0 1 1 1 1 ...
dann kommt aus dem Beispielfilter das raus:
0  1  1.6  2  2.2  2.2  2.2  2.2 ...

Gruss
WK

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.