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); }
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); } }
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; }
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); } }