public static float[] GenerateWave(uint waveLength, double samplePeriod, double timeOffset, DummyScopeChannelConfig config) { WaveForm waveForm = config.waveform; double frequency = config.frequency; double amplitude = config.amplitude; double phase = config.phase; double dutyCycle = config.dutyCycle; double dcOffset = config.dcOffset; float[] wave = new float[waveLength]; switch (waveForm) { case WaveForm.SINE: wave = DummyScope.WaveSine(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; case WaveForm.COSINE: wave = DummyScope.WaveCosine(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; case WaveForm.SQUARE: wave = DummyScope.WaveSquare(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase, dutyCycle); break; case WaveForm.SAWTOOTH: wave = DummyScope.WaveSawTooth(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; case WaveForm.TRIANGLE: wave = DummyScope.WaveTriangle(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; case WaveForm.SAWTOOTH_SINE: wave = DummyScope.WaveSawtoothSine(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; case WaveForm.MULTISINE: wave = DummyScope.WaveMultiCosine(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase, new float[] { 1, 2, 4, 8 }); break; #if DEBUG case WaveForm.HALF_BIG_HALF_UGLY: wave = DummyScope.WaveHalfBigHalfUgly(waveLength, samplePeriod, timeOffset, frequency, amplitude, phase); break; #endif default: throw new NotImplementedException(); } Func <float, float> offsetAdder = x => (float)(x + dcOffset); wave = Utils.TransformArray(wave, offsetAdder); return(wave); }
public static float[] WaveHalfBigHalfUgly(uint awgPoints, double awgSamplePeriod, double timeOffset, double frequency, double amplitude, double phase) { float[] wave1 = DummyScope.WaveSine(awgPoints, awgSamplePeriod, timeOffset, frequency * 21f, amplitude, phase + 0 * 168); float[] wave2 = DummyScope.WaveSine(awgPoints, awgSamplePeriod, timeOffset, frequency * 21f, amplitude * 0.4f, phase + 0 * 168); float[] wave3 = DummyScope.WaveSawTooth(awgPoints, awgSamplePeriod, timeOffset, 50f, amplitude * 1f, phase + 0); float[] wave4 = DummyScope.WaveSawTooth(awgPoints, awgSamplePeriod, timeOffset, 50f, amplitude * 0.4f, phase + 0); float[] wave5 = DummyScope.WaveSquare(awgPoints, awgSamplePeriod, timeOffset, frequency * 31, amplitude, phase + 0 * 912); float[] wave6 = DummyScope.WaveSquare(awgPoints, awgSamplePeriod, timeOffset, frequency * 31f, amplitude * 0.5f, phase + 0 * 912); float[] wave7 = DummyScope.WaveSquare(awgPoints, awgSamplePeriod, timeOffset, frequency * 60, amplitude, phase + 0 * 912); float[] wave8 = DummyScope.WaveSquare(awgPoints, awgSamplePeriod, timeOffset, frequency * 60f, amplitude * 0.5f, phase + 0 * 912); float[] wave9 = DummyScope.WaveSine(awgPoints, awgSamplePeriod, timeOffset, frequency * 800f, amplitude, 0 * 168); float[] wave10 = DummyScope.WaveSine(awgPoints, awgSamplePeriod, timeOffset, frequency * 800f, amplitude * 0.4f, phase + 0 * 168); float[] finalWave = new float[wave1.Length]; for (int i = 0; i < wave1.Length; i++) { if (i < 1 * 1600) { finalWave[i] = wave1[i]; } else if (i < 2 * 1600) { finalWave[i] = wave2[i]; } else if (i < 3 * 1600) { finalWave[i] = wave3[i]; } else if (i < 4 * 1600) { finalWave[i] = wave4[i]; } else if (i < 5 * 1600) { finalWave[i] = wave5[i]; } else if (i < 6 * 1600) { finalWave[i] = wave6[i]; } else if (i < 7 * 1600) { finalWave[i] = wave7[i]; } else if (i < 8 * 1600) { finalWave[i] = wave8[i]; } else if (i < 9 * 1600) { finalWave[i] = wave9[i]; } else if (i < 10 * 1600) { finalWave[i] = wave10[i]; } } return(finalWave); }