예제 #1
0
        public FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType, int threadCount)
        {
            _stageCount  = stageCount;
            _threadCount = threadCount;

            _cicCount = 0;
            var firCount = 0;

            switch (filterType)
            {
            case DecimationFilterType.Fast:
                _cicCount = stageCount;
                break;

            case DecimationFilterType.Audio:
                firCount = stageCount;
                break;

            case DecimationFilterType.Baseband:
                while (_cicCount < stageCount && samplerate >= _minimumCICSampleRate)
                {
                    _cicCount++;
                    samplerate /= 2;
                }
                firCount = stageCount - _cicCount;
                break;
            }

            _cicDecimatorsBuffer = UnsafeBuffer.Create(_threadCount * _cicCount, sizeof(CicDecimator));
            _cicDecimators       = (CicDecimator *)_cicDecimatorsBuffer;

            for (var i = 0; i < _threadCount; i++)
            {
                for (var j = 0; j < _cicCount; j++)
                {
                    _cicDecimators[i * _cicCount + j] = new CicDecimator();
                }
            }

            _firFilters = new FirFilter[firCount];
            for (var i = 0; i < firCount; i++)
            {
                _firFilters[i] = new FirFilter(DecimationKernels.Kernel51, 2);
            }
        }
예제 #2
0
        public FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType, int threadCount)
        {
            _stageCount = stageCount;
            _threadCount = threadCount;

            _cicCount = 0;
            var firCount = 0;

            switch (filterType)
            {
                case DecimationFilterType.Fast:
                    _cicCount = stageCount;
                    break;

                case DecimationFilterType.Audio:
                    firCount = stageCount;
                    break;

                case DecimationFilterType.Baseband:
                    while (_cicCount < stageCount && samplerate >= _minimumCICSampleRate)
                    {
                        _cicCount++;
                        samplerate /= 2;
                    }
                    firCount = stageCount - _cicCount;
                    break;
            }

            _cicDecimatorsBuffer = UnsafeBuffer.Create(_threadCount * _cicCount, sizeof(CicDecimator));
            _cicDecimators = (CicDecimator*)_cicDecimatorsBuffer;

            for (var i = 0; i < _threadCount; i++)
            {
                for (var j = 0; j < _cicCount; j++)
                {
                    _cicDecimators[i * _cicCount + j] = new CicDecimator();
                }
            }

            _firFilters = new FirFilter[firCount];
            for (var i = 0; i < firCount; i++)
            {
                _firFilters[i] = new FirFilter(DecimationKernels.Kernel51, 2);
            }
        }