initial
Dependencies: mbed BSP_DISCO_F746NG mbed-dsp
Diff: signal_processing.cpp
- Revision:
- 6:291e341f0d71
- Parent:
- 5:a658cda1d619
- Child:
- 7:88543caf2b6e
--- a/signal_processing.cpp Fri Mar 06 01:41:05 2020 +0000 +++ b/signal_processing.cpp Fri Mar 06 19:02:55 2020 +0000 @@ -326,51 +326,42 @@ float32_t* d_out2, uint16_t sig_length) { - //shift the save buffers by the input data size + //shift the save buffers left by the input data size for(int i=0; i < FFT_LENGTH; i++) { - if(i < FFT_LENGTH - sig_length) + if(i < (FFT_LENGTH - sig_length)) { save_buffer1[i] = save_buffer1[i+sig_length]; save_buffer2[i] = save_buffer2[i+sig_length]; } else { - save_buffer1[i] = 0; - save_buffer2[i] = 0; + save_buffer1[i] = d_in1[i - (FFT_LENGTH - sig_length)]; + save_buffer2[i] = d_in2[i - (FFT_LENGTH - sig_length)]; } } - //insert new data into save buffer - for(int i=0; i < sig_length; i++) - { - save_buffer1[(FFT_LENGTH - sig_length) + i] = d_in1[i]; - save_buffer2[(FFT_LENGTH - sig_length) + i] = d_in2[i]; - } - //fill the FFT buffer for(int i=0; i < FFT_LENGTH; i++) { - fft_buffer[2*i] = save_buffer1[i]; - fft_buffer[2*i+1] = save_buffer2[i]; + fft_buffer[2*i] = save_buffer1[i]; + fft_buffer[2*i+1] = save_buffer2[i]; } //perform FFT in place arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_buffer, 0, 1); - //multiply with filter FFT arm_cmplx_mult_cmplx_f32(fft_buffer, fft_of_filter, ifft_buffer, FFT_LENGTH); - //perform inverse FFT in place arm_cfft_f32(&arm_cfft_sR_f32_len1024, ifft_buffer, 1, 1); // copy to output buffer - for(uint16_t i = CONV_LENGTH - sig_length; i < CONV_LENGTH; i++) + for(uint16_t i = FFT_LENGTH - sig_length; i < FFT_LENGTH; i++) { - d_out1[i] = ifft_buffer[2*i]; - d_out2[i] = ifft_buffer[2*i+1]; + d_out1[i - FFT_LENGTH + sig_length] = ifft_buffer[2*i]; + d_out2[i - FFT_LENGTH + sig_length] = ifft_buffer[2*i+1]; } return; } @@ -410,13 +401,13 @@ { if(i < WIN_NUM_TAPS) { - fft_of_filter[2*i] = win_filter_coeffs[i]; - fft_of_filter[2*i+1] = 0; + fft_of_filter[2*i] = win_filter_coeffs[i]; + fft_of_filter[2*i+1] = 0; } else { - fft_of_filter[2*i] = 0; - fft_of_filter[2*i+1] = 0; + fft_of_filter[2*i] = 0; + fft_of_filter[2*i+1] = 0; } } @@ -425,3 +416,29 @@ return; } +void filter_fft_OS_init() +{ + for(int i=0; i < FFT_LENGTH; i++) + { + if(i < AUDIO_BLOCK_SAMPLES) + { + fft_of_filter[2*i] = 0; + fft_of_filter[2*i+1] = 0; + } + else if(i < WIN_NUM_TAPS + AUDIO_BLOCK_SAMPLES) + { + fft_of_filter[2*i] = win_filter_coeffs[i]; + fft_of_filter[2*i+1] = 0; + } + else + { + fft_of_filter[2*i] = 0; + fft_of_filter[2*i+1] = 0; + } + } + + arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_of_filter, 0, 1); + + return; +} +