Wie komme ich von Matlab zu Filter?


7

Ich entwerfe einen Filter in Matlab mit dem folgenden Befehl:

Fs = 2.5*10^10;
n = 2;
Wn = 5000/Fs;
[b,a] = butter(n,Wn);

und bekomme

b={9.86988268891764e-14, 1.97397653778353e-13, 9.86988268891764e-14}
a={1, -1.99999911142341, 0.999999111423807}

Wie mache ich das analoge?

http://en.wikipedia.org/wiki/Butterworth_filter

Antworten:


11

Zunächst haben Sie Ihren Digitalfilter wahrscheinlich falsch gestaltet. Sie haben verwendet Wn = 5000/Fs, aber der digitale Wn-Parameter möchte eine Zahl von 0 bis 1, wobei 1 Fs / 2 ist, also würden Sie normalerweise für ein 5000-Hz-Filter sagen, dass Wn = 5000/(Fs/2).

Angenommen, Sie haben dies gemeint, möchten Sie ein analoges Butterworth-Tiefpassfilter 2. Ordnung mit einer Grenzfrequenz von 5000 Hz entwerfen.

Verwenden Sie zunächst [b,a] = butter(n,Wn,'s'), um die Ausgabe in der analogen Domäne anstelle der digitalen z-Domäne abzurufen.

[b, a] = Butter (n, Wn, 's') entwirft ein analoges Butterworth-Tiefpassfilter der Ordnung n mit der Winkelgrenzfrequenz Wn rad / s. Es gibt die Filterkoeffizienten in den Zeilenvektoren b und a der Länge n + 1 in absteigenden Potenzen von s zurück, die aus dieser Übertragungsfunktion abgeleitet wurden: Geben Sie hier die Bildbeschreibung ein

Wenn Sie möchten, dass die Grenzfrequenz 5 kHz (= 2π⋅5000 Radian / s) beträgt, verwenden Sie butter(2,2*pi*5000,'s')beispielsweise. In GNU Octave bekomme ich:

> [b, a] = butter(2,2*pi*5000,'s')
b = 9.8696e+008
a = 1.0000e+000  4.4429e+004  9.8696e+008

Die Übertragungsfunktion wäre dann also

H(s)=9.8696×108s2+4.4429×104s+9.8696×108

Butterworth-Filter bestehen immer aus N Polen, die in einem Halbkreis um die linke Seite des Einheitskreises angeordnet sind (und Sie können sie tatsächlich direkt auf diese Weise entwerfen). Dies hat 2 Pole bei -22214,4 ± 22214,4j. Um einen praktischen Filter zu erstellen, gruppieren Sie die komplexen konjugierten Paare in Abschnitte 2. Ordnung und erstellen für jeden einen Biquad-Filter. In Ihrem Fall handelt es sich bereits um einen einzelnen Abschnitt 2. Ordnung, sodass Sie nur einen Filter benötigen.

Dann ordnen Sie das einer Schaltung zu, wie einer von diesen: http://en.wikipedia.org/wiki/Butterworth_filter#Filter_design

Geben Sie hier die Bildbeschreibung ein

Die Kondensatorreaktanz beträgt und die Induktivitäten sind , daher ist die Übertragungsfunktion1CsLs

H(s)=Vout(s)Vin(s)=1C1sR2L1s+R1+1C1sR2=R2CL1R2s2+(CR1R2+L1)s+(R2+R1)

Damit

  • Zähler:
    • R2 = 9,8696e + 008 Ω = 987 MΩ
  • Nenner:
    • C * L1 * R2 = 1
    • C * R1 * R2 + L1 = 4,4429e + 004
    • R2 + R1 = 987 MΩ

Also dann ist R1 = 0 und L1 = 44,4 kH? und C = 22,8 fF ?? ... Oh Mann, ich erinnere mich nicht an dieses Zeug.

Eigentlich ... obwohl diese Werte völlig verrückt sind, funktionieren sie in einer Simulation.

Sie können dann alle Werte gleichzeitig auf vernünftigere Werte skalieren. Multiplizieren Sie den Kondensator mit einem bestimmten Wert und teilen Sie die Induktivität und den Widerstand durch denselben Wert, um das Filter gleich zu halten. Zum Beispiel bringt uns das Multiplizieren mit 1 Million in einen vernünftigeren Bereich:

  • C = 22,8 fF * 1000000 = 22,8 nF
  • R2 = 987 MΩ / 1000000 = 987 Ω
  • L1 = 44,4 kH / 1000000 = 44,4 mH

Hey, es funktioniert!

TINA-Simulation vernünftiger Werte

Praktisch aber? Verwenden Sie einfach wie alle anderen Filterdesign-Software.


@eryksun: Nun ja, ich würde das mit Matlab eigentlich nie machen. Deshalb erinnere ich mich nicht wie.
Endolith

@eryksun Ja, aber dies ist der einfachste Weg, um es zu demonstrieren
Endolith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.