コード例 #1
0
        // Generates the average (and variance) of the list of sound features, ASSUMING
        // that all sound features use the same time values
        public static SoundFeature GenerateAverage(List <SoundFeature> soundFeatureList)
        {
            SoundFeature averageSoundFeature = new SoundFeature();

            if (soundFeatureList.Count > 0)
            {
                averageSoundFeature.Name = soundFeatureList[0].Name;
                int size = soundFeatureList[0].TimeList.Count;
                averageSoundFeature.SetSize(size);
                for (int jj = 0; jj < size; jj++)
                {
                    averageSoundFeature.TimeList[jj] = soundFeatureList[0].TimeList[jj];
                }
                for (int jj = 0; jj < size; jj++)
                {
                    List <double> featureValueList = new List <double>();
                    for (int ii = 0; ii < soundFeatureList.Count; ii++)
                    {
                        featureValueList.Add(soundFeatureList[ii].ValueList[jj]);
                    }
                    double average  = featureValueList.Average();
                    double variance = Variance.Compute(featureValueList);
                    averageSoundFeature.ValueList[jj]    = average;
                    averageSoundFeature.VarianceList[jj] = variance;
                }
            }
            return(averageSoundFeature);
        }
コード例 #2
0
        // Generates the average sound feature set from a list of sound feature sets (one for
        // each instance of a sound). It is assumed that all sound feature sets contain the
        // same features, in the same order.
        public static SoundFeatureSet GenerateAverage(List <SoundFeatureSet> soundFeatureSetList)
        {
            SoundFeatureSet averageSoundFeatureSet = new SoundFeatureSet();
            int             numberOfFeatures       = soundFeatureSetList[0].FeatureList.Count;

            for (int iFeature = 0; iFeature < numberOfFeatures; iFeature++)
            {
                List <SoundFeature> soundFeatureList = new List <SoundFeature>();
                for (int iInstance = 0; iInstance < soundFeatureSetList.Count; iInstance++)
                {
                    soundFeatureList.Add(soundFeatureSetList[iInstance].FeatureList[iFeature]);
                }
                SoundFeature averageFeature = SoundFeature.GenerateAverage(soundFeatureList);
                averageFeature.NumberOfInstances = soundFeatureSetList.Count; // Number of instances used when forming the average.
                averageSoundFeatureSet.FeatureList.Add(averageFeature);
            }
            return(averageSoundFeatureSet);
        }
コード例 #3
0
 public static double GetDeviation(SoundFeatureSet soundFeatureSet1, SoundFeatureSet soundFeatureSet2, List <double> weightList)
 {
     if (soundFeatureSet1.FeatureList.Count != soundFeatureSet2.FeatureList.Count)
     {
         return(double.MaxValue);
     }
     else
     {
         double deviation = 0;
         int    numberOfNonZeroWeights = 0;
         for (int iFeature = 0; iFeature < soundFeatureSet1.FeatureList.Count; iFeature++)
         {
             double weight = weightList[iFeature];
             if (weight > double.Epsilon)
             {
                 numberOfNonZeroWeights++;
                 double       featureDeviation = 0;
                 SoundFeature feature1         = soundFeatureSet1.FeatureList[iFeature];
                 SoundFeature feature2         = soundFeatureSet2.FeatureList[iFeature];
                 if (feature1.TimeList.Count != feature2.TimeList.Count)
                 {
                     return(double.MaxValue);
                 }
                 else
                 {
                     for (int jj = 0; jj < feature1.TimeList.Count; jj++)
                     {
                         featureDeviation += (feature1.ValueList[jj] - feature2.ValueList[jj]) *
                                             (feature1.ValueList[jj] - feature2.ValueList[jj]);
                     }
                 }
                 deviation += weight * Math.Sqrt(featureDeviation / (double)feature1.ValueList.Count);
             }
         }
         deviation /= (double)soundFeatureSet1.FeatureList.Count;
         deviation /= (double)numberOfNonZeroWeights;
         return(deviation);
     }
 }