Verfasst am: 07.08.2012, 13:14
Titel: Mittelwert zur Signalerzeugung
Moin,
ich versuche aus einem array alle zehn Werte (hier Variable "vor") den Mittelwert zu bilden. Sind die Werte des array kleiner als der Mittelwert, soll "1" in einen array (signal) geschrieben werden, sind sie größer eine "0".
Trotz tausend mal drübergucken, finde ich den Fehler nicht...
Mittelwertbildung funktioniert, aber der Signalarray nicht.
for x = 1:168/vor
sum = 0;
for y = 1:vor
z = y+((x-1)*vor); %z = aktueller schritt
sum = sum + preis(z);
end
mittel(z)= (sum/vor);
if preis(z) < mittel(vor+((x-1)*vor))
signal(z) = 1;
else
signal(z) = 0;
end end
x = rand(10,1); % Testvektor mit 10 Werten
mw = mean(x); % Mittelwert von x
y = x < mw;
% trifft die Bedingung x < mw zu = "true" wird eine 1 in y geschrieben, trifft sie nicht zu, wird eine Null in y geschrieben
Was vielleicht nicht richtig rüberkam:
Der array hat in meinem fall 168 einträge.
alle zehn werte soll der mittelwert gebildet werden. dann für die nächsten zehn werte, etc...
sum als Variablenname ist übrigens keine gute Idee, da dies eine Matlab Funktion ist. Das führt nur zu Fehlermeldungen...
Code:
x = rand(168,1); % Testvektor % Umordnung in 10 Pakete, da 168 nicht durch 10 teilbar, werden 2 NAN an x angehängt.
y=reshape([x;nan;nan],10,17);
% NAN werden bei Mittelwert nicht berücksichtigt
mw = nanmean(y); % Mittelwert über jede Spalte von y -> 17 MW
w = zeros(10,17);
for i=1:length(mw)
w(:,i) = y(:,i) < mw(i);
end
w(end-1:end) = []; % letzten beiden Werte wieder abschneiden % wieder in Vektor wandeln
ergebnis = reshape(w,[],1);
Evtl. kann man das auch ohne die Schleife umsetzen...
funk0r
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.08.2012, 14:50
Titel:
Vielen Dank DSP!
Das funktioniert
Hat zwar etwas gedauert, aber ich konnte es nachvollziehen.
Jetzt besteht lediglich noch das die Herausforderung, dass ich:
1. den Testvektor (bei mir: preis)
2. das Intervall, im welchem der Mittelwert gebildet werden soll (vor)
VARIABEL gestalten will.
Beispielsweise ein Testvektor mit 734 (statt 168) Werten, in dem alle 13 (statt 10) Werte der Mittelwert gebildet werden soll, welcher dann wieder verglichen wird. Dann kann ich ja z.B. bei reshape nicht einfach ein NaN einfügen.
Mein Versuch sieht aus wie folgt: (funktioniert natürlich nicht )
Was soll denn hier nanmin? Diese Funktion gibt doch das Minimum eines Vektors aus, ohne nan zu berücksichtigen.
Die Funktion myfun liefert dann zwar schon ein Ergebnis, da aber kein Wert kleiner min ist, ist die Bedingung immer false, also wird eine Null geschrieben.
funk0r
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.08.2012, 09:17
Titel:
Ja, danke.
Ist mir auch aufgefallen, als ich den code nochmal gaaaaanz langsam durchgegangen bin
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
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.