mirror of
https://github.com/radio95-rnt/fm95.git
synced 2026-02-27 11:33:54 +01:00
refactor filter functions and update FM modulator logic
This commit is contained in:
@@ -24,35 +24,7 @@ void init_lpf(BiquadFilter* filter, float cutoffFreq, float qFactor, float sampl
|
||||
filter->z2 = 0.0f;
|
||||
}
|
||||
|
||||
void init_hpf(BiquadFilter* filter, float cutoffFreq, float qFactor, float sampleRate) {
|
||||
float cutoffNorm = cutoffFreq / sampleRate;
|
||||
float K = tanf(M_PI * cutoffNorm);
|
||||
float norm = 1.0f/(1.0f+K/qFactor+K*K);
|
||||
filter->a0 = 1.0f*norm;
|
||||
filter->a1 = -2.0f*norm;
|
||||
filter->a2 = 1.0f*norm;
|
||||
filter->b1 = 2.0f*(K*K-1.0f)*norm;
|
||||
filter->b2 = (1.0f-K/qFactor+K*K)*norm;
|
||||
|
||||
filter->z1 = 0.0f;
|
||||
filter->z2 = 0.0f;
|
||||
}
|
||||
|
||||
void init_bpf(BiquadFilter* filter, float centerFreq, float qFactor, float sampleRate) {
|
||||
float cutoffNorm = centerFreq / sampleRate;
|
||||
float K = tanf(M_PI * cutoffNorm);
|
||||
float norm = 1.0f/(1.0f+K/qFactor+K*K);
|
||||
filter->a0 = K/qFactor*norm;
|
||||
filter->a1 = 0.0f;
|
||||
filter->a2 = -K/qFactor*norm;
|
||||
filter->b1 = 2.0f*(K*K-1.0f)*norm;
|
||||
filter->b2 = (1.0f-K/qFactor+K*K)*norm;
|
||||
|
||||
filter->z1 = 0.0f;
|
||||
filter->z2 = 0.0f;
|
||||
}
|
||||
|
||||
float apply_frequency_filter(BiquadFilter* filter, float input) {
|
||||
float apply_biquad(BiquadFilter* filter, float input) {
|
||||
float out = input*filter->a0+filter->z1;
|
||||
filter->z1 = input*filter->a1+filter->z2-filter->b1*out;
|
||||
filter->z2 = input*filter->a2-filter->b2*out;
|
||||
|
||||
Reference in New Issue
Block a user