initial

Dependencies:   mbed BSP_DISCO_F746NG mbed-dsp

Revision:
1:103e3e426b55
Parent:
0:c0f52e8223fe
Child:
2:89234085faae
--- a/signal_processing.cpp	Fri Jan 31 21:41:25 2020 +0000
+++ b/signal_processing.cpp	Wed Feb 12 01:03:05 2020 +0000
@@ -19,6 +19,7 @@
 #include "arm_math.h"
 #include "arm_const_structs.h"
 #include "filter_coefficients.h"
+#include "our_filter.h"
 
 
 /* ---------------------------------------------------------------------- 
@@ -26,11 +27,22 @@
 ** ------------------------------------------------------------------- */ 
 
 #define AUDIO_BLOCK_SAMPLES             ((uint32_t)128)         // Number of samples (L and R) in audio block (each samples is 16 bits)
+#define BUFFER_LENGTH                   (WIN_NUM_TAPS + AUDIO_BLOCK_SAMPLES - 1)
 
 /* For Lab Exercise */
-#define Lab_Execution_Type              0
+#define Lab_Execution_Type              2
+
+float32_t lState[NUM_TAPS + AUDIO_BLOCK_SAMPLES - 1];
+float32_t rState[NUM_TAPS + AUDIO_BLOCK_SAMPLES - 1];
 
+float32_t l_buf[BUFFER_LENGTH];
+float32_t r_buf[BUFFER_LENGTH];
 
+float32_t* l_buf_head = &l_buf;
+float32_t* r_buf_head = &r_buf;
+
+arm_fir_instance_f32 filter_left;
+arm_fir_instance_f32 filter_right;
 
 /* FUNCTION DEFINITIONS BELOW */
 
@@ -46,9 +58,13 @@
     break;
   
   case 1: // FIR case (ARM)
+  arm_fir_init_f32(&filter_left, NUM_TAPS, (float32_t *)&Filter_coeffs, (float32_t *)&lState, AUDIO_BLOCK_SAMPLES);
+  arm_fir_init_f32(&filter_right, NUM_TAPS, (float32_t *)&Filter_coeffs, (float32_t *)&rState, AUDIO_BLOCK_SAMPLES);
     break;
   
   case 2: // FIR case (student)
+  arm_fir_init_f32(&filter_left, OUR_NUM_TAPS, (float32_t *)&our_Filter_coeffs, (float32_t *)&lState, AUDIO_BLOCK_SAMPLES);
+  arm_fir_init_f32(&filter_right, OUR_NUM_TAPS, (float32_t *)&our_Filter_coeffs, (float32_t *)&rState, AUDIO_BLOCK_SAMPLES);
     break;
   
   case 3: // FFT Overlap-add 
@@ -86,9 +102,13 @@
     break;
   
   case 1: // FIR case (ARM)
+  arm_fir_f32(&filter_left, L_channel_in, L_channel_out, AUDIO_BLOCK_SAMPLES);
+  arm_fir_f32(&filter_right, R_channel_in, R_channel_out, AUDIO_BLOCK_SAMPLES);
     break;
   
   case 2: // FIR case (student)
+  arm_fir_f32(&filter_left, L_channel_in, L_channel_out, AUDIO_BLOCK_SAMPLES);
+  arm_fir_f32(&filter_right, R_channel_in, R_channel_out, AUDIO_BLOCK_SAMPLES);
     break;
   
   case 3: // FFT Overlap-add 
@@ -102,3 +122,27 @@
     /* Change font back */  
     BSP_LCD_SetFont(&Font16);
 }
+
+
+void filter(float32_t* buffer, float32_t* d_in, float32_t* d_out, uint16_t buf_length)
+{
+    float32_t result = 0;
+    float32_t* data_sample = d_out;
+    for(i=0; i<buf_length; i++)
+    {
+        *data_sample = convolve(d_in, win_filter_coeffs, AUDIO_BLOCK_SAMPLES, BUFFER_LENGTH);
+        data_sample++; //*******************************************************
+    }
+}
+
+float32_t convolve(float32_t* data, float32_t* filter, uint16_t sig_length, uint16_t buf_length)
+{
+    float32_t* data_sample = data+buf_length-1;
+    float32_t* filter_sample = filter;
+    float32_t result = 0;
+    for(i=0; i<buf_length; i++)
+    {
+        result += (*filter_sample) * (*data_sample);
+    }
+    return result;
+}