1次遅れと2次遅れ,ノッチフィルターを実装

Fork of Filter by Yuki Ueno

Filter.cpp

Committer:
uenono
Date:
2018-01-11
Revision:
1:637f9a61b133
Parent:
0:17706252d1ed
Child:
2:a842c1a33e4f

File content as of revision 1:637f9a61b133:

#include "Filter.h"

Filter::Filter(double xint_time)
{
    int_time = xint_time;
}

void Filter::setLowPassPara(double T)
{
    T_LPF = T;
}

double Filter::LowPassFilter(double input)
{
    static double preOutput = 0.0;

    double Output = (INT_TIME * input + T_LPF * preOutput)/(T_LPF + INT_TIME);

    preOutput = Output;

    return Output;
}

void Filter::setNotchPara(double Omega)
{
    // 落としたい角周波数[rad/s]をOm_nに入れる
    Om_n = Omega;
    sq_Om = pow(Om_n, 2.0); // Om_nの2乗
    sq_dt = pow(INT_TIME, 2.0); // dtの2乗

}

double Filter::NotchFilter(double input)
{
    static double preOutput[2] = {0.0, 0.0};
    static double preInput[2] = {0.0, 0.0};
    
    double Output = (2*(1 + Om_n * INT_TIME) * preOutput[0]-preOutput[1] + (1 + sq_Om * sq_dt) * input -2 * preInput[0] + preInput[1]) / (1 + 2 * Om_n * INT_TIME + sq_Om * sq_dt);
    
    preInput[1] = preInput[0];
    preInput[0] = input;
    
    preOutput[1] = preOutput[0];
    preOutput[0] = Output;
    
    return Output;
}