Jared Baxter
/
Impedance_Fast_Circuitry
Fork of DSP_200kHz by
Jareds_DSP/demodulate.cpp@81:30d699e951a8, 2017-08-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |