public bool Predict()
        {
            var  start = stopwatch.Elapsed;
            bool hit;

            if (!lfeProvided)
            {
                MonoMixing();
            }
            else
            {
                for (int block = 0; block < mixedMonoLevel.Length; block++)
                {
                    filterBuffer[block] = monoBuffers[LFE_CHANNEL_NUMBER][block];
                }
            }

            if (biQuadFilter != null)
            {
                biQuadFilter.Process(filterBuffer);
            }

            CastToDoubleArray();
            currentReading = GetCurrentReading();

            if (double.IsInfinity(currentThreshold))
            {
                currentThreshold = currentReading + margin;
                hit = false;
            }
            else
            {
                currentThreshold = (1d - alpha) * lastThreshold + alpha * (currentReading + margin);
                hit = currentReading > currentThreshold && currentReading >= noiseThreshold;
            }
            lastThreshold = currentThreshold;

            var elapsed = (stopwatch.Elapsed - start);

            //Console.WriteLine($"{elapsed.TotalMilliseconds}");
            return(hit);
        }