여러분, 안녕하세요!
Y 곡선은 다른 세 곡선의 합입니다.
구체적인 공식은 다음과 같습니다. Y = 최대값 + 중간값 + 최소값 + 10
Y만 알면 "Max", "mid" 및 "min"의 세 곡선을 복원해야 합니다.
나는 그것을 찾아 보았고 푸리에 변환으로 그것을 할 수 있는 것처럼 보입니다.
이 복원을 달성하기 위해 JMP와 해당 모듈이 있는지 묻고 싶습니다.

다른 세 곡선의 Excel 공식은 다음과 같습니다.
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
감사해요!
Craige FFT 분석에 따르면 실제 곡선은 더 많은 곡선으로 분할되어야 합니다.
FIT 모델로 매개 변수를 조정하는 방법을 모르겠습니다.
감사해요!

저는 이 분야에서 이제 막 배우기 시작했습니다. 실제 데이터로 전환하는 것은 그렇게 간단하지 않습니다.
FFT, FIT 모델, 시계열을 시도했습니다.

올바른 방법을 사용하지 않았습니다.
트러블 전문가들이 계속해서 안내를 해주셨어요.
감사합니다 전문가!
markbailey님, 감사합니다!
JMP는 매우 강력하며 거의 사용하지 않습니다.
파라메트릭 모델을 열 수식으로 정의할 수 있습니다. 이 경우 모델은 3개의 사인 함수와 상수의 합입니다. 수식 편집기에서 시작 값과 함께 매개변수를 정의합니다. (특히 삼각 함수의 경우 시작 값이 중요합니다.) 다음과 같습니다.

비선형 플랫폼의 솔루션은 다음과 같습니다.

도에서 라디안으로 변환한 수정된 JMP 데이터 테이블, 모델 수식 및 비선형을 시작하는 테이블 스크립트를 첨부했습니다.
마크베일리 감사합니다!
스크립트도 검색해보고 오퍼레이션도 해봅니다. 그런데 아직 방법을 모르겠습니다. 예를 들어 가르쳐주세요.
도와주셔서 감사합니다!
비선형 플랫폼을 사용하여 삼각 함수 3개의 합인 사용자 정의 모델을 맞출 수도 있습니다.
Craige 특정 지침과 markbailey의 도움에 감사드립니다.
프로젝트를 완료하는 방법에 대한 완전한 그림을 제공합니다. 또한 JMP가 이 분해를 수행할 수 있음을 증명합니다.
Craige에게 계속 묻고 싶습니다.
실제로 일련의 데이터 Y인 경우 여러 곡선으로 구성된 구체적인 구성도 알 수 없습니다.
하지만 저는 이 Y를 서너 개의 원래 곡선으로 분해하고 싶습니다.
각 곡선의 다양한 매개변수를 최대한 복원하는 방법. 그리고 물론 DC는 복원할 수 없다는 것을 알고 있습니다.
매우 감사합니다!
3개의 원래 곡선과 4개의 곡선을 복원할 수 있는지 확인하십시오.
데이터를 함수로 취급하고 기능 원리 구성 요소를 사용하여 원하는 정보를 식별할 수 있는 이점이 있는지 궁금합니다.
보다 FDE 돕다.
회복되기를 바라는 것은 무엇입니까?
- 주파수/진폭
- 단계
- DC 오프셋
FFT 기능을 사용하면 세 가지 주파수 및 진폭 구성 요소(80,21,5 및 2,3,4)를 쉽게 복구할 수 있지만 실제 데이터는 복잡합니다. 보다 FFT 및 DTMF 오래된 예를 들어. 위상 회복이 어려울 것 같습니다. 아래 내 실험은 버퍼 길이가 파형의 주기와 완벽하게 일치하는 경우 복구(7,8,64)합니다. 그렇지 않으면 위상 정보가 손실될 수 있습니다. (저는 이 주제에 대한 전문가가 아닙니다.) 개별 DC 오프셋을 복구하는 것은 모두 함께 추가되기 때문에 불가능합니다.
이 JSL은 사용하기 전에 더 많은 테스트가 필요합니다!
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.두 개의 그래프와 로그의 일부 출력.
FFT의 제로 주파수 빈(JSL의 요소 1)은 DC라고 합니다. 왜냐하면 DC는 직류(교류, AC와 반대)를 의미하기 때문입니다. 모든 AC는 다른 저장소에 있습니다. AC 신호는 DC 레벨만큼 0에서 오프셋됩니다. 위의 로그에서 0Hz DC 빈은 90도의 위상각을 갖는다고 주장합니다. 아무 의미가 없습니다.
보다 일반적인 결과:
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.파형의 주기가 버퍼 길이와 일치하지 않으면 결과가 여러 빈에 분산되어 위상이 손실될 수 있습니다.