Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
        }