Laser Diode의 Threshold Current 계산 알고리즘 - Least Square Method
Characteristics Data/LD(Laser Diode)2023. 3. 2. 13:08
반응형
LD(Laser Diode)는 낮은 전류에서는 LED처럼 동작하지만 일정전류 이상(임계전류) 부터는 발진이 되면서 광출력이 급격히 증가하는 현상이 나타나게 됩니다. LD 의 특성 평가에서 이 임계전류값은 중요한 특성지표로 사용이 됩니다.
임계전류를 계산하는 방식은 여러 방법이 있습니다. 이번장에서는 대표적인 방법으로 Least Square(직선근사) 방식을 이용한 Threshold Current 계산 코드를 적용하였습니다.
1. 계산 파라메타 ( 아래 이미지 참조 )
* Pth1, Pth2 : 전체 측정 파워데이타 중에서 직선근사를 적용할 파워의 범위 ( 가능한 낮은 파워구간을 선택하는것이 좋다.)
* vector<float> Power : 측정된 파워 데이타
* vector<float> Current : 측정된 전류 데이타
2. 계산 알고리즘 코드 ( C++ )
vector<float> Current ;
vector<float> Power ;
float Ith_LeastSquare_Method(const float Pth1, const float Pth2)
{
float fDegree, fYvalue, result ;
tuple<float, float>value = LeastSquare(Current, Power, powerLow, powerHigh) ;
fDegree = get<0>(value) ; // 직선의 방정식의 기울기
fYvalue = get<1>(value) ; // 직선의 방정식의 Y 절편
if(fDegree == 0) result = -1 ;
else
{
try
{
result = -fYvalue / fDegree ; // 직선의 방정식에서 X 절편값 계산(Ith)
}
catch(...)
{
result = -1 ;
}
}
return result ;
}
//---------------------------------------------------------------------------
tuple<float, float> __fastcall CLIV_Calculate_Data::LeastSquare(const vector<float>& xAxis, const vector<float>& yAxis, const float lowValue, const float highValue)
{
float sumx=0, sumy=0, sumxx=0, sumxy=0 ;
float mother, child1, child2 ;
float rDegree, rYvalue ;
int index = 0, length = 0 ;
auto endIt = cend(yAxis) ;
auto startIt = find_if(cbegin(yAxis), endIt, [lowValue](float i){ return i >= lowValue ; }) ;
auto finishIt = find_if(cbegin(yAxis), endIt, [highValue](float i){ return i >= highValue ; }) ;
if(finishIt == endIt)
{
rDegree = rYvalue = 0 ;
}
else
{
index = startIt - cbegin(yAxis);
for(auto yIt = startIt ; yIt != finishIt ; ++yIt)
{
sumx += xAxis[index] ;
sumy += *yIt ;
sumxx += (xAxis[index] * xAxis[index]) ;
sumxy += (xAxis[index] * (*yIt)) ;
length ++ ;
index ++ ;
}
mother = (length * sumxx) - (sumx * sumx) ;
child1 = (length * sumxy) - (sumx * sumy) ;
child2 = (sumxx * sumy) - (sumxy * sumx) ;
if(mother == 0) rDegree = rYvalue = 0 ;
else
{
rDegree = child1 / mother ;
rYvalue = child2 / mother ;
}
}
return make_tuple(rDegree, rYvalue) ;
}
//---------------------------------------------------------------------------
반응형
'Characteristics Data > LD(Laser Diode)' 카테고리의 다른 글
Laser Diode 의 Kink 특성값 계산 C++ (0) | 2023.04.25 |
---|
댓글()