コード例 #1
0
ファイル: SignalFixer.cs プロジェクト: p0miki/LaserModulation
        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;
        }
コード例 #2
0
 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);
 }