Verfasst am: 10.02.2011, 15:47
Titel: Mittelwert der Vektoren unterschiedlicher Länge berechnen
Hallo zusammen
ich habe hier ein Problem und mir fehlen die Ideen wie ich es mit Matlab lösen kann.
Ich habe x Messdaten. (nehmen wir bspw. 5)
Über diese Messdaten führe ich folgenden Befehl aus um mir die Peakser anzusschauen:
Code:
Fpks = cell(1, size(data, 2));
Flocs = cell(1, size(data, 2));
for k=1:size(data, 2) [Fpks{k}, Flocs{k}] = findpeaks(yplot(:,k),'minpeakheight',0.001,'minpeakdistance',20);
end
Nun möchte ich über jede Spalte den Mittelwert bilden. Das Problem ist aber dass die Vektoren nicht gleich lang sind und entsprechend falsche Werte zur Mittelwertbildung herangezogen werden.
Beispiel: Man achte auf die 6. Spalte: (286 +325+ 322 + 321+ 324) / 5) ( Zur besseren Darstellung habe ich durch Leerzeichen relevante Werte untereinander gebracht)
Hat jemand eine Idee wie ich den Mittlerwert für jede Spalte richtig berechnen kann?
Die Vektoren haben keine Leerzeilen bzw. NaN! Ich müsste in etwa die Vektoren mit Leerzeilen ausfüllen und dann über jede Spalte den Mittelwert bilden. Dabei muss ich aber vorher erkennen welche Werte zueinander gehören und diese dann in einer Spalte zusammenführen
Ich habe was anderes gemeint, dein Beispiel ist verwirrend.
Ich habe folgende Idee, du suchst doch Peaks in mindestens 20 Schrittweite durch.
Also dann sollst du vielleicht die Ergebnisse auf so eine Schrittweite in Matrix aufteilen
so:
mal wieder 1000Dank für deine tolle Tipps, damit komme ich weiter, dennoch kann ich als Anfänger deine Schleife nicht nachvollziehen! Ich wäre dir sehr dankbar , wenn du mir erklären würdest, was du mit der NaN-Matrix machst
außerdem habe ich das Problem dass ich Median nur über jene Spalten berechnen kann, die ausschließlich aus Werten bestehen. Gibt es eine Möglichkeit median auch dann zu berechnen, wenn in einer Spalte auch NaN vorkommt?
% suche nach maximalen Wert zur Bestimmung % der Spaltenanzahl
max_val = max(cellfun(@max,Flocs));
% % letzte Spalte in der Matrix wird berechnet % in dem der Wert durch die Schrittweite teilt
max_col = floor(max_val/20)+1;
% maximale Anzahl Zeilen
max_row = length(Flocs);
%
% vorinitialisieren der Matrix
M = nan(max_row,max_col);
% in der Schliefe werden die Werte % der Spalten zugeordnet for k=1:length(Flocs) % Spalten Indizien werden berechnet % in dem man die Werte % durch die Schrittweite teilt
col = floor(Flocs{k}/20)+1;
Ich habe ein Rückfrage weil ich mit dem vorgeschlagenen Code durchaus auch Fehlermeldungen bekomme. Mein Programm sieht nun wie folgt aus:
Code:
% finding peaks and locations
MPD=20; % minimum distance between two maximas
MPH=0.003; % miminum height of local maximas
%Looking for maximas in variable data with above conditions
Fpks = cell(1, size(data, 2)); % Pre-allocate!
Flocs = cell(1, size(data, 2)); % Pre-allocate!
for k=1:size(data, 2) [Fpks{k}, Flocs{k}] = findpeaks(yplot(:,k),'minpeakheight',MPH,'minpeakdistance',MPD);
end
% Creating of Matrix M1 with the results of findpeaks
max_val = max(cellfun(@max,Flocs)); % searching for maximum value to calculate the number of column
max_col = floor(max_val/MPD)+1; % calculating the last column
max_row = length(Flocs); % calculating of maximum number of rows
M1 = nan(max_row,max_col); % creating a NaN-Matrix
% Calculating the index of the matrix for k=1:length(Flocs)
col = floor(Flocs{k}/MPD)+1;
M1(k,col)= Flocs{k}; % put it in to the matrix end
Wenn ich bei unten dargestellten Code die Peakhöhe bisschen hoch eintrage, sodass nicht für jede Messreihe minds. ein Peak gefunden wird bekomme ich folgende Fehlermeldung
Zitat:
Warning: No peaks found.
> In findpeaks at 90
In FrqAnalyse at 10
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 2, output 1.
Set 'UniformOutput' to false.
Error in ==> FrqAnalyse at 14
max_val = max(cellfun(@max,Flocs)); % searching for maximum value to
calculate the number of column
ich vermutte dass es daran liegt, dass das Programm das Maximum bei jenen Zellen von "Flocs" nicht bestimmen kann, in denen keinen Eintrag, also eine Leermatrix, vorhanden ist.
Sofern meine Vermuttung richtig ist, würde ich gerne wissen, wie ich dieses Problem umgehen kann!?
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.