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

Matrixinhalt abfragen

 

Matlab.lab
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 07.09.09
Wohnort: Ulm HMS
Version: 2007 a
     Beitrag Verfasst am: 07.09.2009, 08:55     Titel: Matrixinhalt abfragen
  Antworten mit Zitat      
Hallo,

ich hätte folgendes Problem: Ich habe ein Rechtecksignal aus einer Matrix generiert, die folglich nur 0er und 1er enthält.

Jetzt brauche ich eine Abfrage, die z.B. schaut, wieviele 1er aufeinander folgen, und für den Fall, dass dies z.B. nur 5 oder weniger sind, alle diese durch 0 ersetzt. Andere 1er Reihen sollen so bestehen bleiben..

Bsp aus
[... 0 0 1 1 1 1 1 0 0 ...]
[... 0 0 0 0 0 0 0 0 0 ...]

Wie kann ich das machen? Danke für die Hilfe schonmal.

Achja.. Die "Matrix" ist vom Typ Double, also eigentlich nur ein Array von Werten. Weiß nicht genau, ob das aber was ändert am Problem.. :?:
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 07.09.2009, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

eine "direkte" Möglichkeit ohne es Basetelei kenne ich nicht. Aber generell: mit
Code:
kann man sich die Punkte suchen, an denen der Wechsel 0->1 stattfindet. Diese würde ich in einer Schleife durchlaufen und dann ab dem Punkt den Punkt suchen, an dem der Wechsel 1->0 stattfindet. Ist der näher als 5 Punkte, dann die Punkte löschen ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab.lab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 07.09.09
Wohnort: Ulm HMS
Version: 2007 a
     Beitrag Verfasst am: 07.09.2009, 12:46     Titel:
  Antworten mit Zitat      
Über den diff-Befehl krieg ich ja aber nur wieder neue Arrays raus, die von der Form genauso aussehen wie mein ursprüngliches Array - da könnte ich doch direkt mich mit der Schleife an dieses machen, nur wie das geht, das ist ja das Problem..
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 07.09.2009, 13:17     Titel:
  Antworten mit Zitat      
Ich möchte Simulink als Alternative ins Spiel bringen. Das hört sich ja nach Signalverarbeitung und/oder Logik an. Für diese eine Aufgabe ist es vielleicht nicht relevant, aber wenn die gesamte Applikation noch in den Anfängen ist geht es in Simulink wohl flotter zu entwerfen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2009, 18:50     Titel:
  Antworten mit Zitat      
Hallo,

leider kenne ich auch keine "einfache" Variante, aber vielleicht hilft dir ja der folgende Code.

Code:

A=DeineMatrix;
[a b] = size(A); % Ermitteln der Matrixgröße
c = 0;  % Zähler für Sequenzlänge
s=5;    % gewünschtes Minimum für Sequenzlänge

for ii=1:a;             % Schleife für Zeilen
    for jj=1:b;         % Schleife für Spalten
        if A(ii,jj)==1;
            c=c+1;      % Zähler wird erhöht
        elseif A(ii,jj)==0;
            c=0; % zurücksetzen des Zählers, da neue Sequenz beginnt
        end;
        if jj+1<=b; % Abfrage, ob Sequenz erhöht werden könnte
          if c<s && A(ii,jj+1)==0; % falls Sequenz nicht mehr erhöht wird und Sequenzminimum nicht erreicht
            for h=0:(c-1); % Setzen der vorhergehenden Werte '1' auf '0'
                A(ii,jj-h)=0;
            end;
          end;
        elseif jj+1>b && c<s; % Überprüfen auf Ende der Zeile und Sequenzlänge
          for h=0:(c-1);
            A(ii,jj-h)=0; % Setzen der Werte '1' auf '0', falls Sequenzminimum unterschritten
          end;
        end;
    end;
    c=0;   % Zurücksetzen des Zählers bei Beginn neuer Spalte
end;
 


Eventuell kann man noch das ein oder andere vereinfachen (Vielleicht hat noch jemand eine Idee/Hinweis?). Bei meinen Beispieldaten hat es soweit problemlos geklappt und vielleicht hilft es dir weiter.

ciao
 
Matlab.lab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 65
Anmeldedatum: 07.09.09
Wohnort: Ulm HMS
Version: 2007 a
     Beitrag Verfasst am: 08.09.2009, 16:24     Titel:
  Antworten mit Zitat      
ja tatsächlich, der letzte Code funktioniert!!

Genau wie ichs mir vorgestellt hatte - außer der Lösungsweg, der ist ein bisschen komplizierter ^^

Besten Dank Euch allen!!!
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.