Added first order high pass static method
This commit is contained in:
parent
fae1847cf8
commit
cb72c2ba74
@ -41,6 +41,45 @@ SeriesBiquad::SeriesBiquad(const vd &filter_coefs) {
|
|||||||
"Filter coefficients should have fourth element (a0) equal to 1.0");
|
"Filter coefficients should have fourth element (a0) equal to 1.0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SeriesBiquad SeriesBiquad::firstOrderHighPass(const d fs, const d cuton_Hz) {
|
||||||
|
|
||||||
|
if(fs <= 0) {
|
||||||
|
throw rte("Invalid sampling frequency: " + std::to_string(fs) + " [Hz]");
|
||||||
|
}
|
||||||
|
if(cuton_Hz <= 0) {
|
||||||
|
throw rte("Invalid cuton frequency: " + std::to_string(cuton_Hz) + " [Hz]");
|
||||||
|
}
|
||||||
|
if(cuton_Hz >= 0.98*fs/2) {
|
||||||
|
throw rte("Invalid cuton frequency. We limit this to 0.98* fs / 2. Given value" + std::to_string(cuton_Hz) + " [Hz]");
|
||||||
|
}
|
||||||
|
|
||||||
|
const d tau = 1/(2*arma::datum::pi*cuton_Hz);
|
||||||
|
const d facnum = 2*fs*tau/(1+2*fs*tau);
|
||||||
|
const d facden = (1-2*fs*tau)/(1+2*fs*tau);
|
||||||
|
|
||||||
|
vd coefs(6);
|
||||||
|
// b0
|
||||||
|
coefs(0) = facnum;
|
||||||
|
// b1
|
||||||
|
coefs(1) = -facnum;
|
||||||
|
// b2
|
||||||
|
coefs(2) = 0;
|
||||||
|
|
||||||
|
// a0
|
||||||
|
coefs(3) = 1;
|
||||||
|
|
||||||
|
// a1
|
||||||
|
coefs(4) = facden;
|
||||||
|
|
||||||
|
// a2
|
||||||
|
coefs(5) = 0;
|
||||||
|
|
||||||
|
return SeriesBiquad(coefs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<Filter> SeriesBiquad::clone() const {
|
std::unique_ptr<Filter> SeriesBiquad::clone() const {
|
||||||
// sos.as_col() concatenates all columns, exactly what we want.
|
// sos.as_col() concatenates all columns, exactly what we want.
|
||||||
return std::make_unique<SeriesBiquad>(sos.as_col());
|
return std::make_unique<SeriesBiquad>(sos.as_col());
|
||||||
|
@ -39,6 +39,17 @@ public:
|
|||||||
virtual ~SeriesBiquad() override {}
|
virtual ~SeriesBiquad() override {}
|
||||||
void reset() override final;
|
void reset() override final;
|
||||||
std::unique_ptr<Filter> clone() const override final;
|
std::unique_ptr<Filter> clone() const override final;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Create a SeriesBiquad object for a first order high-pass filter
|
||||||
|
*
|
||||||
|
* @param fs Sampling frequency [Hz]
|
||||||
|
* @param cuton_Hz Cuton-frequency [Hz]
|
||||||
|
*
|
||||||
|
* @return SeriesBiquad object with a single biquad, corresponding to a first
|
||||||
|
* order high pass filter.
|
||||||
|
*/
|
||||||
|
static SeriesBiquad firstOrderHighPass(const d fs, const d cuton_Hz);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user