11 changed files with 1988 additions and 689 deletions
-
5CMakeLists.txt
-
6CMakeLists.txt.user
-
2ify_hrs_protocol
-
8libzqt/logger.cpp
-
96mainwindow.cpp
-
6mainwindow.h
-
1069mainwindow.ui
-
134src/algo/iflytop_simple_filter.cpp
-
72src/algo/iflytop_simple_filter.h
-
163src/filter_algo_mgr.cpp
-
156src/filter_algo_mgr.hpp
@ -1 +1 @@ |
|||||
Subproject commit 4ed480c0ba1b2326d4465f8139ee97673f35ffa8 |
|
||||
|
Subproject commit 391a9551d21fd8b591e1eb4a5c8555ec2d59ff3c |
1069
mainwindow.ui
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,134 @@ |
|||||
|
|
||||
|
#include "iflytop_simple_filter.h"
|
||||
|
|
||||
|
#include <math.h>
|
||||
|
#include <stdint.h>
|
||||
|
#include <stdlib.h>
|
||||
|
#include <stdio.h>
|
||||
|
|
||||
|
#include "logger.hpp"
|
||||
|
|
||||
|
#define PI 3.141592653
|
||||
|
|
||||
|
/********************************************************************************************************
|
||||
|
* LOW PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
|
||||
|
void LPFilter_Init(LPFilter_t *filter, float cutoffFreqHz, float sampleTimeS, bool enable) { |
||||
|
float RC = 0.0; |
||||
|
RC = 1.0 / (2 * PI * cutoffFreqHz); |
||||
|
filter->coef[0] = sampleTimeS / (sampleTimeS + RC); |
||||
|
filter->coef[1] = RC / (sampleTimeS + RC); |
||||
|
|
||||
|
filter->v_out[0] = 0.0; |
||||
|
filter->v_out[1] = 0.0; |
||||
|
|
||||
|
filter->enable = enable; |
||||
|
|
||||
|
ZLOGI("FILTER","LPFilter_Init: cutoffFreqHz=%f, sampleTimeS=%f, enable=%d", cutoffFreqHz, sampleTimeS, enable); |
||||
|
} |
||||
|
|
||||
|
float LPFilter_Update(LPFilter_t *filter, float v_in) { |
||||
|
if (filter->enable == false) return v_in; |
||||
|
|
||||
|
filter->v_out[1] = filter->v_out[0]; |
||||
|
filter->v_out[0] = (filter->coef[0] * v_in) + (filter->coef[1] * filter->v_out[1]); |
||||
|
|
||||
|
return (filter->v_out[0]); |
||||
|
} |
||||
|
|
||||
|
/********************************************************************************************************
|
||||
|
* HIGH PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
void HPFilter_Init(HPFilter_t *filter, float cutoffFreqHz, float sampleTimeS, bool enable) { |
||||
|
float RC = 0.0; |
||||
|
RC = 1.0 / (2 * PI * cutoffFreqHz); |
||||
|
|
||||
|
filter->coef = RC / (sampleTimeS + RC); |
||||
|
|
||||
|
filter->v_in[0] = 0.0; |
||||
|
filter->v_in[1] = 0.0; |
||||
|
|
||||
|
filter->v_out[0] = 0.0; |
||||
|
filter->v_out[1] = 0.0; |
||||
|
|
||||
|
filter->enable = enable; |
||||
|
} |
||||
|
|
||||
|
float HPFilter_Update(HPFilter_t *filter, float v_in) { |
||||
|
if (filter->enable == false) return v_in; |
||||
|
|
||||
|
filter->v_in[1] = filter->v_in[0]; |
||||
|
filter->v_in[0] = v_in; |
||||
|
|
||||
|
filter->v_out[1] = filter->v_out[0]; |
||||
|
|
||||
|
filter->v_out[0] = filter->coef * (filter->v_in[0] - filter->v_in[1] + filter->v_out[1]); |
||||
|
|
||||
|
return (filter->v_out[0]); |
||||
|
} |
||||
|
|
||||
|
/********************************************************************************************************
|
||||
|
* BAND PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
|
||||
|
void PBFilter_Init(PBFilter_t *filter, float HPF_cutoffFreqHz, float LPF_cutoffFreqHz, float sampleTimeS, bool enable) { |
||||
|
LPFilter_Init(&filter->lpf, LPF_cutoffFreqHz, sampleTimeS, enable); |
||||
|
HPFilter_Init(&filter->hpf, HPF_cutoffFreqHz, sampleTimeS, enable); |
||||
|
filter->out_in = 0.0; |
||||
|
filter->enable = enable; |
||||
|
} |
||||
|
|
||||
|
float PBFilter_Update(PBFilter_t *filter, float v_in) { |
||||
|
if (filter->enable == false) return v_in; |
||||
|
|
||||
|
filter->out_in = HPFilter_Update(&filter->hpf, v_in); |
||||
|
|
||||
|
filter->out_in = LPFilter_Update(&filter->lpf, filter->out_in); |
||||
|
|
||||
|
return (filter->out_in); |
||||
|
} |
||||
|
|
||||
|
/********************************************************************************************************
|
||||
|
* NOTCH FILTER |
||||
|
********************************************************************************************************/ |
||||
|
|
||||
|
void NOTCHFilter_Init(NOTCHFilter_t *filter, float centerFreqHz, float notchWidthHz, float sampleTimeS, bool enable) { |
||||
|
// filter frequency to angular (rad/s)
|
||||
|
float w0_rps = 2.0 * PI * centerFreqHz; |
||||
|
float ww_rps = 2.0 * PI * notchWidthHz; |
||||
|
|
||||
|
// pre warp center frequency
|
||||
|
float w0_pw_rps = (2.0 / sampleTimeS) * tanf(0.5 * w0_rps * sampleTimeS); |
||||
|
|
||||
|
// computing filter coefficients
|
||||
|
|
||||
|
filter->alpha = 4.0 + w0_rps * w0_pw_rps * sampleTimeS * sampleTimeS; |
||||
|
filter->beta = 2.0 * ww_rps * sampleTimeS; |
||||
|
|
||||
|
// clearing input and output buffers
|
||||
|
|
||||
|
for (uint8_t n = 0; n < 3; n++) { |
||||
|
filter->vin[n] = 0; |
||||
|
filter->vout[n] = 0; |
||||
|
} |
||||
|
filter->enable = enable; |
||||
|
} |
||||
|
|
||||
|
float NOTCHFilter_Update(NOTCHFilter_t *filter, float vin) { |
||||
|
if (filter->enable == false) return vin; |
||||
|
|
||||
|
// shifting samples
|
||||
|
filter->vin[2] = filter->vin[1]; |
||||
|
filter->vin[1] = filter->vin[0]; |
||||
|
|
||||
|
filter->vout[2] = filter->vout[1]; |
||||
|
filter->vout[1] = filter->vout[0]; |
||||
|
|
||||
|
filter->vin[0] = vin; |
||||
|
|
||||
|
// compute new output
|
||||
|
filter->vout[0] = (filter->alpha * filter->vin[0] + 2.0 * (filter->alpha - 8.0) * filter->vin[1] + filter->alpha * filter->vin[2] - (2.0f * (filter->alpha - 8.0) * filter->vout[1] + (filter->alpha - filter->beta) * filter->vout[2])) / (filter->alpha + filter->beta); |
||||
|
|
||||
|
return (filter->vout[0]); |
||||
|
} |
@ -0,0 +1,72 @@ |
|||||
|
#ifndef FILTERS_H |
||||
|
#define FILTERS_H |
||||
|
#include <stdbool.h> |
||||
|
|
||||
|
// #ifdef __cplusplus |
||||
|
// extern "C" { |
||||
|
// #endif |
||||
|
|
||||
|
|
||||
|
/******************************************************************************************************** |
||||
|
* LOW PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
typedef struct { |
||||
|
float coef[2]; |
||||
|
float v_out[2]; |
||||
|
bool enable; |
||||
|
} LPFilter_t; |
||||
|
|
||||
|
void LPFilter_Init(LPFilter_t *filter, float cutoffFreqHz, float sampleTimeS, bool enable); |
||||
|
float LPFilter_Update(LPFilter_t *filter, float v_in); |
||||
|
|
||||
|
/******************************************************************************************************** |
||||
|
* HIGH PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
typedef struct { |
||||
|
float coef; |
||||
|
float v_out[2]; |
||||
|
float v_in[2]; |
||||
|
bool enable; |
||||
|
|
||||
|
} HPFilter_t; |
||||
|
|
||||
|
void HPFilter_Init(HPFilter_t *filter, float cutoffFreqHz, float sampleTimeS, bool enable); |
||||
|
float HPFilter_Update(HPFilter_t *filter, float v_in); |
||||
|
|
||||
|
/******************************************************************************************************** |
||||
|
* BAND PASS FILTER |
||||
|
********************************************************************************************************/ |
||||
|
|
||||
|
typedef struct { |
||||
|
LPFilter_t lpf; |
||||
|
HPFilter_t hpf; |
||||
|
float out_in; |
||||
|
bool enable; |
||||
|
|
||||
|
} PBFilter_t; |
||||
|
|
||||
|
void PBFilter_Init(PBFilter_t *filter, float HPF_cutoffFreqHz, float LPF_cutoffFreqHz, float sampleTimeS, bool enable); |
||||
|
float PBFilter_Update(PBFilter_t *filter, float v_in); |
||||
|
|
||||
|
/******************************************************************************************************** |
||||
|
* NOTCH FILTER |
||||
|
********************************************************************************************************/ |
||||
|
|
||||
|
typedef struct { |
||||
|
float alpha; |
||||
|
float beta; |
||||
|
|
||||
|
float vin[3]; |
||||
|
float vout[3]; |
||||
|
bool enable; |
||||
|
|
||||
|
} NOTCHFilter_t; |
||||
|
|
||||
|
void NOTCHFilter_Init(NOTCHFilter_t *filter, float centerFreqHz, float notchWidthHz, float sampleTimeS, bool enable); |
||||
|
float NOTCHFilter_Update(NOTCHFilter_t *filter, float vin); |
||||
|
|
||||
|
// #ifdef __cplusplus |
||||
|
// } |
||||
|
// #endif |
||||
|
|
||||
|
#endif |
@ -0,0 +1,163 @@ |
|||||
|
#include "filter_algo_mgr.hpp"
|
||||
|
|
||||
|
#include <mutex>
|
||||
|
|
||||
|
#include "ify_hrs_protocol/heart_rate_sensor_protocol.h"
|
||||
|
#include "zexception.hpp"
|
||||
|
|
||||
|
using namespace iflytop; |
||||
|
|
||||
|
void FilterGroup::initialize() {} |
||||
|
|
||||
|
int32_t FilterGroup::processData(int32_t data) { //
|
||||
|
std::lock_guard<std::recursive_mutex> lock(lock_); |
||||
|
|
||||
|
float v0 = (float)data; |
||||
|
for (int i = 0; i < _lpfilter_order; i++) { |
||||
|
v0 = LPFilter_Update(&lpfilter[i], v0); |
||||
|
} |
||||
|
|
||||
|
for (int i = 0; i < _hpfilter_order; i++) { |
||||
|
v0 = HPFilter_Update(&hpfilter[i], v0); |
||||
|
} |
||||
|
|
||||
|
for (int i = 0; i < _notchfilter_order; i++) { |
||||
|
v0 = NOTCHFilter_Update(¬chfilter[i], v0); |
||||
|
} |
||||
|
|
||||
|
return (int32_t)v0; |
||||
|
} |
||||
|
|
||||
|
void FilterGroup::updateParameter() { |
||||
|
std::lock_guard<std::recursive_mutex> lock(lock_); |
||||
|
|
||||
|
for (int i = 0; i < FILTER_MAX_ORDER; i++) { |
||||
|
LPFilter_Init(&lpfilter[i], LPFilter_cutoffFreqHz, sampleTimeMs / 1000.0, lpfilter_enable); |
||||
|
} |
||||
|
for (int i = 0; i < FILTER_MAX_ORDER; i++) { |
||||
|
HPFilter_Init(&hpfilter[i], HPFilter_cutoffFreqHz, sampleTimeMs / 1000.0, hpfilter_enable); |
||||
|
} |
||||
|
for (int i = 0; i < FILTER_MAX_ORDER; i++) { |
||||
|
NOTCHFilter_Init(¬chfilter[i], NOTCHFilter_centerFreqHz, NOTCHFilter_notchWidthHz, sampleTimeMs / 1000.0, notchfilter_enable); |
||||
|
} |
||||
|
|
||||
|
_lpfilter_order = lpfilter_order; |
||||
|
_hpfilter_order = hpfilter_order; |
||||
|
_notchfilter_order = notchfilter_order; |
||||
|
} |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 通用参数 * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
void FilterGroup::setSampleTimeMs(float sampleTimeMs) { |
||||
|
if (sampleTimeMs < 0.4) { |
||||
|
throw zexception(kifyhrs_ecode_upper_exception, "sampleTimeMs must be greater than 0.4ms"); |
||||
|
} |
||||
|
this->sampleTimeMs = sampleTimeMs; |
||||
|
} |
||||
|
float FilterGroup::getSampleTimeMs() { return sampleTimeMs; } |
||||
|
|
||||
|
void FilterGroup::LPFilter_setOrder(int order) { |
||||
|
if (order < 1) { |
||||
|
order = 1; |
||||
|
} |
||||
|
if (order > FILTER_MAX_ORDER) { |
||||
|
order = FILTER_MAX_ORDER; |
||||
|
} |
||||
|
lpfilter_order = order; |
||||
|
} |
||||
|
int FilterGroup::LPFilter_getOrder() { return lpfilter_order; } |
||||
|
void FilterGroup::HPFilter_setOrder(int order) { |
||||
|
if (order < 1) { |
||||
|
order = 1; |
||||
|
} |
||||
|
if (order > FILTER_MAX_ORDER) { |
||||
|
order = FILTER_MAX_ORDER; |
||||
|
} |
||||
|
hpfilter_order = order; |
||||
|
} |
||||
|
int FilterGroup::HPFilter_getOrder() { return hpfilter_order; } |
||||
|
void FilterGroup::NOTCHFilter_setOrder(int order) { |
||||
|
if (order < 1) { |
||||
|
order = 1; |
||||
|
} |
||||
|
if (order > FILTER_MAX_ORDER) { |
||||
|
order = FILTER_MAX_ORDER; |
||||
|
} |
||||
|
notchfilter_order = order; |
||||
|
} |
||||
|
int FilterGroup::NOTCHFilter_getOrder() { return notchfilter_order; } |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 低通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
void FilterGroup::LPFilter_setEnable(bool enable) { lpfilter_enable = enable; } |
||||
|
void FilterGroup::LPFilter_setCutoffFreqHz(float cutoffFreqHz) { LPFilter_cutoffFreqHz = cutoffFreqHz; } |
||||
|
|
||||
|
bool FilterGroup::LPFilter_getEnable() { return lpfilter_enable; } |
||||
|
float FilterGroup::LPFilter_getCutoffFreqHz() { return LPFilter_cutoffFreqHz; } |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 高通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void FilterGroup::HPFilter_setEnable(bool enable) { hpfilter_enable = enable; } |
||||
|
void FilterGroup::HPFilter_setCutoffFreqHz(float cutoffFreqHz) { HPFilter_cutoffFreqHz = cutoffFreqHz; } |
||||
|
|
||||
|
bool FilterGroup::HPFilter_getEnable() { return hpfilter_enable; } |
||||
|
float FilterGroup::HPFilter_getCutoffFreqHz() { return HPFilter_cutoffFreqHz; } |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 带阻滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void FilterGroup::NOTCHFilter_setEnable(bool enable) { notchfilter_enable = enable; } |
||||
|
void FilterGroup::NOTCHFilter_setCenterFreqHz(float centerFreqHz) { NOTCHFilter_centerFreqHz = centerFreqHz; } |
||||
|
void FilterGroup::NOTCHFilter_setNotchWidthHz(float notchWidthHz) { NOTCHFilter_notchWidthHz = notchWidthHz; } |
||||
|
|
||||
|
bool FilterGroup::NOTCHFilter_getEnable() { return notchfilter_enable; } |
||||
|
float FilterGroup::NOTCHFilter_getCenterFreqHz() { return NOTCHFilter_centerFreqHz; } |
||||
|
float FilterGroup::NOTCHFilter_getNotchWidthHz() { return NOTCHFilter_notchWidthHz; } |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* FilterAlgoMgr * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
FilterAlgoMgr* FilterAlgoMgr::ins() { |
||||
|
static FilterAlgoMgr ins; |
||||
|
return &ins; |
||||
|
} |
||||
|
|
||||
|
int32_t FilterAlgoMgr::processData(string channel, int32_t data) { return filter.processData(data); } |
||||
|
|
||||
|
void FilterAlgoMgr::LPFilter_setEnable(bool enable) { filter.LPFilter_setEnable(enable); } |
||||
|
void FilterAlgoMgr::LPFilter_setCutoffFreqHz(float cutoffFreqHz) { filter.LPFilter_setCutoffFreqHz(cutoffFreqHz); } |
||||
|
|
||||
|
bool FilterAlgoMgr::LPFilter_getEnable() { return filter.LPFilter_getEnable(); } |
||||
|
float FilterAlgoMgr::LPFilter_getCutoffFreqHz() { return filter.LPFilter_getCutoffFreqHz(); } |
||||
|
|
||||
|
void FilterAlgoMgr::HPFilter_setEnable(bool enable) { filter.HPFilter_setEnable(enable); } |
||||
|
void FilterAlgoMgr::HPFilter_setCutoffFreqHz(float cutoffFreqHz) { filter.HPFilter_setCutoffFreqHz(cutoffFreqHz); } |
||||
|
|
||||
|
bool FilterAlgoMgr::HPFilter_getEnable() { return filter.HPFilter_getEnable(); } |
||||
|
float FilterAlgoMgr::HPFilter_getCutoffFreqHz() { return filter.HPFilter_getCutoffFreqHz(); } |
||||
|
|
||||
|
void FilterAlgoMgr::NOTCHFilter_setEnable(bool enable) { filter.NOTCHFilter_setEnable(enable); } |
||||
|
void FilterAlgoMgr::NOTCHFilter_setCenterFreqHz(float centerFreqHz) { filter.NOTCHFilter_setCenterFreqHz(centerFreqHz); } |
||||
|
void FilterAlgoMgr::NOTCHFilter_setNotchWidthHz(float notchWidthHz) { filter.NOTCHFilter_setNotchWidthHz(notchWidthHz); } |
||||
|
|
||||
|
bool FilterAlgoMgr::NOTCHFilter_getEnable() { return filter.NOTCHFilter_getEnable(); } |
||||
|
float FilterAlgoMgr::NOTCHFilter_getCenterFreqHz() { return filter.NOTCHFilter_getCenterFreqHz(); } |
||||
|
float FilterAlgoMgr::NOTCHFilter_getNotchWidthHz() { return filter.NOTCHFilter_getNotchWidthHz(); } |
||||
|
|
||||
|
void FilterAlgoMgr::FilterCommon_setSampleTimeMs(float sampleTimeMs) { filter.setSampleTimeMs(sampleTimeMs); } |
||||
|
float FilterAlgoMgr::FilterCommon_getSampleTimeMs() { return filter.getSampleTimeMs(); } |
||||
|
|
||||
|
void FilterAlgoMgr::LPFilter_setOrder(int order) { filter.LPFilter_setOrder(order); } |
||||
|
int FilterAlgoMgr::LPFilter_getOrder() { return filter.LPFilter_getOrder(); } |
||||
|
void FilterAlgoMgr::HPFilter_setOrder(int order) { filter.HPFilter_setOrder(order); } |
||||
|
int FilterAlgoMgr::HPFilter_getOrder() { return filter.HPFilter_getOrder(); } |
||||
|
void FilterAlgoMgr::NOTCHFilter_setOrder(int order) { filter.NOTCHFilter_setOrder(order); } |
||||
|
int FilterAlgoMgr::NOTCHFilter_getOrder() { return filter.NOTCHFilter_getOrder(); } |
||||
|
|
||||
|
void FilterAlgoMgr::updateParameter() { filter.updateParameter(); } |
@ -0,0 +1,156 @@ |
|||||
|
#pragma once
|
||||
|
#include <fstream>
|
||||
|
#include <functional>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <mutex>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <thread>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
#include "algo/iflytop_simple_filter.h"
|
||||
|
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
#define FILTER_MAX_ORDER 10
|
||||
|
|
||||
|
class FilterGroup { |
||||
|
private: |
||||
|
LPFilter_t lpfilter[10] = {0}; |
||||
|
HPFilter_t hpfilter[10] = {0}; |
||||
|
NOTCHFilter_t notchfilter[10] = {0}; |
||||
|
|
||||
|
int _lpfilter_order = 1; |
||||
|
int _hpfilter_order = 1; |
||||
|
int _notchfilter_order = 1; |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 缓存参数 * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
bool lpfilter_enable = false; |
||||
|
bool hpfilter_enable = false; |
||||
|
bool notchfilter_enable = false; |
||||
|
|
||||
|
int lpfilter_order = 1; |
||||
|
int hpfilter_order = 1; |
||||
|
int notchfilter_order = 1; |
||||
|
|
||||
|
float LPFilter_cutoffFreqHz = 0; |
||||
|
float HPFilter_cutoffFreqHz = 0; |
||||
|
float NOTCHFilter_centerFreqHz = 0; |
||||
|
float NOTCHFilter_notchWidthHz = 0; |
||||
|
|
||||
|
float sampleTimeMs = 2; // 1ms
|
||||
|
|
||||
|
std::recursive_mutex lock_; |
||||
|
|
||||
|
public: |
||||
|
void initialize(); |
||||
|
|
||||
|
int32_t processData(int32_t data); |
||||
|
|
||||
|
void updateParameter(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 通用参数 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void setSampleTimeMs(float sampleTimeMs); |
||||
|
float getSampleTimeMs(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 低通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
void LPFilter_setEnable(bool enable); |
||||
|
void LPFilter_setCutoffFreqHz(float cutoffFreqHz); |
||||
|
void LPFilter_setOrder(int order); |
||||
|
|
||||
|
bool LPFilter_getEnable(); |
||||
|
float LPFilter_getCutoffFreqHz(); |
||||
|
int LPFilter_getOrder(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 高通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void HPFilter_setEnable(bool enable); |
||||
|
void HPFilter_setCutoffFreqHz(float cutoffFreqHz); |
||||
|
void HPFilter_setOrder(int order); |
||||
|
|
||||
|
bool HPFilter_getEnable(); |
||||
|
float HPFilter_getCutoffFreqHz(); |
||||
|
int HPFilter_getOrder(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 带阻滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void NOTCHFilter_setEnable(bool enable); |
||||
|
void NOTCHFilter_setCenterFreqHz(float centerFreqHz); |
||||
|
void NOTCHFilter_setNotchWidthHz(float notchWidthHz); |
||||
|
void NOTCHFilter_setOrder(int order); |
||||
|
|
||||
|
bool NOTCHFilter_getEnable(); |
||||
|
float NOTCHFilter_getCenterFreqHz(); |
||||
|
float NOTCHFilter_getNotchWidthHz(); |
||||
|
int NOTCHFilter_getOrder(); |
||||
|
}; |
||||
|
|
||||
|
class FilterAlgoMgr { |
||||
|
private: |
||||
|
FilterGroup filter; |
||||
|
|
||||
|
public: |
||||
|
FilterAlgoMgr(/* args */) {} |
||||
|
~FilterAlgoMgr() {} |
||||
|
|
||||
|
static FilterAlgoMgr* ins(); |
||||
|
|
||||
|
int32_t processData(string channel, int32_t data); |
||||
|
|
||||
|
void updateParameter(); |
||||
|
|
||||
|
void FilterCommon_setSampleTimeMs(float sampleTimeMs); |
||||
|
float FilterCommon_getSampleTimeMs(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 低通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
|
||||
|
void LPFilter_setEnable(bool enable); |
||||
|
void LPFilter_setCutoffFreqHz(float cutoffFreqHz); |
||||
|
void LPFilter_setOrder(int order); |
||||
|
|
||||
|
bool LPFilter_getEnable(); |
||||
|
float LPFilter_getCutoffFreqHz(); |
||||
|
int LPFilter_getOrder(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 高通滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void HPFilter_setEnable(bool enable); |
||||
|
void HPFilter_setCutoffFreqHz(float cutoffFreqHz); |
||||
|
void HPFilter_setOrder(int order); |
||||
|
|
||||
|
bool HPFilter_getEnable(); |
||||
|
float HPFilter_getCutoffFreqHz(); |
||||
|
int HPFilter_getOrder(); |
||||
|
|
||||
|
/***********************************************************************************************************************
|
||||
|
* 带阻滤波器 * |
||||
|
***********************************************************************************************************************/ |
||||
|
void NOTCHFilter_setEnable(bool enable); |
||||
|
void NOTCHFilter_setCenterFreqHz(float centerFreqHz); |
||||
|
void NOTCHFilter_setNotchWidthHz(float notchWidthHz); |
||||
|
void NOTCHFilter_setOrder(int order); |
||||
|
|
||||
|
bool NOTCHFilter_getEnable(); |
||||
|
float NOTCHFilter_getCenterFreqHz(); |
||||
|
float NOTCHFilter_getNotchWidthHz(); |
||||
|
int NOTCHFilter_getOrder(); |
||||
|
}; |
||||
|
|
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue