예제 #1
0
        private static double[][] MakePulse(ShapedPulse pulse, int noSamples, int noDeadPts)
        {
            double[][] iqArray = new double[2][]
            {
                new double[noSamples],
                new double[noSamples]
            };
            double[] amplitude = new double[noSamples];
            double[] cosArray  = new double[noSamples];
            double[] sinArray  = new double[noSamples];

            for (int i = 0; i < (noSamples - noDeadPts); i++)
            {
                amplitude[i]  = (pulse.Param0 + pulse.Param1 * Math.Sin(Math.PI * i / (noSamples - noDeadPts)) + pulse.Param2 * Math.Sin(2 * Math.PI * i / (noSamples - noDeadPts)));
                cosArray[i]   = Math.Cos(2 * Math.PI * (pulse.Freq - samplingRate) * i + pulse.Phase);
                sinArray[i]   = Math.Sin(2 * Math.PI * (pulse.Freq - samplingRate) * i + pulse.Phase);
                iqArray[0][i] = amplitude[i] * cosArray[i];
                iqArray[1][i] = amplitude[i] * sinArray[i];
            }

            for (int i = noSamples - noDeadPts + 1; i < noSamples; i++)
            {
                iqArray[0][i] = 0;
                iqArray[1][i] = 0;
            }

            return(iqArray);
        }
예제 #2
0
        void MakePulses()
        {
            ShapedPulse pulse1, pulse2;

            double[] pulsedata1, pulsedata2;
            double[] blankData;

            string resourceName = "Dev2";
            int    numberOfSamples, numberOfDeadPoints;
            int    waveformQuantum;

            double frequency = 170000000;
            double power     = 5;
            double iqRate    = 100e6;
            double actualIQRate;
            double pulseLength = 1e-6;
            double bandwidth   = 2 / pulseLength;
            double actualPulseLength;
            double deadTime            = 3e-7;
            int    waveformRepeatCount = 1;

            try
            {
                // Initialise the NIRfsg session
                _rfsgSession = new NIRfsg(resourceName, true, false);

                // Subscribe to warnings
                _rfsgSession.DriverOperation.Warning += new EventHandler <RfsgWarningEventArgs>(DriverOperation_Warning);

                // Configure instrument
                _rfsgSession.RF.Configure(frequency, power);
                _rfsgSession.Arb.GenerationMode = RfsgWaveformGenerationMode.Script;
                _rfsgSession.Arb.IQRate         = iqRate;
                _rfsgSession.Arb.PreFilterGain  = ArbPreFilterGain;
                _rfsgSession.RF.PowerLevelType  = RfsgRFPowerLevelType.PeakPower;

                // Enable finite generation
                _rfsgSession.Arb.IsWaveformRepeatCountFinite = true;
                _rfsgSession.Arb.WaveformRepeatCount         = waveformRepeatCount;

                // Configure bandwidth
                _rfsgSession.Arb.SignalBandwidth = bandwidth;

                // Get actual IQ rate
                actualIQRate = _rfsgSession.Arb.IQRate;
                Console.WriteLine("Sampling rate: " + actualIQRate);

                // Calculate waveform quantum based on pulse length
                waveformQuantum = _rfsgSession.Arb.WaveformCapabilities.WaveformQuantum;
                numberOfSamples = CoerceToQuantum(actualIQRate * pulseLength, waveformQuantum);
                Console.WriteLine("No. of samples: " + numberOfSamples);

                // Get actual pulse length
                actualPulseLength = numberOfSamples / actualIQRate;
                Console.WriteLine("Pulse length: " + actualPulseLength + " s");

                // Get number of dead points at the end
                numberOfDeadPoints = Convert.ToInt32(actualIQRate * deadTime);
                Console.WriteLine("No. of dead points: " + numberOfDeadPoints);

                // Generate waveforms
                pulse1     = new ShapedPulse(0, 0.9, 0.1, numberOfSamples, numberOfDeadPoints);
                pulse2     = new ShapedPulse(1, 0, 0, numberOfSamples, numberOfDeadPoints);
                pulsedata1 = pulse1.MakePulse();
                pulsedata2 = pulse2.MakePulse();
                blankData  = Enumerable.Repeat(0.0, numberOfSamples).ToArray();

                // Write waveforms to device
                _rfsgSession.Arb.WriteWaveform("Pulse1", pulsedata1, blankData);
                _rfsgSession.Arb.WriteWaveform("Pulse2", pulsedata2, blankData);
                _rfsgSession.Arb.WriteWaveform("allZeros", blankData, blankData);
            }

            catch (Exception ex)
            {
                ShowError("MakePulses()", ex);
            }
        }
예제 #3
0
        private static double[] MakePulse(ShapedPulse pulse, int noSamples, int noDeadPts)
        {
            double[] sineArray = new double[noSamples];
            for (int i = 0; i < (noSamples - noDeadPts); i++)
            {
                sineArray[i] = pulse.Param0 + pulse.Param1 * Math.Sin(Math.PI * i / (noSamples - noDeadPts)) + pulse.Param2 * Math.Sin(2 * Math.PI * i / (noSamples - noDeadPts));
            }

            for (int i = noSamples - noDeadPts + 1; i < noSamples; i++)
            {
                sineArray[i] = 0;
            }

            return sineArray;
        }
예제 #4
0
        void MakePulses()
        {
            ShapedPulse pulse1, pulse2;
            double[] pulsedata1, pulsedata2;
            double[] blankData;

            string resourceName = "Dev2";
            int numberOfSamples, numberOfDeadPoints;
            int waveformQuantum;

            double frequency = 170000000;
            double power = 5;
            double iqRate = 100e6;
            double actualIQRate;
            double pulseLength = 1e-6;
            double bandwidth = 2 / pulseLength;
            double actualPulseLength;
            double deadTime = 3e-7;
            int waveformRepeatCount = 1;

            try
            {
                 // Initialise the NIRfsg session
                _rfsgSession = new NIRfsg(resourceName, true, false);

                // Subscribe to warnings
                _rfsgSession.DriverOperation.Warning += new EventHandler<RfsgWarningEventArgs>(DriverOperation_Warning);

                // Configure instrument
                _rfsgSession.RF.Configure(frequency, power);
                _rfsgSession.Arb.GenerationMode = RfsgWaveformGenerationMode.Script;
                _rfsgSession.Arb.IQRate = iqRate;
                _rfsgSession.Arb.PreFilterGain = ArbPreFilterGain;
                _rfsgSession.RF.PowerLevelType = RfsgRFPowerLevelType.PeakPower;

                // Enable finite generation
                _rfsgSession.Arb.IsWaveformRepeatCountFinite = true;
                _rfsgSession.Arb.WaveformRepeatCount = waveformRepeatCount;

                // Configure bandwidth
                _rfsgSession.Arb.SignalBandwidth = bandwidth;

                // Get actual IQ rate
                actualIQRate = _rfsgSession.Arb.IQRate;
                Console.WriteLine("Sampling rate: " + actualIQRate);

                // Calculate waveform quantum based on pulse length
                waveformQuantum = _rfsgSession.Arb.WaveformCapabilities.WaveformQuantum;
                numberOfSamples = CoerceToQuantum(actualIQRate * pulseLength, waveformQuantum);
                Console.WriteLine("No. of samples: " + numberOfSamples);

                // Get actual pulse length
                actualPulseLength = numberOfSamples / actualIQRate;
                Console.WriteLine("Pulse length: " + actualPulseLength + " s");

                // Get number of dead points at the end
                numberOfDeadPoints = Convert.ToInt32(actualIQRate * deadTime);
                Console.WriteLine("No. of dead points: " + numberOfDeadPoints);

                // Generate waveforms
                pulse1 = new ShapedPulse(0, 0.9, 0.1, numberOfSamples, numberOfDeadPoints);
                pulse2 = new ShapedPulse(1, 0, 0, numberOfSamples, numberOfDeadPoints);
                pulsedata1 = pulse1.MakePulse();
                pulsedata2 = pulse2.MakePulse();
                blankData = Enumerable.Repeat(0.0, numberOfSamples).ToArray();

                // Write waveforms to device
                _rfsgSession.Arb.WriteWaveform("Pulse1", pulsedata1, blankData);
                _rfsgSession.Arb.WriteWaveform("Pulse2", pulsedata2, blankData);
                _rfsgSession.Arb.WriteWaveform("allZeros", blankData, blankData);

            }

            catch (Exception ex)
            {
                ShowError("MakePulses()", ex);
            }
        }