Forum: Digitale Signalverarbeitung / DSP / Machine Learning Scale Factor bei MATLAB


von Thomas Wolf (Gast)


Lesenswert?

Hallo zusammen

MATLAB gibt mir folgende Koeffizienten für einen IIR 1. Ordnung:
b0 =  1
b1 =  1
a0 =  1
a1 = -0,9991
Scale Factor = 0,000471

Es gilt doch für'n IIR 1. Ordnung:
y(n) = -a1*y(n-1) + b0*x(n) + b1*x(n-1)

Wie krieg ich denn nun den Faktor 0,000471 in diese Gleichung hinein?

Etwa so:
y(n) = +0,9991*y(n-1) + 0,000471*x(n) + 0,000471*x(n-1)

Ist es so, daß man den Scale Factor (MATLAB) mit den b-Koeffizienten
(b0, b1, ...) multiplizieren muss - aber nicht mit den a-Koeffizienten
(a0, a1, ...)?

DANKE FÜR EURE HILFE !!!

Thomas

von Thomas Winkel (Gast)


Lesenswert?

Hallo,
könntest du mal bitte zeigen wie du den Filter dimensioniert hast?
Einen "Scale Factor" bekomm ich nämlich hier nicht ausgegeben.
Außerdem gilt:
a0*y(n) = -a1*y(n-1) + b0*x(n-1) + b1*x(n-2)
Wobei a0 immer "1" gewählt wird, und hier vermute ich auch irgendwo
deinen "Scale Factor".

Gruß,
Thomas

von Thomas Wolf (Gast)


Lesenswert?

Ich habe lediglich folgende Vorgaben:
Fs = 2000 Hz
Fc = 0,3 Hz (Das ist kein Witz!)
IIR 1. Ordnung
=> y(n) = 0,9991*y(n-1) + 0,000471*x(n) + 0,000471*x(n-1)

MATLAB liefert mir:
b0 =  1
b1 =  1
a0 =  1
a1 = -0,9991
Scale Factor = 0,000471

Mach ich etwas falsch?

Thomas

von Thomas Winkel (Gast)


Lesenswert?

Dein filter hat bei mir eine Grenzfrequenz von 1.4349e-004Hz.
Mich würde interessieren, mit welchen Befehlen du den Filter
dimensioniert hast.
Wenn du den Filter übrigens mit deinem Scale Factor multiplizierst
kommt etwas mehr als 1 als Steady State raus, genauer währe 1/2222,
aber du hälst dich ja mit deinen Vorgaben auch ziemlich nah an der
Stabilitätsgrenze auf, kein Wunder dass da ungenaue Ergebnisse
rauskommen.
So, ich geh gleich Schwimmen, wenn also noch Fragen sind dann schnell.
Gruß, Thomas

von Thomas Wolf (Gast)


Lesenswert?

Ok, Thomas, Danke erst mal.
Vielleicht noch etwas ganz einfaches:
Fs = 2000 Hz
Fc = 0,3 Hz
IIR 1. Ordnung Butterworth
Benutze bitte MATLAB.
Kannst du mir bitte die Differenzengleichung hinschreiben?
Will nur sicher gehen, daß du auf's gleiche Ergebnis kommst.

DANKE !!

Gruss,
Thoams

von Thomas Winkel (Gast)


Lesenswert?

kein Thema:
>> [b a] = butter(1,0.3/1000)
b =
  1.0e-003 *
    0.4710    0.4710

a =
    1.0000   -0.9991

b0 = 0.000471
b1 = 0.000471
a0 = 1
a1 = -0.9991

bis dann,
Thomas

von Thomas (Gast)


Lesenswert?

...Danke, Thomas Winkel!

von Thomas Winkel (Gast)


Lesenswert?

Deine Differenzengleichung ist übrigens immer noch falsch, richtig
wäre:
y(n) = 0,9991*y(n-1) + 0,000471*x(n-1) + 0,000471*x(n-2)
Beim ARMA(X) Modell ist die Totzeit k immer >= 1 Abtastschritt.
Wenn du wirklich bei dieser Konfiguration bleiben willst, würde ich
direkt mit den Vektoren die Matlab liefert weiterarbeiten und nicht per
Copy&Paste die Werte übernehmen, siehe dazu auch deinen Thread "Nahe am
Stabilitätsrand". Wie gesagt, mit der Genauigkeit, die Matlab auf den
Bildschirm bringt liegt die Grenzfrequenz bei 1.4349e-004Hz.
Thomas

von Thomas (Gast)


Lesenswert?

Hallo Thomas Winkel

Danke erst mal!!!

Du schreibst, richtig wäre:
y(n) = 0,9991*y(n-1) + 0,000471*x(n-1) + 0,000471*x(n-2)

Ich behaupte, richtig wäre:
(n) = 0,9991*y(n-1) + 0,000471*x(n) + 0,000471*x(n-1)

Wieso hast du ein x(n-2)-Glied und kein x(n)-Glied???
(Verstehe ich nicht...)

Es handelt sich doch um ein IIR 1. Ordnung.
Von daher darf doch überhaupt kein x(n-2)-Glied auftauchen, oder?

Gruss,
T.

von Thomas Winkel (Gast)


Lesenswert?

Hallo,
du hast recht, ich habe unrecht, ich hab da was durcheinander gebracht,
ein Filter ist natürlich kein ARMAX Modell!

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.