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
Wahsrcheinlich entsteht irgendwo in deiner Rechnung ein Überlauf. Schau dir mal alle Zwischenergebnisse an.
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
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ß
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.
Das ist das ultimative Wort zur Filterung des Gleichanteils: http://www.embedded.com/design/configurable-systems/4007653/DSP-Tricks-DC-Removal Cheers Detlef
Okay danke erstmal. Ich probiere jetzt nochmal Minimalphasensysteme aus und schaue mir mal den Link näher an. Grüße
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
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ß
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
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ß
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
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ß
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.
Da gibt es doch aber reichlich Bibliotheken für Filter dieser Art, wenigstens in C.
>>>>>>>
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
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ß
Aber egal, das Problem hab ich im Großen und Ganzen (wohl eher Grob) hinbekommen. Thread schließen bitte :D
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.