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

If mit mehreren && in Switch-Case umprogrammieren

 

Frank
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2015, 15:51     Titel: If mit mehreren && in Switch-Case umprogrammieren
  Antworten mit Zitat      
Hallo liebes Forum,

ich habe folgendes Problem. Ich habe drei Rechtecksignale mit Amplitude 1 und leicht Phasenversetzt zueinander. Diese lese bzw. ich zähle die steigenden Flanken momentan mit einer aufwendigen If-Abfrage ein. Nun zu meiner Frage. Ich würde gerne die If-Abfrage durch eine Switch-Case Anweisung ersetzen, nur leider läst die Switch-Syntax keine Vektoren zu. Kann ich dieses Problem irgendwie umgehen.

hier der jetzige Code:

Code:
if ((signal1==1)&(signal2==0)&(signal3==0)&(signal2_l==1))
    winkel=0
  elseif ((signal1==1)&(signal2==0)&(signal3==1)&(signal3_l==0))
    winkel=15
  elseif ((signal1==0)&(signal2==0)&(signal3==1)&(signal1_l==1))
    winkel=30
  elseif ((signal1==0)&(signal2==1)&(signal3==1)&(signal2_l==0))
    winkel=45
  elseif ((signal1==0)&(signal2==1)&(signal3==0)&(signal3_l==1))
    winkel=60
  elseif ((signal1==1)&(signal2==1)&(signal3==0)&(signal1_l==0))
    winkel=75    
end
 

das letzte signal(x)_l ist das original signal um einen Zeitschritt vorher, um die Flanken rauszufiltern.

Gruß
Frank

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2015, 17:48     Titel:
  Antworten mit Zitat      
Hallo,

was gehen sollte:
Die Werte in einen Vektor signals zusammenfassen und dann:

Code:
switch signals
    case [1 0 0 1]
        winkel = 0;
    case [1 0 1 0]
        winkel = 15;
    % usw.    
       
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Frank
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2015, 19:19     Titel:
  Antworten mit Zitat      
Hallo,

danke für die schnelle Antwort,

wenn ich versuche die Rechtecksignale in einen Vektor zusammenzufassen bekomme ich folgende Fehlermeldung.

SWITCH is only defined for scalar or string inputs.

Gruß
Frank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2015, 20:22     Titel:
  Antworten mit Zitat      
Hallo,

falls du das eingangs mit "nur leider läst die Switch-Syntax keine Vektoren zu" gemeint hast, bitte immer ein Beispiel und die zugehörige Fehlermeldung abgeben.

Alternativ könnte man switch schachteln:
switch signal1
Code:
case 0
    switch signal2
    case 0
    ...
    case 1
...


Eine weitere Möglichkeit wäre, die vier 0/1 Werte in eine Zahl von 0 bis 15 umzuwandeln und darauf switch anzuwenden:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Frank
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2015, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

danke für die Vorschläge, leider konnte ich bin2dec und num2str nicht nutzen, das diese anscheinend in einer embedded matlab function in Simulink nicht funktionieren. Ich habe es aber jetzt folgendermaßen gelöst.
Die drei Rechtecksignale in einen Vektor X zusammenfassen und händisch eine Zahl mit
Code:
Zahl = X(1)*2^2+X(2)*2^1+X(3)*2^0
umwandeln. Dann kann man die
Code:
switch(Zahl)
case 4
do...
case 3
usw.
end
benutzen.
Nur falls jemand ein ähnliches Problem hat.

Grüße
Frank
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 - 2025 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.