Forum: Digitale Signalverarbeitung / DSP / Machine Learning Problem mit biquad-Filter


von Audio Hans (Gast)


Lesenswert?

Ich habe versucht einen einfachen biquad Filter zu bauen, komme aber mit 
den Koeffizienten nicht klar. Das filter fängt an zu schwingen. Ich gehe 
davon aus, dass ein Vorzeichen nicht passt.

Verwendet wird der Biquad Filter Coefficient Calculator:
http://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/

Er liefert diese Koeffizienten:

a0 = 0.2513790015131591
a1 = 0.5027580030263182
a2 = 0.2513790015131591
b1 = -0.17124071441396285
b2 = 0.1767567204665992

Die einen lowpass filter darstellen sollen,

Ich bin mir aber über die Verwendung im Unklaren. Eigentlich sollte es 
so stimmen:

Y(n) = X(n)*a0 + X(n-1)*a1 + X(n-2)*a2 + Y(n-1)*b1 + Y(n-2)*b2

Klappt aber nicht. In dem Diskussionsthread im Artikel wird auch darauf 
verwiesen, dass unterschiedliche Konventionen verwendet werden. Wie muss 
ich die Koeffs nun anwenden?

von Manfred M. (bittbeisser)


Lesenswert?

> In dem Diskussionsthread im Artikel wird auch darauf verwiesen, dass
> unterschiedliche Konventionen verwendet werden. Wie muss
> ich die Koeffs nun anwenden?

Ich habe zwar keine Ahnung, was genau ein Biquad-Filter ist, aber anhand 
der Koeffizienten wird es wohl ein IIR Filter sein.

Und da gibt es tatsächlich zwei unterschiedliche Sichtweisen. Ich bin 
bei meinen Experimenten kürzlich selber darüber gestolpert. Um das näher 
zu untersuchen, solltest Du uns mal deine Filter Routine Zeigen.

Es gibt da 2 unterschiedliche Sichtweisen. Einmal werden alle 
Rückkopplungswerte addiert und dann die Summe vom Eingangssignal 
Subtrahiert. Die andere Sichtweise kennt nur Additionen, da müsse dann 
ggf. die Vorzeichen der Rückkopplungswerte invertiert werden.

Genaueres kann man aber erst sagen, wenn der Filteralgorithmus bekannt 
ist. Bei Verwendung eines Ringpuffers für die Eingangsdaten kann es 
außerdem erforderlich sein, die Reihenfolge der Koeffizienten 
umzudrehen.

von Audio Hans (Gast)


Lesenswert?

Die Reihenfolge ist es sicher nicht, aber Dein Einwand mit dem Abziehen 
könnte es sein - ich probiere das mal, wenngleich die ersten Werte 
eigentlich sinnvoll sind, wenn ich ein Dreieick einspeise: Es kommt eine 
Sichel, wie man sie erwartet, aber schon nach 10 Werten ist das Filter 
am schwingen.

Vielleicht ein Auflösungproblem?

von Detlef _. (detlef_a)


Lesenswert?

Manfred hat Recht, du brauchst minus statt plus in der Rückkoppelung. 
Sagt die Website die du referenziert auch im Artikel über die biquads. 
Bezeichnung ist ungewöhnlich, alle Welt nennt die rueckkoppelcoeff a und 
die anderen b.

Cheers
Detlef

von Audio Hans (Gast)


Lesenswert?

Richtig, bezogen auf meine Formel oben muss man alle Beiträge ausser dem 
ersten abziehen. Dann passt es.

Allerdings beobachte ich noch Folgendes: Erhöht man die eingespeiste 
Frequenz über ein bestimmtes Mass, dämpft der Filter nicht mehr, sondern 
verstärkt die Amplitude allerdings mit stark abfallender Frequenz.

Könnte so ein Nyqusteffekt sein, denke ich.

von Manfred M. (bittbeisser)


Angehängte Dateien:

Lesenswert?

Ich habe Deine Daten jetzt einfach mal in mein Testprogramm eingegeben, 
wobei ich die Eingangsdaten meines Constructors für die Berechnung 
einfach ignoriert habe und statdessen Deine Daten direkt übernommen 
habe. Die Angaben im Einstellungspanel sind also nicht alle zutreffend, 
aber die Skalierung stimmt.

Also der Filter funktioniert, obwohl ich das als ziemlich lahm 
bezeichnen würde (siehe Anhang). Ich habe meinen Algorithmus kürzlich so 
umgestellt, dass er nur mit additionen arbeitet. Der Grund war, das ich 
den Algorithmus aus dem hier schon mehrfach zitierten DSP Guide 
verwende.

Mein neuer Algorithmus verwendet nur (noch) Additionen. Es werden also 
alle Rückkopplungswerte addiert und dann zum Eingangswert ebenfalls 
addiert (vorher hatte ich die Summe Subtrahiert).

Möglicherweise musst Du daher nur das Vorzeichen im Rückkopplungszweig 
umdrehen.

von Manfred M. (bittbeisser)


Lesenswert?

> Bezeichnung ist ungewöhnlich, alle Welt nennt die rueckkoppelcoeff a und
> die anderen b.
Das interessiert mich jetzt aber auch. Bisher sehe ich in den 
Internet-Quellen hierzu etwa ein 1:1 Verhältnis, ohne dass ich da eine 
Priorität erkennen konnte. Ich habe mir deshalb angewöhnt, mich an dem 
"fehlendem" Parameter (Index 0) zu orientieren.

von Detlef _. (detlef_a)


Lesenswert?

Audio Hans schrieb:
> Richtig, bezogen auf meine Formel oben muss man alle Beiträge ausser dem
> ersten abziehen. Dann passt es.
>

Nein, nur die beiden letzten abziehen, die vorfaktoren der y(n-1) 
y(n-2).


Cheers
Detlef

: Bearbeitet durch User
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.