0
1
mirror of https://github.com/radio95-rnt/fm95.git synced 2026-02-26 19:23:51 +01:00

change premphasis to smoothing

This commit is contained in:
2024-12-30 23:00:54 +01:00
parent 4847edcd59
commit 02e3619b38

View File

@@ -78,35 +78,18 @@ float get_next_sample(Oscillator *osc) {
#ifdef PREEMPHASIS
typedef struct {
float alpha;
float a0, a1, b0;
float x1, y1;
float prev_sample
} PreEmphasis;
// IIR pre-emphasis from pifmrds
void init_pre_emphasis(PreEmphasis *pe) {
pe->x1 = 0.0f;
pe->y1 = 0.0f;
// Calculate IIR filter coefficients
float tau = PREEMPHASIS_TAU;
float delta = 1/(M_2PI*20000);
float taup = 1.0f/(2.0f*(SAMPLE_RATE*FIR_PHASES)/tan(1.0f/(2*tau*(SAMPLE_RATE*FIR_PHASES))));
float deltap = 1.0f/(2.0f*(SAMPLE_RATE*FIR_PHASES)/tan(1.0f/(2*delta*(SAMPLE_RATE*FIR_PHASES))));
float bp = sqrt(-taup*taup+sqrt(taup*taup*taup*taup + 0.8*taup*taup*deltap*deltap))/2.0f;
float ap = sqrt(2*bp*bp+taup*taup);
pe->a0 = (2.0f*ap+1.0/(SAMPLE_RATE*FIR_PHASES))/(2.0*bp+1.0/(SAMPLE_RATE*FIR_PHASES));
pe->a1 = (-2.0f*ap+1.0/(SAMPLE_RATE*FIR_PHASES))/(2.0*bp+1.0/(SAMPLE_RATE*FIR_PHASES));
pe->b0 = (2.0f*ap-1.0/(SAMPLE_RATE*FIR_PHASES))/(2.0*bp+1.0/(SAMPLE_RATE*FIR_PHASES));
pe->prev_sample = 0.0f;
pe->alpha = exp(-1 / (PREEMPHASIS_TAU * SAMPLE_RATE));
}
float apply_pre_emphasis(PreEmphasis *pe, float sample) {
// IIR filtering
float y = pe->a0 * sample + pe->a1 * pe->x1 - pe->b0 * pe->y1;
pe->x1 = sample;
pe->y1 = y;
return y/16; //its so loud
float audio = sample-pe->alpha*pe->prev_sample;
pe->prevsample = audio;
return audio;
}
#endif