Impedance Fast Circuitry Software

Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Committer:
baxterja
Date:
Wed Jun 27 19:23:32 2018 +0000
Revision:
87:80c9169acb85
Parent:
85:f1be018aacac
Changed frequencies for different probe number.  I also ordered frequencies from smallest to largest (I don't know if this is a good idea or not)

Who changed what in which revision?

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