public virtual void FixSignalIteration(IExperimentData experimentData, out double[] fixedSignalGeneratorInput, out bool fixDone) { CurrentIterationIndex++; fixDone = false; ISignalFixerIterationData iter = GetNewIteration(experimentData); IterationsData[CurrentIterationIndex] = iter; iter.SignalsData.Add(SignalTypes.SignalGeneratorOutput, experimentData.SignalGeneratorData.ArbitrarySignalData.ToArray()); iter.SignalsData.Add(SignalTypes.PhotodiodeOutput, experimentData.GetScopeDataBySignalType(Experiments.SignalTypes.PhotodiodeOutput).SignalSamples.ToArray()); iter.SignalsData.Add(SignalTypes.SignalGeneratorSync, experimentData.GetScopeDataBySignalType(Experiments.SignalTypes.SignalGeneratorSync).SignalSamples.ToArray()); double signalAmplitude = 0; foreach (SignalTypes index in Enum.GetValues(typeof(SignalTypes))) { if (index == SignalTypes.PhotodiodeOutput) { double[] noramlizeSignal = SignalDigitizer.NormalizeSignal(iter.SignalsData[index], AlgorithmParams.DigitzerParams, out signalAmplitude).ToArray(); iter.SignalsAmplitude.Add(index, signalAmplitude); iter.NormalizedData.Add(index, noramlizeSignal); } } iter.OutputPhase = PhaseAnalyzer.FindBinPhaseByShift(iter.NormalizedData[SignalTypes.PhotodiodeOutput], ZeroPhaseOutputReference, PeriodLength, -50, 50, AlgorithmParams.ConstantPhaseAdjustment, false); iter.NormalizedZeroPhaseOutput = new double[PeriodLength]; double lockingPhase = experimentData.DemodulatorsData[0].Phase.Mean; int lockingPhaseInBins = (int) Math.Round((lockingPhase / (2 * Math.PI)) * PeriodLength); //iter.OutputPhase = new PhaseData(12, ) for (int i = 0; i < PeriodLength; i++) { int phasedIndex = i + iter.OutputPhase.PhaseInBins % PeriodLength; //int phasedIndex = (i + lockingPhaseInBins) % PeriodLength; phasedIndex = (phasedIndex >= PeriodLength) ? phasedIndex - PeriodLength : phasedIndex; phasedIndex = (phasedIndex < 0) ? phasedIndex + PeriodLength: phasedIndex; iter.NormalizedZeroPhaseOutput[i] = iter.NormalizedData[SignalTypes.PhotodiodeOutput][phasedIndex]; iter.OutputError[i] = iter.NormalizedZeroPhaseOutput[i] - ZeroPhaseOutputReference[i]; } //Saver.SaveArrayToFile($"C:\\Pts\\Ref{CurrentIteration}.txt", ZeroPhaseOutputReference); //Saver.SaveArrayToFile($"C:\\Pts\\UnPhase{CurrentIteration}.txt", iter.NormalizedData[SignalTypes.PhotodiodeOutput]); //Saver.SaveArrayToFile($"C:\\Pts\\Phased{CurrentIteration}.txt", iter.NormalizedZeroPhaseOutput); //double signalAmp = iter.SignalsAmplitude[SignalTypes.PhotodiodeOutput]; //MatlabFigure tmp1 = new MatlabFigure(); //tmp1.AddPlot("ref", ZeroPhaseOutputReference, true); //tmp1.AddPlot("my phase sig", iter.NormalizedZeroPhaseOutput, true); //tmp1.AddPlot("my non phase sig", iter.NormalizedData[SignalTypes.PhotodiodeOutput], true); //tmp1.Show(); //debugFigure = new MatlabFigure(); //debugFigure.Text = CurrentIteration.ToString(); //debugFigure.AddPlot("error", iter.OutputError, true); //debugFigure.Show(); //debugFigure.AddPointY(iter.OutputError[DebugPoint] * signalAmp, string.Format("Error @ {0}", DebugPoint)); //SharedCode.DebugHelper.MatlabFigure tmp = new SharedCode.DebugHelper.MatlabFigure("", iter.NormalizedData[SignalTypes.PhotodiodeOutput]); //tmp.AddPlot("", iter.NormalizedZeroPhaseOutput, true); //tmp.AddPlot("", ZeroPhaseOutputReference, true); //tmp.Show(); CompareNewIterationData(experimentData); fixedSignalGeneratorInput = null; }
internal void ChartPhaseMatchedRequest(IExperimentData expData) { double[] photodiodeOutput, signalGeneratorOutput, shiftedOutput; signalGeneratorOutput = expData.GetScopeDataBySignalType(Experiments.SignalTypes.SignalGeneratorOutput).SignalSamples.ToArray(); photodiodeOutput = expData.GetScopeDataBySignalType(Experiments.SignalTypes.PhotodiodeOutput).SignalSamples.ToArray(); int shift = expData.PhaseDifferenceInBins; int shiftedIdx; int N = photodiodeOutput.Count(); shiftedOutput = new double[N]; for (int i = 0; i < N; i++) { shiftedIdx = i + shift; shiftedIdx = (shiftedIdx >= N) ? N - shiftedIdx : shiftedIdx; shiftedIdx = (shiftedIdx < 0) ? N + shiftedIdx : shiftedIdx; shiftedOutput[shiftedIdx] = photodiodeOutput[i]; } IList<double[]> signalsToChart = new List<double[]>(); signalsToChart.Add(signalGeneratorOutput); signalsToChart.Add(shiftedOutput); managedForm.ChartSignal(signalsToChart); }