private unsafe void startButtonClick(object sender, EventArgs e) { rtlDevice = new Device(0); rtlDevice.Frequency = frequency; rtlDevice.SamplesAvailable += D_SamplesAvailable; mainSpectrumAnalyzer.Frequency = rtlDevice.Frequency; mainSpectrumAnalyzer.SampleRate = rtlDevice.SampleRate; maxIqSamples = (int)(audioBufferInMs * rtlDevice.SampleRate / 1000); _fftStream = new ComplexFifo(maxIqSamples); _fftStreamDecimator = new ComplexFifo(maxIqSamples); _fftStream.Open(); _fftStreamDecimator.Open(); decimator = new Decimator(rtlDevice.SampleRate, (uint)decimatorRatio, (uint)fftBins); audioDecimator = new InlineFloatDecimator(rtlDevice.SampleRate / decimatorRatio, (uint)decimatorRatio); audioSampleRate = (int)((rtlDevice.SampleRate / decimatorRatio) / decimatorRatio); audioBuffer = DataBuffer.Create((audioBufferInMs * audioSampleRate / 1000), sizeof(float)); audioPtr = (float *)audioBuffer; fmLpf = new FloatLPF(audioSampleRate, 22050, 127); _audioFifo = new FloatFifo(16 * audioBufferInMs * audioSampleRate / 1000); _audioFifo.Open(); _audioPlayer = new AudioPlayer(audioDeviceIdx, audioSampleRate, (uint)(audioBufferInMs * audioSampleRate / 1000), audioBufferNeeded); sFFTDecimator = new SFFT((int)(fftBins / audioDecimator.DecimationFactor)); ifSpectrumAnalizer.Frequency = rtlDevice.Frequency; ifSpectrumAnalizer.SampleRate = decimator.OutputSampleRate; decimator.SamplesAvailable += Decimator_SamplesAvailable; rtlDevice.UseRtlAGC = false; rtlDevice.UseTunerAGC = false; rtlDevice.VGAGain = vgaGain.Value = 3; rtlDevice.LNAGain = lnaGain.Value = 7; rtlDevice.MixerGain = mixerGain.Value = 3; rtlDevice.Start(); dspHit = true; _dspThread = new Thread(dspWork); _dspThread.Start(); fftTimer.Enabled = true; startButton.Enabled = false; stopButton.Enabled = true; Console.WriteLine("Receiving Samples now."); }
public InlineFloatDecimator(long sampleRate, uint decimationFactor) { _lpf = new FloatLPF(sampleRate, sampleRate / (2 * decimationFactor), TAPS, ATTENUATION, decimationFactor); _decimationFactor = decimationFactor; }
public InlineFloatInterpolator(long sampleRate, uint interpolationFactor) { _lpf = new FloatLPF(sampleRate, (sampleRate * interpolationFactor) / 2, TAPS, ATTENUATION); _interpolationFactor = interpolationFactor; }