aicodix___dsp/filter.hh
2019-01-20 13:23:08 +01:00

57 lines
966 B
C++

/*
Some finite impulse response filter functions
Copyright 2018 Ahmet Inan <inan@aicodix.de>
*/
#pragma once
#include "const.hh"
#include "utils.hh"
namespace DSP {
template <typename TYPE>
class LowPass
{
TYPE f;
public:
LowPass(TYPE cutoff) : f(TYPE(2) * cutoff) {}
TYPE operator () (int n, int N)
{
TYPE x = TYPE(n) - TYPE(0.5) * TYPE(N - 1);
return f * sinc(f * x);
}
};
template <typename TYPE>
class HighPass
{
TYPE f;
public:
HighPass(TYPE cutoff) : f(TYPE(2) * cutoff) {}
TYPE operator () (int n, int N)
{
TYPE x = TYPE(n) - TYPE(0.5) * TYPE(N - 1);
// if (N%1) return delta(x) - f * sinc(f * x);
return sinc(x) - f * sinc(f * x);
}
};
template <typename TYPE>
class BandPass
{
TYPE f0, f1;
public:
BandPass(TYPE cutoff0, TYPE cutoff1) :
f0(TYPE(2) * cutoff0), f1(TYPE(2) * cutoff1) {}
TYPE operator () (int n, int N)
{
TYPE x = TYPE(n) - TYPE(0.5) * TYPE(N - 1);
return f1 * sinc(f1 * x) - f0 * sinc(f0 * x);
}
};
}