Ich versuche, Sinuswellendaten so zu verschieben, dass alle minimalen Spitzen verschoben werden, um entlang der x-Achse zu liegen. Ich habe es mit diesem Code versucht, bin aber auf einen Fehler gestoßen mit " Soll Liste oder Zahl im Zugriff oder Auswertung von 'Matrix' sein , Matrix/*###*/(sineCol < < Get Values)"
Jede Hilfe wäre willkommen.
// Lade Daten
dt = Aktuelle Datentabelle ();
// Spalte mit Sinuswellendaten angeben
sineCol = dt << Spalte ("PITCH");
// SineCol in Matrix umwandeln
sineMat = Matrix(sineCol << Werte abrufen);
// Berechnen Sie den Index des minimalen Peaks
minIndex = Loc Min(sineMat);
// Berechnen Sie die Anzahl der Punkte, um die Daten zu verschieben
shiftPoints = N Zeilen (sineMat) - minIndex;
// Daten verschieben
shiftedSineCol = J(N Rows(sineMat), 1, .);
For(i = 1, i <= N Zeilen(sineMat), i++,
shiftedSineCol[i] = If(i <= shiftPoints, sineMat[shiftPoints-i+1], sineMat[N Rows(sineMat)-i+shiftPoints+1]);
);
// Tabelle verschobener Daten erstellen
newTable = New Table("PITCH Shifted", Add Rows(N Rows(dt)));
newTable["PITCH Shifted"] = shiftedSineCol;
newTable["TIME"] = dt:column("TIME");
// Tabelle speichern
newTable << Save("PITCH Shifted.jmp");