initial

Dependencies:   mbed BSP_DISCO_F746NG mbed-dsp

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;
+}
+