Verfasst am: 10.03.2016, 15:42
Titel: Matrix und findpeaks: Matrix aufteilen
Hallo liebe Community,
ich habe da ein kleines Problem und hoffe ihr könnt mir auf die Sprünge helfen.
Mir stehen zwei Datensätze zu Verfügung, ich nenne den einen "stim" den zweiten "spike".
Mit "findpeaks" suche ich mir nun die Maxima aus stim und möchte nach jedem Maximum bis zum nächsten Maximum von stim in der gleichen Länge eine Zeile der Matrix Spike in eine neue Matrix als eine Zeile kopieren.
Das ganze soll dann so aussiehen
stim: |----|----|----|----|---- eine Zeile, hier werden die peaks gesucht
spike |----|----|----|----|---- eine Zeile, und auf diese Länge angewendet
neue Matrix der spikes zum Zeitpunkt des Maximums von stim:
|----
|----
|----
|----
|----
Mein Code lautet bisher wie folgt:
Code:
% Stimulus
stim=data(:,3);
% VEPs
spike=data(:,1);
% halbieren, da erstes Stück der Daten schöner
stim=stim(1:(length(stim))/2);
spike=spike(1:(length(spike))/2);
% komplette Spikes mit Stimulus überlagert plotten plot(spike);
hold on
plot(stim);
% Finde den Beginn aller Stimuli [pks,locs]=findpeaks(stim,'MINPEAKDISTANCE', 247, 'MINPEAKHEIGHT', 3);
hold on
% Zeige gefundene stimuli
plot(locs,zeros(length(locs)),'*');
% Für erste 1000 Maxima for i=1:1:1000;
spikeeinzel(i,:)=spike(locs(i):locs(i+1)); %Hier sitzt wohl der Denkfehler *1 end
*1 Ziel ist es hier aus den "locs" der Maxima von stim von peak 1 zu peak 2, dann von peak 2 zu peak 3 bis peak 999 zu peak 1000 auf das Datenstück von spike zuzugreifen und je ein Datenstück in je eine Zeile zu schreiben.
Ich wäre um jede Hilfe sehr dankbar.
Liebe Grüße,
Elli
Elli248
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.03.2016, 15:59
Titel:
Ich muss noch was hinzufügen. Das Problem was Matlab damit wohl hat ist, dass die Anzahl der samples leicht um +-3 schwanken nach dem gefundenen Maxima. Kann ich dieses Problem irgendwie umgehen?
wenn die länge der vektoren schwankt können sie nicht einfach in eine matrix gepackt werden da ja die dimmensonen nicht stimmen. du kannst cell arrays verwenden, die ergebniss vektoren auf die selbe länge bringen oder die matrix vorher so groß machen wie sie maximal werden kann und dann werte abschneiten und die fehlenden halt durch etwas ersetz was du willst, je nachdem was du später mit den daten machen willst kann das eine oder das andere praktischer sein.
_________________
Hi, danke schon mal für die Antwort.
Also die Daten sollen im Anschluss gemittelt werden. Ein lag zwischen den Daten wäre dann sowieso sehr unvorteilhaft.
Das heißt würde man sie mit "nullen" auffüllen wäre das wahrscheinlich der optimalste Fall weil eine andere ordentliche Lösung fällt mir pauschal nicht ein?
Abschneiden würde theoretisch auch gehen. Ich hatte nun folgende Idee:
Ich erstelle eine Matrix mit 1000 Zeilen und 960 Spalten und schneide den Rest bis zum letzten Maximum einfach weg.
Irgendwie scheitert es jedoch an der Umsetzung, denn entweder meckert Matlab mit "...exceeds Matrix dimensions" oder "matrix dimensions must agree".
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
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.