Wie programmiert man einen Tiefpassfilter



  • Hallo,

    Ich habe ein periodisches Signal, für das ich für jede Periode den Maximal- und den Minimalwert gesampled habe. Diese Liste habe ich im Speicher. Das Signal ist so, dass jede 3 bis x-te Periode einen deutlichen minimalen Pegel hat. Wie kann ich ausrechnen wieviel Perioden dazwischen liegen.

    Gern hätte ich hier ein Diagramm gezeigt.

    Bei meinen bisherigen Versuchen ergeben sich immer Doppeldeutigkeiten, meine Ergebnisse liegt oft um ganze Faktoren daneben ( 2,3 oder 0,5...).

    Erschwerend ist, dass ich meist noch einen Brumm mit ca. 1% der Signalstärke drauf habe.

    Danke, schon mal.
    Rudi



  • ein diagramm waere wirklich gut...



  • Kannst Du mal kurz den Zusammenhang zur Überschrift aufzeigen? Ist mir gerade nicht so ganz klar.

    Also Du hast ein periodisches Signal... sei mal O eine Periode. Dann kann das etwa so aussehen?

    OOOOoOOOoOOOOOoOOOOOOoOOOoOOOOOoOOOOoOOO



  • rudiS schrieb:

    Das Signal ist so, dass jede 3 bis x-te Periode einen deutlichen minimalen Pegel hat. Wie kann ich ausrechnen wieviel Perioden dazwischen liegen.

    Vielleicht hab ich ja deine Frage nicht ganz verstanden, aber: Die periodischen Abschnitte eins Signals sollten doch immer die selben sein, und sich nicht verändern. Man nennt doch T eine Periode des Signals s(t), wenn für alle Zeiten t gilt: s(t) = s(t+T).

    Ansonsten könntest du du doch das Signal Fourier-Transformieren (je nach Anwendbarkeit ZDFT, DFT oder FFT) und dann die hohen Frequenzen wegwerfen.

    Bitte korriegieren oder erweitern, falls das alles noch nicht ganz rund ist.



  • Hallo,

    ich versuch mal ein sehr grobes Beispiel meiner Sampleliste aufzulisten:
    jede Ziffer steht für einen Pegel:

    1736495673946 1736495673946 1736495673946 1736495673946

    Das Leerzeichen habe ich hier eingefügt um den Begin einer neuen Wiederholung zu deutlich zu machen. Mein Wunschergebnis hier wäre 13.

    Ich dachte schon, dass Fourier hierzu geeignet ist. Leider weiß ich nicht wie es geht - Bin leider kein Mathematiker - ausserdem hab ich es beim Ausrechen eilig, was ich Fourier in C++ erst mal nicht zutraue.



  • rudiS schrieb:

    Ich dachte schon, dass Fourier hierzu geeignet ist. Leider weiß ich nicht wie es geht - Bin leider kein Mathematiker - ausserdem hab ich es beim Ausrechen eilig, was ich Fourier in C++ erst mal nicht zutraue.

    Wenn Du nicht mit einfachen Schwellenwerten arbeiten möchtest, um den Ort eines "niedrigen Pegels" festzustellen, wirst Du nicht um eine Fouriertransformation herumkommen. Wenn das Signal nicht irgendwo endet, oder Du das Ergebnis mehr oder weniger in Echtzeit brauchst, brauchst Du sogar eine gefensterte Fouriertransformation. ...ne Wavelettransformation mit nem Gabor-Wavelet zum Beispiel.



  • Hallo Gregor,

    Tolle Aussichten, das Ganze scheint in Arbeit auszuarten.

    Hat wer ne Instandpackung für mich?



  • Ingenieure und Physiker stehen auch total auf Systemtheorie (und genau die brauchst du hier). Mathematiker musst du dafür nicht sein.

    Ich fang mal ne Liste und, du sagts, ob du was mit den Begriffen anfangen kannst:
    Zeitbereich, Frequenzbereich, kontinuierlich, diskret, Dirac-Impuls (auch manchmal Delta-Distribution), Übertragungsfunktion, Impulsantwort, Faltung, Faltungsintegral, Dirac-Impulsreihe, Fouriertransformation, Rechteckfunktion, Sprungfunktion, kausale Funktionen, Fensterfunktionen, ...

    edit: Du musst das bestimmt nicht selbst implementieren. Fertige Algorithmen in C++ dazu findest du sicher irgendwo im Netz. Allerdings ist etwas Grundverständnis zur Benutzung davon wahrscheinlich nötig.



  • Taurin schrieb:

    Fertige Algorithmen in C++ dazu findest du sicher irgendwo im Netz.

    Wie wäre es damit?

    http://www.fftw.org/



  • Hallo Gregor,

    danke für Deinen Link. Er trifft mein Thema. Leider muss ich jedoch nach kurzer Durchsicht feststellen, dass ich kein Floatingpoint verwendet habe. Damit dürfte die fertige DLL nicht anwendbar sein.

    Ich habe mir für mein Projekt eine eigene Fixpoint-Klasse gebastelt mit insgesamt 320 Bits, was in etwa einer Auflösung von 10e-90 entspricht.

    Ich guck mir den Link aber dennoch nochmal genauer an.

    Schöne Grüße
    Rudi



  • rudiS schrieb:

    gebastelt mit insgesamt 320 Bits, was in etwa einer Auflösung von 10e-90 entspricht.

    Welche Signale haben eine solche Stellengenauigkeit?



  • man bekommt halt genau die genauigkeit (ha, ha, ha), die man will. 😃
    ob er was davon hat, ist möglicherweise eine andere frage 😉



  • Hallo Leute,

    Ihr habt mich erwischt. Es geht gar nicht um ein Signal, sonderen um einen Iterationsverlauf. Ich will diesen analysieren. Er verläuft in der Regel konvergent, wobei bei manchen Ausgangswerten über 2 GigaIterationen nötig werden, bis meine Genauigkeit erschöpft ist. Bei geringerer Genauigkeit tritt der Iterationsverlauf weit vorher in einen pseudo-Grenzzyclus ein.

    Nun ist es nicht lustig ne Stunde auf Eintritt des Grenzzycluses zu warten. Deshalb versuche ich das schon vorher rauszukriegen. Im Prinzip habe ich schon Erfolge gehabt und die Information steckt auch schon am Anfang drin. Nur kann ichs nicht zuverlässig ausrechnen.

    Gruß Rudi



  • Hallo,

    meine Mitteilung von gestern war kein Aprilscherz.

    Ich hoffe noch immer auf einen ultimativen Tipp.

    Danke. 😋


Log in to reply