示例#1
0
 public CalGains this[decimal f]
 {
     get
     {
         if (cf.Count == 0)
         {
             return(null);
         }
         CalGains gains = null;
         cf.TryGetValue(f, out gains);
         return(gains);
     }
 }
示例#2
0
        private CalEntry GetValue(decimal f, int g)
        {
            // try to get a CalEntry for given f and g
            //
            // TO BE DONE:
            //
            // bilinear interpolation of values!
            //
            // until now a value is found when f and g are matching exactly
            CalGains gains = null;
            CalEntry e     = null;

            if (!cf.TryGetValue(f, out gains))
            {
                return(null);
            }
            if (!gains.TryGetValue(g, out e))
            {
                return(null);
            }
            return(e);
        }
示例#3
0
        private void SetValue(decimal f, int g, CalEntry value)
        {
            // try to set a CalEntry for given f and g
            //
            // TO BE DONE:
            //
            // handle different values for ENR!
            // until now it is assumed that all entries of given f and g are made with the same ENR value
            //
            CalGains gains = null;
            CalEntry e     = null;

            // try to find a CalGains entry for a given f
            if (cf.TryGetValue(f, out gains))
            {
                // CalGains entry found
                // try to find a CalEntry for given g
                if (gains.TryGetValue(g, out e))
                {
                    // CalEntry found
                    // add values to existing
                    e.P_OFF.AddSample(value.P_OFF.Average);
                    e.P_ON.AddSample(value.P_ON.Average);
                    // try to calculate rest of values
                    try
                    {
                        e.Y = e.P_ON.Average / e.P_OFF.Average;
                        e.F = value.ENR / (e.Y - 1);
                    }
                    catch
                    {
                        e.Y = 1;
                        e.F = 1;
                    }
                }
                else
                {
                    // CalEntry not found --> generate and add new one
                    e           = new CalEntry(Averaging);
                    e.Invalid   = value.Invalid;
                    e.Frequency = value.Frequency;
                    e.TunerGain = value.TunerGain;
                    e.P_OFF.AddSample(value.P_OFF.Average);
                    e.P_ON.AddSample(value.P_ON.Average);
                    e.ENR = value.ENR;
                    // try to calculate rest of values
                    try
                    {
                        e.Y = e.P_ON.Average / e.P_OFF.Average;
                        e.F = value.ENR / (e.Y - 1);
                    }
                    catch
                    {
                        e.Y = 1;
                        e.F = 1;
                    }
                    gains.Add(g, e);
                    // maintain properties
                    if (e.Frequency < _minfrequency)
                    {
                        _minfrequency = e.Frequency;
                    }
                    if (e.Frequency > _maxfrequency)
                    {
                        _maxfrequency = e.Frequency;
                    }
                    if (e.TunerGain < _mingain)
                    {
                        _mingain = e.TunerGain;
                    }
                    if (e.TunerGain > _maxgain)
                    {
                        _maxgain = e.TunerGain;
                    }
                }
            }
            else
            {
                // CalGains entry not found --> generate new one from scratch
                gains = new CalGains();
                // add CallEntry first
                // CalEntry not found --> add new one
                e           = new CalEntry(Averaging);
                e.Invalid   = value.Invalid;
                e.Frequency = value.Frequency;
                e.TunerGain = value.TunerGain;
                e.P_OFF.AddSample(value.P_OFF.Average);
                e.P_ON.AddSample(value.P_ON.Average);
                e.ENR = value.ENR;
                // try to calculate rest of values
                try
                {
                    e.Y = e.P_ON.Average / e.P_OFF.Average;
                    e.F = e.ENR / (e.Y - 1);
                }
                catch
                {
                    e.Y = 1;
                    e.F = 1;
                }
                gains.Add(g, e);
                // maintain properties
                if (e.Frequency < _minfrequency)
                {
                    _minfrequency = e.Frequency;
                }
                if (e.Frequency > _maxfrequency)
                {
                    _maxfrequency = e.Frequency;
                }
                if (e.TunerGain < _mingain)
                {
                    _mingain = e.TunerGain;
                }
                if (e.TunerGain > _maxgain)
                {
                    _maxgain = e.TunerGain;
                }
                // add CalGains to list
                cf.Add(f, gains);
            }
        }