private readonly double STOP_FLOW_THRESHOLD = 0.01; // 停止检测流量阈值,当启动测试后如果流量对值小于阈值,则开始检测停止条件 public FlowValidator(double sampleRate, double calVolume = 1.0) { SAMPLE_RATE = sampleRate; SAMPLE_TIME = 1000 / sampleRate; m_waveAnalyzer = new WaveAnalyzer(sampleRate, START_SAMPLE_COUNT, START_FLOW_DELTA, STOP_SAMPLE_COUNT, STOP_FLOW_THRESHOLD); CalVolume = calVolume; m_waveAnalyzer.SampleStarted += (uint dataIndex, WaveSampleDirection direction) => { /* 转换为呼吸方向 */ RespireDirection respireDir = ToRespireDirection(direction); SampleStarted?.Invoke(dataIndex, respireDir); }; m_waveAnalyzer.SampleStoped += (uint dataIndex, WaveSampleDirection direction, uint sampleIndex) => { /* 转换为呼吸方向 */ RespireDirection respireDir = ToRespireDirection(direction); SampleStoped?.Invoke(dataIndex, respireDir, sampleIndex); }; }
/* 样本的呼吸方向 */ public RespireDirection SampleFlowDirection(uint sampleIndex) { /* 取得样本方向 */ WaveSampleDirection waveDir = m_waveAnalyzer.SampleDataDirection(sampleIndex); /* 转换为呼吸方向 */ RespireDirection respireDir = ToRespireDirection(waveDir); return(respireDir); }
/* 转换为呼吸方向 */ private static RespireDirection ToRespireDirection(WaveSampleDirection waveDir) { RespireDirection respireDir = RespireDirection.None; switch (waveDir) { case WaveSampleDirection.PositiveSample: // 正方向样本 respireDir = RespireDirection.Inspiration; // 吸气 break; case WaveSampleDirection.NegativeSample: // 负方向样本 respireDir = RespireDirection.Expiration; // 呼气 break; default: break; } return(respireDir); }