예제 #1
0
        private unsafe void process()
        {
            if (_fftStream.Length >= fftBins)
            {
                int samplesRead = _fftStream.Read(fftBufferPtr, fftBins);

                // http://www.designnews.com/author.asp?section_id=1419&doc_id=236273&piddl_msgid=522392
                float fftGain = (float)(10.0 * Math.Log10(fftBins / 2.0));
                float offset  = 24.0f - fftGain + _fftOffset;

                decimator.Process(fftBufferPtr, samplesRead);
                if (checkBox1.Checked)
                {
                    fixed(float *w = hammingWindow)
                    {
                        FFT.ApplyWindow(fftBufferPtr, w, samplesRead);
                    }
                }

                sFFT.updateData(fftBufferPtr, samplesRead);
                sFFT.execute();
                sFFT.copyOutput(fftBufferPtr, samplesRead);

                lock (powerBuffer) {
                    FFT.SpectrumPower(fftBufferPtr, powerPtr, samplesRead, offset);
                }
            }
        }