WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Glätten eines Rechtecksignals oder andere Vorschläge

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 12.12.2018, 15:06     Titel: Glätten eines Rechtecksignals oder andere Vorschläge
  Antworten mit Zitat      
Hallo Leute,

habe ein Rechtecksignal das wie im Anhang aussieht (es handelt sich nur um einen Ausschnitt).

ich würde mir gerne die Flanken mittels:
Code:

posFlankHall_1 = find(diff(Hall_1)>0)+1;
negFlankHall_1 = find(diff(Hall_1)<0)+1;


raussuchen und diese abspeichern.

Aber anscheinend macht mir hier das Rauschen an den oberen und unteren Enden zu schaffen. Wie kann ich denn das Signal "Glätten" oder habt ihr eine einfachere Lösung wie ich das bewerkstelligen kann?

Danke im Voraus.

Rect.png
 Beschreibung:
Rechtecksignal

Download
 Dateiname:  Rect.png
 Dateigröße:  25.54 KB
 Heruntergeladen:  350 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.12.2018, 21:23     Titel: Re: Glätten eines Rechtecksignals oder andere Vorschläge
  Antworten mit Zitat      
Hallo JaSoIstEs,

Wie wäre:
Code:
posFlankHall_1 = find(diff(Hall_1) > 100)+1;
negFlankHall_1 = find(diff(Hall_1) < -100)+1;

findchangepts wäre auch eine gute Idee.
Du kannst auch zuerst das Signal differenzieren und dann nach den Peaks suchen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 14.12.2018, 10:51     Titel:
  Antworten mit Zitat      
Hi Jan,

danke für deine Antwort.
Dann bleiben die leer... sprich er findet nichts.
Wie kommst du denn auf den Wert 100?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
philipptempel
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 15.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2018, 13:05     Titel:
  Antworten mit Zitat      
Hi JaSoIstEs,
Jans Vorschlag ist der richtige Weg, so gehe ich dabei auch immer vor. Auch `findpeaks` oder `findchangepts` ist moeglich, sofern du die entsprechende Toolbox hast (Signal Processing Toolbox).

Wie Jan auf genau `100` als Grenzwert kommt kann ich dir nicht sagen, aber es ist im Endeffekt ein Grenzwert den du verwenden musst.
Wenn du nur
Code:

schreibst, dann wird auch das Messrauschen erfasst und dein Flankensignal verfaelscht. Daher solltest du einen Schwellwert eintragen anstelle von 0. Ob dieser 100 oder mehr oder weniger sein muss, musst du entscheiden. Hilfreich kann dabei sein, einfach mal
Code:

anzuschauen und daraus die Schwellwerte zu holen.
Oder du verwendest etwas wie
Code:
dx = diff(x);
find(dx > mean(dx(dx > 0)))

was dir den Schwellwert anhand des Medians aller positiven Flanken bestimmt. Dadurch ist der Code auch fuer andere Inputsignale verwendbar.

Weiterer Tipp: wenn du ein Zeitsignal hast und den Gradienten suchst, dann wuerde ich anstelle von
Code:

den Befehl
Code:

mit Signal `x` und Schrittweite `h` empfehlen. Das Ergebnis davon hat genau die gleiche Dimension wie `x` und ist nicht um ein Element kleiner als das Ergebnis von `x`.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.12.2018, 13:06     Titel:
  Antworten mit Zitat      
Hallo JaSoIstEs,

Die 100 habe ich geraten. Passe den Wert so an, dass du die gewünschten Ergebnisse bekommst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 22.01.2019, 10:39     Titel:
  Antworten mit Zitat      
Servus Leute,

sorry war länger nicht online.
Das Problem besteht leider immer noch.

Jetzt habe ich mal den Ansatz von dir @phillipptempel ausprobiert:


Code:

            dxPosFlanks = diff(AllHallsInOne);
            Pos_AllHallsInOne = find(dxPosFlanks > mean(dxPosFlanks(dxPosFlanks > 0)));
            HowManyPosFlanks = length(Pos_AllHallsInOne);
 


Mit dieser Variante erhalte ich 5329 erkannte positive Flanken anstatt 29... .
Mache ich was falsch bzw. habe ich hier etwas falsch verstanden?

Danke im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 22.01.2019, 11:01     Titel:
  Antworten mit Zitat      
Hab mir folgendes näher angeschaut:

Code:

figure
plot(diff(AllHallsInOne))
 


(Siehe Grafik im Anhang).

Dadurch das der Schwellenwert auch hier 0 gewählt worden ist erkennt er das "Rauschen" um den Nullpunkt auch als "Flanken".

Dein Vorschlag ist gut und für mich auch wünschenswert das ich verschiedene Signale einlesen kann ohne jedes mal den Schwellenwert neu eingeben zu müssen. Aber auch hier die Frage wie bekomme ich dieses Rauschen um den Nullpunkt weg oder ignoriert?

Danke im Voraus.

________________________________________________________________
Edit:

Wenn ich den Schwellenwert auf 1 setze erkennt er dann nur 22 obwohl ich mit der Hand ablesen kann das es 29 Flanken exisiteren.

Ich verstehe es einfach nicht... . Question Question

2019-01-22_10-56-26.png
 Beschreibung:

Download
 Dateiname:  2019-01-22_10-56-26.png
 Dateigröße:  33.52 KB
 Heruntergeladen:  341 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.