Kurvenverlauf in Matlab glätten



  • Hallo,
    ich habe folgendes Problem.
    Ich versuche eine Kurve in Matlab zu erstellen, was auch problemlos funktioniert. Leider sind die Daten bei einer Messung aufgenommen worden, bei der die Signale stark verrauscht sind. Gibt es eine Möglichkeit die Störungen via Matlab herauzufiltern oder zu glätten?
    Gruß Schrecker



  • Schrecker schrieb:

    Hallo,
    ich habe folgendes Problem.
    Ich versuche eine Kurve in Matlab zu erstellen, was auch problemlos funktioniert. Leider sind die Daten bei einer Messung aufgenommen worden, bei der die Signale stark verrauscht sind. Gibt es eine Möglichkeit die Störungen via Matlab herauzufiltern oder zu glätten?
    Gruß Schrecker

    Geht zum Beispiel mit interp1().



  • so nun stehe ich vor dem selben Problem wie der Kollege vor mir:
    ich habe eine Kurve von einem Wirkungsgrad den ich über eine Drehzahl auftrage. Diese sieht aber ziemlich verrauscht aus. Daher nun meine Frage:
    wie wende ich denn interp1 an?

    a= interp1(Drehzahl,Wirkungsgrad,0:1:6500,'spline');
    plot (a); grid on

    würde mir diese zusammenstellung ein Diagramm mit einer line als kurve darstellen oder habe ich einen fehler gemacht? wenn ich das so eingebe bekomme ich nachfolgende fehlermeldung und im Plotfenster kann ich nicht erkennen...alles ist weiß:
    Warning: Matrix is close to singular or badly scaled.
    Results may be inaccurate. RCOND = 2.296618e-213.
    > In spline at 91
    In interp1 at 187

    Bin wie immer für jede hilfe danke...

    -->> Wie lade ich denn ein geändertes m-file ins laufende matlab rein? ich muss matlab immer neu starten damit ich die richtige version meines m-text habe.



  • Ich bin ja nicht 100% sicher, aber interpoliert inter1 nicht nur zwischen zwei Werten des Datensatzes (wie der Name schon sagt...)

    Falls Du ein Rauschen herausfiltern willst, dann könntest du dir im simpelsten Fall ein Moving-Average-Filter bauen oder du filterst mit einem anderen Tiefpass mittels der Funktion "filter"

    MA Ansatz (im einfachsten Fall):

    a = 1:100;
    y = a + randn(1,100);
    glatt = ([0 y] + [y 0]) / 2;
    


  • Bloops schrieb:

    Ich bin ja nicht 100% sicher, aber interpoliert inter1 nicht nur zwischen zwei Werten des Datensatzes (wie der Name schon sagt...)

    [...]

    Ja du hast Recht, hab mich da vertan.



  • Vielen Dank für die Tips, da bin ich schon mal einen Schritt weiter 🙂



  • Die Interpolation ist schon richtig sofern man sie nicht mit interp1 (letztes Zeichen ist eine Ziffer, kein Buchstabe. Das L und die eins sehen gleich aus) verwechselt. interp1 (interp"eins") interpoliert wie schon gesagt zwischen den Werten.

    Die gesuchten Filtermöglichkeiten sind über die Änderung der Abtastrate realisierbar:

    downsample = Reduktion ohne Filterung
    upsample = Erhöhung ohne Filterung

    decimate = Reduktion mit Filterung
    interp = Erhöhung mit Filterung (würde ich hier empfehlen)

    resample = Änderung mit Filterung

    Gruß!

    PS: Ich weiß das der Thread schon alt ist aber den habe ich beim googeln als erstes gefunden und erweitere einfach die Antwort.


Log in to reply