From 5412c354c0868a3b2f11ca17ef1ce41bd7cb8071 Mon Sep 17 00:00:00 2001 From: Patrick Hangl Date: Thu, 8 Jan 2026 16:38:51 +0100 Subject: [PATCH] Weiter kommentiert --- main.c | 56 +++++++++++++++------------------- signalProcessing/signal_path.c | 20 ++++++------ 2 files changed, 35 insertions(+), 41 deletions(-) diff --git a/main.c b/main.c index 8e22ee3..5c5763c 100644 --- a/main.c +++ b/main.c @@ -54,7 +54,6 @@ static int16_t chess_storage(DMB) outputPort[BLOCK_LEN]; // chess_storage(DMB:OU extern "C" void isr0() property (isr) { actionRequired = 1; } - #ifdef __chess__ extern "C" #endif @@ -62,32 +61,27 @@ extern "C" int main(void) { // Enum, welcher den Ausgabemodus definiert - wird in calc()-Funktion verwendet static OutputMode mode = OUTPUT_MODE_FIR_LMS; - - // Initialize the signal path - // Initialize the csensor signal subpath - // Instanciate the signal path state structs - - // Deactivate preemphasis filter by initializing with coefficients {1., 0., 0., 0., 0.} - // biquad filter coefficients - off + // Biquad Filter für C-Sensor und Acc-Sensor anlegen + // Alle 0 bis auf b[0] -> einfacher Gain auf 0,75 double b0[5]={0.75, 0., 0., 0., 0.}; double b1[5]={0.75, 0., 0., 0., 0.}; - int N_lms_fir_coeffs = MAX_FIR_COEFFS; // always test with max coeffs + int N_lms_fir_coeffs = MAX_FIR_COEFFS; // 64 Koeffizienten für ANR - //init-Funktion aufrufen + // Signale initialisieren, oben angelegte Structs mit Parametern füllen init( - &cSensorSignal, &accSensorSignal, - //&ptr_fir_lms_delay_line, &ptr_fir_lms_coeffs, - b0, - b1, - 2, // sample delayS - 2, - 0.9, // weight - 0.9, - 0.01, // lms learning rate - N_lms_fir_coeffs // Numer of lms fir coefficients + &cSensorSignal, &accSensorSignal, //Signal-Structs + b0, // Biqquad Koeffizienten C-Sensor + b1, // Biqquad Koeffizienten Acc-Sensor + 2, // Sample Delay C-Sensor + 2, // Sample Delay Acc-Sensor + 0.9, //Gewichtung C-Sensor + 0.9, //Gewichtung Acc-Sensor + 0.01, // Mu + N_lms_fir_coeffs // Anzahl Filterkoeffizienten ); - if (mode == OUTPUT_MODE_FIR){ //FIR filter mit fixen coeffizienten wenn nicht adaptiv + // Fixer Filter wenn nicht adaptiv + if (mode == OUTPUT_MODE_FIR){ for (int i=0; i kein Filter weil effektiv 1*Xn if (b0 == 1. && b1 == 0. && b2 == 0. && a1 == 0. && a2 == 0.) { signal->preemph_activated = 0; } else{ - signal->preemph_activated = 1; - signal->_preemph_scale_nbits = scale_bits; - int scale = pow(2, scale_bits) - 1; + signal->preemph_activated = 1; // Schreibe Eintrag in Struct + signal->_preemph_scale_nbits = scale_bits; // Schreibe Eintrag in Struct - wieviel Bits wird skaliert + int scale = pow(2, scale_bits) - 1; //2^n -1 Skalierung + // Skaliere Koeffizienten zu Interger und schreibe Eintrag in Struct signal->b_preemph[0] = b0 * scale; signal->b_preemph[1] = b1 * scale; signal->b_preemph[2] = b2 * scale; @@ -178,9 +179,11 @@ int sig_init_delay(SingleSignalPath *signal, int n_delay) { } void sig_init_weight(SingleSignalPath *signal, double weight, int scale_nbits) { + // Wenn Gewichtung 1 -> kein Effekt if (weight == 1.) { signal->weight_actived = 0; } + // Wenn Gewichtung != 1 -> Zu Integer skalieren und Eintrag in Struct schreiben else{ signal->weight_actived = 1; int scale = pow(2, scale_nbits) - 1; @@ -573,8 +576,6 @@ void adapt_coeffs_generic_single(BufferPtrDMB chess_storage(DMB) *ptr_fir_lms_de void init( SingleSignalPath *cSensorSignal, SingleSignalPath *accSensorSignal, - //BufferPtrDMB *ptr_fir_lms_delay_line, - //BufferPtr *ptr_fir_lms_coeffs, double *b_c, double *b_acc, int delay_c, @@ -590,19 +591,20 @@ void init( int scale_bits=31; #endif + // C-Sensor Initialisierung: Biquad, Delay, Weight skalieren und in Struct schreiben sig_init_preemph_coef(cSensorSignal, b_c[0], b_c[1], b_c[2], b_c[3], b_c[4], scale_bits); sig_init_delay(cSensorSignal, delay_c); sig_init_weight(cSensorSignal, weight_c, scale_bits); - // // Initialize the accSensor signal subpath + // Acc-Sensor Initialisierung: Biquad, Delay, Weight skalieren und in Struct schreiben sig_init_preemph_coef(accSensorSignal, b_acc[0], b_acc[1], b_acc[2], b_acc[3], b_acc[4], scale_bits); sig_init_delay(accSensorSignal, delay_acc); sig_init_weight(accSensorSignal, weight_acc, 31); - // initialize the lms filter parameters + //Mu Skalierung und in globale Variable schreiben int scale = pow(2, scale_bits) - 1; mu = lms_mu * scale; - // initialize the fir_lms buffers + // Buffer Initialisierung #if BLOCK_LEN == 1 sig_init_buffer_DMB(&ptr_fir_lms_delay_line, fir_lms_delay_line, lms_fir_num_coeffs, MAX_FIR_COEFFS); sig_init_buffer(&ptr_fir_lms_coeffs, fir_lms_coeffs, lms_fir_num_coeffs, MAX_FIR_COEFFS);