initial
Dependencies: mbed BSP_DISCO_F746NG mbed-dsp
Diff: signal_processing.cpp
- Revision:
- 1:103e3e426b55
- Parent:
- 0:c0f52e8223fe
- Child:
- 2:89234085faae
diff -r c0f52e8223fe -r 103e3e426b55 signal_processing.cpp --- 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; +}