Exemplo n.º 1
0
        /****************************************************************************
        *  TrimFFT
        *  Trim FFT array prior to Lorentzian fitting based on user specifications
        ****************************************************************************/
        public FFTData TrimFFT(FFTData fftData, LorentzSettings lorentzSettings)
        {
            FFTData fftTrimData = new FFTData();

            int startIndex = Array.FindIndex(fftData.freq, x => x >= lorentzSettings.trimStartFreq);
            int stopIndex  = Array.FindIndex(fftData.freq, x => x >= lorentzSettings.trimStopFreq);

            fftTrimData.fft  = fftData.fft.ToList().Skip(startIndex + 1).Take(stopIndex - startIndex).ToArray();
            fftTrimData.freq = fftData.freq.ToList().ToList().Skip(startIndex + 1).Take(stopIndex - startIndex).ToArray();

            return(fftTrimData);
        }
Exemplo n.º 2
0
        // LORENTZIAN FITTING //

        /****************************************************************************
        *  GetLorentzParams
        *  Get lorentzian fitting parameters
        ****************************************************************************/
        public void GetLorentzParams(FFTData fftData, LorentzSettings lorentzSettings, ref LorentzParams lorentzParams)
        {
            double[][] dataPoints = new double[][] { fftData.freq, fftData.fft };


            LMA algorithm;

            if (lorentzSettings.isYShiftLorentz)
            {
                LMAFunction lorentzShift = new LorenzianFunctionShift();

                double[] startPoint = new double[4];

                try
                {
                    startPoint[0] = lorentzSettings.startPointLP.A;
                }
                catch (Exception)
                {
                    startPoint[0] = 10;
                }

                try
                {
                    startPoint[1] = lorentzSettings.startPointLP.f0;
                }
                catch (Exception)
                {
                    startPoint[1] = 25;
                }

                try
                {
                    startPoint[2] = lorentzSettings.startPointLP.gamma;
                }
                catch (Exception)
                {
                    startPoint[2] = 1;
                }

                try
                {
                    startPoint[3] = lorentzSettings.startPointLP.up;
                }
                catch (Exception)
                {
                    startPoint[3] = 1;
                }



                algorithm = new LMA(lorentzShift, startPoint,
                                    dataPoints, null, new GeneralMatrix(4, 4), 1d - 20, lorentzSettings.nIter);

                algorithm.Fit();

                lorentzParams.A     = algorithm.Parameters[0];
                lorentzParams.gamma = algorithm.Parameters[2];
                lorentzParams.f0    = algorithm.Parameters[1];
                lorentzParams.up    = algorithm.Parameters[3];
            }
            else
            {
                LMAFunction lorentz = new LorenzianFunction();

                double[] startPoint = new double[3];

                try
                {
                    startPoint[0] = lorentzSettings.startPointLP.A;
                }
                catch (Exception)
                {
                    startPoint[0] = 10;
                }

                try
                {
                    startPoint[1] = lorentzSettings.startPointLP.f0;
                }
                catch (Exception)
                {
                    startPoint[1] = 25;
                }

                try
                {
                    startPoint[2] = lorentzSettings.startPointLP.gamma;
                }
                catch (Exception)
                {
                    startPoint[2] = 1;
                }

                algorithm = new LMA(lorentz, startPoint,
                                    dataPoints, null, new GeneralMatrix(3, 3), 1d - 20, lorentzSettings.nIter);

                algorithm.Fit();

                lorentzParams.A     = algorithm.Parameters[0];
                lorentzParams.gamma = algorithm.Parameters[2];
                lorentzParams.f0    = algorithm.Parameters[1];
                lorentzParams.up    = 0;
            }
        }