/// <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); }
/// <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); }