Exemplo n.º 1
0
 /// <summary>
 /// Constructs Hilbert transformer. Transform <paramref name="size"/> must be a power of 2.
 /// </summary>
 public HilbertTransform(int size = 512)
 {
     Size = size;
     _fft = new Fft(size);
     _re  = new float[size];
     _im  = new float[size];
 }
Exemplo n.º 2
0
        public FastDct4(int dctSize)
        {
            var halfSize = dctSize / 2;

            _fft    = new Fft(halfSize);
            _temp   = new float[halfSize];
            _tempRe = new float[halfSize];
            _tempIm = new float[halfSize];
        }
Exemplo n.º 3
0
        /// <summary>
        /// Constructor with necessary parameters
        /// </summary>
        /// <param name="cepstrumSize"></param>
        /// <param name="fftSize"></param>
        public CepstralTransform(int cepstrumSize, int fftSize = 512)
        {
            _fft = new Fft(fftSize);

            Size = cepstrumSize;

            _realSpectrum = new float[fftSize];
            _imagSpectrum = new float[fftSize];
        }
Exemplo n.º 4
0
        /// <summary>
        /// Constructor with necessary parameters
        /// </summary>
        /// <param name="windowSize">Size of window</param>
        /// <param name="hopSize">Hop (overlap) size</param>
        /// <param name="window">Type of the window function to apply</param>
        /// <param name="fftSize">Size of FFT</param>
        public Stft(int windowSize = 1024, int hopSize = 256, WindowTypes window = WindowTypes.Hann, int fftSize = 0)
        {
            _fftSize = fftSize >= windowSize ? fftSize : MathUtils.NextPowerOfTwo(windowSize);
            _fft     = new Fft(_fftSize);

            _hopSize = hopSize;

            _windowSize    = windowSize;
            _window        = window;
            _windowSamples = Window.OfType(_window, _windowSize);

            _gain = 1 / (_fftSize * _windowSamples.Select(w => w * w).Sum() / _hopSize);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="length">Size of Hilbert Transform</param>
        /// <param name="doublePrecision"></param>
        public HilbertTransform(int size = 1024, bool doublePrecision = true)
        {
            Size = size;

            if (doublePrecision)
            {
                _fft64 = new Fft64(size);
            }
            else
            {
                _fft32 = new Fft(size);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Constructor with necessary parameters
        /// </summary>
        /// <param name="windowSize">Size of window</param>
        /// <param name="hopSize">Hop (overlap) size</param>
        /// <param name="window">Type of the window function to apply</param>
        /// <param name="fftSize">Size of FFT</param>
        public Stft(int windowSize = 1024, int hopSize = 256, WindowTypes window = WindowTypes.Hann, int fftSize = 0)
        {
            _fftSize = fftSize >= windowSize ? fftSize : MathUtils.NextPowerOfTwo(windowSize);
            _fft     = new Fft(_fftSize);

            _hopSize = hopSize;

            _windowSize    = windowSize;
            _window        = window;
            _windowSamples = Window.OfType(_window, _windowSize);
            _windowSquared = _windowSamples.Select(w => w * w).ToArray();

            // TODO: pad center!
        }
Exemplo n.º 7
0
        /// <summary>
        /// Constructs cepstral transformer.
        /// If <paramref name="cepstrumSize"/> exceeds <paramref name="fftSize"/>,
        /// FFT size will be recalculated as the nearest power of 2 to cepstrum size.
        /// </summary>
        /// <param name="cepstrumSize">Cepstrum size</param>
        /// <param name="fftSize">FFT size</param>
        /// <param name="logBase">Logarithm base</param>
        public CepstralTransform(int cepstrumSize, int fftSize = 0, double logBase = Math.E)
        {
            Size = cepstrumSize;

            if (cepstrumSize > fftSize)
            {
                fftSize = MathUtils.NextPowerOfTwo(cepstrumSize);
            }

            _fft = new Fft(fftSize);

            _logBase = logBase;

            _re        = new float[fftSize];
            _im        = new float[fftSize];
            _unwrapped = new double[fftSize];
        }
Exemplo n.º 8
0
        /// <summary>
        /// Constructor with necessary parameters
        /// </summary>
        /// <param name="windowSize">Size of window</param>
        /// <param name="hopSize">Hop (overlap) size</param>
        /// <param name="window">Type of the window function to apply</param>
        /// <param name="fftSize">Size of FFT</param>
        public Stft(int windowSize = 1024, int hopSize = 256, WindowTypes window = WindowTypes.Hann, int fftSize = 0)
        {
            _fftSize = fftSize >= windowSize ? fftSize : MathUtils.NextPowerOfTwo(windowSize);
            _fft     = new Fft(_fftSize);

            _hopSize = hopSize;

            _windowSize    = windowSize;
            _window        = window;
            _windowSamples = Window.OfType(_window, _windowSize);

            // TODO: pad center!

            _norm = 2.0f / (_windowSamples.Sum(s => s * s) * _fftSize / _hopSize);

            //_norm = 2.0 * Math.Sqrt((float)_fftSize / _hopSize));
            //_norm = 2.0 / (_fftSize / 2 * (_fftSize / _hopSize));
        }
Exemplo n.º 9
0
        public MellinTransform(int inputSize, int outputSize)
        {
            Guard.AgainstNotPowerOfTwo(outputSize, "Output size");

            InputSize  = inputSize;
            OutputSize = outputSize;

            _fft = new Fft(outputSize);

            _linScale = Enumerable.Range(0, inputSize)
                        .Select(i => (float)i / inputSize)
                        .ToArray();

            _expScale = new float[outputSize];

            var cur  = -(float)Math.Log(outputSize);
            var step = -cur / outputSize;

            for (var i = 0; i < _expScale.Length; i++, cur += step)
            {
                _expScale[i] = (float)Math.Exp(cur);
            }
        }
Exemplo n.º 10
0
 public FastDct2(int dctSize)
 {
     _fft  = new Fft(dctSize);
     _temp = new float[dctSize];
 }
Exemplo n.º 11
0
 /// <summary>
 /// Constructs Hartley transformer. Transform <paramref name="size"/> must be a power of 2.
 /// </summary>
 /// <param name="size">Size of Hartley transform</param>
 public HartleyTransform(int size)
 {
     Size = size;
     _fft = new Fft(size);
     _im  = new float[size];
 }