Ciao a tutti!
La curva Y è la somma delle altre tre curve.
La formula specifica è: Y = Max + mid + min + 10
Se solo conoscessi Y, avrei bisogno di ripristinare le tre curve di "Max", "mid" e "min".
L'ho cercato e sembra di poterlo fare con la trasformata di Fourier.
Vorrei chiedere se esiste un modulo corrispondente con JMP per ottenere questo ripristino.

La formula excel delle altre tre curve è:
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
Grazie!
Secondo l'analisi Craige FFT, la curva reale dovrebbe essere suddivisa in più curve.
Non so come regolare i parametri con il modello FIT.
Grazie!

Sto appena iniziando a imparare in questo settore. Non è così semplice passare a dati reali:
Ho provato FFT, modello FIT e serie temporali.

Non ho attivato l'approccio giusto,
Gli esperti di problemi hanno continuato a guidarmi.
Grazie Esperti!
È possibile definire un modello parametrico come formula di colonna. Il modello in questo caso è la somma di tre funzioni seno e una costante. I parametri vengono definiti nell'editor di formule insieme ai valori iniziali. (Notare che i valori iniziali sono importanti, specialmente nel caso di funzioni trigonometriche.) Assomiglia a questo:

La soluzione nella piattaforma non lineare si presenta così:

Ho allegato la tabella dati JMP modificata con la conversione da gradi a radianti, la formula del modello e lo script della tabella per avviare Nonlinear.
Grazie markbayley!
Cerco script e provo operazioni. Ma ancora non so come farlo. Per favore, fammi un esempio per imparare.
Grazie per l'aiuto!
Puoi anche utilizzare la piattaforma non lineare per adattare un modello personalizzato che è la somma di tre funzioni trigonometriche.
Grazie per la guida specifica di Craige e per l'aiuto di Markbailey.
Per darmi un quadro completo di come completare il progetto. Dimostra anche che JMP può eseguire questa scomposizione.
Vorrei continuare a chiedere a Craige:
Se in realtà una serie di dati Y, inoltre non si conosce la sua composizione concreta come diverse curve.
Ma voglio solo scomporre questa Y in tre o quattro curve originali,
Come ripristinare al meglio i vari parametri di ogni curva. E, naturalmente, sai che la DC non può essere ripristinata.
Grazie mille!
Vedi se riesci a ripristinare tre curve originali e quattro curve.
Mi chiedo se ci sarebbe qualche vantaggio nel trattare i dati come una funzione e i componenti del principio funzionale potrebbero essere utilizzati per identificare le informazioni che desideri.
Vedere FDE aiuto.
Cosa speri di recuperare?
- Frequenza/Ampiezza
- Fase
- Offset CC
Recuperare le tre componenti di frequenza e ampiezza (80,21,5 e 2,3,4) è facile con la funzione FFT, sebbene i dati del mondo reale aggiungano complicazioni. Vedere FFT e DTMF per un vecchio esempio. Recuperare la fase sembra difficile. Il mio esperimento di seguito recupera (7,8,64) se la lunghezza del buffer corrisponde perfettamente al periodo della forma d'onda, altrimenti penso che le informazioni sulla fase potrebbero andare perse. (Non sono un esperto in materia.) Il recupero dei singoli offset DC è impossibile perché sono tutti sommati.
Questo JSL ha bisogno di molti più test prima di metterlo in pratica!
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.Due grafici e qualche output nel log.
Il bin a frequenza zero nella FFT (elemento 1 in JSL) è chiamato DC perché DC significa corrente continua (al contrario di corrente alternata, AC). Tutto l'aria condizionata è in altri contenitori. Il segnale CA è sfalsato da zero dal livello CC. Nel registro sopra, il contenitore CC a 0 Hz afferma di avere un angolo di fase di 90 gradi. Non significa niente.
Un risultato più tipico:
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.Quando il periodo della forma d'onda non corrisponde alla lunghezza del buffer, i risultati vengono distribuiti su più bin e la fase è probabilmente persa.