Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR und IIR Filterimplementierung


von Eric (Gast)


Lesenswert?

Hallo,


ich habe mir ein Programm geschrieben mit den ich mit Hilfe von FIR und 
IIR Filtern Signale filtern kann. Aus Geschwindigkeitsgründen habe ich 
diese mit Hilfe des Q.M Formats implementiert. Jetzt habe ich aber ein 
kleines Problem,
hat mein Eingangssignal negative Werte kommt es zu Fehlern.

Zum Beispiel :

mein Eingangssignal hat:

- 1000 Werte
- jede Wert beträgt -1
- letzter Wert nach der Filterung beträgt dann -140



Warum -140 und nicht -1 ??


beleg ich den Wert mit 1 stimmt alles.
letzter Wert nach der Filterung beträgt dann 1


Ich verwende keine unsigned Werte.


Weiss einer woran das liegen könnte? Bei Floatwerten stimmt alles. Hab 
es getestet. Muss also an der Festkommaarithmetik liegen

Gruß,

Eric

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wahsrcheinlich entsteht irgendwo in deiner Rechnung ein Überlauf. Schau 
dir mal alle Zwischenergebnisse an.

von Eric (Gast)


Lesenswert?

Ja, danke war ein Überlaufproblem.

Nun hätte ich noch eine Frage. Ich benötige ein Tiefpassfilter zur 
Filterung des Gleichanteils.

Anforderungen:

Zulässige Verzögerung 100 ms.
Toleranz 0.01 Prozent
Eckfrequenz: so tief wie möglich
Dämpfung. So hoch wie möglich.

Habe nun eine Reihe von Varianten probiert.

Butterworthfilter -> Einschwingzeit zu lang
FIR mit Kaiserfenster -> gut, aber Dämpfung zu niedrig zwischen 5Hz und 
25 Hz

Verknüpfung von Butterworthfiltern mit FIR-Kaiser. -> Verbesserung, 
allerdings natürlich auch Vergrößerung der Verzögerung um 60 ms.

Hab die Wavelet Transformation auf meinem DSP implementiert, da diese 
eine gute Dämpfung bei wenig Zeitverzögerung aufweist. Allerdings 
filtert die nur auf geschätzt 2 Prozent genau. An den Rändern kommt es 
zu Artefakten, die auch mit Hilfe von Symmetriesierung nicht 100 
prozentig wegzubekommen sind.

Gibt es vielleicht eine Möglichkeit die niedrigen Frequenzen etwas 
anzuheben ? (dahin, wo mein Filter eine gute Dämpfung besitzt). Dachte 
erst an Amplitudenmodulation. Ist allerdings zu ungenau, da ich da eine 
Menge an Werten benötige, damit der Träger annähernd die eingestellte 
Frequenz hat. Und der Bandpass ist auch nicht wirklich genauer als wenn 
ich gleich einen Tiefpass zur Filterung benutze.

Gruß,

Eric

von Eric (Gast)


Lesenswert?

Weiss niemand einen Rat. Oder ist es einfach nicht möglich, solch 
niedrige Frequenzen zu filtern. Mit den Filtern im MatLab FDA-Tool ist 
es mir jedenfalls nicht gelungen. Aber es muss doch etwas geben um auch 
solch niedrige Frequenzen zu filtern, allerdings unter der Premise einer 
kleinen Filterordnung bzw. verschwindend geringer Zeitverzögerung

Gruß

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Da das Filter nicht in die Zukunft schauen kann, legen die 100ms 
Verzögerung auch die untere Grenze fest.
Ich meine, Bessel- und Gausstiefpass sollen die kleinsten Verzögerungen 
bei geringen/fehlenden Überschwingern haben.

von Detlef _. (detlef_a)


Lesenswert?

Das ist das ultimative Wort zur Filterung des Gleichanteils:

http://www.embedded.com/design/configurable-systems/4007653/DSP-Tricks-DC-Removal

Cheers
Detlef

von Eric (Gast)


Lesenswert?

Okay danke erstmal. Ich probiere jetzt nochmal Minimalphasensysteme aus 
und schaue mir mal den Link  näher an.

Grüße

von Eric (Gast)


Lesenswert?

Beim Link ist es ja auch nur ein einfacher IIR Direktform 2. Ich probier 
es mal aus. Obwohl die volle Dämpfung auch erst bei fa/8 erreicht zu 
sein scheint (wenn ich mir die Abbildung ansehe). Ich brauche aber volle 
Dämpfung bei fa / 700.

Naja mal schauen

von Martin (Gast)


Lesenswert?

Sagmal,  was filterst DU da eigentlich.
Bilder?

von Eric (Gast)


Lesenswert?

nein filtere keine Bilder. Hab den unter dem Link aufgeführten Filter 
getestet. Funktioniert erstaunlich gut auf den ersten Blick. Gibt es den 
auch anders herum. Ich meine, dass der mir nur den Gleichanteil 
durchlässt. Eventuell könnt ich so ein Filter nämlich sehr gut als 
Vorfilter gebrauchen.

Gruß

von Jan K. (jan_k)


Lesenswert?

Nein, das ist schon ein Hochpass. Aber ein ganz normaler. Frage mich, 
warum das jetzt state of the art sein soll, um den DC Anteil zu 
entfernen, oder habe ich was überlesen?

Schöne Grüße,
Jan

von Eric (Gast)


Lesenswert?

Wie jetzt,

mir ist klar dass das ein Hochpass ist. Ich brauche aber ein Tiefpass. 
Mein Nutzsignal ist der Gleichanteil. Diese Filterstruktur im Link hilft 
mir da doch nicht so richtig weiter. Dämpfung viel zu gering. Da werd 
ich es doch lieber mit minimalphasen Filtern probieren.

Gruß

von Jan K. (jan_k)


Lesenswert?

Ui, sorry. Habe nur gelesen, "um den DC Anteil zu filtern" und dann die 
verlinkte Website gesehen.

Tschebyscheff Filter haben sehr steile Flanken, aber auch entsprechendes 
Überschwingen.

Falls du einen geeigneten (Echtzeit fähiges) Filter mit steilen Flanken 
und geringem Überschwingen findest sag Bescheid, ich glaube nicht, dass 
es sowas gibt.

: Bearbeitet durch User
von Eric (Gast)


Lesenswert?

Tschebishev und Equiripple schon probiert. Erfüllen meine Anforderungen 
nicht, waren aber die bisher besten.


Letzte Hoffnung meinerseits sind die Equiripple mit minimaler Phase. 
Hoffe,  die erfüllen meinen Anforderungen.

Gruß

von Lu (Gast)


Lesenswert?

Welche Information soll denn im Gleichanteil stecken?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Nochmal mein Ansatz: Aus den beiden Forderungen
- Zulässige Verzögerung 100 ms.
-Eckfrequenz: so tief wie möglich
folgt die Wahl der Filtercharakteristik. Soweit ich weiß sind Bessel und 
Gauss dafür die beste Wahl. Alle anderen Typen haben längere 
Verzögerungen bei gleicher Eckfrequenz.

http://en.wikipedia.org/wiki/Bessel_filter
"The Bessel filter has better shaping factor, flatter phase delay, and 
flatter group delay than a Gaussian of the same order, though the 
Gaussian has lower time delay."

http://en.wikipedia.org/wiki/Low-pass_filter#Ideal_and_real_filters

Nur wenn man "offline" filtern kann, beispielsweise bei der 
Fotobearbeitung, dann kann das Filter eine "Verzögerung" von Null haben.

von Rolf S. (audiorolf)


Lesenswert?

Da gibt es doch aber reichlich Bibliotheken für Filter dieser Art, 
wenigstens in C.

von Jan K. (jan_k)


Lesenswert?


von Detlef _. (detlef_a)


Lesenswert?

>>>>>>>
mir ist klar dass das ein Hochpass ist. Ich brauche aber ein Tiefpass.
Mein Nutzsignal ist der Gleichanteil. Diese Filterstruktur im Link hilft
mir da doch nicht so richtig weiter. Dämpfung viel zu gering. Da werd
ich es doch lieber mit minimalphasen Filtern probieren.
<<<<<<<<

Wenn Du den Gleichanteil willst, dann subtrahierst Du den Filterausgang 
von Deinem Eingangssignal, das liegt doch auf der Hand. So bastelt man 
Tiefpässe in Hochpässe um und umgekehrt: Wenn Du das Signal ohne 
Gleichanteil hast dann ziehst Du das von dem Original ab und hast Deinen 
Gleichanteil.

Cheers
Detlef

von Eric (Gast)


Lesenswert?

Detlef _a schrieb:
> Wenn Du den Gleichanteil willst, dann subtrahierst Du den Filterausgang
> von Deinem Eingangssignal, das liegt doch auf der Hand. So bastelt man
> Tiefpässe in Hochpässe um und umgekehrt: Wenn Du das Signal ohne
> Gleichanteil hast dann ziehst Du das von dem Original ab und hast Deinen
> Gleichanteil.
>
> Cheers
> Detlef

Das funktioniert doch nicht, da gibt es ja noch so eine Sache mit einer
Phasenverschiebung, wenn ich mich nicht irre. Vielleicht funktioniert
das wenn es grob hinhaun soll

Also, so auf der Hand liegt es dann doch nicht

Gruß

von Eric (Gast)


Lesenswert?

Aber egal, das Problem hab ich im Großen und Ganzen (wohl eher Grob) 
hinbekommen.



Thread schließen bitte :D

von Jan K. (jan_k)


Lesenswert?

Wie denn

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.