36 "key",
"LPC_AutoCorrelation",
37 "category",
"Analysis",
38 "description",
"LPC_AutoCorrelation",
41 static FactoryRegistrator<ProcessingFactory, LPC_AutoCorrelation>
reg =
metadata;
53 : mAudioIn(
"AudioIn",this)
54 , mLPModelOut(
"LPModelOut",this)
55 , mSpectrumOut(
"SpectrumOut",this)
71 bool ok =
Do(audio, lpc);
76 spectrum.SetSpectralRange( audio.GetSampleRate()/2 );
88 bool mustUpdateData =
false;
89 if ( !out.HasFilterCoefficients() )
91 out.AddFilterCoefficients();
94 if ( !out.HasReflectionCoefficients() )
96 out.AddReflectionCoefficients();
97 mustUpdateData =
true;
99 if ( !out.HasAvgSqrFilterError() )
101 out.AddAvgSqrFilterError();
102 mustUpdateData =
true;
104 if ( mustUpdateData )
107 return Do( in, out.GetFilterCoefficients(),
108 out.GetReflectionCoefficients(),
109 out.GetAvgSqrFilterError() );
151 if ( fabs( R[0] ) <= 1e-6 )
168 "Invalid configuration object: it must have the 'Order' attribute available" );
179 while ( in1 != endIn )
180 accum+= (*in1++)*(*in2++);
197 *outBuffer =
dot_product( inBuffer, inBuffer, endInBuffer );
199 TData norm = 1.0/ *outBuffer;
204 while( outBuffer != endOutBuffer )
206 inBuffer2 = inBuffer;
209 *outBuffer =
dot_product( inBuffer, inBuffer2, endInBuffer );
213 inBuffer = signal.
GetPtr();
226 "A coefficient array size mismatch!" );
228 "K coefficient array size mismatch!" );
230 std::vector <TData> Ap(order);
233 for(
unsigned i = 1 ; i < order; i++ )
236 for(
unsigned j=1; j<i; j++ )
237 K[i] += A[j] * R[i-j];
241 for(
unsigned j=1; j<i; j++ )
244 for(
unsigned j=1; j<i; j++ )
245 A[j] += K[i] * Ap[j];