Team Riedel - display

Dependencies:   LCD_fonts SPI_TFT_ILI9341 CMSIS_DSP_401_without_cm4 mbed-src SDFileSystem wavfile

Revision:
9:5a860b9c8a6a
Child:
10:0986108f8aa3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/audio_record.cpp	Sun Dec 13 16:46:14 2015 +0000
@@ -0,0 +1,124 @@
+
+#include "main.h"
+#include "stm32l476g_discovery_audio.h"
+
+//GLOBAL VARIABLES 
+float32_t POWER[1024];
+float32_t PHS[1024];
+float32_t PWRMSE;
+float32_t PHSMSE;
+uint32_t n;  //Generic variable for "for" loops
+float32_t CONTROLPWR[1024]; //CONTROL 0 PWR
+float32_t CONTROLPHS[1024]; //CTONROL 0 PHS
+float32_t CONTROLPWRMSE;//CONTROL PWR MSE
+float32_t CONTROLPHSMSE;//CONTROL PHS MSE
+
+                                                        
+void RECORD(void)
+{
+    uint32_t counter=0;
+    int EXIT=0; //WHILE LOOP EXIT FLAG
+//    uint16_t PDMBUFF[1536];
+    uint16_t RECORDBUFF[2048];
+    float32_t FLOATBUFF[4096];
+    const arm_cfft_instance_f32 *S=&arm_cfft_sR_f32_len2048;
+    
+    /* Initialize audio input */  
+    pc.printf("\r\n");
+    pc.printf("Initializing Audio...\r\n");                          
+    if(Audio_Init()!= AUDIO_OK)
+        {
+        pc.printf("FAILED to initialize audio...\r\n");
+        }
+    pc.printf("Initialization completed successfully.\r\n");
+  
+  /* Start the audio record */
+
+        if (Audio_Record(RECORDBUFF) != AUDIO_OK)
+            {
+                pc.printf("FAILED to begin recording...\r\n");
+            } 
+            
+//    pc.printf("DMA\tSPI\tRXNE\tBSY\tCRCERR\tOVR\r\n");
+  
+  /* PCM samples recording loop */
+  RecordBufferOffset = BUFFER_OFFSET_NONE;
+  while (RecordBufferOffset != BUFFER_OFFSET_FULL);
+  
+//  while (EXIT != SET)
+//  {
+//        if (!(counter%1000000)) pc.printf("%d\t%d\t%d\t%d\t%d\t%d\r\n", getDMAState(), getSPIState(), getSPIFlagStatus(SPI_SR_RXNE), getSPIFlagStatus(SPI_SR_BSY), getSPIFlagStatus(SPI_SR_CRCERR), getSPIFlagStatus(SPI_SR_OVR));
+//        if (counter==10000000) //Approximately 3 seconds of record time
+//        {
+//            EXIT=1;
+//        }
+//        else
+//        {
+//            counter=counter++;
+//        }
+//  }
+  /* Stop audio input */
+    Audio_Stop();
+    pc.printf("Audio recording processed successfully!\r\n");
+    //myled = 0;
+    WriteData(RECORDBUFF);
+        
+    for(n=0;n<2048;n++)
+    {
+        FLOATBUFF[n*2] = (float)RECORDBUFF[n];
+        FLOATBUFF[(n*2)+1] = 0.0;
+     }
+     arm_cfft_f32(S, FLOATBUFF, 0,0); //Output of FFT is half the record buffer size
+
+            for(n=0;n<1024;n++)
+                {PHS[n]=atan2(FLOATBUFF[(n*2)+1],FLOATBUFF[n*2]);}//Calculates control phase
+            for(n=0;n<1024;n++)
+                {
+                    POWER[n]=sqrt((FLOATBUFF[(n*2)+1]*FLOATBUFF[(n*2)+1])+(FLOATBUFF[n*2]*FLOATBUFF[n*2]));
+                    } //calculates control power
+}
+
+void MSE(void)
+{
+    float32_t compare[1024]; //BUFFER VARIABLE FOR MSE FUNCTIONS
+    //MEAN SQUARED ERROR FOR SAMPLE MAGNITUDES
+    PWRMSE=0;
+    for(n=0;n<1024;n++)
+        {compare[n]=(CONTROLPWR[n]-POWER[n])*(CONTROLPWR[n]-POWER[n]);} //Error between FFT magnitudes, stored in compare
+    for(n=0;n<1024;n++)
+        {PWRMSE=PWRMSE+compare[n];} //Takes the mean of the error, stores MSE in CONTROLMSE
+    PWRMSE=PWRMSE/1024.0f;
+    //MEAN SQUARED ERROR FOR SAMPLE PHASE
+    PHSMSE=0;
+    for(n=0;n<1024;n++)
+        {compare[n]=(CONTROLPHS[n]-PHS[n])*(CONTROLPHS[n]-PHS[n]);} //Error between FFT magnitudes, stored in compare
+    for(n=0;n<1024;n++)
+        {PHSMSE=PHSMSE+compare[n];} //Takes the mean of the error, stores MSE in CONTROLMSE
+    PHSMSE=PHSMSE/1024.0f;
+}
+
+void COMPARE(void)
+{
+    float32_t TEST[4];
+            TEST[0]=001; //LOW END OF ACCEPTED TOLERANCE RANGE
+            TEST[1]=20;  //HIGH END OF ACCEPTED TOLERANCE RANGE
+            TEST[2]=(PWRMSE/CONTROLPWRMSE); //The ratio of sample MSE and control MSE
+            TEST[3]=(PHSMSE/CONTROLPHSMSE);
+                        
+                //COMPARISON
+                    //if(SAMPLEPHASEMSE>(10*PHSCONTROLMSE))
+                        //{
+                            //SEND ERROR MESSAGE
+                            //CREATE EVENT
+                        //}
+                    if(TEST[2]>TEST[0])//MODEM FUNCTIONS
+                        {
+                            //SEND ERROR MESSAGE
+                            //CREATE EVENT
+                        }
+                    if(TEST[2] < TEST[1])
+                        {   
+                            //SEND ERROR MESSAGE
+                            //CREATE EVENT
+                        }
+}
\ No newline at end of file