Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Revision:
69:014d4bbd4e03
Parent:
68:e5031c18fefb
Child:
70:8cd7a8a2c153
Child:
71:973fac37c5b3
--- a/main.cpp	Fri May 05 21:41:36 2017 +0000
+++ b/main.cpp	Wed May 17 19:33:26 2017 +0000
@@ -27,23 +27,50 @@
 extern uint16_t sampling_status;
 
 // To set up FIR filtering
-#define TOTAL_TAPS 8
-#define STATE_LENGTH  71
+#define TOTAL_TAPS 16
+#define STATE_LENGTH  79
 #define BUFFER_LENGTH 64
 uint16_t numTaps = TOTAL_TAPS;
 float State[STATE_LENGTH]= {0};
-float Coeffs[TOTAL_TAPS] = {1, -1, 0, 0, 0, 0, 0, 0};
+float Coeffs[TOTAL_TAPS] = {0.0351885543264657, 0.0326718041339497, 0.0447859388579763, 0.0571840193174261, 0.0688188647212066, 0.0786841934234295, 0.0858044659079242, 0.0895870376972757, 0.0895870376972757, 0.0858044659079242, 0.0786841934234295, 0.0688188647212066, 0.0571840193174261, 0.0447859388579763, 0.0326718041339497, 0.0351885543264657};
 arm_fir_instance_f32 S = {numTaps, State, Coeffs};
 
 float filter_input_array[BUFFER_LENGTH] = {0};
 float filter_output_array[BUFFER_LENGTH] = {0};
 
 
+
+#define pre_compute_length 500
+#define CarrierFrequency 200
+#define SAMPLEFREQUENCY 100000
+//float i_mod_pre[pre_compute_length];
+//float q_mod_pre[pre_compute_length];
+uint16_t out_val_pre[pre_compute_length]; 
+float twopi = 3.14159265359 * 2;
+
+
+void pre_compute_tables() {
+  // This function will precompute the cos and sin tables used in the rest of the program
+  for(int precompute_counter = 0; precompute_counter < pre_compute_length; precompute_counter++){
+    out_val_pre[precompute_counter] = (int) (cos(twopi * CarrierFrequency /SAMPLEFREQUENCY * precompute_counter) * 2046.0 + 2048.0);
+    //printf("%d\n\r",out_val_pre[precompute_counter]);
+    //i_mod_pre[precompute_counter] = (cos(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter));
+    //q_mod_pre[precompute_counter] = (-sin(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter));
+
+  }
+}
+
+
 int main() {
     led_blue = 1;
     led_green = 1;
     led_red = 1;
     
+    int DAC_COUNTER = 0;
+    //bool is_magnified_sample = true;
+    pre_compute_tables();
+    
+    
     pc.baud(230400);
     pc.printf("Starting\r\n");
     
@@ -66,7 +93,17 @@
             {   
                 status_0 = 1;
             }
-            
+            /*
+            if (is_magnified_sample)
+            {
+                ADC0_SC1A = 0x0D;
+            }
+            else
+            {
+                ADC0_SC1A = 0x0C;
+            }
+            is_magnified_sample = !is_magnified_sample;
+            */
             sampling_status = 0;
             status_0 = 0;
 
@@ -78,7 +115,11 @@
                         status_1 = 1;
                         for(int i = 0; i < len; i++) 
                         {
-                            static_output_array0[i] = static_input_array0[i] >> 4;                            
+                            static_output_array0[i] = static_input_array0[i] >> 4;   
+                            
+                            
+                             
+                                                    
                         }
                         status_1 = 0;
                         }
@@ -86,7 +127,8 @@
                         {        
                         // Can show that buttons are active - Serial link working
                         status_1 = 1;
-                        pc.printf("DSP\r\n");
+                        pc.printf("DSP: %d\r\n",out_val_pre[DAC_COUNTER]);
+                        //pc.printf("DSP: %d\r\n",out_val_pre[DAC_COUNTER]);
                         for(int i = 0; i < len; i++) 
                         {
                             static_output_array0[i] = static_input_array0[i] >> 4;
@@ -124,10 +166,20 @@
                     {
                         //static_output_array0[i] = static_input_array0[i] >> 4;                        
                         //static_output_array0[i] = (uint16_t) (( (int) filter_output_array[i] ) + 0x800);
-                        static_output_array0[i] = (uint16_t) (filter_output_array[i] + 0x8000) >> 4;
+                        //static_output_array0[i] = (uint16_t) (filter_output_array[i] + 0x8000) >> 4;
                         //static_output_array0[i] = (uint16_t) filter_input_array[i];
                         //static_output_array0[i] = static_input_array0[i] >> 4;
-                    }                    
+                        
+                        
+                        static_output_array0[i] = out_val_pre[DAC_COUNTER];
+                        DAC_COUNTER++;
+                        if (DAC_COUNTER>=pre_compute_length)
+                        {
+                            DAC_COUNTER = 0;
+                        }
+                    }
+                    
+                   
                     status_1 = 0;
                 }
         }