/// <summary> /// Возращает статистическую модель, содержащую коэффициенты аппроксимации и дисперсии на основе выбранного вейвлета для списка данных. /// </summary> /// <param name="data">Список данных для статистического анализа в виде вектора над полем рациональных чисел.</param> /// <param name="wavelet">Вейвлет, на основе которого вычисляются коэффициенты аппроксимации и дисперсии.</param> /// <returns>Cтатистическая модель для выбранных набора данных и вейвлета.</returns> public static IWaveletTransformationStatisticsModel GenerateStatisticsModel(IList <double> data, IWavelet wavelet) { var waveletStatistics = new WaveletStatistics { Wavelet = wavelet, ApproximationCoefficients = data, DetailingCoefficients = data }; var statisticsModel = new WaveletTransformationStatisticsModel(); statisticsModel.WaveletStatistics.Add(waveletStatistics); while (true) { waveletStatistics = Decompose(waveletStatistics); if (waveletStatistics.ApproximationCoefficients.Count == 0) { break; } statisticsModel.WaveletStatistics.Add(waveletStatistics); } return(statisticsModel); }
/// <summary> /// Возвращает результат разложения посредством вычисления последующих коэффициентов аппроксимации и дисперсии на основе предыдущих. При каждом разложении количество коэффициентов сокращается вдвое. /// </summary> private static WaveletStatistics Decompose(WaveletStatistics waveletStatistics) { var nextLevelApproximationCoefficients = Filter(waveletStatistics.ApproximationCoefficients, waveletStatistics.Wavelet.ScalingCoefficients); var nextLevelDetailingCoefficients = Filter(waveletStatistics.ApproximationCoefficients, waveletStatistics.Wavelet.Coefficients); return(new WaveletStatistics { Wavelet = waveletStatistics.Wavelet, ApproximationCoefficients = nextLevelApproximationCoefficients, DetailingCoefficients = nextLevelDetailingCoefficients }); }