示例#1
0
        /// <summary>
        /// 近似系数重构/细节系数重构
        /// </summary>
        /// <param name="type">a:approximate近似;d:detail细节</param>
        /// <param name="model"></param>
        /// <param name="lev"></param>
        /// <returns></returns>
        public static List <double> Wrcoef(string type, WaveDec1ViewModel model, int lev)
        {
            List <double> result = new List <double>(), f1 = null;

            if (model != null)
            {
                if ("a".Equals(type))
                {
                    result = Appcoef(model.AppAndDetail, model.Coefficient, model.Dwt, lev);
                    f1     = model.Dwt.Lo_R;
                }
                else if ("d".Equals(type))
                {
                    result = Detcoef(model.AppAndDetail, model.Coefficient, lev);
                    f1     = model.Dwt.Hi_R;
                }

                int rmax = model.Coefficient.Count, namx = rmax - 2;
                int imin = rmax - lev;
                result = Upsconv1(result, f1, model.Coefficient[imin]);
                for (int i = 2; i <= lev; i++)
                {
                    result = Upsconv1(result, model.Dwt.Lo_R, model.Coefficient[imin + i - 1]);
                }
            }

            return(result);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orginal">输入源信号</param>
        /// <param name="lev">分解层级</param>
        /// <param name="wname">haar、db1~db10</param>
        /// <returns>各层近似系数+细节系数,各层系数</returns>
        public static WaveDec1ViewModel WaveDec1(List <double> orginal, int lev = 1, string wname = "haar")
        {
            WaveDec1ViewModel result = new WaveDec1ViewModel();

            try
            {
                DWT           dwt = new DWT(orginal, wname);//获取到相关的分解系数
                List <double> co  = new List <double>();
                int[]         li  = new int[lev + 2];
                li[li.Length - 1] = orginal.Count;
                for (int i = 0; i < lev; i++)
                {
                    List <List <double> > data = DWTUtil.DWT1(orginal, dwt);
                    if (data != null && data.Count == 2)
                    {
                        orginal = data[0];
                        List <double> re = data[1];
                        if (re != null)
                        {
                            co          = re.Concat(co).ToList();
                            li[lev - i] = re.Count;
                        }
                    }
                }

                co    = orginal.Concat(co).ToList();
                li[0] = orginal.Count;
                result.AppAndDetail = co;
                result.Coefficient  = li.ToList();
                result.Dwt          = dwt;
            }
            catch (Exception ex)
            {
            }
            return(result);
        }