So erhalten Sie Spitzenpositionswerte im Spektrogramm mit JSLHallo zusammen,
Ich habe einige Daten, für die ich eine Zeitreihenanalyse durchführe, bei der ich die Positionen der Peaks aus dem Periodogramm erhalten möchte (Zeitreihen > Spektraldichte speichern). Sie können dies beispielsweise mit der Beispieldatentabelle Air.jmp tun, indem Sie nur eine Y-Spaltenvariable einfügen. Sie können die Variable „X, Zeit-ID“ einfügen, dies ist jedoch nicht erforderlich.
Sobald Sie die Spektraldichte gespeichert haben, gibt es jedoch mehrere Spalten, :Spektraldichte, :Periodogramm und :Frequenz, die von Interesse sind, siehe Screenshot unten.

Was ich versuche, ist, die Zeilennummern der vielleicht oberen 3 oder 4 Peaks in der Spalte „Periodogramm“ zu finden – es ist etwas einfacher, damit zu arbeiten als mit der Spalte „Spektraldichte“ (siehe gelb hervorgehobene Bereiche). Sobald ich diese Zeilennummern habe, kann ich die entsprechenden Werte in den Spalten „:Period“ und „:Frequency“ finden und als Ergebnis zurückmelden.
Das Problem, das ich habe, besteht darin, dass ich die anderen Werte erhalten kann, die nicht das Col Max(:Periodogram)-Ergebnis sind. Ich bekomme das ganz gut hin, aber es ist schwieriger, die anderen interessanten Spalten herauszusuchen. Ich würde dies gerne mit JSL machen, damit die Aufgabe automatisiert wird, anstatt das Lasso-Tool oder ähnliches verwenden zu müssen.
Alle Ideen oder Vorschläge sind sehr willkommen.
Danke!,
DS
Automatisierung und SkripterstellungDatenexploration und -visualisierungWindowsBetreff: So erhalten Sie Spitzenpositionswerte im Spektrogramm mit JSLHier ist ein Beispiel für eine Möglichkeit, die Spitzen zu finden.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/blood pressure.jmp" );
dt << select where(
Try( :bp 8m[Row() - 1], 999 ) < :bp 8m[Row()] & :bp 8m[Row()] > Try( :bp 8m[Row() + 1], 0 )
);
Betreff: So erhalten Sie Spitzenpositionswerte im Spektrogramm mit JSLHier ist eine andere Option mit Dif()
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Time Series/Air.jmp");
ts = dt << Time Series(Y(:Ozone Concentration));
dt1 = ts << Save Spectral Density;
ts << Close Window;
Close(dt, no save);
dt1 << Sort(By(:Period), Replace Table, Order(Ascending));
dt1 << New Column("PeriodogramPeaks", Numeric, Nominal, Formula(
Dif(:Periodogram) > 0 & Dif(:Periodogram, -1) > 0
));
dt1 << New Column("PeakRank", Numeric, Ordinal, Formula(
Col Number(:Periodogram, :PeriodogramPeaks) - Col Rank(:Periodogram, :PeriodogramPeaks) + 1
));
peak_rows = dt1 << Get Rows Where(:PeakRank <= 4 & :PeriodogramPeaks == 1);
dt1 << Select Rows(peak_rows);
dt1 << Markers(16);
gb = dt1 << Graph Builder(
Size(534, 456),
Show Control Panel(0),
Variables(X(:Period), X(:Frequency), Y(:Spectral Density), Y(:Periodogram)),
Elements(Position(1, 1), Line(X, Y, Legend(7)), Points(X, Y, Legend(8))),
Elements(Position(1, 2), Line(X, Y, Legend(5)), Points(X, Y, Legend(6))),
Elements(Position(2, 1), Line(X, Y, Legend(9)), Points(X, Y, Legend(10))),
Elements(Position(2, 2), Line(X, Y, Legend(11)), Points(X, Y, Legend(12)))
);Betreff: So erhalten Sie Spitzenpositionswerte im Spektrogramm mit JSLHallo @jthi Und @txnelson ,
Vielen Dank euch beiden für euren Beitrag. Am Ende bin ich mitgegangen @jthi ist die Lösung, da sie für die Art von Daten, mit denen ich es zu tun habe, unter Verwendung der Spektraldichtediagramme/Datentabellen besser zu funktionieren schien. Ich schätze Ihren Beitrag zu diesem Thema sehr. Nochmals vielen Dank für eine weitere hilfreiche Lösung!
DS