| | |
| | | |
| | | public class DynamicThresholdProcessorHelper |
| | | { |
| | | public static List<PointViewModel> Filter(List<PointViewModel> ptList) |
| | | |
| | | |
| | | |
| | | public static List<PumpViewModel> Filter(List<PumpViewModel> ptList) |
| | | { |
| | | var pressures = ptList.Select(p => p.Y).ToList(); |
| | | var pressures = ptList.Select(p => p.PressureDiff).ToList(); |
| | | |
| | | // 计算统计量 |
| | | var (mean, stdDev) = CalculateStats(pressures); |
| | |
| | | double sigmaMultiplier = CalculateSigmaMultiplier(skewness); |
| | | sigmaMultiplier = 3;//目前默认 标准差 |
| | | |
| | | |
| | | // 计算边界 |
| | | double lower = mean - sigmaMultiplier * stdDev; |
| | | double upper = mean + sigmaMultiplier * stdDev; |
| | | |
| | | return ptList.Where(p => p.Y >= lower && p.Y <= upper).ToList(); |
| | | return ptList.Where(p => p.PressureDiff >= lower && p.PressureDiff <= upper).ToList(); |
| | | } |
| | | |
| | | public static List<Model.StationSignalRecord> Filter(List<Model.StationSignalRecord> ptList) |
| | |
| | | |
| | | |
| | | // 核心统计计算 |
| | | private static (double mean, double stdDev) CalculateStats(List<double> values) |
| | | public static (double mean, double stdDev) CalculateStats(List<double> values) |
| | | { |
| | | double mean = values.Average(); |
| | | double stdDev = Math.Sqrt(values.Sum(v => Math.Pow(v - mean, 2)) / (values.Count - 1)); |
| | |
| | | } |
| | | |
| | | // 偏度计算(Pearson's moment coefficient) |
| | | private static double CalculateSkewness(List<double> values) |
| | | public static double CalculateSkewness(List<double> values) |
| | | { |
| | | double mean = values.Average(); |
| | | double std = CalculateStats(values).stdDev; |
| | |
| | | } |
| | | |
| | | // 动态σ倍数计算规则 |
| | | private static double CalculateSigmaMultiplier(double skewness) |
| | | public static double CalculateSigmaMultiplier(double skewness) |
| | | { |
| | | |
| | | return skewness switch |