2017-01-08 3 views
2

현재 Python을 사용하여 일정 시간 동안 수행 한 240 개의 거리 측정으로 구성된 두 개의 다른 데이터 집합 (xDAT 및 yDAT)을 비교하고 있습니다. 그러나 데이터 세트 xDAT는 비선형 양만큼 오프셋됩니다. 이 비선형 양은 레벨 A라고하는 시간 의존 동적 매체의 폭과 같습니다. 더 구체적으로 xDAT는 원점에서 레벨 A의 상단까지 측정하는 반면 yDAT는 원점에서 레벨 A의 하단까지 측정합니다. 다음 도면 참조 : 두 곡선을 비교하기 위해Python에서 곡선 피팅 및 매개 변수 추정

enter image description here

, 난 오프셋 (-A 레벨의 폭)을 만회 XDAT에 보정을 적용해야 주먹.

아직까지, 나는 numpy.polyfit의 다른 정도로 놀았습니다. 즉이 :

coefs = np.polynomial.polynomial.polyfit(xDAT, yDAT, 5) 
polyEST=[] 
for i in range(0,len(x-DAT)): 
    polyEST.append(coefs[0] + coefs[1]*xDAT[i] + coefs[2]*pow(xDAT[i],2) + coefs[3]*pow(xDAT[i],3) + coefs[4]*pow(xDAT[i],4) + coefs[5]*pow(xDAT[i],5)) 

이 방법을 사용의 문제, 나는 (XDAT의 수정 된 버전입니다) polyEST을 그릴 때, 플롯은 여전히 ​​yDAT의 추세와 일치하지 않는 오프셋 남아 있다는 것입니다. 아래의 파란색 XDAT =, 녹색 XDAT = 빨간색과 yDAT = 수정 곳에 그림을 참조하십시오

enter image description here

가 이상적으로 수정 XDAT 여전히 yDAT에 비해 잡음이 남아 있어야하지만, 일반적으로 진동 및 동향 곡선이 일치해야합니다.

레벨 A로 인한 비선형 오프셋을 보정하기 위해 다른 커브 피팅 및 매개 변수 예측 기술을 구현하는 데 큰 도움을받을 수 있습니다.

감사합니다.

+0

나는 당신이하려고하는 것이 분명하지 않다고 생각합니다. 'polyfit'는'xDAT'와'yDAT'가 샘플 포인트의 단일 세트의'x'와'y' 좌표 인 것처럼 당신의 문제 설명과 플롯은 그것들과 관련이 없다고 제안합니다. – Stelios

+0

설명에 따르면 오프셋은 상수입니다. 차수가 0보다 큰 다항식을 사용하는 것이 잘못된 접근 방법 인 것 같습니다. 또한, 당신의 플롯에서 xDat과 yDat는 "줄 지어"보이지 않습니다 - xDat는 분명히 yDat +/- 일부 상수가 아닙니다 - 그것은 "반전"되거나 위상이 바뀐 것처럼 보입니다. –

+0

Stelios 감사합니다. 소개에서 xDAT와 yDAT는 모두 240 점의 데이터 집합이라고 언급했습니다. 각 포인트는 특정 시간의 측정에 해당합니다 ... 두 데이터 세트는 동일한 시간 간격으로 측정되었습니다. 나는 polyfit을 사용하여 두 데이터 세트 간의 차이를 설명하는 다항식을 도출했으며, 그 다항식을 사용하여 xDAT에 표시된 오프셋을 수정했습니다.np.polyfit보다는 xDAT에서 관찰 된 레벨 -A 오프셋을 수정하는 더 적절한 방법이 있다고 확신합니다. – LexStJ

답변

0

답변은 레벨 A가 무엇인지에 따라 다릅니다. 이 독립적 인 경우, 그려 귀하의 첫 번째 줄이 독립 A의 polyfit을 줄 것이다

coefs = np.polynomial.polynomial.polyfit(numpy.arange(xDAT.size), yDAT-xDAT, 5)

같은 것을해야하고 수정 x

xDAT+np.polynomial.polynomial.polyval(numpy.arange(xDAT.size),coefs)

하는 경우이어야한다 A은 변수에 따라 달라 지므로 polyfit을 원하지 않습니다. 진동의 실제 부분 (스프링 댐퍼 시스템의 "스프링"부분) 만 회귀합니다.corrected_xDatyDat 대신 xDat과 일치합니다. 그런 일을 회귀하려면 푸리에 변환 (내 전문이 아닌)을 사용해야합니다.