public void Configure(float sampleRate, int bufferSize) { //Complain if too low if (sampleRate < BAUD_RATE) { throw new Exception($"The sample rate specified, {sampleRate}, is too low to be useful. Must be >= {BAUD_RATE}."); } //Create parts fmDemod = new FmBasebandDemodulator(); fmDemod.Configure(bufferSize, sampleRate); amDemod = new AmBasebandDemodulator(); osc = new Oscillator(sampleRate, -2400); symbolsPerSample = BAUD_RATE / sampleRate; //Make filter var filterBuilder = new LowPassFilterBuilder(sampleRate, 2080) .SetAutomaticTapCount(200) .SetWindow(); filter = RealFirFilter.CreateFirFilter(filterBuilder); //Create buffer buffer?.Dispose(); buffer = UnsafeBuffer.Create(bufferSize, out bufferPtr); }
public WbFmDemodulator(BackgroundWorker worker = null) { //Create parts fm = new FmBasebandDemodulator(); deemphasisL = new DeemphasisProcessor(); deemphasisR = new DeemphasisProcessor(); rdsDemodulator = new RDSDecoder(); rdsDemodulator.OnSyncStateChanged += (bool sync) => OnRdsDetected?.Invoke(sync); rdsDemodulator.OnFrameDecoded += (ulong frame) => OnRdsFrameEmitted?.Invoke(frame); //Apply defaults this.worker = worker; DeemphasisTime = 75; //Configured for America //DeemphasisTime = 50; //Configured for rest of the world }