Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Impedance_Fast_Circuitry by
Jareds_DSP/demodulate.cpp@85:f1be018aacac, 2018-04-25 (annotated)
- Committer:
- baxterja
- Date:
- Wed Apr 25 16:21:11 2018 +0000
- Revision:
- 85:f1be018aacac
- Parent:
- 84:5b4466dd2326
Made it so that to change frequencies we only need to change the probe number.
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 | 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 | } |