ViPERFX_RE/src/cpp/utils/IIR_1st.h

39 lines
1.2 KiB
C
Raw Normal View History

2021-07-27 09:47:15 +02:00
//
// Created by mart on 7/26/21.
//
#pragma once
#include <cstdint>
class IIR_1st {
public:
IIR_1st();
void Mute();
void SetCoefficients(float b0, float b1, float a1);
void setHPF_A(float frequency, uint32_t samplerate);
void setHPF_BW(float frequency, uint32_t samplerate);
void setHPF_C(float frequency, uint32_t samplerate);
void setHPFwLPS_A(float frequency, uint32_t samplerate);
void setHSF_A(float f1, float f2, uint32_t samplerate);
void setLPF_A(float frequency, uint32_t samplerate);
void setLPF_BW(float frequency, uint32_t samplerate);
void setLPF_C(float frequency, uint32_t samplerate);
void setLSF_A(float f1, float f2, uint32_t samplerate);
void setPole(float a1);
void setPoleHPF(float frequency, uint32_t samplerate);
void setPoleLPF(float frequency, uint32_t samplerate);
void setZero(float b1);
void setZeroHPF(float frequency, uint32_t samplerate);
void setZeroLPF(float frequency, uint32_t samplerate);
float b0, b1, a1;
float prevSample;
};
2021-07-31 16:00:35 +02:00
inline float do_filter(IIR_1st* filter, float sample) {
float hist = sample * filter->b1;
sample = filter->prevSample + sample * filter->b0;
filter->prevSample = sample * filter->a1 + hist;
return sample;
}