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

Gleiche Werte finden und Vektor zusammenfassen

 

BlackTiger
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 19.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 10:21     Titel: Gleiche Werte finden und Vektor zusammenfassen
  Antworten mit Zitat      
Hallo zusammen,

hab wieder mal ein kleines Problemchen. bei dem ich nicht so vorankomme.

Und zwar folgende Situation:

Ich hab ein Signal, meinetwegen 50000 lang. Die Signale variieren zwischen den Werten 1-4 (siehe BILD1 im Anhang)

Nun möchte ich die Dauer, der jeweiligen Bereiche berechnen. Das soll so aussehen, dass ich erkenne in welchem Intervall der Bereich X ist, wie oft es innerhalb des gesamten Vektor (50000) vorkommt um schlussendlich die gesamte Dauer des Bereichs X zu berechnen.
Das soll dann für die Bereiche 1-4 geschehen.

Ich habe einige Ansätze versucht, wie beispielsweise mit "diff(A)" die Differenzen zwischen benachberten Werten zu bestimmen um daraus ne Aussage zu treffen, ob sich der Wert geändert hat. Bin aber leider nicht zu einem Ergebnis gekommen.


Ich freue mich auf jegliche Art von Ideen und Umsetzungsmöglichkeiten!
Schon mal vielen Dank

Bild1.JPG
 Beschreibung:

Download
 Dateiname:  Bild1.JPG
 Dateigröße:  37.24 KB
 Heruntergeladen:  284 mal
Private Nachricht senden Benutzer-Profile anzeigen


ol1v3r
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 06.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 10:47     Titel:
  Antworten mit Zitat      
Sind die y-Werte immer identisch, sodass du es eigentlich anhand eines Wertebereichs eingrenzen kannst?
_________________

Viele Grüße
Ol1v3r
Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackTiger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 19.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 11:30     Titel:
  Antworten mit Zitat      
Wenn ich deine Frage richtig verstanden habe - dann ja.

Beispielsweise sieht der Vektor wie folgt aus:

A = [1 1 1 1 3 3 3 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 1 1 1 1 2 2 3 3 3 3 ......]
Private Nachricht senden Benutzer-Profile anzeigen
 
ol1v3r
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 06.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 11:35     Titel:
  Antworten mit Zitat      
Kennst du die Bereiche (also y=1 oder 3, etc.) schon vorher oder musst du die dynamisch jedes Mal bestimmen?
_________________

Viele Grüße
Ol1v3r
Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackTiger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 19.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 11:38     Titel:
  Antworten mit Zitat      
Ne kenne ich leider nicht.
Müsste es dynamisch erstellen und genau hier ist eben mein Problem Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 12.07.2018, 12:32     Titel:
  Antworten mit Zitat      
Hallo Blacktiger,

die Gesamtlänge berechnen ist recht einfach. Wenn du dann noch die Häufigkeit der Intervalle der einzelnen Werte zählen willst geht das zum Beispiel so (unter der Annahme, dass deine Werte 1,2,3 und 4 sind - ansonsten musst das noch anpassen):
Code:

array = Zeros(4,3);
for i = 1:4
    array(i,1) = i; % x-Wert
    array(i,2) = sum(signal == i); % Gesamthäufigkeit x-Wert
    b = find(signal == i);
    if isempty(b) == 1;
        zaehler = 0;
    else
        zaehler = 1;
    end
    for k = 1:length(b)-1
        if b(k+1) ~= b(k)+1
            zaehler = zaehler + 1;
        end
    end
    array(i,3) = zaehler; % Häufigkeit von Intervall der Höhe x = i
    clear b
end


Das geht sicher auch schöner und einfacher (und nicht über die Variablen-Benennung wundern, ich hab eins meiner Beispielprogramme angepasst und da waren die halt so). Ich hab das nur auf die schnelle mal zusammengebastelt. Falls sich sonst niemand mehr meldet poste ich heute oder morgen mal noch eine schönere Variante.

Brauchst du auch noch den Start- und Endwert der einzelnen Intervalle? Dann wird's nämlich schön unübersichtlich Very Happy

Grüße
Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 12.07.2018, 20:15     Titel:
  Antworten mit Zitat      
Hier noch eine kürzere Variante:

Code:

array = zeros(4,3);
for i = 1:4
    array(i,1) = i; % x-Wert
    array(i,2) = sum(signal == i); % Gesamthäufigkeit x-Wert
    array(i,3) = length(find(diff(A==i)==1)); % Häufigkeit der Intervalle der x-Werte
end
array(signal(1),3) = array(signal(1),3) + 1; % erstes Intervall bei diff nicht berücksichtigt
 


Grüße
Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackTiger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 19.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2018, 10:18     Titel:
  Antworten mit Zitat      
Super, danke dir!

Das Erste hat (aus welchem Grund auch immer) nicht ganz funktioniert - habe Werte erhalten die so nicht ganz plausibel waren.

Nichtsdestotrotz hat mir dein Programm zur einer Idee verholfen und momentan funktionierts Very Happy

Versuche es später noch mal mit dem kürzeren Programm

Danke Danke Exclamation
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 13.07.2018, 11:25     Titel:
  Antworten mit Zitat      
In Zeile 5 vom kürzeren Programm muss natürlich "signal" anstatt "A" stehen. Ich kann's leider von hier aus nicht bearbeiten.

Grüße Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
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.