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.
Dependencies: mbed
Fork of Chemical_Sensor_DMA by
main.cpp@0:3927c6d8ad1f, 2015-09-06 (annotated)
- Committer:
- baxterja
- Date:
- Sun Sep 06 04:23:51 2015 +0000
- Revision:
- 0:3927c6d8ad1f
- Child:
- 1:f0a5690db73f
Chemical Sensing program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
baxterja | 0:3927c6d8ad1f | 1 | |
baxterja | 0:3927c6d8ad1f | 2 | // TODO: |
baxterja | 0:3927c6d8ad1f | 3 | #include "mbed.h" |
baxterja | 0:3927c6d8ad1f | 4 | #include <string> |
baxterja | 0:3927c6d8ad1f | 5 | |
baxterja | 0:3927c6d8ad1f | 6 | #include <stdio.h> |
baxterja | 0:3927c6d8ad1f | 7 | #include "PeripheralNames.h" |
baxterja | 0:3927c6d8ad1f | 8 | #include "PeripheralPins.h" |
baxterja | 0:3927c6d8ad1f | 9 | #include "fsl_adc_hal.h" |
baxterja | 0:3927c6d8ad1f | 10 | #include "fsl_clock_manager.h" |
baxterja | 0:3927c6d8ad1f | 11 | #include "fsl_dspi_hal.h" |
baxterja | 0:3927c6d8ad1f | 12 | |
baxterja | 0:3927c6d8ad1f | 13 | |
baxterja | 0:3927c6d8ad1f | 14 | |
baxterja | 0:3927c6d8ad1f | 15 | Serial pc(USBTX, USBRX); |
baxterja | 0:3927c6d8ad1f | 16 | |
baxterja | 0:3927c6d8ad1f | 17 | /* |
baxterja | 0:3927c6d8ad1f | 18 | #if DEBUG |
baxterja | 0:3927c6d8ad1f | 19 | #define DEBUG_PRINT(x) pc.printf(x) |
baxterja | 0:3927c6d8ad1f | 20 | #else |
baxterja | 0:3927c6d8ad1f | 21 | #define DEBUG_PRINT(x) do {} while(0) |
baxterja | 0:3927c6d8ad1f | 22 | #endif |
baxterja | 0:3927c6d8ad1f | 23 | */ |
baxterja | 0:3927c6d8ad1f | 24 | DigitalOut led_red(LED_RED); |
baxterja | 0:3927c6d8ad1f | 25 | DigitalOut led_green(LED_GREEN); |
baxterja | 0:3927c6d8ad1f | 26 | DigitalOut led_blue(LED_BLUE); |
baxterja | 0:3927c6d8ad1f | 27 | |
baxterja | 0:3927c6d8ad1f | 28 | |
baxterja | 0:3927c6d8ad1f | 29 | #define MAX_FADC 6000000 |
baxterja | 0:3927c6d8ad1f | 30 | |
baxterja | 0:3927c6d8ad1f | 31 | #define TimerInterruptInMicroSeconds 25 // This is for 40 kHz |
baxterja | 0:3927c6d8ad1f | 32 | |
baxterja | 0:3927c6d8ad1f | 33 | |
baxterja | 0:3927c6d8ad1f | 34 | #define CarrierFrequency 190 |
baxterja | 0:3927c6d8ad1f | 35 | |
baxterja | 0:3927c6d8ad1f | 36 | #define ISR_counter_loop_reset 4 // 10 kHz sampling of the signal |
baxterja | 0:3927c6d8ad1f | 37 | |
baxterja | 0:3927c6d8ad1f | 38 | int ISR_counter = 1; |
baxterja | 0:3927c6d8ad1f | 39 | |
baxterja | 0:3927c6d8ad1f | 40 | #define MaxNumSamples 0 //set to 0 if want continuous sampling (i.e. run forever) |
baxterja | 0:3927c6d8ad1f | 41 | #define NumSamplesAverageInADC 32 //hardware averaging default is 2. values 0..32. Higher values reduce noise and maximum sample rate |
baxterja | 0:3927c6d8ad1f | 42 | #define NumADCbits 16 |
baxterja | 0:3927c6d8ad1f | 43 | |
baxterja | 0:3927c6d8ad1f | 44 | int CyclesInState = 0; |
baxterja | 0:3927c6d8ad1f | 45 | // While 32 is the minimum, it seems to take a few cycles to get things to work right. 32 + 18 + 18 + 18 |
baxterja | 0:3927c6d8ad1f | 46 | #define PreCalculateCycles 256 |
baxterja | 0:3927c6d8ad1f | 47 | #define NumCalculatedAverages 500 |
baxterja | 0:3927c6d8ad1f | 48 | |
baxterja | 0:3927c6d8ad1f | 49 | AnalogOut WaveOut(DAC0_OUT); |
baxterja | 0:3927c6d8ad1f | 50 | AnalogIn WaveIn1(A0); |
baxterja | 0:3927c6d8ad1f | 51 | AnalogIn WaveIn2(A2); |
baxterja | 0:3927c6d8ad1f | 52 | |
baxterja | 0:3927c6d8ad1f | 53 | |
baxterja | 0:3927c6d8ad1f | 54 | double previousTime = 0; |
baxterja | 0:3927c6d8ad1f | 55 | |
baxterja | 0:3927c6d8ad1f | 56 | |
baxterja | 0:3927c6d8ad1f | 57 | volatile unsigned long counter = 0; //keep track of how many times the timer interrupt executes |
baxterja | 0:3927c6d8ad1f | 58 | |
baxterja | 0:3927c6d8ad1f | 59 | |
baxterja | 0:3927c6d8ad1f | 60 | volatile int phase_counter = 0; |
baxterja | 0:3927c6d8ad1f | 61 | float twopi = 3.14159265359 * 2; |
baxterja | 0:3927c6d8ad1f | 62 | |
baxterja | 0:3927c6d8ad1f | 63 | #define pre_compute_length 4000 |
baxterja | 0:3927c6d8ad1f | 64 | float i_mod_pre[pre_compute_length]; |
baxterja | 0:3927c6d8ad1f | 65 | float q_mod_pre[pre_compute_length]; |
baxterja | 0:3927c6d8ad1f | 66 | int out_val_pre[pre_compute_length]; |
baxterja | 0:3927c6d8ad1f | 67 | |
baxterja | 0:3927c6d8ad1f | 68 | float current_i_mod; |
baxterja | 0:3927c6d8ad1f | 69 | float current_q_mod; |
baxterja | 0:3927c6d8ad1f | 70 | |
baxterja | 0:3927c6d8ad1f | 71 | |
baxterja | 0:3927c6d8ad1f | 72 | #define lp_fir_length 256 |
baxterja | 0:3927c6d8ad1f | 73 | #define bp_fir_length 256 |
baxterja | 0:3927c6d8ad1f | 74 | |
baxterja | 0:3927c6d8ad1f | 75 | float x_0_i[lp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 76 | float x_0_q[lp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 77 | float x_1_i[lp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 78 | float x_1_q[lp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 79 | |
baxterja | 0:3927c6d8ad1f | 80 | float real_ip = 0; |
baxterja | 0:3927c6d8ad1f | 81 | float real_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 82 | float imag_ip = 0; |
baxterja | 0:3927c6d8ad1f | 83 | float imag_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 84 | float y_0_squared = 0; |
baxterja | 0:3927c6d8ad1f | 85 | float y_1_squared = 0; |
baxterja | 0:3927c6d8ad1f | 86 | |
baxterja | 0:3927c6d8ad1f | 87 | int max_0 = -1; |
baxterja | 0:3927c6d8ad1f | 88 | int min_0 = 65536; |
baxterja | 0:3927c6d8ad1f | 89 | int max_1 = -1; |
baxterja | 0:3927c6d8ad1f | 90 | int min_1 = 65536; |
baxterja | 0:3927c6d8ad1f | 91 | |
baxterja | 0:3927c6d8ad1f | 92 | |
baxterja | 0:3927c6d8ad1f | 93 | // Coefficients for FIR low-pass filter |
baxterja | 0:3927c6d8ad1f | 94 | // Order: 127 |
baxterja | 0:3927c6d8ad1f | 95 | // Fs = 10000 |
baxterja | 0:3927c6d8ad1f | 96 | // Fpass = 5 |
baxterja | 0:3927c6d8ad1f | 97 | // Fstop = 50 |
baxterja | 0:3927c6d8ad1f | 98 | // Density Factor 20 |
baxterja | 0:3927c6d8ad1f | 99 | float lp_filter_coeff[lp_fir_length] = { |
baxterja | 0:3927c6d8ad1f | 100 | 0.0861805974737537, |
baxterja | 0:3927c6d8ad1f | 101 | 0.00194058236914933, |
baxterja | 0:3927c6d8ad1f | 102 | 0.00196838475539374, |
baxterja | 0:3927c6d8ad1f | 103 | 0.00198494885848217, |
baxterja | 0:3927c6d8ad1f | 104 | 0.00201327315570587, |
baxterja | 0:3927c6d8ad1f | 105 | 0.00202912020658817, |
baxterja | 0:3927c6d8ad1f | 106 | 0.00205837690374429, |
baxterja | 0:3927c6d8ad1f | 107 | 0.00207476466732652, |
baxterja | 0:3927c6d8ad1f | 108 | 0.00210551867296513, |
baxterja | 0:3927c6d8ad1f | 109 | 0.00212232982776793, |
baxterja | 0:3927c6d8ad1f | 110 | 0.00215469918380619, |
baxterja | 0:3927c6d8ad1f | 111 | 0.00217146660668663, |
baxterja | 0:3927c6d8ad1f | 112 | 0.00220558455176705, |
baxterja | 0:3927c6d8ad1f | 113 | 0.00222092552588268, |
baxterja | 0:3927c6d8ad1f | 114 | 0.00225605241370255, |
baxterja | 0:3927c6d8ad1f | 115 | 0.00226646783939495, |
baxterja | 0:3927c6d8ad1f | 116 | 0.00230092287432329, |
baxterja | 0:3927c6d8ad1f | 117 | 0.00229715073318613, |
baxterja | 0:3927c6d8ad1f | 118 | 0.00232623464517315, |
baxterja | 0:3927c6d8ad1f | 119 | 0.00225358157041652, |
baxterja | 0:3927c6d8ad1f | 120 | 0.00237497949175132, |
baxterja | 0:3927c6d8ad1f | 121 | 0.00240962754549243, |
baxterja | 0:3927c6d8ad1f | 122 | 0.00239489319998042, |
baxterja | 0:3927c6d8ad1f | 123 | 0.00243168327631056, |
baxterja | 0:3927c6d8ad1f | 124 | 0.00244169878557599, |
baxterja | 0:3927c6d8ad1f | 125 | 0.00247033152393311, |
baxterja | 0:3927c6d8ad1f | 126 | 0.00248484040428462, |
baxterja | 0:3927c6d8ad1f | 127 | 0.00250942587726843, |
baxterja | 0:3927c6d8ad1f | 128 | 0.00252568320446658, |
baxterja | 0:3927c6d8ad1f | 129 | 0.00254761155808375, |
baxterja | 0:3927c6d8ad1f | 130 | 0.00256464167177514, |
baxterja | 0:3927c6d8ad1f | 131 | 0.00258446154111681, |
baxterja | 0:3927c6d8ad1f | 132 | 0.00260244294098803, |
baxterja | 0:3927c6d8ad1f | 133 | 0.00262131473283837, |
baxterja | 0:3927c6d8ad1f | 134 | 0.00264164776893963, |
baxterja | 0:3927c6d8ad1f | 135 | 0.00266111980952651, |
baxterja | 0:3927c6d8ad1f | 136 | 0.00268646307379128, |
baxterja | 0:3927c6d8ad1f | 137 | 0.00270761719256829, |
baxterja | 0:3927c6d8ad1f | 138 | 0.00274205375475237, |
baxterja | 0:3927c6d8ad1f | 139 | 0.00274149898919641, |
baxterja | 0:3927c6d8ad1f | 140 | 0.00274945418608348, |
baxterja | 0:3927c6d8ad1f | 141 | 0.00279082346790514, |
baxterja | 0:3927c6d8ad1f | 142 | 0.00279778186887203, |
baxterja | 0:3927c6d8ad1f | 143 | 0.00282250662520772, |
baxterja | 0:3927c6d8ad1f | 144 | 0.00283603752336853, |
baxterja | 0:3927c6d8ad1f | 145 | 0.00285874465133605, |
baxterja | 0:3927c6d8ad1f | 146 | 0.00287407059058428, |
baxterja | 0:3927c6d8ad1f | 147 | 0.00289570516626933, |
baxterja | 0:3927c6d8ad1f | 148 | 0.00291199026392523, |
baxterja | 0:3927c6d8ad1f | 149 | 0.00293311428662787, |
baxterja | 0:3927c6d8ad1f | 150 | 0.00295009345796840, |
baxterja | 0:3927c6d8ad1f | 151 | 0.00297044279838009, |
baxterja | 0:3927c6d8ad1f | 152 | 0.00298714691522817, |
baxterja | 0:3927c6d8ad1f | 153 | 0.00300581268506110, |
baxterja | 0:3927c6d8ad1f | 154 | 0.00302120747953588, |
baxterja | 0:3927c6d8ad1f | 155 | 0.00303732312039544, |
baxterja | 0:3927c6d8ad1f | 156 | 0.00305157040082656, |
baxterja | 0:3927c6d8ad1f | 157 | 0.00306643736356742, |
baxterja | 0:3927c6d8ad1f | 158 | 0.00308869428115324, |
baxterja | 0:3927c6d8ad1f | 159 | 0.00311307778862543, |
baxterja | 0:3927c6d8ad1f | 160 | 0.00311424353468359, |
baxterja | 0:3927c6d8ad1f | 161 | 0.00313896920891965, |
baxterja | 0:3927c6d8ad1f | 162 | 0.00315257957066846, |
baxterja | 0:3927c6d8ad1f | 163 | 0.00317063676755790, |
baxterja | 0:3927c6d8ad1f | 164 | 0.00318404202174892, |
baxterja | 0:3927c6d8ad1f | 165 | 0.00320106537708682, |
baxterja | 0:3927c6d8ad1f | 166 | 0.00321431574769385, |
baxterja | 0:3927c6d8ad1f | 167 | 0.00323043068211672, |
baxterja | 0:3927c6d8ad1f | 168 | 0.00324309082121968, |
baxterja | 0:3927c6d8ad1f | 169 | 0.00325830171776266, |
baxterja | 0:3927c6d8ad1f | 170 | 0.00327070521989578, |
baxterja | 0:3927c6d8ad1f | 171 | 0.00328578417067009, |
baxterja | 0:3927c6d8ad1f | 172 | 0.00329857943310240, |
baxterja | 0:3927c6d8ad1f | 173 | 0.00331411607506732, |
baxterja | 0:3927c6d8ad1f | 174 | 0.00332746621803916, |
baxterja | 0:3927c6d8ad1f | 175 | 0.00334278731970893, |
baxterja | 0:3927c6d8ad1f | 176 | 0.00335490587728655, |
baxterja | 0:3927c6d8ad1f | 177 | 0.00336582204821038, |
baxterja | 0:3927c6d8ad1f | 178 | 0.00337340614667260, |
baxterja | 0:3927c6d8ad1f | 179 | 0.00339593158768486, |
baxterja | 0:3927c6d8ad1f | 180 | 0.00340201380261714, |
baxterja | 0:3927c6d8ad1f | 181 | 0.00341358117591052, |
baxterja | 0:3927c6d8ad1f | 182 | 0.00342527970126076, |
baxterja | 0:3927c6d8ad1f | 183 | 0.00343729081346655, |
baxterja | 0:3927c6d8ad1f | 184 | 0.00344788640610150, |
baxterja | 0:3927c6d8ad1f | 185 | 0.00345950626709297, |
baxterja | 0:3927c6d8ad1f | 186 | 0.00346977560789619, |
baxterja | 0:3927c6d8ad1f | 187 | 0.00348137861989829, |
baxterja | 0:3927c6d8ad1f | 188 | 0.00349145780595203, |
baxterja | 0:3927c6d8ad1f | 189 | 0.00350258155909523, |
baxterja | 0:3927c6d8ad1f | 190 | 0.00351179661900564, |
baxterja | 0:3927c6d8ad1f | 191 | 0.00352191431883533, |
baxterja | 0:3927c6d8ad1f | 192 | 0.00352996025917487, |
baxterja | 0:3927c6d8ad1f | 193 | 0.00353918710384162, |
baxterja | 0:3927c6d8ad1f | 194 | 0.00354686935571502, |
baxterja | 0:3927c6d8ad1f | 195 | 0.00355665353091388, |
baxterja | 0:3927c6d8ad1f | 196 | 0.00356587002173744, |
baxterja | 0:3927c6d8ad1f | 197 | 0.00357689031711855, |
baxterja | 0:3927c6d8ad1f | 198 | 0.00357801462512765, |
baxterja | 0:3927c6d8ad1f | 199 | 0.00359006856669697, |
baxterja | 0:3927c6d8ad1f | 200 | 0.00359950458629560, |
baxterja | 0:3927c6d8ad1f | 201 | 0.00360494297850754, |
baxterja | 0:3927c6d8ad1f | 202 | 0.00361233039031660, |
baxterja | 0:3927c6d8ad1f | 203 | 0.00361922292724758, |
baxterja | 0:3927c6d8ad1f | 204 | 0.00362591596791954, |
baxterja | 0:3927c6d8ad1f | 205 | 0.00363226321494882, |
baxterja | 0:3927c6d8ad1f | 206 | 0.00363786374022990, |
baxterja | 0:3927c6d8ad1f | 207 | 0.00364352288365460, |
baxterja | 0:3927c6d8ad1f | 208 | 0.00364862849480178, |
baxterja | 0:3927c6d8ad1f | 209 | 0.00365423915635453, |
baxterja | 0:3927c6d8ad1f | 210 | 0.00365927328685460, |
baxterja | 0:3927c6d8ad1f | 211 | 0.00366494409556548, |
baxterja | 0:3927c6d8ad1f | 212 | 0.00366963573779647, |
baxterja | 0:3927c6d8ad1f | 213 | 0.00367457381745451, |
baxterja | 0:3927c6d8ad1f | 214 | 0.00367783024950588, |
baxterja | 0:3927c6d8ad1f | 215 | 0.00368130382332767, |
baxterja | 0:3927c6d8ad1f | 216 | 0.00368329710162579, |
baxterja | 0:3927c6d8ad1f | 217 | 0.00369126347001870, |
baxterja | 0:3927c6d8ad1f | 218 | 0.00369087449038130, |
baxterja | 0:3927c6d8ad1f | 219 | 0.00369079790741907, |
baxterja | 0:3927c6d8ad1f | 220 | 0.00369643982204526, |
baxterja | 0:3927c6d8ad1f | 221 | 0.00369766453946281, |
baxterja | 0:3927c6d8ad1f | 222 | 0.00369941489929772, |
baxterja | 0:3927c6d8ad1f | 223 | 0.00370041177271180, |
baxterja | 0:3927c6d8ad1f | 224 | 0.00370189241602639, |
baxterja | 0:3927c6d8ad1f | 225 | 0.00370304548909528, |
baxterja | 0:3927c6d8ad1f | 226 | 0.00370413802604405, |
baxterja | 0:3927c6d8ad1f | 227 | 0.00370464038533780, |
baxterja | 0:3927c6d8ad1f | 228 | 0.00370464038533780, |
baxterja | 0:3927c6d8ad1f | 229 | 0.00370413802604405, |
baxterja | 0:3927c6d8ad1f | 230 | 0.00370304548909528, |
baxterja | 0:3927c6d8ad1f | 231 | 0.00370189241602639, |
baxterja | 0:3927c6d8ad1f | 232 | 0.00370041177271180, |
baxterja | 0:3927c6d8ad1f | 233 | 0.00369941489929772, |
baxterja | 0:3927c6d8ad1f | 234 | 0.00369766453946281, |
baxterja | 0:3927c6d8ad1f | 235 | 0.00369643982204526, |
baxterja | 0:3927c6d8ad1f | 236 | 0.00369079790741907, |
baxterja | 0:3927c6d8ad1f | 237 | 0.00369087449038130, |
baxterja | 0:3927c6d8ad1f | 238 | 0.00369126347001870, |
baxterja | 0:3927c6d8ad1f | 239 | 0.00368329710162579, |
baxterja | 0:3927c6d8ad1f | 240 | 0.00368130382332767, |
baxterja | 0:3927c6d8ad1f | 241 | 0.00367783024950588, |
baxterja | 0:3927c6d8ad1f | 242 | 0.00367457381745451, |
baxterja | 0:3927c6d8ad1f | 243 | 0.00366963573779647, |
baxterja | 0:3927c6d8ad1f | 244 | 0.00366494409556548, |
baxterja | 0:3927c6d8ad1f | 245 | 0.00365927328685460, |
baxterja | 0:3927c6d8ad1f | 246 | 0.00365423915635453, |
baxterja | 0:3927c6d8ad1f | 247 | 0.00364862849480178, |
baxterja | 0:3927c6d8ad1f | 248 | 0.00364352288365460, |
baxterja | 0:3927c6d8ad1f | 249 | 0.00363786374022990, |
baxterja | 0:3927c6d8ad1f | 250 | 0.00363226321494882, |
baxterja | 0:3927c6d8ad1f | 251 | 0.00362591596791954, |
baxterja | 0:3927c6d8ad1f | 252 | 0.00361922292724758, |
baxterja | 0:3927c6d8ad1f | 253 | 0.00361233039031660, |
baxterja | 0:3927c6d8ad1f | 254 | 0.00360494297850754, |
baxterja | 0:3927c6d8ad1f | 255 | 0.00359950458629560, |
baxterja | 0:3927c6d8ad1f | 256 | 0.00359006856669697, |
baxterja | 0:3927c6d8ad1f | 257 | 0.00357801462512765, |
baxterja | 0:3927c6d8ad1f | 258 | 0.00357689031711855, |
baxterja | 0:3927c6d8ad1f | 259 | 0.00356587002173744, |
baxterja | 0:3927c6d8ad1f | 260 | 0.00355665353091388, |
baxterja | 0:3927c6d8ad1f | 261 | 0.00354686935571502, |
baxterja | 0:3927c6d8ad1f | 262 | 0.00353918710384162, |
baxterja | 0:3927c6d8ad1f | 263 | 0.00352996025917487, |
baxterja | 0:3927c6d8ad1f | 264 | 0.00352191431883533, |
baxterja | 0:3927c6d8ad1f | 265 | 0.00351179661900564, |
baxterja | 0:3927c6d8ad1f | 266 | 0.00350258155909523, |
baxterja | 0:3927c6d8ad1f | 267 | 0.00349145780595203, |
baxterja | 0:3927c6d8ad1f | 268 | 0.00348137861989829, |
baxterja | 0:3927c6d8ad1f | 269 | 0.00346977560789619, |
baxterja | 0:3927c6d8ad1f | 270 | 0.00345950626709297, |
baxterja | 0:3927c6d8ad1f | 271 | 0.00344788640610150, |
baxterja | 0:3927c6d8ad1f | 272 | 0.00343729081346655, |
baxterja | 0:3927c6d8ad1f | 273 | 0.00342527970126076, |
baxterja | 0:3927c6d8ad1f | 274 | 0.00341358117591052, |
baxterja | 0:3927c6d8ad1f | 275 | 0.00340201380261714, |
baxterja | 0:3927c6d8ad1f | 276 | 0.00339593158768486, |
baxterja | 0:3927c6d8ad1f | 277 | 0.00337340614667260, |
baxterja | 0:3927c6d8ad1f | 278 | 0.00336582204821038, |
baxterja | 0:3927c6d8ad1f | 279 | 0.00335490587728655, |
baxterja | 0:3927c6d8ad1f | 280 | 0.00334278731970893, |
baxterja | 0:3927c6d8ad1f | 281 | 0.00332746621803916, |
baxterja | 0:3927c6d8ad1f | 282 | 0.00331411607506732, |
baxterja | 0:3927c6d8ad1f | 283 | 0.00329857943310240, |
baxterja | 0:3927c6d8ad1f | 284 | 0.00328578417067009, |
baxterja | 0:3927c6d8ad1f | 285 | 0.00327070521989578, |
baxterja | 0:3927c6d8ad1f | 286 | 0.00325830171776266, |
baxterja | 0:3927c6d8ad1f | 287 | 0.00324309082121968, |
baxterja | 0:3927c6d8ad1f | 288 | 0.00323043068211672, |
baxterja | 0:3927c6d8ad1f | 289 | 0.00321431574769385, |
baxterja | 0:3927c6d8ad1f | 290 | 0.00320106537708682, |
baxterja | 0:3927c6d8ad1f | 291 | 0.00318404202174892, |
baxterja | 0:3927c6d8ad1f | 292 | 0.00317063676755790, |
baxterja | 0:3927c6d8ad1f | 293 | 0.00315257957066846, |
baxterja | 0:3927c6d8ad1f | 294 | 0.00313896920891965, |
baxterja | 0:3927c6d8ad1f | 295 | 0.00311424353468359, |
baxterja | 0:3927c6d8ad1f | 296 | 0.00311307778862543, |
baxterja | 0:3927c6d8ad1f | 297 | 0.00308869428115324, |
baxterja | 0:3927c6d8ad1f | 298 | 0.00306643736356742, |
baxterja | 0:3927c6d8ad1f | 299 | 0.00305157040082656, |
baxterja | 0:3927c6d8ad1f | 300 | 0.00303732312039544, |
baxterja | 0:3927c6d8ad1f | 301 | 0.00302120747953588, |
baxterja | 0:3927c6d8ad1f | 302 | 0.00300581268506110, |
baxterja | 0:3927c6d8ad1f | 303 | 0.00298714691522817, |
baxterja | 0:3927c6d8ad1f | 304 | 0.00297044279838009, |
baxterja | 0:3927c6d8ad1f | 305 | 0.00295009345796840, |
baxterja | 0:3927c6d8ad1f | 306 | 0.00293311428662787, |
baxterja | 0:3927c6d8ad1f | 307 | 0.00291199026392523, |
baxterja | 0:3927c6d8ad1f | 308 | 0.00289570516626933, |
baxterja | 0:3927c6d8ad1f | 309 | 0.00287407059058428, |
baxterja | 0:3927c6d8ad1f | 310 | 0.00285874465133605, |
baxterja | 0:3927c6d8ad1f | 311 | 0.00283603752336853, |
baxterja | 0:3927c6d8ad1f | 312 | 0.00282250662520772, |
baxterja | 0:3927c6d8ad1f | 313 | 0.00279778186887203, |
baxterja | 0:3927c6d8ad1f | 314 | 0.00279082346790514, |
baxterja | 0:3927c6d8ad1f | 315 | 0.00274945418608348, |
baxterja | 0:3927c6d8ad1f | 316 | 0.00274149898919641, |
baxterja | 0:3927c6d8ad1f | 317 | 0.00274205375475237, |
baxterja | 0:3927c6d8ad1f | 318 | 0.00270761719256829, |
baxterja | 0:3927c6d8ad1f | 319 | 0.00268646307379128, |
baxterja | 0:3927c6d8ad1f | 320 | 0.00266111980952651, |
baxterja | 0:3927c6d8ad1f | 321 | 0.00264164776893963, |
baxterja | 0:3927c6d8ad1f | 322 | 0.00262131473283837, |
baxterja | 0:3927c6d8ad1f | 323 | 0.00260244294098803, |
baxterja | 0:3927c6d8ad1f | 324 | 0.00258446154111681, |
baxterja | 0:3927c6d8ad1f | 325 | 0.00256464167177514, |
baxterja | 0:3927c6d8ad1f | 326 | 0.00254761155808375, |
baxterja | 0:3927c6d8ad1f | 327 | 0.00252568320446658, |
baxterja | 0:3927c6d8ad1f | 328 | 0.00250942587726843, |
baxterja | 0:3927c6d8ad1f | 329 | 0.00248484040428462, |
baxterja | 0:3927c6d8ad1f | 330 | 0.00247033152393311, |
baxterja | 0:3927c6d8ad1f | 331 | 0.00244169878557599, |
baxterja | 0:3927c6d8ad1f | 332 | 0.00243168327631056, |
baxterja | 0:3927c6d8ad1f | 333 | 0.00239489319998042, |
baxterja | 0:3927c6d8ad1f | 334 | 0.00240962754549243, |
baxterja | 0:3927c6d8ad1f | 335 | 0.00237497949175132, |
baxterja | 0:3927c6d8ad1f | 336 | 0.00225358157041652, |
baxterja | 0:3927c6d8ad1f | 337 | 0.00232623464517315, |
baxterja | 0:3927c6d8ad1f | 338 | 0.00229715073318613, |
baxterja | 0:3927c6d8ad1f | 339 | 0.00230092287432329, |
baxterja | 0:3927c6d8ad1f | 340 | 0.00226646783939495, |
baxterja | 0:3927c6d8ad1f | 341 | 0.00225605241370255, |
baxterja | 0:3927c6d8ad1f | 342 | 0.00222092552588268, |
baxterja | 0:3927c6d8ad1f | 343 | 0.00220558455176705, |
baxterja | 0:3927c6d8ad1f | 344 | 0.00217146660668663, |
baxterja | 0:3927c6d8ad1f | 345 | 0.00215469918380619, |
baxterja | 0:3927c6d8ad1f | 346 | 0.00212232982776793, |
baxterja | 0:3927c6d8ad1f | 347 | 0.00210551867296513, |
baxterja | 0:3927c6d8ad1f | 348 | 0.00207476466732652, |
baxterja | 0:3927c6d8ad1f | 349 | 0.00205837690374429, |
baxterja | 0:3927c6d8ad1f | 350 | 0.00202912020658817, |
baxterja | 0:3927c6d8ad1f | 351 | 0.00201327315570587, |
baxterja | 0:3927c6d8ad1f | 352 | 0.00198494885848217, |
baxterja | 0:3927c6d8ad1f | 353 | 0.00196838475539374, |
baxterja | 0:3927c6d8ad1f | 354 | 0.00194058236914933, |
baxterja | 0:3927c6d8ad1f | 355 | 0.0861805974737537 |
baxterja | 0:3927c6d8ad1f | 356 | }; |
baxterja | 0:3927c6d8ad1f | 357 | |
baxterja | 0:3927c6d8ad1f | 358 | |
baxterja | 0:3927c6d8ad1f | 359 | // Coefficients for FIR band-pass filter (single-precision floating) |
baxterja | 0:3927c6d8ad1f | 360 | // Order: 255 |
baxterja | 0:3927c6d8ad1f | 361 | // Fs = 10000 |
baxterja | 0:3927c6d8ad1f | 362 | // Fstop1 = 140 |
baxterja | 0:3927c6d8ad1f | 363 | // Fpass1 = 180 |
baxterja | 0:3927c6d8ad1f | 364 | // Fpass2 = 200 |
baxterja | 0:3927c6d8ad1f | 365 | // Fstop2 = 240 |
baxterja | 0:3927c6d8ad1f | 366 | // Density Factor 20 |
baxterja | 0:3927c6d8ad1f | 367 | float bp_filter_coeff[bp_fir_length] = { |
baxterja | 0:3927c6d8ad1f | 368 | -0.0222569832875342, |
baxterja | 0:3927c6d8ad1f | 369 | -0.000668571820934435, |
baxterja | 0:3927c6d8ad1f | 370 | -0.000617098880070943, |
baxterja | 0:3927c6d8ad1f | 371 | -0.000526912832180624, |
baxterja | 0:3927c6d8ad1f | 372 | -0.000394083108191473, |
baxterja | 0:3927c6d8ad1f | 373 | -0.000224044823896433, |
baxterja | 0:3927c6d8ad1f | 374 | -1.40519139447993e-05, |
baxterja | 0:3927c6d8ad1f | 375 | 0.000228753985399507, |
baxterja | 0:3927c6d8ad1f | 376 | 0.000506043646368515, |
baxterja | 0:3927c6d8ad1f | 377 | 0.000809081179935479, |
baxterja | 0:3927c6d8ad1f | 378 | 0.00113886884349691, |
baxterja | 0:3927c6d8ad1f | 379 | 0.00148482706293391, |
baxterja | 0:3927c6d8ad1f | 380 | 0.00184749122790831, |
baxterja | 0:3927c6d8ad1f | 381 | 0.00221412926605753, |
baxterja | 0:3927c6d8ad1f | 382 | 0.00258556196728641, |
baxterja | 0:3927c6d8ad1f | 383 | 0.00294623650522875, |
baxterja | 0:3927c6d8ad1f | 384 | 0.00329828480589904, |
baxterja | 0:3927c6d8ad1f | 385 | 0.00362103051636677, |
baxterja | 0:3927c6d8ad1f | 386 | 0.00392129596654753, |
baxterja | 0:3927c6d8ad1f | 387 | 0.00416037700790689, |
baxterja | 0:3927c6d8ad1f | 388 | 0.00440774110765089, |
baxterja | 0:3927c6d8ad1f | 389 | 0.00458742109894213, |
baxterja | 0:3927c6d8ad1f | 390 | 0.00470432883601479, |
baxterja | 0:3927c6d8ad1f | 391 | 0.00477604326343940, |
baxterja | 0:3927c6d8ad1f | 392 | 0.00477932011891816, |
baxterja | 0:3927c6d8ad1f | 393 | 0.00472369327143935, |
baxterja | 0:3927c6d8ad1f | 394 | 0.00459673449069964, |
baxterja | 0:3927c6d8ad1f | 395 | 0.00440550863345307, |
baxterja | 0:3927c6d8ad1f | 396 | 0.00414276809544121, |
baxterja | 0:3927c6d8ad1f | 397 | 0.00381610310764620, |
baxterja | 0:3927c6d8ad1f | 398 | 0.00342194240814885, |
baxterja | 0:3927c6d8ad1f | 399 | 0.00296924934443244, |
baxterja | 0:3927c6d8ad1f | 400 | 0.00245734168541197, |
baxterja | 0:3927c6d8ad1f | 401 | 0.00189704915840860, |
baxterja | 0:3927c6d8ad1f | 402 | 0.00128969301635370, |
baxterja | 0:3927c6d8ad1f | 403 | 0.000647875455120701, |
baxterja | 0:3927c6d8ad1f | 404 | -2.63604406483334e-05, |
baxterja | 0:3927c6d8ad1f | 405 | -0.000717680016887559, |
baxterja | 0:3927c6d8ad1f | 406 | -0.00142424098193147, |
baxterja | 0:3927c6d8ad1f | 407 | -0.00211871793213848, |
baxterja | 0:3927c6d8ad1f | 408 | -0.00280466259597701, |
baxterja | 0:3927c6d8ad1f | 409 | -0.00347302243192041, |
baxterja | 0:3927c6d8ad1f | 410 | -0.00410155649476450, |
baxterja | 0:3927c6d8ad1f | 411 | -0.00468849572012807, |
baxterja | 0:3927c6d8ad1f | 412 | -0.00521831221732055, |
baxterja | 0:3927c6d8ad1f | 413 | -0.00568473286208729, |
baxterja | 0:3927c6d8ad1f | 414 | -0.00607617428224791, |
baxterja | 0:3927c6d8ad1f | 415 | -0.00638642038264520, |
baxterja | 0:3927c6d8ad1f | 416 | -0.00660654522935380, |
baxterja | 0:3927c6d8ad1f | 417 | -0.00673201343716618, |
baxterja | 0:3927c6d8ad1f | 418 | -0.00675686946570070, |
baxterja | 0:3927c6d8ad1f | 419 | -0.00667909912380224, |
baxterja | 0:3927c6d8ad1f | 420 | -0.00649590629000032, |
baxterja | 0:3927c6d8ad1f | 421 | -0.00620853153050349, |
baxterja | 0:3927c6d8ad1f | 422 | -0.00581778091366643, |
baxterja | 0:3927c6d8ad1f | 423 | -0.00532861669082900, |
baxterja | 0:3927c6d8ad1f | 424 | -0.00474475510188909, |
baxterja | 0:3927c6d8ad1f | 425 | -0.00407398377208893, |
baxterja | 0:3927c6d8ad1f | 426 | -0.00332036080041792, |
baxterja | 0:3927c6d8ad1f | 427 | -0.00249639621821765, |
baxterja | 0:3927c6d8ad1f | 428 | -0.00161692422174727, |
baxterja | 0:3927c6d8ad1f | 429 | -0.000686114637835394, |
baxterja | 0:3927c6d8ad1f | 430 | 0.000276969889091618, |
baxterja | 0:3927c6d8ad1f | 431 | 0.00126158838172335, |
baxterja | 0:3927c6d8ad1f | 432 | 0.00225109525801695, |
baxterja | 0:3927c6d8ad1f | 433 | 0.00323185932244432, |
baxterja | 0:3927c6d8ad1f | 434 | 0.00418763727591780, |
baxterja | 0:3927c6d8ad1f | 435 | 0.00510440961298076, |
baxterja | 0:3927c6d8ad1f | 436 | 0.00596653561986331, |
baxterja | 0:3927c6d8ad1f | 437 | 0.00676059725642517, |
baxterja | 0:3927c6d8ad1f | 438 | 0.00747245231692098, |
baxterja | 0:3927c6d8ad1f | 439 | 0.00809037791844765, |
baxterja | 0:3927c6d8ad1f | 440 | 0.00860240336852779, |
baxterja | 0:3927c6d8ad1f | 441 | 0.00899909501543391, |
baxterja | 0:3927c6d8ad1f | 442 | 0.00927138366550150, |
baxterja | 0:3927c6d8ad1f | 443 | 0.00941337467689702, |
baxterja | 0:3927c6d8ad1f | 444 | 0.00942035086127182, |
baxterja | 0:3927c6d8ad1f | 445 | 0.00929102977283836, |
baxterja | 0:3927c6d8ad1f | 446 | 0.00902403254438426, |
baxterja | 0:3927c6d8ad1f | 447 | 0.00861862088073253, |
baxterja | 0:3927c6d8ad1f | 448 | 0.00808277337301294, |
baxterja | 0:3927c6d8ad1f | 449 | 0.00741973293721300, |
baxterja | 0:3927c6d8ad1f | 450 | 0.00663808854880170, |
baxterja | 0:3927c6d8ad1f | 451 | 0.00574764652047989, |
baxterja | 0:3927c6d8ad1f | 452 | 0.00475963542671197, |
baxterja | 0:3927c6d8ad1f | 453 | 0.00368791267821526, |
baxterja | 0:3927c6d8ad1f | 454 | 0.00254692028134653, |
baxterja | 0:3927c6d8ad1f | 455 | 0.00135318490817447, |
baxterja | 0:3927c6d8ad1f | 456 | 0.000123381816987046, |
baxterja | 0:3927c6d8ad1f | 457 | -0.00112406829604574, |
baxterja | 0:3927c6d8ad1f | 458 | -0.00237116204428360, |
baxterja | 0:3927c6d8ad1f | 459 | -0.00359884130528209, |
baxterja | 0:3927c6d8ad1f | 460 | -0.00478919843371992, |
baxterja | 0:3927c6d8ad1f | 461 | -0.00592368092266592, |
baxterja | 0:3927c6d8ad1f | 462 | -0.00698521179296005, |
baxterja | 0:3927c6d8ad1f | 463 | -0.00795630134054653, |
baxterja | 0:3927c6d8ad1f | 464 | -0.00882180545791639, |
baxterja | 0:3927c6d8ad1f | 465 | -0.00956745282162880, |
baxterja | 0:3927c6d8ad1f | 466 | -0.0101826820881787, |
baxterja | 0:3927c6d8ad1f | 467 | -0.0106544412214730, |
baxterja | 0:3927c6d8ad1f | 468 | -0.0109757370305086, |
baxterja | 0:3927c6d8ad1f | 469 | -0.0111401872280476, |
baxterja | 0:3927c6d8ad1f | 470 | -0.0111439989937533, |
baxterja | 0:3927c6d8ad1f | 471 | -0.0109860306403343, |
baxterja | 0:3927c6d8ad1f | 472 | -0.0106669796725910, |
baxterja | 0:3927c6d8ad1f | 473 | -0.0101903953657629, |
baxterja | 0:3927c6d8ad1f | 474 | -0.00956214881730735, |
baxterja | 0:3927c6d8ad1f | 475 | -0.00879053537462268, |
baxterja | 0:3927c6d8ad1f | 476 | -0.00788592056463026, |
baxterja | 0:3927c6d8ad1f | 477 | -0.00686079789488663, |
baxterja | 0:3927c6d8ad1f | 478 | -0.00572962138717207, |
baxterja | 0:3927c6d8ad1f | 479 | -0.00450868146307788, |
baxterja | 0:3927c6d8ad1f | 480 | -0.00321565789521111, |
baxterja | 0:3927c6d8ad1f | 481 | -0.00186931333282453, |
baxterja | 0:3927c6d8ad1f | 482 | -0.000489113370880662, |
baxterja | 0:3927c6d8ad1f | 483 | 0.000904730267919755, |
baxterja | 0:3927c6d8ad1f | 484 | 0.00229132886837385, |
baxterja | 0:3927c6d8ad1f | 485 | 0.00364982806960963, |
baxterja | 0:3927c6d8ad1f | 486 | 0.00496072866543581, |
baxterja | 0:3927c6d8ad1f | 487 | 0.00620453967164588, |
baxterja | 0:3927c6d8ad1f | 488 | 0.00736222523931905, |
baxterja | 0:3927c6d8ad1f | 489 | 0.00841655902006347, |
baxterja | 0:3927c6d8ad1f | 490 | 0.00935134258076706, |
baxterja | 0:3927c6d8ad1f | 491 | 0.0101530565640308, |
baxterja | 0:3927c6d8ad1f | 492 | 0.0108094111402764, |
baxterja | 0:3927c6d8ad1f | 493 | 0.0113105535457012, |
baxterja | 0:3927c6d8ad1f | 494 | 0.0116487913595070, |
baxterja | 0:3927c6d8ad1f | 495 | 0.0118191627771399, |
baxterja | 0:3927c6d8ad1f | 496 | 0.0118191627771399, |
baxterja | 0:3927c6d8ad1f | 497 | 0.0116487913595070, |
baxterja | 0:3927c6d8ad1f | 498 | 0.0113105535457012, |
baxterja | 0:3927c6d8ad1f | 499 | 0.0108094111402764, |
baxterja | 0:3927c6d8ad1f | 500 | 0.0101530565640308, |
baxterja | 0:3927c6d8ad1f | 501 | 0.00935134258076706, |
baxterja | 0:3927c6d8ad1f | 502 | 0.00841655902006347, |
baxterja | 0:3927c6d8ad1f | 503 | 0.00736222523931905, |
baxterja | 0:3927c6d8ad1f | 504 | 0.00620453967164588, |
baxterja | 0:3927c6d8ad1f | 505 | 0.00496072866543581, |
baxterja | 0:3927c6d8ad1f | 506 | 0.00364982806960963, |
baxterja | 0:3927c6d8ad1f | 507 | 0.00229132886837385, |
baxterja | 0:3927c6d8ad1f | 508 | 0.000904730267919755, |
baxterja | 0:3927c6d8ad1f | 509 | -0.000489113370880662, |
baxterja | 0:3927c6d8ad1f | 510 | -0.00186931333282453, |
baxterja | 0:3927c6d8ad1f | 511 | -0.00321565789521111, |
baxterja | 0:3927c6d8ad1f | 512 | -0.00450868146307788, |
baxterja | 0:3927c6d8ad1f | 513 | -0.00572962138717207, |
baxterja | 0:3927c6d8ad1f | 514 | -0.00686079789488663, |
baxterja | 0:3927c6d8ad1f | 515 | -0.00788592056463026, |
baxterja | 0:3927c6d8ad1f | 516 | -0.00879053537462268, |
baxterja | 0:3927c6d8ad1f | 517 | -0.00956214881730735, |
baxterja | 0:3927c6d8ad1f | 518 | -0.0101903953657629, |
baxterja | 0:3927c6d8ad1f | 519 | -0.0106669796725910, |
baxterja | 0:3927c6d8ad1f | 520 | -0.0109860306403343, |
baxterja | 0:3927c6d8ad1f | 521 | -0.0111439989937533, |
baxterja | 0:3927c6d8ad1f | 522 | -0.0111401872280476, |
baxterja | 0:3927c6d8ad1f | 523 | -0.0109757370305086, |
baxterja | 0:3927c6d8ad1f | 524 | -0.0106544412214730, |
baxterja | 0:3927c6d8ad1f | 525 | -0.0101826820881787, |
baxterja | 0:3927c6d8ad1f | 526 | -0.00956745282162880, |
baxterja | 0:3927c6d8ad1f | 527 | -0.00882180545791639, |
baxterja | 0:3927c6d8ad1f | 528 | -0.00795630134054653, |
baxterja | 0:3927c6d8ad1f | 529 | -0.00698521179296005, |
baxterja | 0:3927c6d8ad1f | 530 | -0.00592368092266592, |
baxterja | 0:3927c6d8ad1f | 531 | -0.00478919843371992, |
baxterja | 0:3927c6d8ad1f | 532 | -0.00359884130528209, |
baxterja | 0:3927c6d8ad1f | 533 | -0.00237116204428360, |
baxterja | 0:3927c6d8ad1f | 534 | -0.00112406829604574, |
baxterja | 0:3927c6d8ad1f | 535 | 0.000123381816987046, |
baxterja | 0:3927c6d8ad1f | 536 | 0.00135318490817447, |
baxterja | 0:3927c6d8ad1f | 537 | 0.00254692028134653, |
baxterja | 0:3927c6d8ad1f | 538 | 0.00368791267821526, |
baxterja | 0:3927c6d8ad1f | 539 | 0.00475963542671197, |
baxterja | 0:3927c6d8ad1f | 540 | 0.00574764652047989, |
baxterja | 0:3927c6d8ad1f | 541 | 0.00663808854880170, |
baxterja | 0:3927c6d8ad1f | 542 | 0.00741973293721300, |
baxterja | 0:3927c6d8ad1f | 543 | 0.00808277337301294, |
baxterja | 0:3927c6d8ad1f | 544 | 0.00861862088073253, |
baxterja | 0:3927c6d8ad1f | 545 | 0.00902403254438426, |
baxterja | 0:3927c6d8ad1f | 546 | 0.00929102977283836, |
baxterja | 0:3927c6d8ad1f | 547 | 0.00942035086127182, |
baxterja | 0:3927c6d8ad1f | 548 | 0.00941337467689702, |
baxterja | 0:3927c6d8ad1f | 549 | 0.00927138366550150, |
baxterja | 0:3927c6d8ad1f | 550 | 0.00899909501543391, |
baxterja | 0:3927c6d8ad1f | 551 | 0.00860240336852779, |
baxterja | 0:3927c6d8ad1f | 552 | 0.00809037791844765, |
baxterja | 0:3927c6d8ad1f | 553 | 0.00747245231692098, |
baxterja | 0:3927c6d8ad1f | 554 | 0.00676059725642517, |
baxterja | 0:3927c6d8ad1f | 555 | 0.00596653561986331, |
baxterja | 0:3927c6d8ad1f | 556 | 0.00510440961298076, |
baxterja | 0:3927c6d8ad1f | 557 | 0.00418763727591780, |
baxterja | 0:3927c6d8ad1f | 558 | 0.00323185932244432, |
baxterja | 0:3927c6d8ad1f | 559 | 0.00225109525801695, |
baxterja | 0:3927c6d8ad1f | 560 | 0.00126158838172335, |
baxterja | 0:3927c6d8ad1f | 561 | 0.000276969889091618, |
baxterja | 0:3927c6d8ad1f | 562 | -0.000686114637835394, |
baxterja | 0:3927c6d8ad1f | 563 | -0.00161692422174727, |
baxterja | 0:3927c6d8ad1f | 564 | -0.00249639621821765, |
baxterja | 0:3927c6d8ad1f | 565 | -0.00332036080041792, |
baxterja | 0:3927c6d8ad1f | 566 | -0.00407398377208893, |
baxterja | 0:3927c6d8ad1f | 567 | -0.00474475510188909, |
baxterja | 0:3927c6d8ad1f | 568 | -0.00532861669082900, |
baxterja | 0:3927c6d8ad1f | 569 | -0.00581778091366643, |
baxterja | 0:3927c6d8ad1f | 570 | -0.00620853153050349, |
baxterja | 0:3927c6d8ad1f | 571 | -0.00649590629000032, |
baxterja | 0:3927c6d8ad1f | 572 | -0.00667909912380224, |
baxterja | 0:3927c6d8ad1f | 573 | -0.00675686946570070, |
baxterja | 0:3927c6d8ad1f | 574 | -0.00673201343716618, |
baxterja | 0:3927c6d8ad1f | 575 | -0.00660654522935380, |
baxterja | 0:3927c6d8ad1f | 576 | -0.00638642038264520, |
baxterja | 0:3927c6d8ad1f | 577 | -0.00607617428224791, |
baxterja | 0:3927c6d8ad1f | 578 | -0.00568473286208729, |
baxterja | 0:3927c6d8ad1f | 579 | -0.00521831221732055, |
baxterja | 0:3927c6d8ad1f | 580 | -0.00468849572012807, |
baxterja | 0:3927c6d8ad1f | 581 | -0.00410155649476450, |
baxterja | 0:3927c6d8ad1f | 582 | -0.00347302243192041, |
baxterja | 0:3927c6d8ad1f | 583 | -0.00280466259597701, |
baxterja | 0:3927c6d8ad1f | 584 | -0.00211871793213848, |
baxterja | 0:3927c6d8ad1f | 585 | -0.00142424098193147, |
baxterja | 0:3927c6d8ad1f | 586 | -0.000717680016887559, |
baxterja | 0:3927c6d8ad1f | 587 | -2.63604406483334e-05, |
baxterja | 0:3927c6d8ad1f | 588 | 0.000647875455120701, |
baxterja | 0:3927c6d8ad1f | 589 | 0.00128969301635370, |
baxterja | 0:3927c6d8ad1f | 590 | 0.00189704915840860, |
baxterja | 0:3927c6d8ad1f | 591 | 0.00245734168541197, |
baxterja | 0:3927c6d8ad1f | 592 | 0.00296924934443244, |
baxterja | 0:3927c6d8ad1f | 593 | 0.00342194240814885, |
baxterja | 0:3927c6d8ad1f | 594 | 0.00381610310764620, |
baxterja | 0:3927c6d8ad1f | 595 | 0.00414276809544121, |
baxterja | 0:3927c6d8ad1f | 596 | 0.00440550863345307, |
baxterja | 0:3927c6d8ad1f | 597 | 0.00459673449069964, |
baxterja | 0:3927c6d8ad1f | 598 | 0.00472369327143935, |
baxterja | 0:3927c6d8ad1f | 599 | 0.00477932011891816, |
baxterja | 0:3927c6d8ad1f | 600 | 0.00477604326343940, |
baxterja | 0:3927c6d8ad1f | 601 | 0.00470432883601479, |
baxterja | 0:3927c6d8ad1f | 602 | 0.00458742109894213, |
baxterja | 0:3927c6d8ad1f | 603 | 0.00440774110765089, |
baxterja | 0:3927c6d8ad1f | 604 | 0.00416037700790689, |
baxterja | 0:3927c6d8ad1f | 605 | 0.00392129596654753, |
baxterja | 0:3927c6d8ad1f | 606 | 0.00362103051636677, |
baxterja | 0:3927c6d8ad1f | 607 | 0.00329828480589904, |
baxterja | 0:3927c6d8ad1f | 608 | 0.00294623650522875, |
baxterja | 0:3927c6d8ad1f | 609 | 0.00258556196728641, |
baxterja | 0:3927c6d8ad1f | 610 | 0.00221412926605753, |
baxterja | 0:3927c6d8ad1f | 611 | 0.00184749122790831, |
baxterja | 0:3927c6d8ad1f | 612 | 0.00148482706293391, |
baxterja | 0:3927c6d8ad1f | 613 | 0.00113886884349691, |
baxterja | 0:3927c6d8ad1f | 614 | 0.000809081179935479, |
baxterja | 0:3927c6d8ad1f | 615 | 0.000506043646368515, |
baxterja | 0:3927c6d8ad1f | 616 | 0.000228753985399507, |
baxterja | 0:3927c6d8ad1f | 617 | -1.40519139447993e-05, |
baxterja | 0:3927c6d8ad1f | 618 | -0.000224044823896433, |
baxterja | 0:3927c6d8ad1f | 619 | -0.000394083108191473, |
baxterja | 0:3927c6d8ad1f | 620 | -0.000526912832180624, |
baxterja | 0:3927c6d8ad1f | 621 | -0.000617098880070943, |
baxterja | 0:3927c6d8ad1f | 622 | -0.000668571820934435, |
baxterja | 0:3927c6d8ad1f | 623 | -0.0222569832875342 |
baxterja | 0:3927c6d8ad1f | 624 | }; |
baxterja | 0:3927c6d8ad1f | 625 | |
baxterja | 0:3927c6d8ad1f | 626 | |
baxterja | 0:3927c6d8ad1f | 627 | int lp_fifo_num = 1; |
baxterja | 0:3927c6d8ad1f | 628 | int bp_fifo_num = 1; |
baxterja | 0:3927c6d8ad1f | 629 | |
baxterja | 0:3927c6d8ad1f | 630 | float x_0[bp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 631 | float x_1[bp_fir_length]; |
baxterja | 0:3927c6d8ad1f | 632 | |
baxterja | 0:3927c6d8ad1f | 633 | int value[] = {0,0}; |
baxterja | 0:3927c6d8ad1f | 634 | |
baxterja | 0:3927c6d8ad1f | 635 | float mag = 0; |
baxterja | 0:3927c6d8ad1f | 636 | float calc_mag = 0; |
baxterja | 0:3927c6d8ad1f | 637 | double mag_total = 0; |
baxterja | 0:3927c6d8ad1f | 638 | float calc_phase = 0; |
baxterja | 0:3927c6d8ad1f | 639 | int NumInBlock = 0; |
baxterja | 0:3927c6d8ad1f | 640 | |
baxterja | 0:3927c6d8ad1f | 641 | float mag_result = 0; |
baxterja | 0:3927c6d8ad1f | 642 | float phase_result = 0; |
baxterja | 0:3927c6d8ad1f | 643 | /* |
baxterja | 0:3927c6d8ad1f | 644 | int diff_0[3] = {0, 0, 0}; |
baxterja | 0:3927c6d8ad1f | 645 | int diff_1[3] = {0, 0, 0}; |
baxterja | 0:3927c6d8ad1f | 646 | */ |
baxterja | 0:3927c6d8ad1f | 647 | double final_mag = 0; |
baxterja | 0:3927c6d8ad1f | 648 | float final_phase = 0; |
baxterja | 0:3927c6d8ad1f | 649 | |
baxterja | 0:3927c6d8ad1f | 650 | // Finite State Machine |
baxterja | 0:3927c6d8ad1f | 651 | int current_state = 0; |
baxterja | 0:3927c6d8ad1f | 652 | |
baxterja | 0:3927c6d8ad1f | 653 | // Flag |
baxterja | 0:3927c6d8ad1f | 654 | bool ADC_reading = false; |
baxterja | 0:3927c6d8ad1f | 655 | bool isTransmitting = false; |
baxterja | 0:3927c6d8ad1f | 656 | |
baxterja | 0:3927c6d8ad1f | 657 | |
baxterja | 0:3927c6d8ad1f | 658 | //IntervalTimer timer0; |
baxterja | 0:3927c6d8ad1f | 659 | Ticker timer0; |
baxterja | 0:3927c6d8ad1f | 660 | Timer t1; |
baxterja | 0:3927c6d8ad1f | 661 | |
baxterja | 0:3927c6d8ad1f | 662 | int adc_cal(void) |
baxterja | 0:3927c6d8ad1f | 663 | { |
baxterja | 0:3927c6d8ad1f | 664 | ADC0_CFG1 |= (ADC_CFG1_MODE(3) | // 16 bits mode |
baxterja | 0:3927c6d8ad1f | 665 | ADC_CFG1_ADICLK(1)| // Input Bus Clock divided by 2 (20-25 MHz out of reset (FEI mode) / 2) |
baxterja | 0:3927c6d8ad1f | 666 | ADC_CFG1_ADIV(2)) ; // Clock divide by 4 (2.5-3 MHz) |
baxterja | 0:3927c6d8ad1f | 667 | |
baxterja | 0:3927c6d8ad1f | 668 | ADC0_SC3 |= ADC_SC3_AVGE_MASK | // Enable HW average |
baxterja | 0:3927c6d8ad1f | 669 | ADC_SC3_AVGS(3) | // Set HW average of 32 samples |
baxterja | 0:3927c6d8ad1f | 670 | ADC_SC3_CAL_MASK; // Start calibration process |
baxterja | 0:3927c6d8ad1f | 671 | |
baxterja | 0:3927c6d8ad1f | 672 | while(ADC0_SC3 & ADC_SC3_CAL_MASK); // Wait for calibration to end |
baxterja | 0:3927c6d8ad1f | 673 | |
baxterja | 0:3927c6d8ad1f | 674 | if(ADC0_SC3 & ADC_SC3_CALF_MASK) return 1; // Check for successful calibration |
baxterja | 0:3927c6d8ad1f | 675 | |
baxterja | 0:3927c6d8ad1f | 676 | uint16_t calib = 0; // calibration variable |
baxterja | 0:3927c6d8ad1f | 677 | calib += ADC0->CLPS + ADC0_CLP4 + ADC0_CLP3 + ADC0_CLP2 + ADC0_CLP1 + ADC0_CLP0; |
baxterja | 0:3927c6d8ad1f | 678 | calib /= 2; |
baxterja | 0:3927c6d8ad1f | 679 | calib |= 0x8000; // Set MSB |
baxterja | 0:3927c6d8ad1f | 680 | ADC0_PG = calib; |
baxterja | 0:3927c6d8ad1f | 681 | calib = 0; |
baxterja | 0:3927c6d8ad1f | 682 | calib += ADC0_CLMS + ADC0_CLM4 + ADC0_CLM3 + ADC0_CLM2 + ADC0_CLM1 + ADC0_CLM0; |
baxterja | 0:3927c6d8ad1f | 683 | calib /= 2; |
baxterja | 0:3927c6d8ad1f | 684 | calib |= 0x8000; // Set MSB |
baxterja | 0:3927c6d8ad1f | 685 | ADC0_MG = calib; |
baxterja | 0:3927c6d8ad1f | 686 | |
baxterja | 0:3927c6d8ad1f | 687 | return 0; |
baxterja | 0:3927c6d8ad1f | 688 | } |
baxterja | 0:3927c6d8ad1f | 689 | |
baxterja | 0:3927c6d8ad1f | 690 | void adc_init() |
baxterja | 0:3927c6d8ad1f | 691 | { |
baxterja | 0:3927c6d8ad1f | 692 | // red, indicating not ready |
baxterja | 0:3927c6d8ad1f | 693 | |
baxterja | 0:3927c6d8ad1f | 694 | |
baxterja | 0:3927c6d8ad1f | 695 | // Turn on the ADC0 and ADC1 clocks |
baxterja | 0:3927c6d8ad1f | 696 | SIM_SCGC6 |= SIM_SCGC6_ADC0_MASK; |
baxterja | 0:3927c6d8ad1f | 697 | SIM_SCGC3 |= SIM_SCGC3_ADC1_MASK; |
baxterja | 0:3927c6d8ad1f | 698 | |
baxterja | 0:3927c6d8ad1f | 699 | |
baxterja | 0:3927c6d8ad1f | 700 | __disable_irq(); |
baxterja | 0:3927c6d8ad1f | 701 | adc_cal(); |
baxterja | 0:3927c6d8ad1f | 702 | //if(adc_cal()) {red = 0; green = 0;} // if calibration fails, display yellow |
baxterja | 0:3927c6d8ad1f | 703 | __enable_irq(); |
baxterja | 0:3927c6d8ad1f | 704 | |
baxterja | 0:3927c6d8ad1f | 705 | |
baxterja | 0:3927c6d8ad1f | 706 | |
baxterja | 0:3927c6d8ad1f | 707 | // Setup Configuration Register 1 |
baxterja | 0:3927c6d8ad1f | 708 | ADC0_CFG1 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 709 | ADC0_CFG1 |= ADC_CFG1_ADICLK(0); // select bus clock |
baxterja | 0:3927c6d8ad1f | 710 | ADC0_CFG1 |= ADC_CFG1_MODE(3); // select 16-bit 2's complement output |
baxterja | 0:3927c6d8ad1f | 711 | ADC0_CFG1 |= ADC_CFG1_ADIV(0); // clock divisor = 0. |
baxterja | 0:3927c6d8ad1f | 712 | ADC0_CFG1 &= ~ADC_CFG1_ADLSMP_MASK; // select short sample time //QUESTION |
baxterja | 0:3927c6d8ad1f | 713 | ADC0_CFG1 &= ~ADC_CFG1_ADLPC_MASK; // select normal power configuration |
baxterja | 0:3927c6d8ad1f | 714 | ADC1_CFG1 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 715 | ADC1_CFG1 |= ADC_CFG1_ADICLK(0); // select bus clock |
baxterja | 0:3927c6d8ad1f | 716 | ADC1_CFG1 |= ADC_CFG1_MODE(3); // select 16-bit 2's complement output |
baxterja | 0:3927c6d8ad1f | 717 | ADC1_CFG1 |= ADC_CFG1_ADIV(0); // clock divisor = 0. |
baxterja | 0:3927c6d8ad1f | 718 | ADC1_CFG1 &= ~ADC_CFG1_ADLSMP_MASK; // select short sample time |
baxterja | 0:3927c6d8ad1f | 719 | ADC1_CFG1 &= ~ADC_CFG1_ADLPC_MASK; // select normal power configuration |
baxterja | 0:3927c6d8ad1f | 720 | |
baxterja | 0:3927c6d8ad1f | 721 | // Setup Configuration Register 2 |
baxterja | 0:3927c6d8ad1f | 722 | ADC0_CFG2 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 723 | //ADC0_CFG2 |= ADC_CFG2_ADHSC_MASK ; // select high-speed conversion |
baxterja | 0:3927c6d8ad1f | 724 | ADC0_CFG2 |= ADC_CFG2_MUXSEL_MASK; // select a channels //possibly change to channel b. |
baxterja | 0:3927c6d8ad1f | 725 | ADC1_CFG2 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 726 | //ADC1_CFG2 |= ADC_CFG2_ADHSC_MASK ; // select high-speed conversion |
baxterja | 0:3927c6d8ad1f | 727 | ADC1_CFG2 &= ~ADC_CFG2_MUXSEL_MASK; // select a channels |
baxterja | 0:3927c6d8ad1f | 728 | |
baxterja | 0:3927c6d8ad1f | 729 | // Setup Status and Control Register 2 |
baxterja | 0:3927c6d8ad1f | 730 | ADC0_SC2 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 731 | ADC0_SC2 |= ADC_SC2_REFSEL(0); // select external voltage reference //QUESTION |
baxterja | 0:3927c6d8ad1f | 732 | //ADC0_SC2 |= ADC_SC2_DMAEN_MASK; // enable DMA |
baxterja | 0:3927c6d8ad1f | 733 | //ADC0_SC2 &= ~ADC_SC2_ADTRG_MASK; // select hardware trigger //QESTION |
baxterja | 0:3927c6d8ad1f | 734 | ADC1_SC2 = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 735 | ADC1_SC2 |= ADC_SC2_REFSEL(0); // select external voltage reference |
baxterja | 0:3927c6d8ad1f | 736 | //ADC1_SC2 |= ADC_SC2_DMAEN_MASK; // enable DMA |
baxterja | 0:3927c6d8ad1f | 737 | //ADC1_SC2 &= ~ADC_SC2_ADTRG_MASK; // select hardware trigger |
baxterja | 0:3927c6d8ad1f | 738 | |
baxterja | 0:3927c6d8ad1f | 739 | // Setup Status and Control Register 3 now that calibration is complete |
baxterja | 0:3927c6d8ad1f | 740 | ADC0_SC3 = 0; // Hardware Average set to 4 samples averaged |
baxterja | 0:3927c6d8ad1f | 741 | // Hardware Average Disabled |
baxterja | 0:3927c6d8ad1f | 742 | // select single conversion mode |
baxterja | 0:3927c6d8ad1f | 743 | ADC1_SC3 = 0; // Hardware Average set to 4 samples averaged |
baxterja | 0:3927c6d8ad1f | 744 | // Hardware Average Disabled |
baxterja | 0:3927c6d8ad1f | 745 | // select single conversion mode |
baxterja | 0:3927c6d8ad1f | 746 | //ADC1_SC3 = ADC_SC3_AVGS(0) | ADC_SC3_AVGE_MASK;//JARED COME BACK AND LOOK AT THIS |
baxterja | 0:3927c6d8ad1f | 747 | |
baxterja | 0:3927c6d8ad1f | 748 | // Setup Status and Control Register 1A |
baxterja | 0:3927c6d8ad1f | 749 | ADC0_SC1A = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 750 | ADC0_SC1A &= ~ADC_SC1_DIFF_MASK; // select single-ended mode |
baxterja | 0:3927c6d8ad1f | 751 | ADC0_SC1A |= ADC_SC1_AIEN_MASK; // enable interrupt (for debugging) |
baxterja | 0:3927c6d8ad1f | 752 | ADC0_SC1A |= ADC_SC1_ADCH(12); // select channel 13 |
baxterja | 0:3927c6d8ad1f | 753 | ADC1_SC1A = 0; // clear register |
baxterja | 0:3927c6d8ad1f | 754 | ADC1_SC1A &= ~ADC_SC1_DIFF_MASK; // select single-ended mode |
baxterja | 0:3927c6d8ad1f | 755 | ADC1_SC1A |= ADC_SC1_AIEN_MASK; // enable interrupt (for debugging) |
baxterja | 0:3927c6d8ad1f | 756 | ADC1_SC1A |= ADC_SC1_ADCH(14); // select channel 14 |
baxterja | 0:3927c6d8ad1f | 757 | |
baxterja | 0:3927c6d8ad1f | 758 | |
baxterja | 0:3927c6d8ad1f | 759 | // Check if ADC is finished initializing TODO: This part doesn't seem right, but I did it according to 871 |
baxterja | 0:3927c6d8ad1f | 760 | while( (ADC0_SC1B&ADC_SC1_COCO_MASK)) {} |
baxterja | 0:3927c6d8ad1f | 761 | int gain = ADC0_RA; // read the register to clear SC1A[COCO] //possibly a |
baxterja | 0:3927c6d8ad1f | 762 | while( (ADC1_SC1A&ADC_SC1_COCO_MASK)) {} |
baxterja | 0:3927c6d8ad1f | 763 | gain = ADC1_RA; // read the register to clear SC1A[COCO] |
baxterja | 0:3927c6d8ad1f | 764 | |
baxterja | 0:3927c6d8ad1f | 765 | |
baxterja | 0:3927c6d8ad1f | 766 | //QUESTION |
baxterja | 0:3927c6d8ad1f | 767 | ADC0_SC3 &= ~ADC_SC3_ADCO_MASK; // single conversion mode |
baxterja | 0:3927c6d8ad1f | 768 | ADC1_SC3 &= ~ADC_SC3_ADCO_MASK; // single conversion mode |
baxterja | 0:3927c6d8ad1f | 769 | ADC0_SC2 &= ~ADC_SC2_ADTRG_MASK; // set ADC to software trigger |
baxterja | 0:3927c6d8ad1f | 770 | ADC1_SC2 &= ~ADC_SC2_ADTRG_MASK; // set ADC to software trigger |
baxterja | 0:3927c6d8ad1f | 771 | ADC0_SC1A |= ADC_SC1_ADCH(12); // write to SC1B causing a trigger |
baxterja | 0:3927c6d8ad1f | 772 | ADC1_SC1A |= ADC_SC1_ADCH(14); // write to SC1A causing a trigger |
baxterja | 0:3927c6d8ad1f | 773 | } |
baxterja | 0:3927c6d8ad1f | 774 | |
baxterja | 0:3927c6d8ad1f | 775 | |
baxterja | 0:3927c6d8ad1f | 776 | |
baxterja | 0:3927c6d8ad1f | 777 | void pre_compute_tables() { |
baxterja | 0:3927c6d8ad1f | 778 | // This function will precompute the cos and sin tables used in the rest of the program |
baxterja | 0:3927c6d8ad1f | 779 | for(int precompute_counter = 0; precompute_counter < pre_compute_length; precompute_counter++){ |
baxterja | 0:3927c6d8ad1f | 780 | out_val_pre[precompute_counter] = (int) (cos(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter) * 32500.0 + 33000.0); |
baxterja | 0:3927c6d8ad1f | 781 | i_mod_pre[precompute_counter] = (cos(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter)); |
baxterja | 0:3927c6d8ad1f | 782 | q_mod_pre[precompute_counter] = (-sin(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter)); |
baxterja | 0:3927c6d8ad1f | 783 | |
baxterja | 0:3927c6d8ad1f | 784 | } |
baxterja | 0:3927c6d8ad1f | 785 | } //pre_compute_tables |
baxterja | 0:3927c6d8ad1f | 786 | |
baxterja | 0:3927c6d8ad1f | 787 | |
baxterja | 0:3927c6d8ad1f | 788 | |
baxterja | 0:3927c6d8ad1f | 789 | |
baxterja | 0:3927c6d8ad1f | 790 | void ISR_repeat() {//40 KHz |
baxterja | 0:3927c6d8ad1f | 791 | // Calculation of loop for generating signal to output on DAC |
baxterja | 0:3927c6d8ad1f | 792 | |
baxterja | 0:3927c6d8ad1f | 793 | WaveOut.write_u16(out_val_pre[phase_counter]); //creates a wave that bounces between 0 & 3.3 V |
baxterja | 0:3927c6d8ad1f | 794 | |
baxterja | 0:3927c6d8ad1f | 795 | // ISR counter reset and increment |
baxterja | 0:3927c6d8ad1f | 796 | if (ISR_counter >= ISR_counter_loop_reset)//10KHz |
baxterja | 0:3927c6d8ad1f | 797 | { |
baxterja | 0:3927c6d8ad1f | 798 | ISR_counter = 1; |
baxterja | 0:3927c6d8ad1f | 799 | //JARED ADD THESE 2 LINES BACK IN |
baxterja | 0:3927c6d8ad1f | 800 | ADC0_SC1A |= ADC_SC1_ADCH(12); // start ADC process Possibly change to B. |
baxterja | 0:3927c6d8ad1f | 801 | ADC1_SC1A |= ADC_SC1_ADCH(14); // start ADC process |
baxterja | 0:3927c6d8ad1f | 802 | |
baxterja | 0:3927c6d8ad1f | 803 | ADC_reading = true; |
baxterja | 0:3927c6d8ad1f | 804 | current_i_mod = i_mod_pre[phase_counter]; |
baxterja | 0:3927c6d8ad1f | 805 | current_q_mod = q_mod_pre[phase_counter]; |
baxterja | 0:3927c6d8ad1f | 806 | } |
baxterja | 0:3927c6d8ad1f | 807 | else { |
baxterja | 0:3927c6d8ad1f | 808 | ISR_counter++; |
baxterja | 0:3927c6d8ad1f | 809 | } |
baxterja | 0:3927c6d8ad1f | 810 | |
baxterja | 0:3927c6d8ad1f | 811 | phase_counter++; |
baxterja | 0:3927c6d8ad1f | 812 | if (phase_counter >= pre_compute_length) phase_counter = 0; |
baxterja | 0:3927c6d8ad1f | 813 | |
baxterja | 0:3927c6d8ad1f | 814 | } //ISR_repeat |
baxterja | 0:3927c6d8ad1f | 815 | |
baxterja | 0:3927c6d8ad1f | 816 | |
baxterja | 0:3927c6d8ad1f | 817 | void execute_DSP() { |
baxterja | 0:3927c6d8ad1f | 818 | bp_fifo_num++; |
baxterja | 0:3927c6d8ad1f | 819 | if (bp_fifo_num >= bp_fir_length) bp_fifo_num = 0; |
baxterja | 0:3927c6d8ad1f | 820 | |
baxterja | 0:3927c6d8ad1f | 821 | x_0[bp_fifo_num] = (float) (value[1] - value[0]); |
baxterja | 0:3927c6d8ad1f | 822 | x_1[bp_fifo_num] = (float) (value[0] - 32768); |
baxterja | 0:3927c6d8ad1f | 823 | |
baxterja | 0:3927c6d8ad1f | 824 | // Band pass filter of incoming data |
baxterja | 0:3927c6d8ad1f | 825 | float y_0 = x_0[bp_fifo_num] * bp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 826 | float y_1 = x_1[bp_fifo_num] * bp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 827 | |
baxterja | 0:3927c6d8ad1f | 828 | for(int fir_counter = 1; fir_counter < bp_fir_length; fir_counter++){ |
baxterja | 0:3927c6d8ad1f | 829 | int fir_index = bp_fifo_num + fir_counter; |
baxterja | 0:3927c6d8ad1f | 830 | if (fir_index >= bp_fir_length) { |
baxterja | 0:3927c6d8ad1f | 831 | fir_index -= bp_fir_length; |
baxterja | 0:3927c6d8ad1f | 832 | } |
baxterja | 0:3927c6d8ad1f | 833 | y_0 += x_0[fir_index] * bp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 834 | y_1 += x_1[fir_index] * bp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 835 | } |
baxterja | 0:3927c6d8ad1f | 836 | |
baxterja | 0:3927c6d8ad1f | 837 | current_i_mod = i_mod_pre[phase_counter]; |
baxterja | 0:3927c6d8ad1f | 838 | current_q_mod = q_mod_pre[phase_counter]; |
baxterja | 0:3927c6d8ad1f | 839 | |
baxterja | 0:3927c6d8ad1f | 840 | // Demodulation of the signal |
baxterja | 0:3927c6d8ad1f | 841 | x_0_i[lp_fifo_num] = (y_0 * current_i_mod); |
baxterja | 0:3927c6d8ad1f | 842 | x_0_q[lp_fifo_num] = (y_0 * current_q_mod); |
baxterja | 0:3927c6d8ad1f | 843 | x_1_i[lp_fifo_num] = (y_1 * current_i_mod); |
baxterja | 0:3927c6d8ad1f | 844 | x_1_q[lp_fifo_num] = (y_1 * current_q_mod); |
baxterja | 0:3927c6d8ad1f | 845 | |
baxterja | 0:3927c6d8ad1f | 846 | lp_fifo_num++; |
baxterja | 0:3927c6d8ad1f | 847 | if (lp_fifo_num >= lp_fir_length) lp_fifo_num = 0; |
baxterja | 0:3927c6d8ad1f | 848 | |
baxterja | 0:3927c6d8ad1f | 849 | // Low pass filter of demodulated signal |
baxterja | 0:3927c6d8ad1f | 850 | float y_0_i = x_0_i[lp_fifo_num] * lp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 851 | float y_0_q = x_0_q[lp_fifo_num] * lp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 852 | float y_1_i = x_1_i[lp_fifo_num] * lp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 853 | float y_1_q = x_1_q[lp_fifo_num] * lp_filter_coeff[0]; |
baxterja | 0:3927c6d8ad1f | 854 | |
baxterja | 0:3927c6d8ad1f | 855 | for(int fir_counter = 1; fir_counter < lp_fir_length; fir_counter++){ |
baxterja | 0:3927c6d8ad1f | 856 | int fir_index = lp_fifo_num + fir_counter; |
baxterja | 0:3927c6d8ad1f | 857 | if (fir_index >= lp_fir_length) { |
baxterja | 0:3927c6d8ad1f | 858 | fir_index -= lp_fir_length; |
baxterja | 0:3927c6d8ad1f | 859 | } |
baxterja | 0:3927c6d8ad1f | 860 | y_0_i += x_0_i[fir_index] * lp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 861 | y_0_q += x_0_q[fir_index] * lp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 862 | y_1_i += x_1_i[fir_index] * lp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 863 | y_1_q += x_1_q[fir_index] * lp_filter_coeff[fir_counter]; |
baxterja | 0:3927c6d8ad1f | 864 | } |
baxterja | 0:3927c6d8ad1f | 865 | |
baxterja | 0:3927c6d8ad1f | 866 | real_ip = y_0_i * y_1_i + y_0_q * y_1_q; |
baxterja | 0:3927c6d8ad1f | 867 | imag_ip = y_0_q * y_1_i - y_0_i * y_1_q; |
baxterja | 0:3927c6d8ad1f | 868 | y_0_squared = y_0_i * y_0_i + y_0_q * y_0_q; |
baxterja | 0:3927c6d8ad1f | 869 | y_1_squared = y_1_i * y_1_i + y_1_q * y_1_q; |
baxterja | 0:3927c6d8ad1f | 870 | |
baxterja | 0:3927c6d8ad1f | 871 | // float mag = sqrt((real_ip * real_ip + imag_ip * imag_ip) / y_0_squared; |
baxterja | 0:3927c6d8ad1f | 872 | mag = sqrt(((float) real_ip * (float) real_ip + (float) imag_ip * (float) imag_ip)) / ((float) y_0_squared); |
baxterja | 0:3927c6d8ad1f | 873 | mag_total += mag; |
baxterja | 0:3927c6d8ad1f | 874 | calc_mag = mag_total / NumInBlock; |
baxterja | 0:3927c6d8ad1f | 875 | |
baxterja | 0:3927c6d8ad1f | 876 | real_ip_total += real_ip; |
baxterja | 0:3927c6d8ad1f | 877 | imag_ip_total += imag_ip; |
baxterja | 0:3927c6d8ad1f | 878 | calc_phase = -atan2(imag_ip_total, real_ip_total); |
baxterja | 0:3927c6d8ad1f | 879 | } |
baxterja | 0:3927c6d8ad1f | 880 | |
baxterja | 0:3927c6d8ad1f | 881 | |
baxterja | 0:3927c6d8ad1f | 882 | |
baxterja | 0:3927c6d8ad1f | 883 | void setup() { |
baxterja | 0:3927c6d8ad1f | 884 | adc_init(); |
baxterja | 0:3927c6d8ad1f | 885 | pre_compute_tables(); |
baxterja | 0:3927c6d8ad1f | 886 | wait(1); |
baxterja | 0:3927c6d8ad1f | 887 | } //setup |
baxterja | 0:3927c6d8ad1f | 888 | |
baxterja | 0:3927c6d8ad1f | 889 | using namespace std; |
baxterja | 0:3927c6d8ad1f | 890 | |
baxterja | 0:3927c6d8ad1f | 891 | int main() { |
baxterja | 0:3927c6d8ad1f | 892 | led_blue = 1; |
baxterja | 0:3927c6d8ad1f | 893 | led_green = 1; |
baxterja | 0:3927c6d8ad1f | 894 | led_red = 0; |
baxterja | 0:3927c6d8ad1f | 895 | |
baxterja | 0:3927c6d8ad1f | 896 | setup(); |
baxterja | 0:3927c6d8ad1f | 897 | int count = 0; |
baxterja | 0:3927c6d8ad1f | 898 | t1.start(); |
baxterja | 0:3927c6d8ad1f | 899 | |
baxterja | 0:3927c6d8ad1f | 900 | pc.baud(115200); |
baxterja | 0:3927c6d8ad1f | 901 | |
baxterja | 0:3927c6d8ad1f | 902 | for(int i = 0; i < 86; i++) |
baxterja | 0:3927c6d8ad1f | 903 | { |
baxterja | 0:3927c6d8ad1f | 904 | if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2); |
baxterja | 0:3927c6d8ad1f | 905 | } |
baxterja | 0:3927c6d8ad1f | 906 | |
baxterja | 0:3927c6d8ad1f | 907 | // Give hardware associated with |
baxterja | 0:3927c6d8ad1f | 908 | // sampling the highest priority |
baxterja | 0:3927c6d8ad1f | 909 | NVIC_SetPriority(ADC1_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 910 | NVIC_SetPriority(ADC0_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 911 | NVIC_SetPriority(PDB0_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 912 | NVIC_SetPriority(DMA0_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 913 | NVIC_SetPriority(DMA1_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 914 | NVIC_SetPriority(DMA2_IRQn,0); |
baxterja | 0:3927c6d8ad1f | 915 | |
baxterja | 0:3927c6d8ad1f | 916 | NVIC_SetPriority(ENET_1588_Timer_IRQn,1); |
baxterja | 0:3927c6d8ad1f | 917 | NVIC_SetPriority(ENET_Transmit_IRQn,1); |
baxterja | 0:3927c6d8ad1f | 918 | NVIC_SetPriority(ENET_Receive_IRQn,1); |
baxterja | 0:3927c6d8ad1f | 919 | NVIC_SetPriority(ENET_Error_IRQn,1); |
baxterja | 0:3927c6d8ad1f | 920 | |
baxterja | 0:3927c6d8ad1f | 921 | led_green = 1; |
baxterja | 0:3927c6d8ad1f | 922 | led_red = 1; |
baxterja | 0:3927c6d8ad1f | 923 | led_blue = 1; |
baxterja | 0:3927c6d8ad1f | 924 | |
baxterja | 0:3927c6d8ad1f | 925 | timer0.attach_us(&ISR_repeat, TimerInterruptInMicroSeconds); |
baxterja | 0:3927c6d8ad1f | 926 | while(true) { |
baxterja | 0:3927c6d8ad1f | 927 | |
baxterja | 0:3927c6d8ad1f | 928 | count++; |
baxterja | 0:3927c6d8ad1f | 929 | //printf("Loop"); |
baxterja | 0:3927c6d8ad1f | 930 | |
baxterja | 0:3927c6d8ad1f | 931 | while (!ADC_reading) |
baxterja | 0:3927c6d8ad1f | 932 | { |
baxterja | 0:3927c6d8ad1f | 933 | |
baxterja | 0:3927c6d8ad1f | 934 | led_blue = 0; |
baxterja | 0:3927c6d8ad1f | 935 | } |
baxterja | 0:3927c6d8ad1f | 936 | |
baxterja | 0:3927c6d8ad1f | 937 | |
baxterja | 0:3927c6d8ad1f | 938 | counter++; |
baxterja | 0:3927c6d8ad1f | 939 | |
baxterja | 0:3927c6d8ad1f | 940 | CyclesInState++; |
baxterja | 0:3927c6d8ad1f | 941 | |
baxterja | 0:3927c6d8ad1f | 942 | |
baxterja | 0:3927c6d8ad1f | 943 | execute_DSP(); |
baxterja | 0:3927c6d8ad1f | 944 | |
baxterja | 0:3927c6d8ad1f | 945 | if (CyclesInState <= PreCalculateCycles) { |
baxterja | 0:3927c6d8ad1f | 946 | NumInBlock = 0; |
baxterja | 0:3927c6d8ad1f | 947 | mag_total = 0; |
baxterja | 0:3927c6d8ad1f | 948 | real_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 949 | imag_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 950 | |
baxterja | 0:3927c6d8ad1f | 951 | max_0 = -1; |
baxterja | 0:3927c6d8ad1f | 952 | max_1 = -1; |
baxterja | 0:3927c6d8ad1f | 953 | min_0 = 65536; |
baxterja | 0:3927c6d8ad1f | 954 | min_1 = 65536; |
baxterja | 0:3927c6d8ad1f | 955 | } |
baxterja | 0:3927c6d8ad1f | 956 | else { |
baxterja | 0:3927c6d8ad1f | 957 | NumInBlock++; |
baxterja | 0:3927c6d8ad1f | 958 | if (NumInBlock >= NumCalculatedAverages) { |
baxterja | 0:3927c6d8ad1f | 959 | mag_result = calc_mag; |
baxterja | 0:3927c6d8ad1f | 960 | phase_result = calc_phase; |
baxterja | 0:3927c6d8ad1f | 961 | final_mag = mag_result; |
baxterja | 0:3927c6d8ad1f | 962 | final_phase = phase_result; |
baxterja | 0:3927c6d8ad1f | 963 | NumInBlock = 0; |
baxterja | 0:3927c6d8ad1f | 964 | mag_total = 0; |
baxterja | 0:3927c6d8ad1f | 965 | real_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 966 | imag_ip_total = 0; |
baxterja | 0:3927c6d8ad1f | 967 | printf("Coeficient%f Phase%f\n\r", final_mag, final_phase); |
baxterja | 0:3927c6d8ad1f | 968 | } |
baxterja | 0:3927c6d8ad1f | 969 | } |
baxterja | 0:3927c6d8ad1f | 970 | |
baxterja | 0:3927c6d8ad1f | 971 | |
baxterja | 0:3927c6d8ad1f | 972 | value[0] = ADC0_RA;//Read adc |
baxterja | 0:3927c6d8ad1f | 973 | value[1] = ADC1_RA;//Read adc |
baxterja | 0:3927c6d8ad1f | 974 | //printf("%f %f\n\r", value[0], value[1]); |
baxterja | 0:3927c6d8ad1f | 975 | ADC_reading = false;//lower flag |
baxterja | 0:3927c6d8ad1f | 976 | |
baxterja | 0:3927c6d8ad1f | 977 | }// end while(true) |
baxterja | 0:3927c6d8ad1f | 978 | }// end main |