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 DSP_200kHz by
Jareds_DSP/demodulate.cpp@84:5b4466dd2326, 2018-02-21 (annotated)
- Committer:
- baxterja
- Date:
- Wed Feb 21 23:23:17 2018 +0000
- Revision:
- 84:5b4466dd2326
- Parent:
- 78:10b2916b8f5c
- Child:
- 85:f1be018aacac
Pre_mavrik Version
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 | 84:5b4466dd2326 | 3 | #define MAX_NUMBER_DEMOD_FREQ 1 |
| baxterja | 75:8bb94685c80b | 4 | |
| baxterja | 75:8bb94685c80b | 5 | #define DEMOD_EXTRA_TABLE_LENGTH 16 |
| baxterja | 75:8bb94685c80b | 6 | #define TWOPI 6.28318530717959 |
| baxterja | 75:8bb94685c80b | 7 | |
| baxterja | 75:8bb94685c80b | 8 | float *imod[MAX_NUMBER_DEMOD_FREQ]; |
| baxterja | 75:8bb94685c80b | 9 | float *qmod[MAX_NUMBER_DEMOD_FREQ]; |
| baxterja | 84:5b4466dd2326 | 10 | float demod_Carrier_Frequency[MAX_NUMBER_DEMOD_FREQ] = {100000/208}; |
| baxterja | 84:5b4466dd2326 | 11 | float demod_Table_Length[MAX_NUMBER_DEMOD_FREQ] = {208/8}; |
| baxterja | 84:5b4466dd2326 | 12 | float demod_Sample_Frequency[MAX_NUMBER_DEMOD_FREQ] = {12500}; |
| 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 | } |

