コード例 #1
0
ファイル: IQDecimator.cs プロジェクト: jamezleedz/SDRSharper
        public IQDecimator(int stageCount, double samplerate, bool useFastFilters, bool isMultithreaded)
        {
            this._isMultithreaded = (Utils.ProcessorCount > 1);
            int threadCount = (!this._isMultithreaded) ? 1 : (Utils.ProcessorCount / 2);
            DecimationFilterType filterType = (!useFastFilters) ? DecimationFilterType.Baseband : DecimationFilterType.Fast;

            this._rDecimator = new FloatDecimator(stageCount, samplerate, filterType, threadCount);
            this._iDecimator = new FloatDecimator(stageCount, samplerate, filterType, threadCount);
        }
コード例 #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);
            }
        }
コード例 #3
0
        public unsafe FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType, int threadCount)
        {
            this._stageCount  = stageCount;
            this._threadCount = threadCount;
            this._cicCount    = 0;
            int num = 0;

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

            case DecimationFilterType.Audio:
                num = stageCount;
                break;

            case DecimationFilterType.Baseband:
                while (this._cicCount < stageCount && samplerate >= FloatDecimator._minimumCICSampleRate)
                {
                    this._cicCount++;
                    samplerate /= 2.0;
                }
                num = stageCount - this._cicCount;
                break;
            }
            this._cicDecimatorsBuffer = UnsafeBuffer.Create(this._threadCount * this._cicCount, sizeof(CicDecimator));
            this._cicDecimators       = (CicDecimator *)(void *)this._cicDecimatorsBuffer;
            for (int i = 0; i < this._threadCount; i++)
            {
                for (int j = 0; j < this._cicCount; j++)
                {
                    this._cicDecimators[i * this._cicCount + j] = default(CicDecimator);
                }
            }
            this._firFilters = new FirFilter[num];
            for (int k = 0; k < num; k++)
            {
                this._firFilters[k] = new FirFilter(DecimationKernels.Kernel51, 2);
            }
        }
コード例 #4
0
 public FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType) :
     this(stageCount, samplerate, filterType, 1)
 {
 }
コード例 #5
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);
            }
        }
コード例 #6
0
 public FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType) :
     this(stageCount, samplerate, filterType, 1)
 {
 }