From aecd242b97c86d71afde033c0f91d0dc4c80da66 Mon Sep 17 00:00:00 2001 From: Kuba <132459354+KubaPro010@users.noreply.github.com> Date: Thu, 23 Nov 2023 14:45:55 +0000 Subject: [PATCH] trying to make a option to disable preemphasis --- src/pifmrds/fm_mpx.c | 36 ++++++++++++++++++++---------------- src/pifmrds/pi_fm_rds.cpp | 26 +++++++++++++------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/pifmrds/fm_mpx.c b/src/pifmrds/fm_mpx.c index 394565b..9ae7278 100644 --- a/src/pifmrds/fm_mpx.c +++ b/src/pifmrds/fm_mpx.c @@ -133,21 +133,20 @@ int fm_mpx_open(char *filename, size_t len, int raw, double preemphasis, int raw // Create the low-pass FIR filter, with pre-emphasis double window, firlowpass, firpreemph , sincpos; - + double taup, deltap, bp, ap, a0, a1, b1; + if(preemphasis != 0) { // IIR pre-emphasis filter // Reference material: http://jontio.zapto.org/hda1/preempiir.pdf - double tau=preemphasis; - double delta=1/(2*PI*20000);//double delta=1.96e-6; - double taup, deltap, bp, ap, a0, a1, b1; - taup=1.0/(2.0*(in_samplerate*FIR_PHASES))/tan( 1.0/(2*tau*(in_samplerate*FIR_PHASES) )); - deltap=1.0/(2.0*(in_samplerate*FIR_PHASES))/tan( 1.0/(2*delta*(in_samplerate*FIR_PHASES) )); - bp=sqrt( -taup*taup + sqrt(taup*taup*taup*taup + 8.0*taup*taup*deltap*deltap) ) / 2.0 ; - ap=sqrt( 2*bp*bp + taup*taup ); - a0=( 2.0*ap + 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); - // a1=(-2.0*ap + 1/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1/(in_samplerate*FIR_PHASES) ); //ORI - // b1=( 2.0*bp + 1/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1/(in_samplerate*FIR_PHASES) ); //ORI - a1=(-2.0*ap + 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); - b1=( 2.0*bp - 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); + double tau=preemphasis; //why? well im gonna listen to rule: "if it works dont touch it" + double delta=1/(2*PI*20000);//double delta=1.96e-6; + taup=1.0/(2.0*(in_samplerate*FIR_PHASES))/tan( 1.0/(2*tau*(in_samplerate*FIR_PHASES) )); + deltap=1.0/(2.0*(in_samplerate*FIR_PHASES))/tan( 1.0/(2*delta*(in_samplerate*FIR_PHASES) )); + bp=sqrt( -taup*taup + sqrt(taup*taup*taup*taup + 8.0*taup*taup*deltap*deltap) ) / 2.0 ; + ap=sqrt( 2*bp*bp + taup*taup ); + a0=( 2.0*ap + 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); + a1=(-2.0*ap + 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); + b1=( 2.0*bp - 1.0/(in_samplerate*FIR_PHASES) )/(2.0*bp + 1.0/(in_samplerate*FIR_PHASES) ); + } double x=0,y=0; for(int i=0; i