2016-07-29 50 views
2

Ich habe zwei Arrays mit unterschiedlichen Längen (aufgrund unterschiedlicher Abtastraten), die ich vergleichen muss. Ich möchte das größere Array auf die kleinere Länge herunterskalieren, der Faktor ist jedoch keine ganze Zahl, sondern eine Dezimalzahl.MATLAB: Vergleichen von zwei Arrays mit unterschiedlichen Längen

Ein Beispiel:

a = 
    1  1.375  1.75  2.125  2.5  2.875  3.25 

b = 
    1  2  3 

Gibt es eine Möglichkeit, diese Anordnungen zu manipulieren Längen übereinstimmen?

Antwort

2

Das ist einfach mit cleverer Verwendung von interp1 zu tun. Der Trick besteht darin, dass die für die Interpolation verwendeten Schlüsselpunkte ein Array von 1 bis zu so vielen Werten wie in a sind, das wir N nennen, und die interpolierten Schlüsselpunkte wären ein linear ansteigendes Array, wobei der erste Punkt 1 ist, der letzte Punkt ist N und Sie teilen diesen Bereich gleichmäßig auf, um so viele Punkte wie in b zu haben.

Einfach gesagt:

anew = interp1(1:numel(a), a, linspace(1, N, numel(b))); 

linspace erzeugt eine linear ansteigende Anordnung 1-N = numel(a) für so viele Punkte wie Sie wollen, die wir als die Gesamtzahl der Elemente in b bestimmen. Dies gibt genau die richtigen Keypoints an, die Sie einer Downsampling-Version von a geben möchten, die der Länge von b entspricht, obwohl eine Interpolation erforderlich ist. Die Standard-Interpolationsmethode ist linear.

Mit dem Probeneingang von a Ihnen zur Verfügung gestellt, erhalten wir:

>> anew 

anew = 

    1.0000 2.1250 3.2500 
+0

Perfect. Vielen Dank ** rayryeng **. – Bensa

+0

Kein Problem. Viel Glück! – rayryeng