Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Committer:
baxterja
Date:
Wed Aug 30 00:02:06 2017 +0000
Revision:
81:30d699e951a8
Parent:
78:10b2916b8f5c
Child:
82:f6fbbb8a2139
I added a check for inf and nan before the print statement.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
baxterja 75:8bb94685c80b 1 #include "demodulate.h"
baxterja 75:8bb94685c80b 2
baxterja 78:10b2916b8f5c 3 #define MAX_NUMBER_DEMOD_FREQ 2
baxterja 75:8bb94685c80b 4
baxterja 81:30d699e951a8 5 #define pre_compute_length 176
baxterja 81:30d699e951a8 6
baxterja 75:8bb94685c80b 7 #define DEMOD_EXTRA_TABLE_LENGTH 16
baxterja 75:8bb94685c80b 8 #define TWOPI 6.28318530717959
baxterja 75:8bb94685c80b 9
baxterja 75:8bb94685c80b 10 float *imod[MAX_NUMBER_DEMOD_FREQ];
baxterja 75:8bb94685c80b 11 float *qmod[MAX_NUMBER_DEMOD_FREQ];
baxterja 81:30d699e951a8 12 float demod_Carrier_Frequency[MAX_NUMBER_DEMOD_FREQ] = {(100000.0/pre_compute_length),1000};
baxterja 81:30d699e951a8 13 float demod_Table_Length[MAX_NUMBER_DEMOD_FREQ] = {pre_compute_length/8,25};
baxterja 78:10b2916b8f5c 14 float demod_Sample_Frequency[MAX_NUMBER_DEMOD_FREQ] = {12500,12500};
baxterja 75:8bb94685c80b 15
baxterja 75:8bb94685c80b 16 void precompute_tables()
baxterja 75:8bb94685c80b 17 {
baxterja 75:8bb94685c80b 18 static bool precomputed = false;
baxterja 75:8bb94685c80b 19 if (precomputed)
baxterja 75:8bb94685c80b 20 {
baxterja 75:8bb94685c80b 21 printf("TABLES HAVE ALREADY BEEN PRECOMPUTED");
baxterja 75:8bb94685c80b 22 return;
baxterja 75:8bb94685c80b 23 }
baxterja 75:8bb94685c80b 24 precomputed = true;
baxterja 75:8bb94685c80b 25 for (int i = 0; i<MAX_NUMBER_DEMOD_FREQ; i++)
baxterja 75:8bb94685c80b 26 {
baxterja 75:8bb94685c80b 27 int table_size = demod_Table_Length[i]+DEMOD_EXTRA_TABLE_LENGTH;
baxterja 75:8bb94685c80b 28 imod[i] = new float[table_size];
baxterja 75:8bb94685c80b 29 qmod[i] = new float[table_size];
baxterja 75:8bb94685c80b 30 for(int precompute_counter = 0; precompute_counter < demod_Table_Length[i]+DEMOD_EXTRA_TABLE_LENGTH; precompute_counter++)
baxterja 75:8bb94685c80b 31 {
baxterja 75:8bb94685c80b 32 imod[i][precompute_counter] = ( cos(TWOPI * demod_Carrier_Frequency[i] / demod_Sample_Frequency[i] * precompute_counter));
baxterja 75:8bb94685c80b 33 qmod[i][precompute_counter] = (-sin(TWOPI * demod_Carrier_Frequency[i] / demod_Sample_Frequency[i] * precompute_counter));
baxterja 75:8bb94685c80b 34 }
baxterja 75:8bb94685c80b 35 }
baxterja 75:8bb94685c80b 36
baxterja 75:8bb94685c80b 37 }
baxterja 75:8bb94685c80b 38 void demodulate(float *samples[MAX_NUMBER_OF_FILTERS], int num_filters, int sample_length, int demodulation_frequency)
baxterja 75:8bb94685c80b 39 {
baxterja 78:10b2916b8f5c 40 static int demod_counters[MAX_NUMBER_DEMOD_FREQ] = {0,0};
baxterja 75:8bb94685c80b 41
baxterja 75:8bb94685c80b 42 if (demod_counters[demodulation_frequency]>=demod_Table_Length[demodulation_frequency])
baxterja 75:8bb94685c80b 43 {
baxterja 75:8bb94685c80b 44 demod_counters[demodulation_frequency]-=demod_Table_Length[demodulation_frequency];
baxterja 75:8bb94685c80b 45 }
baxterja 75:8bb94685c80b 46 for(int i = num_filters-1; i>=0; i--)
baxterja 75:8bb94685c80b 47 {
baxterja 75:8bb94685c80b 48 //important keep in this order or filter 0 will be odd
baxterja 75:8bb94685c80b 49 //multiply by -sin
baxterja 75:8bb94685c80b 50 arm_mult_f32(qmod[demodulation_frequency]+demod_counters[demodulation_frequency], samples[i], samples[2*i+1], sample_length);
baxterja 75:8bb94685c80b 51 //multiply by cos
baxterja 75:8bb94685c80b 52 arm_mult_f32(imod[demodulation_frequency]+demod_counters[demodulation_frequency], samples[i], samples[2*i], sample_length);
baxterja 75:8bb94685c80b 53 }
baxterja 75:8bb94685c80b 54 demod_counters[demodulation_frequency] +=sample_length;//increment counter
baxterja 75:8bb94685c80b 55 }