2021-07-27 09:47:15 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "IIR_1st.h"
|
|
|
|
|
|
|
|
class IIR_NOrder_BW_BP {
|
|
|
|
public:
|
|
|
|
explicit IIR_NOrder_BW_BP(uint32_t order);
|
2022-08-23 00:26:44 +02:00
|
|
|
|
2021-07-27 09:47:15 +02:00
|
|
|
~IIR_NOrder_BW_BP();
|
|
|
|
|
|
|
|
void Mute();
|
2022-08-23 00:26:44 +02:00
|
|
|
|
2022-09-23 04:15:43 +02:00
|
|
|
void setBPF(float highCut, float lowCut, uint32_t samplingRate);
|
2021-07-27 09:47:15 +02:00
|
|
|
|
2022-08-23 00:26:44 +02:00
|
|
|
IIR_1st *lowpass;
|
|
|
|
IIR_1st *highpass;
|
2021-07-27 09:47:15 +02:00
|
|
|
uint32_t order;
|
|
|
|
};
|
|
|
|
|
2022-08-23 00:26:44 +02:00
|
|
|
inline float do_filter_bplp(IIR_NOrder_BW_BP *filt, float sample) {
|
2021-07-31 16:00:35 +02:00
|
|
|
for (int idx = 0; idx < filt->order; idx++) {
|
|
|
|
sample = do_filter(&filt->lowpass[idx], sample);
|
|
|
|
}
|
|
|
|
return sample;
|
|
|
|
}
|
|
|
|
|
2022-08-23 00:26:44 +02:00
|
|
|
inline float do_filter_bphp(IIR_NOrder_BW_BP *filt, float sample) {
|
2021-07-31 16:00:35 +02:00
|
|
|
for (int idx = 0; idx < filt->order; idx++) {
|
|
|
|
sample = do_filter(&filt->highpass[idx], sample);
|
|
|
|
}
|
|
|
|
return sample;
|
|
|
|
}
|
|
|
|
|
2022-08-23 00:26:44 +02:00
|
|
|
inline float do_filter_bp(IIR_NOrder_BW_BP *filt, float sample) {
|
2021-07-31 16:00:35 +02:00
|
|
|
return do_filter_bphp(filt, do_filter_bplp(filt, sample));
|
|
|
|
}
|