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


von Daniel K. (daniel_k80)


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/dipl_htm/dpl08.htm

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.

von Dergute W. (derguteweka)


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

von W.S. (Gast)


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:
1
// Filterkoeffizienten nach sin(x)/x * Blackmann erzeugen
2
procedure TFiForm.DoGenerate(Cutoff : double);
3
var
4
  D : double;
5
  P, Q, R : double;
6
  i : integer;
7
  M : integer;
8
  M2: integer;
9
begin
10
  D:= Cutoff;
11
  M:= FilterTapnum;
12
  M2:= M div 2;
13
  for i:= 0 to M-1 do
14
  begin
15
    if i = M2
16
    then
17
      P:= D
18
    else
19
      P:= (sin(D * (i - M2))) / (i - M2);
20
21
    // Blackman-Fenster
22
    Q:= 0.42 - 0.5 * cos((2 * PI * i)/M) + 0.08 * cos((4 * PI * i)/M);
23
    R:= P * Q;
24
    FilterTaps[i]:= R;
25
  end;
26
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.

von W.S. (Gast)


Lesenswert?

Nachtrag: 2 mal PI mal (D1 / SampleFrequenz)

von Daniel K. (daniel_k80)


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.

von Dergute W. (derguteweka)


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

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.