Exemplo n.º 1
0
        public double[] Extract(float[] frame, out bool isEmpty)
        {
            HammingWindowDef.HammingWindow hammingWindow;
            if (!_hammingWindows.TryGetValue(frame.Length, out hammingWindow))
            {
                hammingWindow = new HammingWindowDef.HammingWindow(new HammingWindowDef(), frame.Length);
                _hammingWindows.Add(frame.Length, hammingWindow);
            }

            var windowedSample = hammingWindow.Apply(frame);

            FourierTransform ft = new FourierTransform();
            var nummberOfCoeff = ft.ComputeFft(windowedSample, _numberOfFftCoeff);
            double frameEnergy;
            var result = ft.GetMagnitudeSquared(nummberOfCoeff, out frameEnergy);

            if (_filterBankCoefficients == null)
            {
                _filterBankCoefficients = ComputeMelFilterBank(result.Length, _lowerfrequency, _higherfrequency,
                    _samplingRate, _numberOfFilterBanks + 2);
            }

            var cepstra = ApplyFilterbankFilter(result, _filterBankCoefficients);
            var ret = _dct.Apply(cepstra);
            ret[0] = Utils.Log(frameEnergy);
            isEmpty = false;
            return ret;
        }