function CalcFreqGoertzel(Freq: Double; SampleRate: Double; PData: PSmallInt; SampleCount: Longint): Double; var i : Longint; Sk0 : Double; Sk1 : Double; Sk2 : Double; d : Double; begin Sk0:= 0.0; Sk1:= 0.0; for i := 0 to SampleCount - 1 do begin Sk2:= Sk1; Sk1:= Sk0; Sk0:= 2 * cos( 2 * Pi * Freq / SampleRate ) * Sk1 - Sk2 + pData^; Inc(pData); end; d:= exp( -2 * Pi * Freq / SampleRate ); Result:= abs( Sk0 - d * Sk1 ) / SampleCount; end;