Data Smoothing #1 알고리즘 C++

Mathematics Algorithm|2023. 3. 30. 09:54
반응형

예전 어느 일본업체에서 사용하는 스무징 알고리즘을 구하게 되어서 제가 사용하고 있습니다. 

상당히 스무징이 깨끗하게 잘 됩니다. 그러다 보니 사용하는 데이타의 종류에 따라 스무징 알고리즘을 다르게 사용해야 합니다. 

 

아래 스무징도 아무 데이타에 사용은 못하고 제가 꼭 필요로 하는 데이타의 스무징 종류에 따라 구분해 사용합니다. 

 

smoothing
Smoothing 결과

void Smoothing(double fltData[], short siMaxMeasCount, short siSCount, short siSStep)
{
    double	fltSmooth[1000*2];

	int	iLstep,iRstep;
	int	iStart_p,iEnd_p;
	int	iCnt;
	double	fltSum;

	if(siSStep < 2)	return;

	if(!(siSStep % 2))	siSStep++;
	iLstep = siSStep / 2;
	iRstep = iLstep;

	for (int i = 0; i < siSCount; i++)
	{
		memcpy(fltSmooth,fltData,sizeof(double) * siMaxMeasCount);

		for(int j = 1; j < siMaxMeasCount; j++)
		{
			iStart_p = j - iLstep;
			iEnd_p = j + iRstep;
			if(iStart_p < 0)
			{
				iStart_p = 0;
				iEnd_p = j + j;
			}
			else if(iEnd_p >=  siMaxMeasCount)
			{
				iStart_p = j - (siMaxMeasCount - j - 1);
				iEnd_p = siMaxMeasCount-1;
			}

			if(iEnd_p > siMaxMeasCount) break;
			iCnt = 0;
			fltSum = 0.0f;
			for(int k = iStart_p; k <= iEnd_p;k++)
			{
				fltSum += fltSmooth[k];
				iCnt++;
			}
			if(iCnt <= 1)
			{
				fltData[j] = fltSmooth[j];
			}
			else
			{
				fltData[j] = fltSum / (float)iCnt;
			}
		}
	}
}
반응형

댓글()