| | |
| | | public class DynamicThresholdProcessorHelper |
| | | { |
| | | |
| | | public static List<(int, double, double)> Filter(List<(int, double, double)> ptList) |
| | | { |
| | | var pressures = ptList.Select(p => p.Item3).ToList(); |
| | | |
| | | // 计算统计量 |
| | | var (mean, stdDev) = CalculateStats(pressures); |
| | | double skewness = CalculateSkewness(pressures); |
| | | // 动态调整σ倍数 |
| | | double sigmaMultiplier = CalculateSigmaMultiplier(skewness); |
| | | sigmaMultiplier = 3;//目前默认 标准差 |
| | | |
| | | // 计算边界 |
| | | double lower = mean - sigmaMultiplier * stdDev; |
| | | double upper = mean + sigmaMultiplier * stdDev; |
| | | |
| | | return ptList.Where(p => p.Item3 >= lower && p.Item3 <= upper).ToList(); |
| | | } |
| | | |
| | | |
| | | public static List<PointViewModel> Filter(List<PointViewModel> ptList) |
| | | { |
| | | var pressures = ptList.Select(p => p.Y).ToList(); |
| | | |
| | | // 计算统计量 |
| | | var (mean, stdDev) = CalculateStats(pressures); |
| | | double skewness = CalculateSkewness(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(); |
| | | } |
| | | |
| | | |
| | | public static List<PumpViewModel> Filter(List<PumpViewModel> ptList) |
| | | { |
| | |
| | | } |
| | | |
| | | // 偏度计算(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 |