Jared Baxter / Mbed 2 deprecated Impedance_Fast_Circuitry_print_V_I

Dependencies:   mbed-dsp mbed

Fork of Impedance_Fast_Circuitry by Jared Baxter

Committer:
baxterja
Date:
Fri Jun 22 17:57:22 2018 +0000
Revision:
86:850351993d88
Parent:
85:f1be018aacac
Added time stamping,  Also added capabilities to print complex voltage and current instead of Magnitude and phase if desired.

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 }