From 3f5c5d34d99b121bb621230a918b621a9524a015 Mon Sep 17 00:00:00 2001 From: John Glover Date: Fri, 17 Dec 2010 18:12:52 +0000 Subject: Removed static variables from sms_residual, changed the method signature to accept an SMS_ResidualParams structure. --- sms/residual.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'sms/residual.c') diff --git a/sms/residual.c b/sms/residual.c index ae9bf9a..1c217ce 100644 --- a/sms/residual.c +++ b/sms/residual.c @@ -33,39 +33,42 @@ * \param pWindow pointer to windowing array * \return residual percentage (0 if residual was not large enough) */ -int sms_residual(int sizeWindow, sfloat *pSynthesis, sfloat *pOriginal, sfloat *pResidual, sfloat *pWindow) +int sms_residual(int sizeWindow, sfloat *pSynthesis, sfloat *pOriginal, + SMS_ResidualParams* residualParams) { - static sfloat fResidualMag = 0.; - static sfloat fOriginalMag = 0.; + /*static sfloat fResidualMag = 0.;*/ + /*static sfloat fOriginalMag = 0.;*/ sfloat fScale = 1.; sfloat fCurrentResidualMag = 0.; sfloat fCurrentOriginalMag = 0.; int i; /* get residual */ - for (i=0; iresidual[i] = pOriginal[i] - pSynthesis[i]; /* get energy of residual */ - for (i=0; iresidual[i] * residualParams->residual[i]); /* if residual is big enough compute coefficients */ - if (fCurrentResidualMag) + if(fCurrentResidualMag) { /* get energy of original */ - for (i=0; ioriginalMag = + .5 * (fCurrentOriginalMag/sizeWindow + residualParams->originalMag); + residualParams->residualMag = + .5 * (fCurrentResidualMag/sizeWindow + residualParams->residualMag); /* scale residual if need to be */ - if (fResidualMag > fOriginalMag) + if(residualParams->residualMag > residualParams->originalMag) { - fScale = fOriginalMag / fResidualMag; - for (i=0; ioriginalMag / residualParams->residualMag; + for(i = 0; i < sizeWindow; i++) + residualParams->residual[i] *= fScale; } return fCurrentResidualMag / fCurrentOriginalMag; -- cgit v1.2.3