|
|
for Schleife; Wert von i speichern |
|
JJJ |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 11.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.11.2008, 22:36
Titel: for Schleife; Wert von i speichern
|
 |
Liebes Matlab Forum
bin ein Anfänger und habe eine Anfängerfrage. Also ich beschäftige mich Wal- Sounds und importiere die wav.- Dateien(Y) in Matlab.
Danach setzte ich alle Werte eines bestimmten Wertebereichs mittels einer if- Funktion gleich null. Das imporierte Soundfile hat i- Werte. Nun würde ich gerne für den Fall, dass Y(i,:) ungleich null ist, den Wert von i in einem neuen Vektor abspeichern.
Zum Beispiel Y(1,:)-Y(1000,:)=0 und dann Y(1001,:) ungleich null, speichere 1001 in Vektor x usw. D.h. am Ende hätte ich gerne einen Vektor x mit Werten von i, an denen Y ungleich null ist.
Freue mich auf euere Tipps und Fragen, mal schauen wie schnell das hier geht!
Hier der bisherige Code:
Aloha Jakob
|
|
|
|
|
Titus |

Forum-Meister
|
 |
Beiträge: 871
|
 |
|
 |
Anmeldedatum: 19.07.07
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2008, 09:52
Titel:
|
 |
Hallo,
ganz genau habe ich die Frage nicht verstanden, da y(1, ein Vektor ist... dieser kann mal 0 mal ungleich 0 sein.
Aber generell: find müsste helfen.
liefert für x: 1,3,4.
Außerdem: die if-Anweisung ist auch problematisch, da das Ergebnis der Vergleichsoperation ein Vektor ist (darf eigentlich nur Zahl). Meinst Du, dass alle Werte von y(:,i)<0.0015 sein sollen, damit alle zu 0 gesetzt werden? Dann würde ich das auch schreiben:
Titus
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2008, 11:25
Titel:
|
 |
Hallo,
da gibt es eigentlich mehrere Problematiken
Ich würde es so machen:
MfG
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 12.11.2008, 11:33
Titel:
|
 |
|
 |
|
Hallo JJJ,
1. Willkommen im Forum, ich mache auch viel mit Tierlauten, würde gerne etwas genauer wissen was du in welchem Zusammenhang machst, kannst mir ja mal ne PN schicken.
2. Eigentlich brauchst du dafür keine If Schleifen, auch wenn dann Ansatz richtig war, da Y(i, dir ja immer nur eine Zahl liefert wenn du einen Kanal benutzt. Am besten ist es immer if Schleifen zu vermeiden wenn es geht. Am besten wie Titus schon gesagt hat find benutzen also:
Damit hast du deinen Vektor x schonmal, danach mußt du diesen dann nurnoch als textdatei speichern, also so wie du das schon angefangen hast. Tipp: selbst wenn du die If Anweisung behalten würdest mache lieber immer vorher einen Vektor und dann in Datei speichern, sonst hast du ein extremes Laufzeitproblem.
3. Ausgabe in Datei geht vielleicht so besser:
4. Benutze in Schleifen lieber nicht i, da es auch für die imaginäre Zahl steht.
Viel Erfolg noch,
der Oli
Edit: Jup oder so wie dibor dabei drück ich schon immer F5 um zu sehen ob nicht schon jemand anderes gepostet hat.
|
|
|
JJJ |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 11.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2008, 23:32
Titel:
|
 |
|
 |
|
Hallo
vielen, vieln Dank, das hilft mir wirklich weiter und geht dazu ja auch noch richtig schnell!!! Hab mich für die Lösung von dib0r entschieden, da sie sehr simpel wirkt.
Nun habe ich leider noch ein weiteres Problem: Die für x ermittelten Werte stellen die Anfangswerte für relevante Signale dar. Nun gibt es für den Vektor x natürlich Werte die unmittelbar aufeinander Folgen (weil ein Signal natürlich nicht aus einem Wert besteht). Z.B. für x [1700 1701 1703 1705 16498...] --> erstes Signal beginnt bei 1700, nächstes bei 16498, usw.
Nun möchte ich gerne alle Werte herausfiltern, die für dieses Beispiel zwischen 1700 und 1956 (1700+256; länge des jeweiligen Signals entspricht 256) liegen.
Mein Vektor nachher also x [1700 16498...] darstellt und mir so lediglich die Anfangswerte einer Funktion wieder gibt.
Dazu habe ich folgendes (sehr umständliches) Programm geschrieben:
Ich bekomme hierauf einige Vektoren als Lösung, wobei der letzte der gesuchte ist. Dann werden alle Nullen mittels der letzten Zeile gelöscht und ich habe die gesuchten Signalanfänge.
Ich bin mir sicher, dass einer von euch Profis dafür eine elegantere Lösung hat! Vielen Dank nochmals für euer schnelle, ausführliche und vorallem hilfreiche Hilfe.
Aloha Jakob
|
|
|
derOli |

Forum-Meister
|
 |
Beiträge: 579
|
 |
|
 |
Anmeldedatum: 19.03.08
|
 |
|
 |
Wohnort: Leipzig
|
 |
|
 |
Version: 2010a
|
 |
|
|
 |
|
Verfasst am: 13.11.2008, 00:32
Titel:
|
 |
Hi Jakob,
das hier sollte funktionieren:
Muss gleich mal meinen Code checken, glaube hab das damals noch nicht so hinbekommen. Allerdings habe ich damals auch die Endpunkte bestimmt, brauchst du die nicht auch noch?
Grüße,
der Oli
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.11.2008, 12:19
Titel:
|
 |
Hallo,
ich befürchte das geht nicht ohne Schleife (man sollte in MATLAB Schleifen vermeiden - wegen der Geschwindigkeit).
Ich weiss nicht ob dieser Code hier schneller ist, ich denke mal nicht wirklich:
Der Code von derOli funktioniert zwar auch (und ist sicherlich weitaus schneller), allerdings mit der Einschränkung, dass nur benachbarte Werte verglichen werden. z.B. für
liefert er nur 1 als Ergebnis (ich denke du willst da [1 257 513 769] als Ergebnis haben).
MfG
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|