Hallo an alle!
Die Y-Kurve ist die Summe der anderen drei Kurven.
Die spezifische Formel lautet: Y = Max + Mitte + Min + 10
Wenn ich nur Y kenne, muss ich die drei Kurven „Max“, „Mitte“ und „Min“ wiederherstellen.
Ich habe es nachgeschlagen und es sieht so aus, als ob ich es mit der Fourier-Transformation schaffen könnte.
Ich würde gerne fragen, ob es mit JMP ein entsprechendes Modul gibt, um diese Wiederherstellung zu erreichen.

Die Excel-Formel der anderen drei Kurven lautet:
min=ROUND(2*SIN(80*RADIANS(:x)+RADIANS(7)),10)+2
mid=ROUND(3*SIN(21*RADIANS(:x)+RADIANS(8)),10)+3
max=ROUND(4*SIN(5*RADIANS(:x)+RADIANS(64)),10)+4
Danke!
Laut Craige-FFT-Analyse sollte die reale Kurve in mehrere Kurven unterteilt werden.
Ich weiß nicht, wie ich die Parameter mit dem FIT-Modell anpassen soll.
Danke!

Ich fange gerade erst an, in diesem Bereich zu lernen. Es ist nicht so einfach, auf echte Daten umzusteigen:
Ich habe FFT, FIT-Modell und Zeitreihen ausprobiert.

Ich habe nicht den richtigen Ansatz aktiviert,
Die Problemexperten berieten mich weiterhin.
Danke Experten!
Sie können ein parametrisches Modell als Spaltenformel definieren. Das Modell ist in diesem Fall die Summe von drei Sinusfunktionen und einer Konstante. Sie definieren die Parameter im Formeleditor zusammen mit den Startwerten. (Beachten Sie, dass die Startwerte besonders bei trigonometrischen Funktionen wichtig sind.) Es sieht so aus:

Die Lösung in der nichtlinearen Plattform sieht folgendermaßen aus:

Ich habe die geänderte JMP-Datentabelle mit der Umrechnung von Grad in Bogenmaß, der Modellformel und dem Tabellenskript zum Starten von Nonlinear angehängt.
Danke markbailey!
Ich suche nach Skripten und probiere Operationen aus. Aber ich weiß immer noch nicht, wie ich das machen soll. Bitte geben Sie mir ein Beispiel zum Lernen.
Ich danke Ihnen für Ihre Hilfe!
Sie können die nichtlineare Plattform auch verwenden, um ein benutzerdefiniertes Modell anzupassen, das die Summe von drei trigonometrischen Funktionen darstellt.
Vielen Dank für die spezifische Anleitung von Craige und die Hilfe von Markbailey.
Um mir ein vollständiges Bild davon zu geben, wie das Projekt abgeschlossen werden kann, beweist es auch, dass JMP diese Zerlegung durchführen kann.
Ich würde Craige gerne immer wieder fragen:
Wenn es sich in Wirklichkeit um eine Datenreihe Y handelt, ist auch deren konkrete Zusammensetzung nicht bekannt, da es sich um mehrere Kurven handelt.
Aber ich möchte dieses Y einfach in drei oder vier Originalkurven zerlegen,
Wie man die meisten der verschiedenen Parameter jeder Kurve wiederherstellt. Und natürlich wissen Sie, dass DC nicht wiederhergestellt werden kann.
Vielen Dank!
Versuchen Sie, drei Originalkurven und vier Kurven wiederherzustellen.
Ich frage mich, ob es einen Vorteil hätte, die Daten als Funktion zu behandeln und ob die Funktionsprinzipkomponenten zur Identifizierung der gewünschten Informationen verwendet werden könnten.
Sehen FDE Hilfe.
Was hoffen Sie zu erholen?
- Frequenz/Amplitude
- Phase
- DC-Offset
Die Wiederherstellung der drei Frequenz- und Amplitudenkomponenten (80,21,5 und 2,3,4) ist mit der FFT-Funktion einfach, obwohl reale Daten zusätzliche Komplikationen mit sich bringen. Sehen FFT und DTMF für ein altes Beispiel. Die Wiederherstellung der Phase scheint schwierig zu sein. Mein Experiment unten stellt (7,8,64) wieder her, wenn die Pufferlänge perfekt mit der Periode der Wellenform übereinstimmt, andernfalls gehen meiner Meinung nach die Phaseninformationen verloren. (Ich bin kein Experte auf diesem Gebiet.) Die einzelnen DC-Offsets können nicht wiederhergestellt werden, da sie alle addiert werden.
Diese JSL muss noch viel mehr getestet werden, bevor Sie sie verwenden können!
RADIANS = Function( {x}, 2 * Pi() * x / 360 );
NSAMPLES = 360; // 360 makes the answer look perfect. Real-world data will change everything for the worse...
time = NSAMPLES/360; // number of seconds the table holds
dt = New Table( "Untitled 4",
Add Rows( NSAMPLES ),// generate perfect, non-real world data
New Column( "x", formula( Row()-1 ) ), // time axis, in degrees
// not sure why you would round this to 10 places, but it was part of the question...
// adding 7 degrees is a phase adjustment, multiplying by 2 is an amplitude adjustment
// adding 2+3+4 at the end is the DC level of 9. You'll never get those individual values back, just the 9.
New Column( "min", formula( Round( 2 * Sin( 80/*Hz*/ * RADIANS( :x ) + RADIANS( 7/*degrees*/ ) ), 10 ) + 2 ) ),
New Column( "mid", formula( Round( 3 * Sin( 21/*Hz*/ * RADIANS( :x ) + RADIANS( 8/*degrees*/ ) ), 10 ) + 3 ) ),
New Column( "max", formula( Round( 4 * Sin( 5/*Hz*/ * RADIANS( :x ) + RADIANS( 64/*degrees*/ ) ), 10 ) + 4 ) ),
New Column( "combine", formula( min + mid + max ) )
);
dt << Graph Builder( Size( 1275, 240 ), Show Control Panel( 0 ), Variables( X( :x ), Y( :combine ) ), Elements( Line( X, Y, Legend( 11 ) ) ),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "Original Data" )} ) ) );
// there are NSAMPLES and there will be NSAMPLES bins in the FFT result.
// the first half of the bins are interesting, 1..(NSAMPLES/2), the 2nd half mirror them.
// the lowest bin, 1, will represent the DC offset
// The bins 1-(NSAMPLES/2) are equal width in frequency; the maximum frequency is
// NSAMPLES/2 full cycles in a buffer (or (NSAMPLES/2) radians per buffer)
// (you know how much time a buffer represents, so you can get back to Hz)
freq = (((1 :: (NSAMPLES / 2)) - 1) / time)`; // cycles per second for each bin
{real, complex} = FFT( {dt[0, "combine"]} );
amplitude = Sqrt( real ^ 2 + complex ^ 2 );
dt2 = As Table( freq || (amplitude[1 :: (NSAMPLES / 2)]) );
dt2 << Graph Builder(
Size( 1456, 289 ),
Show Control Panel( 0 ),
Variables( X( :Col1 ), Y( :Col2 ) ),
Elements( Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Recovered Data" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "Hz" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Relative Amplitude" )} )
)
);
// At this point the min/mid/max are recovered. Do you need the phase too?
//
// ** I'm not confident this produces a useful answer. The answer appears
// correct for the simulated data with the perfect match to the sample
// buffer, BUT if the buffer is slightly bigger or smaller, the phases
// do not seem related to the original phases. **
//
// I *think* it is necessary to add 90 degrees below because you are using sin
// and fft uses cos. You should study that a bit more.
// I *think* the amplitude*2 vs amplitude*1 is because half of the non-DC
// samples are thrown away. You should study that a bit more too.
For( i = 1, i <= N Rows( freq ), i += 1,
amp = Round( If( i == 1, 1, 2 ) * amplitude[i] / NSAMPLES, 3 );
If( amp > .7, // this will need tweaking
Write( "\!n", freq[i], " Hz \!tAmplitude=", amp, " units \!tphase=",
90 + Round( 360 * ATan( complex[i], real[i] ) / (2 * Pi()), 3 ), " degrees"
)
);
);
Open Log( 1 );
Two graphs and some output in the log.Two graphs and some output in the log.Zwei Diagramme und einige Ausgaben im Protokoll.
Der Nullfrequenzbereich in der FFT (Element 1 in JSL) wird als DC bezeichnet, da DC Gleichstrom bedeutet (im Gegensatz zu Wechselstrom, AC). Die gesamte Klimaanlage befindet sich in anderen Behältern. Das Wechselstromsignal wird um den Gleichstrompegel von Null versetzt. Im obigen Protokoll gibt der 0-Hz-DC-Bin an, einen Phasenwinkel von 90 Grad zu haben. Es bedeutet nichts.
Ein typischeres Ergebnis:
When the wave form's period does not match the buffer length the results are spread across many bins and the phase is probably lost.When the wave form's period does not match the buffer length the results are spread across many bins and the phase is probably lost.Wenn die Periode der Wellenform nicht mit der Pufferlänge übereinstimmt, verteilen sich die Ergebnisse auf viele Bins und die Phase geht wahrscheinlich verloren.