コード例 #1
0
        private static void FindMinMax(IEnumerable<double> signalData, DigitzerParameters digitizerParams, out double min, out double max)
        {
            double signalAbsoluteMax, signalAbsoluteMin;
            double delta, averageMin, averageMax, minThreashold, maxThreshold;
            int maximumFounds, minimumFounds;

            signalAbsoluteMax = signalData.Max(); signalAbsoluteMin = signalData.Min();
            min = signalAbsoluteMin;
            max = signalAbsoluteMax;
            minThreashold = Math.Abs(signalAbsoluteMin * digitizerParams.MinimumThreshold);
            maxThreshold = Math.Abs(signalAbsoluteMax * (digitizerParams.MaximumThreashold));

            if (digitizerParams.DigitizingMethod == DigitizingMethods.AverageMinMax)
            {
                averageMin = 0; averageMax = 0; maximumFounds = 0; minimumFounds = 0;
                for (Int32 i = 0; i < signalData.Count(); i++)
                {
                    //delta = Math.Abs(signalData.ElementAt(i) - signalAbsoluteMax) / signalAbsoluteMax;
                    delta = Math.Abs(signalData.ElementAt(i) - signalAbsoluteMax);
                    if (delta <= maxThreshold)
                    {
                        maximumFounds++; averageMax += signalData.ElementAt(i);
                    }
                    //delta = Math.Abs(signalData.ElementAt(i) - signalAbsoluteMin) / signalAbsoluteMin;
                    delta = Math.Abs(signalData.ElementAt(i) - signalAbsoluteMin);
                    if (delta <= minThreashold)
                    {
                        minimumFounds++; averageMin += signalData.ElementAt(i);
                    }
                }
                averageMin /= minimumFounds; averageMax /= maximumFounds;
                min = averageMin; max = averageMax;
            }
        }
コード例 #2
0
 internal AlgorithmParameters(SignalFixerAlgorithmTypes algorithmType, DigitzerParameters digitizerParams ,IExperimentData experimentData, FixBasedOnTypes signalToFix, FixScopeTypes fixType, int iterationToRun, double maxErrorToFixFrom, bool rescaleAfterSmoothing,
                                 int startFixIndex, int fixEveryNSample, int savitzkyGolayFilterOrder, int savitzkyGolayFilterLength, int constantPhaseAdjustmnet, bool useDerivativeFix, double epsilonFactor)
 {
     AlgorithmType = algorithmType;
     DigitzerParams = digitizerParams;
     SeedExperiment = experimentData;
     SignalToFix = signalToFix;
     FixType = fixType;
     IterationToRun = iterationToRun;
     MaxErrorToFixFrom = maxErrorToFixFrom;
     RescaleAfterSmoothing = rescaleAfterSmoothing;
     StartFixIndex = startFixIndex;
     FixEveryNSample = fixEveryNSample;
     ConstantPhaseAdjustment = constantPhaseAdjustmnet;
     UseDerivativeFix = useDerivativeFix;
     EpsilonFactor = epsilonFactor;
     SavitzkyGolayFilterOrder = savitzkyGolayFilterOrder;
     SavitzkyGolayFilterLength = savitzkyGolayFilterLength;
     //make sure filter length is larger than polynom order.
     if (SavitzkyGolayFilterLength < SavitzkyGolayFilterOrder)
     {
         SavitzkyGolayFilterLength = SavitzkyGolayFilterOrder + 3;
     }
     //make sure the filter length is odd.
     if (SavitzkyGolayFilterLength % 2 == 0)
     {
         SavitzkyGolayFilterLength += 1;
     }
 }
コード例 #3
0
 public static IEnumerable<Double> DigitizeSignal(IEnumerable<Double> signalData, DigitzerParameters digitizerParams)
 {
     IEnumerable<Double> digitizedSignal = new double[0];
     double max = 0, min = 0;
     FindMinMax(signalData, digitizerParams, out min, out max);
     digitizedSignal = signalData.Select(x => DigitizeSample(x, min, max, digitizerParams.DigitizerLevels, digitizerParams.RoundToNearsetInteger));
     return digitizedSignal;
 }
コード例 #4
0
 public ManualFrequencyAlgorithparameters(SignalFixerAlgorithmTypes algorithmType, DigitzerParameters digitizerParams, IExperimentData experimentData, FixBasedOnTypes signalToFix, FixScopeTypes fixType, int iterationToRun, 
                                          int harmonyToFix, double fixStart, double fixDelta, ManualFrequencyModType frequencyModType, double maxErrorToFixFrom, bool rescaleAfterSmoothing, int fixFromSample, int fixEveryNSample, int savitzkyGolayPolyOrder, int savitzkyGolayFilterLength, int constantPhaseAdjustment, bool useDerivativeFix, double epsilonFactor)
     : base(algorithmType, digitizerParams, experimentData, signalToFix, fixType, iterationToRun, maxErrorToFixFrom, rescaleAfterSmoothing, fixFromSample, fixEveryNSample, savitzkyGolayPolyOrder, savitzkyGolayFilterLength, constantPhaseAdjustment, useDerivativeFix, epsilonFactor)
 {
     InitialInput = experimentData.SignalGeneratorData.ArbitrarySignalData.ToArray();
     HarmonyToFix = harmonyToFix;
     FrequencyModeType = frequencyModType;
     StartFix = fixStart;
     DeltaFix = fixDelta;
 }
コード例 #5
0
        public static IEnumerable<double> NormalizeSignal(double[] signalData, DigitzerParameters digitizerParams, out double signalAmplitude)
        {
            try
            {
                if (signalData == null)
                {
                    int i = 0;
                    signalAmplitude = 0;
                    return null;
                }
                double min, max;
                FindMinMax(signalData, digitizerParams, out min, out max);
                signalAmplitude = (max - min) / 2;
                return signalData.Select(x => DigitizeSample(x, min, max, 1, false));
            }
            catch (Exception ex)
            {

                throw new Exception("normalize signal fail - " + ex.Message);
            }
        }
 public HighFrequencyDistortionAlgorithmParameters(SignalFixerAlgorithmTypes algorithmType, DigitzerParameters digitizerParams, IExperimentData experimentData, FixBasedOnTypes signalToFix, FixScopeTypes fixType,
                             int iterationToRun, double maxErrorToFixFrom, bool rescaleAfterSmoothing, int fixFromSample, int fixEveryNSample, int savitzkyGolayPolyOrder, int savitzkyGolayFilterLength, int harmonyToFix, int fftScalingFactor, double midPoint, double range, FrequencyDomainDisttortionType distortionType, int pointsToCheck, int constantPhaseAdjustment, bool useDerivativeFix, double epsilonFactor)
     : base(algorithmType, digitizerParams, experimentData, signalToFix, fixType, iterationToRun, maxErrorToFixFrom, rescaleAfterSmoothing, fixFromSample, fixEveryNSample, savitzkyGolayPolyOrder, savitzkyGolayFilterLength, constantPhaseAdjustment, useDerivativeFix, epsilonFactor)
 {
     HarmonyToFix =  harmonyToFix;
     FFTScalingFactor = fftScalingFactor;
     MidPoint = midPoint;
     Range = range;
     DistortionType = distortionType;
     PointsToCheck = pointsToCheck;
     ValuesToCheck = new Complex[5];
     ValuesToCheck[0] = new Complex(MidPoint - Range, 0);
     ValuesToCheck[1] = new Complex(MidPoint - (Range)*2/3, 0);
     ValuesToCheck[2] = new Complex(MidPoint + (Range) * 2 / 3, 0);
     ValuesToCheck[3] = new Complex(MidPoint + Range, 0);
     /*ValuesToCheck = new Complex[13];
     double start = midPoint - range;
     double delta = range / 6;
     for (double i = 0; i < 13; i++)
     {
         ValuesToCheck[(int)i] = start + delta * i;
     }*/
 }
コード例 #7
0
 public PIDAlgorithmParamters(SignalFixerAlgorithmTypes algorithmType, DigitzerParameters digitizerParams, IExperimentData experimentData, FixBasedOnTypes signalToFix, FixScopeTypes fixType, 
                             int iterationToRun, double pFactor, double iFactor, double dFactor, double maxErrorToFixFrom, bool rescaleAfterSmoothing, int fixFromSample, int fixEveryNSample, int savitzkyGolayPolyOrder, int savitzkyGolayFilterLength, int constantPhaseAdjustment, bool useDerivativeFix, double epsilonFactor)
     : base(algorithmType, digitizerParams, experimentData, signalToFix, fixType, iterationToRun, maxErrorToFixFrom, rescaleAfterSmoothing, fixFromSample, fixEveryNSample, savitzkyGolayPolyOrder, savitzkyGolayFilterLength, constantPhaseAdjustment, useDerivativeFix, epsilonFactor)
 {
     PFactor = pFactor; IFactor = iFactor; DFactor = dFactor;
 }