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); }
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); } }
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); } }
public FloatDecimator(int stageCount, double samplerate, DecimationFilterType filterType) : this(stageCount, samplerate, filterType, 1) { }
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); } }