This is interpolateSms.c in view mode; [Download] [Up]
#include "../sms.h"
/* function to interpolate two SMS records
*
* SMS_DATA *pSmsRecord1 sms record 1
* SMS_DATA *pSmsRecord2 sms record 2
* SMS_DATA *pSmsRecordOut sms output record
* float fInterpFactor interpolation factor
*/
int InterpolateSmsRecords (SMS_DATA *pSmsRecord1, SMS_DATA *pSmsRecord2,
SMS_DATA *pSmsRecordOut, float fInterpFactor)
{
int i;
int nTraj = MIN (pSmsRecord1->nTraj,
MIN (pSmsRecord2->nTraj, pSmsRecordOut->nTraj));
float fFreq1, fFreq2;
if (pSmsRecord1->nCoeff != pSmsRecord2->nCoeff ||
pSmsRecord1->nCoeff != pSmsRecordOut->nCoeff)
return -1;
/* interpolate the deterministic part */
for (i = 0; i < nTraj; i++)
{
fFreq1 = pSmsRecord1->pFFreqTraj[i];
fFreq2 = pSmsRecord2->pFFreqTraj[i];
if (fFreq1 == 0) fFreq1 = fFreq2;
if (fFreq2 == 0) fFreq2 = fFreq1;
pSmsRecordOut->pFFreqTraj[i] =
fFreq1 + fInterpFactor * (fFreq2 - fFreq1);
pSmsRecordOut->pFMagTraj[i] =
pSmsRecord1->pFMagTraj[i] + fInterpFactor *
(pSmsRecord2->pFMagTraj[i] - pSmsRecord1->pFMagTraj[i]);
}
/* interpolate the stochastic part */
if (pSmsRecordOut->pFStocGain)
*(pSmsRecordOut->pFStocGain) =
*(pSmsRecord1->pFStocGain) + fInterpFactor *
(*(pSmsRecord2->pFStocGain) - *(pSmsRecord1->pFStocGain));
if (pSmsRecordOut->pFStocGain)
for (i = 0; i < pSmsRecord1->nCoeff; i++)
pSmsRecordOut->pFStocCoeff[i] =
pSmsRecord1->pFStocCoeff[i] + fInterpFactor *
(pSmsRecord2->pFStocCoeff[i] - pSmsRecord1->pFStocCoeff[i]);
return 1;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.