Esempio n. 1
0
        public static void Example2() //================[ Basic DFT + Windowing Example ]================
        {
            // Same Input Signal as Example 1
            double amplitude = 1.0; double frequency = 20000;
            UInt32 length       = 1000;
            double samplingRate = 100000;

            double[] inputSignal = DSP.Generate.ToneSampling(amplitude, frequency, samplingRate, length);

            // Apply window to the Input Data & calculate Scale Factor
            double[] wCoefs       = DSP.Window.Coefficients(DSP.Window.Type.Hamming, length);
            double[] wInputData   = DSP.Math.Multiply(inputSignal, wCoefs);
            double   wScaleFactor = DSP.Window.ScaleFactor.Signal(wCoefs);

            // Instantiate & Initialize a new DFT
            DSPLib.DFT dft = new DSPLib.DFT();
            dft.Inicializar(length);

            // Call the DFT and get the scaled spectrum back
            Complex[] cSpectrum = dft.Executar(wInputData);

            // Convert the complex spectrum to note: Magnitude Format
            double[] lmSpectrum = DSP.ConvertComplex.ToMagnitude(cSpectrum);

            // Properly scale the spectrum for the added window
            lmSpectrum = DSP.Math.Multiply(lmSpectrum, wScaleFactor);

            // For plotting on an XY Scatter plot generate the X Axis frequency Span
            double[] freqSpan = dft.FrequencySpan(samplingRate);

            // At this point a XY Scatter plot can be generated from,
            // X axis => freqSpan
            // Y axis => lmSpectrum
        }
Esempio n. 2
0
        public static void Example6() //================[ Basic DFT + Noise Analysis Example ]================
        {
            // Setup parameters to generate noise test signal of 5 nVrms / rt-Hz
            double amplitude = 5.0e-9;
            UInt32 length = 1000; double samplingRate = 2000;


            // Generate window & calculate Scale Factor for NOISE!
            double[] wCoefs = DSP.Window.Coefficients(DSP.Window.Type.Hamming, length);

            double wScaleFactor = DSP.Window.ScaleFactor.Noise(wCoefs, samplingRate);

            // Instantiate & Initialize a new DFT
            DSPLib.DFT dft = new DSPLib.DFT();
            dft.Inicializar(length);

            // Average the noise 'N' times
            Int32 N = 1000;

            double[] noiseSum = new double[(length / 2) + 1];
            for (Int32 i = 0; i < N; i++)
            {
                // Generate the noise signal & apply window
                double[] inputSignal = DSP.Generate.NoisePsd(amplitude, samplingRate, length);
                inputSignal = DSP.Math.Multiply(inputSignal, wCoefs);

                // DFT the noise -> Convert -> Sum
                Complex[] cSpectrum = dft.Executar(inputSignal);
                double[]  mag2      = DSP.ConvertComplex.ToMagnitudeSquared(cSpectrum);

                if (N == 0)
                {
                    noiseSum = DSP.Math.Add(noiseSum, 0);
                }
                else
                {
                    noiseSum = DSP.Math.Add(noiseSum, mag2);
                }
            }

            // Calculate Average, convert to magnitude format
            // See text for the reasons to use Mag^2 format.
            double[] averageNoise = DSP.Math.Divide(noiseSum, N);
            double[] lmSpectrum   = DSP.ConvertMagnitudeSquared.ToMagnitude(averageNoise);

            // Properly scale the spectrum for the added window
            lmSpectrum = DSP.Math.Multiply(lmSpectrum, wScaleFactor);

            // For plotting on an XY Scatter plot generate the X Axis frequency Span
            double[] freqSpan = dft.FrequencySpan(samplingRate);

            // At this point a XY Scatter plot can be generated from,
            // X axis => freqSpan
            // Y axis => lmSpectrum as a Power Spectral Density Value

            // Extra Credit - Analyze Plot Data Ignoring the first and last 20 Bins
            // Average value should be what we generated = 5.0e-9 Vrms / rt-Hz
            double averageValue = DSP.Analyze.FindMean(lmSpectrum, 20, 20);
        }
Esempio n. 3
0
        public static void Example8() //================[ Basic DFT + Signal & Noise + Log Magnitude ]================
        {
            // Same Input Signal as Example 1, except amplitude is 5 Vrms.
            double amplitude = 5.0; double frequency = 20000;
            UInt32 length = 1000; double samplingRate = 100000;

            double[] inputSignal = DSP.Generate.ToneSampling(amplitude, frequency, samplingRate, length);

            // Add noise that is about 80 dBc from signal level
            // 80 dBc is about the level of noise from a 14 bit ADC
            // 1/10,000 down from full scale
            double[] inputNoise = DSP.Generate.NoiseRms(amplitude / 10000.0, length);

            // Add noise to the signal
            double[] compositeInput = DSP.Math.Add(inputSignal, inputNoise);

            // Use the BH92 type window - this is a very "Spectrum Analyzer" like window.
            // Apply window to the Input Data & calculate Scale Factor
            double[] wCoefs       = DSP.Window.Coefficients(DSP.Window.Type.BH92, length);
            double   wScaleFactor = DSP.Window.ScaleFactor.Signal(wCoefs);

            double[] wInputData = DSP.Math.Multiply(compositeInput, wCoefs);

            // Instantiate & Initialize a new DFT
            DSPLib.DFT dft = new DSPLib.DFT();
            dft.Inicializar(length);

            // Call the DFT and get the scaled spectrum back
            Complex[] cSpectrum = dft.Executar(wInputData);

            // Convert the complex spectrum to note: Magnitude Format
            double[] lmSpectrum = DSP.ConvertComplex.ToMagnitude(cSpectrum);

            // Properly scale the spectrum for the added window
            lmSpectrum = DSP.Math.Multiply(lmSpectrum, wScaleFactor);

            // Convert from linear magnitude to log magnitude format
            double[] logMagSpectrum = DSP.ConvertMagnitude.ToMagnitudeDBV(lmSpectrum);

            // For plotting on an XY Scatter plot generate the X Axis frequency Span
            double[] freqSpan = dft.FrequencySpan(samplingRate);

            // At this point a XY Scatter plot can be generated from,
            // X axis => freqSpan
            // Y axis => logMagSpectrum

            // In this example - maximum amplitude of 13.974 dBV is at bin 200 (20,000 Hz)
        }