Hallo zusammen, ich möchte ein digitales IIR Filter (Butterworth, 2. Ordnung) erstellen, um die fünfte Harmonische eines Motors zu filtern. Dafür habe ich mir ein Modell mit MATLAB/Simulink erstellt, um die Sache mal durchzuspielen. Dabei habe ich eine eher grundsätzliche Frage, die Abtastfrequenz angeht. Angenommen, ich habe auf dem Controller eine Abtastfrequenz von fs=20kHz zur Verfügung. Mein Motor läuft mit eine Drehzahl, sagen wir 100 U/s, was dann im Modell einem dreiphasigen Strom mit einer Kreisfrequenz von w_rot=100*2*pi entspricht. Diesen Verlauf taste ich mithilfe von Zero-Order_hold Gliedern mit der Abtastfrequenz fs=20kHz ab, um das Signal zu digitalisieren. Das Filter, ein Bandpass, habe ich in MATLAB ebenfalls mit der Abtastrate fs=20kHz designt. Nun wurde mir gesagt, dass die Abtastraten für mein Filter und die Zero-Order-Hold Glieder gleich zu wählen sind, nämlich jeweils die volle mögliche Abtastrate fs. Allerdings kommt dabei bei mir nur Müll raus, der Filterausgang bleibt auf annähernd Null, was für eine Filterung der falschen Frequenz spricht. Der einzige Fall, in welchem mein Filter funktioniert, ist, wenn ich die Abtastrate der Zero-Order-Hold-Glieder um den Faktor 2*pi erhöhe, also auf fs=2*pi*fs. (In Echt habe ich diese Frequenz zwar nicht zur Verfügung, aber im Modell kann man es ja erst mal machen.) Kann mir jemand sagen, wieso es nicht mit der gleichen Abtastrate klappt, sondern wieso es NUR mit 2*pi*fs klappt? Gibt es da einen festen Zusammenhang? Ich vermute, ich habe irgendwo einen Denkfehler, wann muss ich bei der Berechnung die Kreisfrequenz mit *2*pi anwenden und wann die direkte Frequenz? Oder hätte ich die Motordrehzahl gleich mit 100 statt 100*2*pi angeben müssen?? Bin für jede Hilfe dankbar!
Björn W. schrieb: > Nun wurde mir gesagt, dass die Abtastraten für mein Filter und die > Zero-Order-Hold Glieder gleich zu wählen sind, Wer behauptet so etwas? Einzig müssen die Filterparameter und die Abtastrate zusammenpassen um die gewünschte Grenzfequenz zu erreichen.
Gerd schrieb: > Wer behauptet so etwas? Einzig müssen die Filterparameter und die > Abtastrate zusammenpassen um die gewünschte Grenzfequenz zu erreichen. Ja genau, dass die beiden gleich sind ergibt sich ja aus der Berechnung meiner Filterkoeffizienten, in die ich ja die Filterabtastzeit bereits einsetzen muss. Dass ich die ZOH-Abtastrate auf die selbe setzen will hat den Hintergrund, dass ich ja eine Berenzte Abtastrate von meinem Controller vorgegeben habe und die ja möglichst ausnutzen will, um möglichst hohe Drehzahlen zu fahren.
Einfachste Vermutung: du hättest in Matlab Omega angeben müssen und hast f angegeben? Wie hast du denn den Filter in Matlab berechnet? Filter Toolbox? Oder selbst ausgerechnet?
Hi, Matlab kann Butterworth Filter basteln: butter Butterworth digital and analog filter design. [B,A] = butter(N,Wn) designs an Nth order lowpass digital Butterworth filter and returns the filter coefficients in length N+1 vectors B (numerator) and A (denominator). The coefficients are listed in descending powers of z. The cutoff frequency Wn must be 0.0 < Wn < 1.0, with 1.0 corresponding to half the sample rate. Die Grenzfrequenz ist, wie die Hilfe sagt, normiert auf 'half the sample rate', i.e. Nyquistfrequenz. Also: Abtastrate 20ks/s, Nyquist also 10ks/s. Die Grundfrequenz des Motors ist 100/s, du willst die 5. Oberwellen rausschmeissen, also Grenzfrequenz z.B. 150Hz: [B,A]=butter(2,150/10000); Klappt wunderbar, hat mit zero-order und w statt f nichts zu tun. cheers Detlef clear t=0:1/20000:1; rein=sin(2*pi*100*t)+sin(2*pi*500*t); [fb,fa]=butter(2,150/10000); raus=filter(fb,fa,rein); return
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.