2015-01-08 9 views
5

Ich habe 2 Datensätze in Matlab, die ich gegeneinander grafisch darstellen muss - eine auf der X-Achse und eine auf der Y-Achse. Die Daten für jeden Satz wurden mit einer anderen Methode gesammelt, so dass die Abtastrate signifikant unterschiedlich ist, und bis ich nicht die gleiche Anzahl von Datenpunkten in beiden Mengen habe, kann ich nicht eine gegen die andere auftragen.Downsampling Daten in Matlab durch Mittelwertbildung

Es ist ziemlich einfach, Daten in Matlab mit der downsample Funktion Matlab Downsample.

A = [-3 -1.5 0 1.5 3 4.5 6 7.5 9...] (goes on until 21) 
B = [-3.9 -3.8 -3.7 -3.6 -3.5 -3.5 -3.3 -3.2 -3.1 -3.0 -2.9 -2.8...] (goes on until 22) 

Die Abtastrate von A ist 1.5s und die Abtastrate von B ist 0.1s. Ich konnte erfolgreich downsample als downsample(B,15,10) verwenden, um es zur gleichen Zeit zu starten "-3s" (was etwas in meinen Daten bedeutet, so dass ich es an diesem Punkt beginnen muss) und bei der Stichprobenrate sein 1.5s.

Jetzt fragte ich mich, ob es eine Methode gab, die es mir erlaubte, den Durchschnitt der 15 Punkte zu nehmen, anstatt einen Punkt alle 15 Punkte auszuwählen? downsample, die Art, wie ich es benutzt habe, nimmt nur jeden 15. Punkt. Ich möchte jedoch stattdessen die 15 Punkte für mich mitteln. Gibt es eine Möglichkeit, dies zu tun?

Ich schrieb eine for-Schleife für einen einfachen/kleineren Vektor, um zu sehen, ob ich es tun könnte. Für A = [1 2 3 4] würde ich die Daten so kondensieren wollen, dass A nur 2 Einträge hat, so dass es A (1) und A (2) und dann A (3) und A (4) gemittelt.

A = [1 2 3 4] 
for i = 1:3 
    P(i) = mean(A(i:i+1)) 
end 

Dies ist jedoch nicht funktioniert, wie ich es will, weil ich es A (2) und A (3) mitteln nicht wollen. Ich möchte, dass es die ersten 2 Einträge nimmt, sie mittelt, dann die nächsten 2 Einträge, dann mittle sie. bald.

Kann jemand helfen?

Dank

+0

Ahh ja .. Tut mir Leid. .. Ich habe versucht, nach bereits beantworteten Fragen zu suchen. Ich denke, dass meine Suchbegriffe anders waren als der Titel. –

+1

Ja, du erklärst ziemlich ausführlich, warum du erreichen willst, was du erreichen willst. Das mögliche Duplikat war nicht einmal in den verwandten Themen, ich habe mich gerade daran erinnert. Mach dir keine Sorgen, immer noch eine gute Frage. – Nras

Antwort

4

Reshape Ihre Daten A in eine n -ROW Matrix, wobei n die Mittelungs Größe ist, und gelten mean den Mittelwert jeder Spalte zu berechnen:

A = [1 2 3 4]; %// data 
n = 2; %// averaging size 
P = mean(reshape(A,n,[])); 
+0

Danke, es funktioniert! –