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
- Committer:
- baxterja
- Date:
- 2015-10-22
- Revision:
- 1:f0a5690db73f
- Parent:
- 0:3927c6d8ad1f
- Child:
- 2:3771b3195c7b
File content as of revision 1:f0a5690db73f:
// TODO: #include "mbed.h" #include <string> #include <stdio.h> #include "PeripheralNames.h" #include "PeripheralPins.h" #include "fsl_adc_hal.h" #include "fsl_clock_manager.h" #include "fsl_dspi_hal.h" Serial pc(USBTX, USBRX); /* #if DEBUG #define DEBUG_PRINT(x) pc.printf(x) #else #define DEBUG_PRINT(x) do {} while(0) #endif */ DigitalOut led_red(LED_RED); DigitalOut led_green(LED_GREEN); DigitalOut led_blue(LED_BLUE); #define MAX_FADC 6000000 #define TimerInterruptInMicroSeconds 25 // This is for 40 kHz #define CarrierFrequency 200 #define ISR_counter_loop_reset 8 // 10 kHz sampling of the signal int ISR_counter = 1; #define MaxNumSamples 0 //set to 0 if want continuous sampling (i.e. run forever) #define NumSamplesAverageInADC 32 //hardware averaging default is 2. values 0..32. Higher values reduce noise and maximum sample rate #define NumADCbits 16 int CyclesInState = 0; // While 32 is the minimum, it seems to take a few cycles to get things to work right. 32 + 18 + 18 + 18 #define PreCalculateCycles 256 #define NumCalculatedAverages 500 #define PRINTTIMER 1 int printCounter = 0; AnalogOut WaveOut(DAC0_OUT); AnalogIn WaveIn1(A0); AnalogIn WaveIn2(A2); double previousTime = 0; volatile unsigned long counter = 0; //keep track of how many times the timer interrupt executes volatile int phase_counter = 0; float twopi = 3.14159265359 * 2; #define pre_compute_length 4000 float i_mod_pre[pre_compute_length]; float q_mod_pre[pre_compute_length]; int out_val_pre[pre_compute_length]; float current_i_mod; float current_q_mod; #define lp_fir_length 2048 float x_0_i[lp_fir_length]; float x_0_q[lp_fir_length]; float x_1_i[lp_fir_length]; float x_1_q[lp_fir_length]; float real_ip = 0; float real_ip_total = 0; float imag_ip = 0; float imag_ip_total = 0; float y_0_squared = 0; float y_1_squared = 0; int y_0, y_1; int max_0 = -1; int min_0 = 65536; int max_1 = -1; int min_1 = 65536; // Coefficients for FIR low-pass filter // Order: 511 // Fs = 5000 // Fpass = 5 // Fstop = 25 // Density Factor 20 float lp_filter_coeff[lp_fir_length] = { 2.25877153377331e-06, 2.66244224670397e-07, 2.81092420097884e-07, 2.97200797125842e-07, 3.13057205526705e-07, 3.30279379977406e-07, 3.47320034430519e-07, 3.65790534295599e-07, 3.84037888145959e-07, 4.03659300931941e-07, 4.22883429696171e-07, 4.43414078442301e-07, 4.63474354546465e-07, 4.85127823306893e-07, 5.06629365749489e-07, 5.30402400375842e-07, 5.53883059492054e-07, 5.79062251172147e-07, 6.00698053897355e-07, 6.27541356389415e-07, 6.53603188407001e-07, 6.79457125689371e-07, 7.06900952158772e-07, 7.34607521511639e-07, 7.63210937527310e-07, 7.92457626845786e-07, 8.22319204892483e-07, 8.52904112434704e-07, 8.83993876825403e-07, 9.15965803598408e-07, 9.48565090704124e-07, 9.82217633251451e-07, 1.01643933513151e-06, 1.05143714735623e-06, 1.08676147556840e-06, 1.12300409054529e-06, 1.16035624735089e-06, 1.19822784284488e-06, 1.23612003796729e-06, 1.27597253424280e-06, 1.31548405641171e-06, 1.35656260640872e-06, 1.39768396625082e-06, 1.44009364782760e-06, 1.48263736669695e-06, 1.52645417739943e-06, 1.57052770327227e-06, 1.61590430260585e-06, 1.66152581672090e-06, 1.70832466623602e-06, 1.75531183154730e-06, 1.80354697649463e-06, 1.85213180801677e-06, 1.90190541457320e-06, 1.95172125266670e-06, 2.00274982053528e-06, 2.05440229847222e-06, 2.10671996122087e-06, 2.15960953108923e-06, 2.21344673621392e-06, 2.26753452245018e-06, 2.32270367024371e-06, 2.37811232502338e-06, 2.43461484557276e-06, 2.49131860508909e-06, 2.54904626588095e-06, 2.60694079790385e-06, 2.66588370269542e-06, 2.72502556403521e-06, 2.78515359568984e-06, 2.84534746585168e-06, 2.90651253940365e-06, 2.96789707905998e-06, 3.03026815024548e-06, 3.09250439907414e-06, 3.15586112065294e-06, 3.21917116992942e-06, 3.28329739015491e-06, 3.34755725225876e-06, 3.41254082601689e-06, 3.47759844620301e-06, 3.54333509849531e-06, 3.60908996231663e-06, 3.67551457730312e-06, 3.74192777791326e-06, 3.80892935787303e-06, 3.87581985935145e-06, 3.94325856674703e-06, 4.01062965420015e-06, 4.07851955438422e-06, 4.14618562570372e-06, 4.21424927012473e-06, 4.28219961892930e-06, 4.35043829085821e-06, 4.41836938506806e-06, 4.48672487737745e-06, 4.55459997845769e-06, 4.62281849455623e-06, 4.69055023332375e-06, 4.75852881449136e-06, 4.82598777828551e-06, 4.89357790491499e-06, 4.96055708038026e-06, 5.02759963577756e-06, 5.09401623836012e-06, 5.16043301207036e-06, 5.22609616909151e-06, 5.29163941340404e-06, 5.35641256312241e-06, 5.42102571618858e-06, 5.48469577560834e-06, 5.54811134917779e-06, 5.61062044360571e-06, 5.67265321372291e-06, 5.73373682457175e-06, 5.79431080305923e-06, 5.85377619609459e-06, 5.91266194714808e-06, 5.97030085360536e-06, 6.02728122072791e-06, 6.08294572989760e-06, 6.13786180337324e-06, 6.19132752972891e-06, 6.24392081949063e-06, 6.29499279506742e-06, 6.34512332808420e-06, 6.39358822958236e-06, 6.44096494373972e-06, 6.48662130412141e-06, 6.53110576502919e-06, 6.57367526411895e-06, 6.61504319391059e-06, 6.65439635608727e-06, 6.69234997696170e-06, 6.72823177451458e-06, 6.76256992228003e-06, 6.79475276861382e-06, 6.82527935353772e-06, 6.85350874920331e-06, 6.87995435672755e-06, 6.90400455258515e-06, 6.92617579276020e-06, 6.94581178960161e-06, 6.96341207782413e-06, 6.97837546570650e-06, 6.99121320837930e-06, 7.00126691500350e-06, 7.00904991575129e-06, 7.01399146065940e-06, 7.01649463335420e-06, 7.01598906903671e-06, 7.01299335632421e-06, 7.00682651919766e-06, 6.99805670472170e-06, 6.98598387232265e-06, 6.97115918378061e-06, 6.95293670913433e-06, 6.93184262641915e-06, 6.90721796243191e-06, 6.87956544369715e-06, 6.84826575659092e-06, 6.81383582649206e-06, 6.77563271791333e-06, 6.73414912642070e-06, 6.68879222648781e-06, 6.64004566255543e-06, 6.58726001945506e-06, 6.53097084557196e-06, 6.47057633363911e-06, 6.40649492549257e-06, 6.33820922296577e-06, 6.26611753900958e-06, 6.18969752493548e-06, 6.10938733149237e-06, 6.02460876343180e-06, 5.93581228618980e-06, 5.84243268710826e-06, 5.74494125723676e-06, 5.64275663266799e-06, 5.53633239754493e-06, 5.42511044796520e-06, 5.30955851436901e-06, 5.18909082922882e-06, 5.06417106483642e-06, 4.93426738681860e-06, 4.79981139928378e-06, 4.66022392940390e-06, 4.51602630845954e-06, 4.36660747560401e-06, 4.21247294402037e-06, 4.05305110546832e-06, 3.88878763289571e-06, 3.71916450048738e-06, 3.54462712478025e-06, 3.36465155419938e-06, 3.17967167761456e-06, 2.98917613191769e-06, 2.79361738719780e-06, 2.59247412473194e-06, 2.38618565979242e-06, 2.17426059604335e-06, 1.95714227397860e-06, 1.73430496738356e-06, 1.50620956228030e-06, 1.27238963764761e-06, 1.03324761527409e-06, 7.88323211174950e-07, 5.38057114445362e-07, 2.81944291020029e-07, 2.04836906979221e-08, -2.46853106248978e-07, -5.19577878779430e-07, -7.98197252838720e-07, -1.08221647391169e-06, -1.37213415644316e-06, -1.66747248399997e-06, -1.96871121194834e-06, -2.27536237370173e-06, -2.58791653823994e-06, -2.90589263830832e-06, -3.22973451266772e-06, -3.55896455485854e-06, -3.89406743396649e-06, -4.23452884634043e-06, -4.58080862054126e-06, -4.93243163040497e-06, -5.28980705682264e-06, -5.65249312334948e-06, -6.02088801710077e-06, -6.39451744851171e-06, -6.77379446388097e-06, -7.15823725534437e-06, -7.54825910394332e-06, -7.94336123069663e-06, -8.34395800204422e-06, -8.74955757971436e-06, -9.16054779162674e-06, -9.57642228943518e-06, -9.99759144947471e-06, -1.04235511544729e-05, -1.08546628466816e-05, -1.12904336671393e-05, -1.17312462832730e-05, -1.21765651542703e-05, -1.26267966656990e-05, -1.30813839859992e-05, -1.35407068370928e-05, -1.40042432894668e-05, -1.44723391847100e-05, -1.49444772391115e-05, -1.54209897807815e-05, -1.59013657273958e-05, -1.63859206132667e-05, -1.68741290759562e-05, -1.73663104823494e-05, -1.78619508850454e-05, -1.83613352518811e-05, -1.88639344535055e-05, -1.93700580786767e-05, -1.98791701832643e-05, -2.03915446858796e-05, -2.09066661112072e-05, -2.14247833830322e-05, -2.19453728209874e-05, -2.24687067756074e-05, -2.29942189701287e-05, -2.35221919064648e-05, -2.40520571098411e-05, -2.45840821429991e-05, -2.51176919541455e-05, -2.56531458365802e-05, -2.61898800092312e-05, -2.67281307655500e-05, -2.72673160896635e-05, -2.78076813742880e-05, -2.83486572194740e-05, -2.88904561028569e-05, -2.94324977036388e-05, -2.99750102268205e-05, -3.05173890710438e-05, -3.10598620379927e-05, -3.16018340271438e-05, -3.21434903845723e-05, -3.26842631134414e-05, -3.32243219343559e-05, -3.37630833740885e-05, -3.43007203295382e-05, -3.48366443059829e-05, -3.53710230750429e-05, -3.59032455798272e-05, -3.64334836149489e-05, -3.69611383814916e-05, -3.74863645989061e-05, -3.80085391108475e-05, -3.85278288122663e-05, -3.90436126582742e-05, -3.95560344208977e-05, -4.00644784803627e-05, -4.05690860811782e-05, -4.10692160068759e-05, -4.15650349494434e-05, -4.20558816044656e-05, -4.25419079114848e-05, -4.30224723840039e-05, -4.34977023194285e-05, -4.39669575807467e-05, -4.44303536014418e-05, -4.48872654011353e-05, -4.53378004294169e-05, -4.57813127757766e-05, -4.62179102441466e-05, -4.66469626401911e-05, -4.70685624133195e-05, -4.74820663998248e-05, -4.78875779787031e-05, -4.82844457389913e-05, -4.86727623947596e-05, -4.90518974627560e-05, -4.94219173993094e-05, -4.97821954537253e-05, -5.01328087389260e-05, -5.04731070890493e-05, -5.08031767792133e-05, -5.11223701960069e-05, -5.14307728917283e-05, -5.17277278570648e-05, -5.20133133082317e-05, -5.22868899566335e-05, -5.25485330801741e-05, -5.27975890619123e-05, -5.30341352214345e-05, -5.32575308256433e-05, -5.34678403499526e-05, -5.36644291832927e-05, -5.38473696441733e-05, -5.40160121859755e-05, -5.41704376199963e-05, -5.43100072156885e-05, -5.44347778383721e-05, -5.45441409303223e-05, -5.46381421707785e-05, -5.47161726277983e-05, -5.47782796545640e-05, -5.48238615891289e-05, -5.48529777470327e-05, -5.48650134478435e-05, -5.48600304498624e-05, -5.48374279367193e-05, -5.47972707257875e-05, -5.47389540962183e-05, -5.46625553812279e-05, -5.45674740408066e-05, -5.44537801178265e-05, -5.43208932117335e-05, -5.41688832854903e-05, -5.39971664557209e-05, -5.38058373779503e-05, -5.35943020304215e-05, -5.33626591300992e-05, -5.31103372807938e-05, -5.28374339049068e-05, -5.25433860531435e-05, -5.22282871255255e-05, -5.18915929674119e-05, -5.15334084359192e-05, -5.11531883719458e-05, -5.07510470767421e-05, -5.03264565435712e-05, -4.98795298499818e-05, -4.94097492621224e-05, -4.89172468415742e-05, -4.84015062909820e-05, -4.78626656356439e-05, -4.73002336655060e-05, -4.67143388964721e-05, -4.61045141628936e-05, -4.54709069617551e-05, -4.48130436182427e-05, -4.41310892863899e-05, -4.34245803720504e-05, -4.26937043233061e-05, -4.19380012096953e-05, -4.11576670903313e-05, -4.03522641202012e-05, -3.95219995716669e-05, -3.86664427936628e-05, -3.77858193439538e-05, -3.68797197976284e-05, -3.59483680766746e-05, -3.49913775019667e-05, -3.40089900319630e-05, -3.30008251544588e-05, -3.19671510883658e-05, -3.09076019921684e-05, -2.98224428705179e-05, -2.87113445271020e-05, -2.75745824745532e-05, -2.64118441851114e-05, -2.52234156518926e-05, -2.40090034267166e-05, -2.27689200068355e-05, -2.15028786303040e-05, -2.02112093356898e-05, -1.88936525600629e-05, -1.75505489714928e-05, -1.61816522718723e-05, -1.47873283970059e-05, -1.33673529297333e-05, -1.19221016313184e-05, -1.04513793212540e-05, -8.95557028181646e-06, -7.43449717788015e-06, -5.88858138346941e-06, -4.31765074336527e-06, -2.72214441335228e-06, -1.10191546986540e-06, 5.42576135735981e-07, 2.21145327612140e-06, 3.90424732482530e-06, 5.62105051139952e-06, 7.36137384262456e-06, 9.12529459068137e-06, 1.09123048193875e-05, 1.27224474678529e-05, 1.45552032584862e-05, 1.64105928172265e-05, 1.82880735840279e-05, 2.01876489388426e-05, 2.21087489487933e-05, 2.40513485984833e-05, 2.60148760416192e-05, 2.79992736446810e-05, 3.00039407582481e-05, 3.20288053388297e-05, 3.40732419683153e-05, 3.61371619724216e-05, 3.82199078901064e-05, 4.03213747021350e-05, 4.24408877592610e-05, 4.45783101891342e-05, 4.67329465682261e-05, 4.89046419944162e-05, 5.10926798053942e-05, 5.32968764479913e-05, 5.55164983346224e-05, 5.77513323125343e-05, 6.00006282654158e-05, 6.22641611239781e-05, 6.45411398811771e-05, 6.68313202374356e-05, 6.91339016622066e-05, 7.14486074938142e-05, 7.37746190907099e-05, 7.61116330506792e-05, 7.84588166968576e-05, 8.08158423081462e-05, 8.31818494755366e-05, 8.55564956212588e-05, 8.79389017808088e-05, 9.03286966625331e-05, 9.27249827027176e-05, 9.51273684116554e-05, 9.75349342814310e-05, 9.99472748819797e-05, 0.000102363447520479, 0.000104783014763168, 0.000107205025896024, 0.000109629029400713, 0.000112054039942443, 0.000114479594239356, 0.000116904687981786, 0.000119328839927821, 0.000121751025536885, 0.000124170741112682, 0.000126586955396263, 0.000128999137073690, 0.000131406237902807, 0.000133807710854935, 0.000136202494636464, 0.000138590020743407, 0.000140969217664355, 0.000143339493063055, 0.000145699758496409, 0.000148049419840621, 0.000150387365819865, 0.000152712978884051, 0.000155025147047118, 0.000157323233199747, 0.000159606113351142, 0.000161873135563338, 0.000164123164418827, 0.000166355539329688, 0.000168569105181148, 0.000170763192929278, 0.000172936642681967, 0.000175088769080921, 0.000177218404031216, 0.000179324852197408, 0.000181406934825622, 0.000183463950477444, 0.000185494717916349, 0.000187498516812910, 0.000189474160690418, 0.000191420933229610, 0.000193337632742739, 0.000195223538589502, 0.000197077449370729, 0.000198898632343484, 0.000200685889922636, 0.000202438477037224, 0.000204155202780923, 0.000205835317231766, 0.000207477624265485, 0.000209081375510424, 0.000210645375770233, 0.000212168874797709, 0.000213650681871823, 0.000215090046105722, 0.000216485772585174, 0.000217837122420945, 0.000219142904089215, 0.000220402374841213, 0.000221614355063568, 0.000222778105957421, 0.000223892449138464, 0.000224956657801864, 0.000225969559300686, 0.000226930435535397, 0.000227838120949022, 0.000228691904367779, 0.000229490637305569, 0.000230233614422397, 0.000230919699867762, 0.000231548200624833, 0.000232117991545114, 0.000232628392706581, 0.000233078299941400, 0.000233467042490252, 0.000233793529306281, 0.000234057114622203, 0.000234256717572874, 0.000234391707980239, 0.000234461034429087, 0.000234464075886551, 0.000234399804148527, 0.000234267616643166, 0.000234066510095474, 0.000233795906658708, 0.000233454817877378, 0.000233042694337553, 0.000232558571806248, 0.000232001923306693, 0.000231371813425932, 0.000230667742461277, 0.000229888797324386, 0.000229034509219026, 0.000228103997682251, 0.000227096814542036, 0.000226012115545807, 0.000224849486757965, 0.000223608106379000, 0.000222287594558100, 0.000220887169687286, 0.000219406480827707, 0.000217844783243759, 0.000216201753070026, 0.000214476690763218, 0.000212669306710065, 0.000210778935093994, 0.000208805327647997, 0.000206747856525214, 0.000204606309833789, 0.000202380104774549, 0.000200069067435948, 0.000197672653272001, 0.000195190736945890, 0.000192622814021790, 0.000189968793862972, 0.000187228227821168, 0.000184401067781124, 0.000181486906935768, 0.000178485741364642, 0.000175397211774938, 0.000172221367164218, 0.000168957890495671, 0.000165606876476172, 0.000162168061864114, 0.000158641588326119, 0.000155027243685390, 0.000151325219415721, 0.000147535354241219, 0.000143657889880845, 0.000139692722584275, 0.000135640137861556, 0.000131500087828142, 0.000127272919603931, 0.000122958632897122, 0.000118557624222376, 0.000114069956263803, 0.000109496077969276, 0.000104836112476280, 0.000100090556969088, 9.52595926807594e-05, 9.03437806713531e-05, 8.53433537117259e-05, 8.02589335085685e-05, 7.50908090508799e-05, 6.98396606723608e-05, 6.45058395701152e-05, 5.90900818618602e-05, 5.35927957604024e-05, 4.80147832320940e-05, 4.23565146651483e-05, 3.66188412855488e-05, 3.08022998861741e-05, 2.49078076002350e-05, 1.89359578000643e-05, 1.28877281875480e-05, 6.76377196319473e-06, 5.65130739446817e-07, -5.70747618704037e-06, -1.20529518122427e-05, -1.84705123312578e-05, -2.49589991720766e-05, -3.15175650599888e-05, -3.81449885574943e-05, -4.48403630718286e-05, -5.16024050889186e-05, -5.84301376752338e-05, -6.53222224894314e-05, -7.22776238052609e-05, -7.92949306753459e-05, -8.63730463095441e-05, -9.35105054098079e-05, -0.000100706144186103, -0.000107958436359977, -0.000115266152994485, -0.000122627706760917, -0.000130041811681510, -0.000137506814203479, -0.000145021368821121, -0.000152583759222027, -0.000160192579466020, -0.000167846056910789, -0.000175542718661153, -0.000183280733901876, -0.000191058573185037, -0.000198874346379858, -0.000206726455104848, -0.000214612960310208, -0.000222532206706049, -0.000230482190676936, -0.000238461200747511, -0.000246467177406058, -0.000254498351409696, -0.000262552611408044, -0.000270628125294601, -0.000278722730787134, -0.000286834539691710, -0.000294961336084192, -0.000303101180604228, -0.000311251799327546, -0.000319411202616472, -0.000327577068996273, -0.000335747350207106, -0.000343919676673919, -0.000352091955603402, -0.000360261765094418, -0.000368426959623216, -0.000376585075147441, -0.000384733917580314, -0.000392870977630007, -0.000400994015796423, -0.000409100475389566, -0.000417188075990567, -0.000425254218742792, -0.000433296579745569, -0.000441312521641045, -0.000449299675354794, -0.000457255369089255, -0.000465177193879328, -0.000473062439153703, -0.000480908661009415, -0.000488713116827171, -0.000496473321124369, -0.000504186501659088, -0.000511850143907964, -0.000519461439038756, -0.000527017845535591, -0.000534516525078808, -0.000541954904421434, -0.000549330124139864, -0.000556639582645205, -0.000563880395792860, -0.000571049939360574, -0.000578145303770340, -0.000585163848349161, -0.000592102641307673, -0.000598959022419751, -0.000605730045666215, -0.000612413030480144, -0.000619005017567106, -0.000625503315016224, -0.000631904950355812, -0.000638207216182248, -0.000644407135922555, -0.000650501991706910, -0.000656488796703490, -0.000662364832864586, -0.000668127107213612, -0.000673772895505234, -0.000679299206549835, -0.000684703312533797, -0.000689982228373537, -0.000695133224872846, -0.000700153320679537, -0.000705039793794998, -0.000709789667273328, -0.000714400230172114, -0.000718868516431075, -0.000723191819632401, -0.000727367189884889, -0.000731391938661357, -0.000735263125592756, -0.000738978079579033, -0.000742533884189047, -0.000745927883252895, -0.000749157181924490, -0.000752219147550121, -0.000755110911309810, -0.000757829866314622, -0.000760373168287008, -0.000762738239234387, -0.000764922268811481, -0.000766922708033022, -0.000768736783543735, -0.000770361976300053, -0.000771795549766353, -0.000773035026336787, -0.000774077710368219, -0.000774921156688016, -0.000775562718410930, -0.000775999996896670, -0.000776230384120606, -0.000776251530463252, -0.000776060879297139, -0.000775656128479859, -0.000775034774979158, -0.000774194563408219, -0.000773133050832454, -0.000771848039257578, -0.000770337139062027, -0.000768598212666572, -0.000766628928149237, -0.000764427212355194, -0.000761990800345454, -0.000759317676212684, -0.000756405642021792, -0.000753252754194147, -0.000749856883052877, -0.000746216149243278, -0.000742328500323755, -0.000738192130147058, -0.000733805058805418, -0.000729165555282147, -0.000724271716466218, -0.000719121892993695, -0.000713714263134529, -0.000708047251625198, -0.000702119122894178, -0.000695928386138248, -0.000689473392683322, -0.000682752736054815, -0.000675764850643800, -0.000668508423585954, -0.000660981983005567, -0.000653184299948689, -0.000645113996101250, -0.000636769940811193, -0.000628150846892228, -0.000619255679141116, -0.000610083247987995, -0.000600632615642164, -0.000590902695998816, -0.000580892646976487, -0.000570601481559749, -0.000560028464530771, -0.000549172712705324, -0.000538033593923370, -0.000526610326399401, -0.000514902384920966, -0.000502909102003151, -0.000490630054751344, -0.000478064682216253, -0.000465212674168866, -0.000452073583482240, -0.000438647204637503, -0.000424933205749722, -0.000410931495060687, -0.000396641852357854, -0.000382064302937101, -0.000367198738062124, -0.000352045297690400, -0.000336603996500303, -0.000320875086144786, -0.000304858697984160, -0.000288555200873863, -0.000271964847867372, -0.000255088130083280, -0.000237925412360025, -0.000220477306560259, -0.000202744305292592, -0.000184727135197687, -0.000166426409808339, -0.000147842979525945, -0.000128977579742240, -0.000109831180556723, -9.04046425871818e-05, -7.06990553697872e-05, -5.07154045972636e-05, -3.04549042775557e-05, -9.91865979301451e-06, 1.08919930592394e-05, 3.19758215514218e-05, 5.33313669696652e-05, 7.49572729406508e-05, 9.68519634422886e-05, 0.000119013952872007, 0.000141441540758312, 0.000164133122498143, 0.000187086875132261, 0.000210301066410341, 0.000233773755649941, 0.000257503086406519, 0.000281486994066025, 0.000305723503700679, 0.000330210426059308, 0.000354945665598255, 0.000379926915845916, 0.000405151956507756, 0.000430618362384964, 0.000456323792890481, 0.000482265705856655, 0.000508441643241767, 0.000534848940194894, 0.000561485022897046, 0.000588347113607660, 0.000615432518021442, 0.000642738345529626, 0.000670261786254066, 0.000697999835195141, 0.000725949568737048, 0.000754107872446179, 0.000782471708002863, 0.000811037851152608, 0.000839803156162613, 0.000868764285754871, 0.000897917988557699, 0.000927260821822552, 0.000956789425305633, 0.000986500254535089, 0.00101638984108537, 0.00104645454078258, 0.00107669078473676, 0.00110709482536606, 0.00113766299717731, 0.00116839145262871, 0.00119927642758690, 0.00123031398418415, 0.00126150026162382, 0.00129283122580216, 0.00132430292836542, 0.00135591124431857, 0.00138765213428446, 0.00141952138887340, 0.00145151488073991, 0.00148362831612719, 0.00151585748499229, 0.00154819801195881, 0.00158064560650847, 0.00161319581695018, 0.00164584427382029, 0.00167858645186783, 0.00171141790451108, 0.00174433403822607, 0.00177733033804577, 0.00181040213773593, 0.00184354485348776, 0.00187675376086131, 0.00191002421019513, 0.00194335141256686, 0.00197673066266553, 0.00201015711112216, 0.00204362599689791, 0.00207713241930943, 0.00211067156001584, 0.00214423847287856, 0.00217782828885456, 0.00221143601594175, 0.00224505673956590, 0.00227868542419834, 0.00231231711939174, 0.00234594674933244, 0.00237956932031571, 0.00241317972846192, 0.00244677294956298, 0.00248034384558351, 0.00251388736165349, 0.00254739833774491, 0.00258087169284408, 0.00261430224582133, 0.00264768489443835, 0.00268101443907401, 0.00271428576337512, 0.00274749365520234, 0.00278063298200053, 0.00281369852627465, 0.00284668514688528, 0.00287958762416115, 0.00291240080973127, 0.00294511948107620, 0.00297773849968884, 0.00301025264456641, 0.00304265677662001, 0.00307494568697706, 0.00310711424878149, 0.00313915726402809, 0.00317106962060174, 0.00320284613548793, 0.00323448171662747, 0.00326597120655615, 0.00329730953059114, 0.00332849155900580, 0.00335951224628230, 0.00339036649346014, 0.00342104928540268, 0.00345155555530025, 0.00348188032822464, 0.00351201857965144, 0.00354196536968445, 0.00357171571569318, 0.00360126472814403, 0.00363060747270192, 0.00365973910561074, 0.00368865474551317, 0.00371734960141723, 0.00374581885109485, 0.00377405776271989, 0.00380206156870805, 0.00382982560239173, 0.00385734516541213, 0.00388461565135489, 0.00391163243217263, 0.00393839097201934, 0.00396488671883422, 0.00399111521100629, 0.00401707196633785, 0.00404275260833588, 0.00406815273741037, 0.00409326805585855, 0.00411809424930169, 0.00414262710547963, 0.00416686240098882, 0.00419079601487805, 0.00421442381486645, 0.00423774176962887, 0.00426074584971528, 0.00428343212038434, 0.00430579664814760, 0.00432783560038011, 0.00434954515073437, 0.00437092156951920, 0.00439196113488749, 0.00441266022458233, 0.00443301523239588, 0.00445302264569759, 0.00447267896722690, 0.00449198080207357, 0.00451092477024544, 0.00452950759322735, 0.00454772601412418, 0.00456557686948679, 0.00458305702638157, 0.00460016344989720, 0.00461689312908165, 0.00463324315222104, 0.00464921064199444, 0.00466479281370150, 0.00467998692108119, 0.00469479030849154, 0.00470920036573083, 0.00472321457430748, 0.00473683045364440, 0.00475004562266464, 0.00476285774233103, 0.00477526456757244, 0.00478726390125808, 0.00479885363726199, 0.00481003172038249, 0.00482079618697185, 0.00483114513086222, 0.00484107672645139, 0.00485058921432468, 0.00485968091876064, 0.00486835022461732, 0.00487659560414803, 0.00488441559200791, 0.00489180880914334, 0.00489877394199243, 0.00490530975799206, 0.00491141509702113, 0.00491708888109120, 0.00492233009791042, 0.00492713782472824, 0.00493151120202513, 0.00493544945801285, 0.00493895189278199, 0.00494201788566977, 0.00494464688981495, 0.00494683844085619, 0.00494859214862692, 0.00494990770180738, 0.00495078486760031, 0.00495122348912271, 0.00495122348912271, 0.00495078486760031, 0.00494990770180738, 0.00494859214862692, 0.00494683844085619, 0.00494464688981495, 0.00494201788566977, 0.00493895189278199, 0.00493544945801285, 0.00493151120202513, 0.00492713782472824, 0.00492233009791042, 0.00491708888109120, 0.00491141509702113, 0.00490530975799206, 0.00489877394199243, 0.00489180880914334, 0.00488441559200791, 0.00487659560414803, 0.00486835022461732, 0.00485968091876064, 0.00485058921432468, 0.00484107672645139, 0.00483114513086222, 0.00482079618697185, 0.00481003172038249, 0.00479885363726199, 0.00478726390125808, 0.00477526456757244, 0.00476285774233103, 0.00475004562266464, 0.00473683045364440, 0.00472321457430748, 0.00470920036573083, 0.00469479030849154, 0.00467998692108119, 0.00466479281370150, 0.00464921064199444, 0.00463324315222104, 0.00461689312908165, 0.00460016344989720, 0.00458305702638157, 0.00456557686948679, 0.00454772601412418, 0.00452950759322735, 0.00451092477024544, 0.00449198080207357, 0.00447267896722690, 0.00445302264569759, 0.00443301523239588, 0.00441266022458233, 0.00439196113488749, 0.00437092156951920, 0.00434954515073437, 0.00432783560038011, 0.00430579664814760, 0.00428343212038434, 0.00426074584971528, 0.00423774176962887, 0.00421442381486645, 0.00419079601487805, 0.00416686240098882, 0.00414262710547963, 0.00411809424930169, 0.00409326805585855, 0.00406815273741037, 0.00404275260833588, 0.00401707196633785, 0.00399111521100629, 0.00396488671883422, 0.00393839097201934, 0.00391163243217263, 0.00388461565135489, 0.00385734516541213, 0.00382982560239173, 0.00380206156870805, 0.00377405776271989, 0.00374581885109485, 0.00371734960141723, 0.00368865474551317, 0.00365973910561074, 0.00363060747270192, 0.00360126472814403, 0.00357171571569318, 0.00354196536968445, 0.00351201857965144, 0.00348188032822464, 0.00345155555530025, 0.00342104928540268, 0.00339036649346014, 0.00335951224628230, 0.00332849155900580, 0.00329730953059114, 0.00326597120655615, 0.00323448171662747, 0.00320284613548793, 0.00317106962060174, 0.00313915726402809, 0.00310711424878149, 0.00307494568697706, 0.00304265677662001, 0.00301025264456641, 0.00297773849968884, 0.00294511948107620, 0.00291240080973127, 0.00287958762416115, 0.00284668514688528, 0.00281369852627465, 0.00278063298200053, 0.00274749365520234, 0.00271428576337512, 0.00268101443907401, 0.00264768489443835, 0.00261430224582133, 0.00258087169284408, 0.00254739833774491, 0.00251388736165349, 0.00248034384558351, 0.00244677294956298, 0.00241317972846192, 0.00237956932031571, 0.00234594674933244, 0.00231231711939174, 0.00227868542419834, 0.00224505673956590, 0.00221143601594175, 0.00217782828885456, 0.00214423847287856, 0.00211067156001584, 0.00207713241930943, 0.00204362599689791, 0.00201015711112216, 0.00197673066266553, 0.00194335141256686, 0.00191002421019513, 0.00187675376086131, 0.00184354485348776, 0.00181040213773593, 0.00177733033804577, 0.00174433403822607, 0.00171141790451108, 0.00167858645186783, 0.00164584427382029, 0.00161319581695018, 0.00158064560650847, 0.00154819801195881, 0.00151585748499229, 0.00148362831612719, 0.00145151488073991, 0.00141952138887340, 0.00138765213428446, 0.00135591124431857, 0.00132430292836542, 0.00129283122580216, 0.00126150026162382, 0.00123031398418415, 0.00119927642758690, 0.00116839145262871, 0.00113766299717731, 0.00110709482536606, 0.00107669078473676, 0.00104645454078258, 0.00101638984108537, 0.000986500254535089, 0.000956789425305633, 0.000927260821822552, 0.000897917988557699, 0.000868764285754871, 0.000839803156162613, 0.000811037851152608, 0.000782471708002863, 0.000754107872446179, 0.000725949568737048, 0.000697999835195141, 0.000670261786254066, 0.000642738345529626, 0.000615432518021442, 0.000588347113607660, 0.000561485022897046, 0.000534848940194894, 0.000508441643241767, 0.000482265705856655, 0.000456323792890481, 0.000430618362384964, 0.000405151956507756, 0.000379926915845916, 0.000354945665598255, 0.000330210426059308, 0.000305723503700679, 0.000281486994066025, 0.000257503086406519, 0.000233773755649941, 0.000210301066410341, 0.000187086875132261, 0.000164133122498143, 0.000141441540758312, 0.000119013952872007, 9.68519634422886e-05, 7.49572729406508e-05, 5.33313669696652e-05, 3.19758215514218e-05, 1.08919930592394e-05, -9.91865979301451e-06, -3.04549042775557e-05, -5.07154045972636e-05, -7.06990553697872e-05, -9.04046425871818e-05, -0.000109831180556723, -0.000128977579742240, -0.000147842979525945, -0.000166426409808339, -0.000184727135197687, -0.000202744305292592, -0.000220477306560259, -0.000237925412360025, -0.000255088130083280, -0.000271964847867372, -0.000288555200873863, -0.000304858697984160, -0.000320875086144786, -0.000336603996500303, -0.000352045297690400, -0.000367198738062124, -0.000382064302937101, -0.000396641852357854, -0.000410931495060687, -0.000424933205749722, -0.000438647204637503, -0.000452073583482240, -0.000465212674168866, -0.000478064682216253, -0.000490630054751344, -0.000502909102003151, -0.000514902384920966, -0.000526610326399401, -0.000538033593923370, -0.000549172712705324, -0.000560028464530771, -0.000570601481559749, -0.000580892646976487, -0.000590902695998816, -0.000600632615642164, -0.000610083247987995, -0.000619255679141116, -0.000628150846892228, -0.000636769940811193, -0.000645113996101250, -0.000653184299948689, -0.000660981983005567, -0.000668508423585954, -0.000675764850643800, -0.000682752736054815, -0.000689473392683322, -0.000695928386138248, -0.000702119122894178, -0.000708047251625198, -0.000713714263134529, -0.000719121892993695, -0.000724271716466218, -0.000729165555282147, -0.000733805058805418, -0.000738192130147058, -0.000742328500323755, -0.000746216149243278, -0.000749856883052877, -0.000753252754194147, -0.000756405642021792, -0.000759317676212684, -0.000761990800345454, -0.000764427212355194, -0.000766628928149237, -0.000768598212666572, -0.000770337139062027, -0.000771848039257578, -0.000773133050832454, -0.000774194563408219, -0.000775034774979158, -0.000775656128479859, -0.000776060879297139, -0.000776251530463252, -0.000776230384120606, -0.000775999996896670, -0.000775562718410930, -0.000774921156688016, -0.000774077710368219, -0.000773035026336787, -0.000771795549766353, -0.000770361976300053, -0.000768736783543735, -0.000766922708033022, -0.000764922268811481, -0.000762738239234387, -0.000760373168287008, -0.000757829866314622, -0.000755110911309810, -0.000752219147550121, -0.000749157181924490, -0.000745927883252895, -0.000742533884189047, -0.000738978079579033, -0.000735263125592756, -0.000731391938661357, -0.000727367189884889, -0.000723191819632401, -0.000718868516431075, -0.000714400230172114, -0.000709789667273328, -0.000705039793794998, -0.000700153320679537, -0.000695133224872846, -0.000689982228373537, -0.000684703312533797, -0.000679299206549835, -0.000673772895505234, -0.000668127107213612, -0.000662364832864586, -0.000656488796703490, -0.000650501991706910, -0.000644407135922555, -0.000638207216182248, -0.000631904950355812, -0.000625503315016224, -0.000619005017567106, -0.000612413030480144, -0.000605730045666215, -0.000598959022419751, -0.000592102641307673, -0.000585163848349161, -0.000578145303770340, -0.000571049939360574, -0.000563880395792860, -0.000556639582645205, -0.000549330124139864, -0.000541954904421434, -0.000534516525078808, -0.000527017845535591, -0.000519461439038756, -0.000511850143907964, -0.000504186501659088, -0.000496473321124369, -0.000488713116827171, -0.000480908661009415, -0.000473062439153703, -0.000465177193879328, -0.000457255369089255, -0.000449299675354794, -0.000441312521641045, -0.000433296579745569, -0.000425254218742792, -0.000417188075990567, -0.000409100475389566, -0.000400994015796423, -0.000392870977630007, -0.000384733917580314, -0.000376585075147441, -0.000368426959623216, -0.000360261765094418, -0.000352091955603402, -0.000343919676673919, -0.000335747350207106, -0.000327577068996273, -0.000319411202616472, -0.000311251799327546, -0.000303101180604228, -0.000294961336084192, -0.000286834539691710, -0.000278722730787134, -0.000270628125294601, -0.000262552611408044, -0.000254498351409696, -0.000246467177406058, -0.000238461200747511, -0.000230482190676936, -0.000222532206706049, -0.000214612960310208, -0.000206726455104848, -0.000198874346379858, -0.000191058573185037, -0.000183280733901876, -0.000175542718661153, -0.000167846056910789, -0.000160192579466020, -0.000152583759222027, -0.000145021368821121, -0.000137506814203479, -0.000130041811681510, -0.000122627706760917, -0.000115266152994485, -0.000107958436359977, -0.000100706144186103, -9.35105054098079e-05, -8.63730463095441e-05, -7.92949306753459e-05, -7.22776238052609e-05, -6.53222224894314e-05, -5.84301376752338e-05, -5.16024050889186e-05, -4.48403630718286e-05, -3.81449885574943e-05, -3.15175650599888e-05, -2.49589991720766e-05, -1.84705123312578e-05, -1.20529518122427e-05, -5.70747618704037e-06, 5.65130739446817e-07, 6.76377196319473e-06, 1.28877281875480e-05, 1.89359578000643e-05, 2.49078076002350e-05, 3.08022998861741e-05, 3.66188412855488e-05, 4.23565146651483e-05, 4.80147832320940e-05, 5.35927957604024e-05, 5.90900818618602e-05, 6.45058395701152e-05, 6.98396606723608e-05, 7.50908090508799e-05, 8.02589335085685e-05, 8.53433537117259e-05, 9.03437806713531e-05, 9.52595926807594e-05, 0.000100090556969088, 0.000104836112476280, 0.000109496077969276, 0.000114069956263803, 0.000118557624222376, 0.000122958632897122, 0.000127272919603931, 0.000131500087828142, 0.000135640137861556, 0.000139692722584275, 0.000143657889880845, 0.000147535354241219, 0.000151325219415721, 0.000155027243685390, 0.000158641588326119, 0.000162168061864114, 0.000165606876476172, 0.000168957890495671, 0.000172221367164218, 0.000175397211774938, 0.000178485741364642, 0.000181486906935768, 0.000184401067781124, 0.000187228227821168, 0.000189968793862972, 0.000192622814021790, 0.000195190736945890, 0.000197672653272001, 0.000200069067435948, 0.000202380104774549, 0.000204606309833789, 0.000206747856525214, 0.000208805327647997, 0.000210778935093994, 0.000212669306710065, 0.000214476690763218, 0.000216201753070026, 0.000217844783243759, 0.000219406480827707, 0.000220887169687286, 0.000222287594558100, 0.000223608106379000, 0.000224849486757965, 0.000226012115545807, 0.000227096814542036, 0.000228103997682251, 0.000229034509219026, 0.000229888797324386, 0.000230667742461277, 0.000231371813425932, 0.000232001923306693, 0.000232558571806248, 0.000233042694337553, 0.000233454817877378, 0.000233795906658708, 0.000234066510095474, 0.000234267616643166, 0.000234399804148527, 0.000234464075886551, 0.000234461034429087, 0.000234391707980239, 0.000234256717572874, 0.000234057114622203, 0.000233793529306281, 0.000233467042490252, 0.000233078299941400, 0.000232628392706581, 0.000232117991545114, 0.000231548200624833, 0.000230919699867762, 0.000230233614422397, 0.000229490637305569, 0.000228691904367779, 0.000227838120949022, 0.000226930435535397, 0.000225969559300686, 0.000224956657801864, 0.000223892449138464, 0.000222778105957421, 0.000221614355063568, 0.000220402374841213, 0.000219142904089215, 0.000217837122420945, 0.000216485772585174, 0.000215090046105722, 0.000213650681871823, 0.000212168874797709, 0.000210645375770233, 0.000209081375510424, 0.000207477624265485, 0.000205835317231766, 0.000204155202780923, 0.000202438477037224, 0.000200685889922636, 0.000198898632343484, 0.000197077449370729, 0.000195223538589502, 0.000193337632742739, 0.000191420933229610, 0.000189474160690418, 0.000187498516812910, 0.000185494717916349, 0.000183463950477444, 0.000181406934825622, 0.000179324852197408, 0.000177218404031216, 0.000175088769080921, 0.000172936642681967, 0.000170763192929278, 0.000168569105181148, 0.000166355539329688, 0.000164123164418827, 0.000161873135563338, 0.000159606113351142, 0.000157323233199747, 0.000155025147047118, 0.000152712978884051, 0.000150387365819865, 0.000148049419840621, 0.000145699758496409, 0.000143339493063055, 0.000140969217664355, 0.000138590020743407, 0.000136202494636464, 0.000133807710854935, 0.000131406237902807, 0.000128999137073690, 0.000126586955396263, 0.000124170741112682, 0.000121751025536885, 0.000119328839927821, 0.000116904687981786, 0.000114479594239356, 0.000112054039942443, 0.000109629029400713, 0.000107205025896024, 0.000104783014763168, 0.000102363447520479, 9.99472748819797e-05, 9.75349342814310e-05, 9.51273684116554e-05, 9.27249827027176e-05, 9.03286966625331e-05, 8.79389017808088e-05, 8.55564956212588e-05, 8.31818494755366e-05, 8.08158423081462e-05, 7.84588166968576e-05, 7.61116330506792e-05, 7.37746190907099e-05, 7.14486074938142e-05, 6.91339016622066e-05, 6.68313202374356e-05, 6.45411398811771e-05, 6.22641611239781e-05, 6.00006282654158e-05, 5.77513323125343e-05, 5.55164983346224e-05, 5.32968764479913e-05, 5.10926798053942e-05, 4.89046419944162e-05, 4.67329465682261e-05, 4.45783101891342e-05, 4.24408877592610e-05, 4.03213747021350e-05, 3.82199078901064e-05, 3.61371619724216e-05, 3.40732419683153e-05, 3.20288053388297e-05, 3.00039407582481e-05, 2.79992736446810e-05, 2.60148760416192e-05, 2.40513485984833e-05, 2.21087489487933e-05, 2.01876489388426e-05, 1.82880735840279e-05, 1.64105928172265e-05, 1.45552032584862e-05, 1.27224474678529e-05, 1.09123048193875e-05, 9.12529459068137e-06, 7.36137384262456e-06, 5.62105051139952e-06, 3.90424732482530e-06, 2.21145327612140e-06, 5.42576135735981e-07, -1.10191546986540e-06, -2.72214441335228e-06, -4.31765074336527e-06, -5.88858138346941e-06, -7.43449717788015e-06, -8.95557028181646e-06, -1.04513793212540e-05, -1.19221016313184e-05, -1.33673529297333e-05, -1.47873283970059e-05, -1.61816522718723e-05, -1.75505489714928e-05, -1.88936525600629e-05, -2.02112093356898e-05, -2.15028786303040e-05, -2.27689200068355e-05, -2.40090034267166e-05, -2.52234156518926e-05, -2.64118441851114e-05, -2.75745824745532e-05, -2.87113445271020e-05, -2.98224428705179e-05, -3.09076019921684e-05, -3.19671510883658e-05, -3.30008251544588e-05, -3.40089900319630e-05, -3.49913775019667e-05, -3.59483680766746e-05, -3.68797197976284e-05, -3.77858193439538e-05, -3.86664427936628e-05, -3.95219995716669e-05, -4.03522641202012e-05, -4.11576670903313e-05, -4.19380012096953e-05, -4.26937043233061e-05, -4.34245803720504e-05, -4.41310892863899e-05, -4.48130436182427e-05, -4.54709069617551e-05, -4.61045141628936e-05, -4.67143388964721e-05, -4.73002336655060e-05, -4.78626656356439e-05, -4.84015062909820e-05, -4.89172468415742e-05, -4.94097492621224e-05, -4.98795298499818e-05, -5.03264565435712e-05, -5.07510470767421e-05, -5.11531883719458e-05, -5.15334084359192e-05, -5.18915929674119e-05, -5.22282871255255e-05, -5.25433860531435e-05, -5.28374339049068e-05, -5.31103372807938e-05, -5.33626591300992e-05, -5.35943020304215e-05, -5.38058373779503e-05, -5.39971664557209e-05, -5.41688832854903e-05, -5.43208932117335e-05, -5.44537801178265e-05, -5.45674740408066e-05, -5.46625553812279e-05, -5.47389540962183e-05, -5.47972707257875e-05, -5.48374279367193e-05, -5.48600304498624e-05, -5.48650134478435e-05, -5.48529777470327e-05, -5.48238615891289e-05, -5.47782796545640e-05, -5.47161726277983e-05, -5.46381421707785e-05, -5.45441409303223e-05, -5.44347778383721e-05, -5.43100072156885e-05, -5.41704376199963e-05, -5.40160121859755e-05, -5.38473696441733e-05, -5.36644291832927e-05, -5.34678403499526e-05, -5.32575308256433e-05, -5.30341352214345e-05, -5.27975890619123e-05, -5.25485330801741e-05, -5.22868899566335e-05, -5.20133133082317e-05, -5.17277278570648e-05, -5.14307728917283e-05, -5.11223701960069e-05, -5.08031767792133e-05, -5.04731070890493e-05, -5.01328087389260e-05, -4.97821954537253e-05, -4.94219173993094e-05, -4.90518974627560e-05, -4.86727623947596e-05, -4.82844457389913e-05, -4.78875779787031e-05, -4.74820663998248e-05, -4.70685624133195e-05, -4.66469626401911e-05, -4.62179102441466e-05, -4.57813127757766e-05, -4.53378004294169e-05, -4.48872654011353e-05, -4.44303536014418e-05, -4.39669575807467e-05, -4.34977023194285e-05, -4.30224723840039e-05, -4.25419079114848e-05, -4.20558816044656e-05, -4.15650349494434e-05, -4.10692160068759e-05, -4.05690860811782e-05, -4.00644784803627e-05, -3.95560344208977e-05, -3.90436126582742e-05, -3.85278288122663e-05, -3.80085391108475e-05, -3.74863645989061e-05, -3.69611383814916e-05, -3.64334836149489e-05, -3.59032455798272e-05, -3.53710230750429e-05, -3.48366443059829e-05, -3.43007203295382e-05, -3.37630833740885e-05, -3.32243219343559e-05, -3.26842631134414e-05, -3.21434903845723e-05, -3.16018340271438e-05, -3.10598620379927e-05, -3.05173890710438e-05, -2.99750102268205e-05, -2.94324977036388e-05, -2.88904561028569e-05, -2.83486572194740e-05, -2.78076813742880e-05, -2.72673160896635e-05, -2.67281307655500e-05, -2.61898800092312e-05, -2.56531458365802e-05, -2.51176919541455e-05, -2.45840821429991e-05, -2.40520571098411e-05, -2.35221919064648e-05, -2.29942189701287e-05, -2.24687067756074e-05, -2.19453728209874e-05, -2.14247833830322e-05, -2.09066661112072e-05, -2.03915446858796e-05, -1.98791701832643e-05, -1.93700580786767e-05, -1.88639344535055e-05, -1.83613352518811e-05, -1.78619508850454e-05, -1.73663104823494e-05, -1.68741290759562e-05, -1.63859206132667e-05, -1.59013657273958e-05, -1.54209897807815e-05, -1.49444772391115e-05, -1.44723391847100e-05, -1.40042432894668e-05, -1.35407068370928e-05, -1.30813839859992e-05, -1.26267966656990e-05, -1.21765651542703e-05, -1.17312462832730e-05, -1.12904336671393e-05, -1.08546628466816e-05, -1.04235511544729e-05, -9.99759144947471e-06, -9.57642228943518e-06, -9.16054779162674e-06, -8.74955757971436e-06, -8.34395800204422e-06, -7.94336123069663e-06, -7.54825910394332e-06, -7.15823725534437e-06, -6.77379446388097e-06, -6.39451744851171e-06, -6.02088801710077e-06, -5.65249312334948e-06, -5.28980705682264e-06, -4.93243163040497e-06, -4.58080862054126e-06, -4.23452884634043e-06, -3.89406743396649e-06, -3.55896455485854e-06, -3.22973451266772e-06, -2.90589263830832e-06, -2.58791653823994e-06, -2.27536237370173e-06, -1.96871121194834e-06, -1.66747248399997e-06, -1.37213415644316e-06, -1.08221647391169e-06, -7.98197252838720e-07, -5.19577878779430e-07, -2.46853106248978e-07, 2.04836906979221e-08, 2.81944291020029e-07, 5.38057114445362e-07, 7.88323211174950e-07, 1.03324761527409e-06, 1.27238963764761e-06, 1.50620956228030e-06, 1.73430496738356e-06, 1.95714227397860e-06, 2.17426059604335e-06, 2.38618565979242e-06, 2.59247412473194e-06, 2.79361738719780e-06, 2.98917613191769e-06, 3.17967167761456e-06, 3.36465155419938e-06, 3.54462712478025e-06, 3.71916450048738e-06, 3.88878763289571e-06, 4.05305110546832e-06, 4.21247294402037e-06, 4.36660747560401e-06, 4.51602630845954e-06, 4.66022392940390e-06, 4.79981139928378e-06, 4.93426738681860e-06, 5.06417106483642e-06, 5.18909082922882e-06, 5.30955851436901e-06, 5.42511044796520e-06, 5.53633239754493e-06, 5.64275663266799e-06, 5.74494125723676e-06, 5.84243268710826e-06, 5.93581228618980e-06, 6.02460876343180e-06, 6.10938733149237e-06, 6.18969752493548e-06, 6.26611753900958e-06, 6.33820922296577e-06, 6.40649492549257e-06, 6.47057633363911e-06, 6.53097084557196e-06, 6.58726001945506e-06, 6.64004566255543e-06, 6.68879222648781e-06, 6.73414912642070e-06, 6.77563271791333e-06, 6.81383582649206e-06, 6.84826575659092e-06, 6.87956544369715e-06, 6.90721796243191e-06, 6.93184262641915e-06, 6.95293670913433e-06, 6.97115918378061e-06, 6.98598387232265e-06, 6.99805670472170e-06, 7.00682651919766e-06, 7.01299335632421e-06, 7.01598906903671e-06, 7.01649463335420e-06, 7.01399146065940e-06, 7.00904991575129e-06, 7.00126691500350e-06, 6.99121320837930e-06, 6.97837546570650e-06, 6.96341207782413e-06, 6.94581178960161e-06, 6.92617579276020e-06, 6.90400455258515e-06, 6.87995435672755e-06, 6.85350874920331e-06, 6.82527935353772e-06, 6.79475276861382e-06, 6.76256992228003e-06, 6.72823177451458e-06, 6.69234997696170e-06, 6.65439635608727e-06, 6.61504319391059e-06, 6.57367526411895e-06, 6.53110576502919e-06, 6.48662130412141e-06, 6.44096494373972e-06, 6.39358822958236e-06, 6.34512332808420e-06, 6.29499279506742e-06, 6.24392081949063e-06, 6.19132752972891e-06, 6.13786180337324e-06, 6.08294572989760e-06, 6.02728122072791e-06, 5.97030085360536e-06, 5.91266194714808e-06, 5.85377619609459e-06, 5.79431080305923e-06, 5.73373682457175e-06, 5.67265321372291e-06, 5.61062044360571e-06, 5.54811134917779e-06, 5.48469577560834e-06, 5.42102571618858e-06, 5.35641256312241e-06, 5.29163941340404e-06, 5.22609616909151e-06, 5.16043301207036e-06, 5.09401623836012e-06, 5.02759963577756e-06, 4.96055708038026e-06, 4.89357790491499e-06, 4.82598777828551e-06, 4.75852881449136e-06, 4.69055023332375e-06, 4.62281849455623e-06, 4.55459997845769e-06, 4.48672487737745e-06, 4.41836938506806e-06, 4.35043829085821e-06, 4.28219961892930e-06, 4.21424927012473e-06, 4.14618562570372e-06, 4.07851955438422e-06, 4.01062965420015e-06, 3.94325856674703e-06, 3.87581985935145e-06, 3.80892935787303e-06, 3.74192777791326e-06, 3.67551457730312e-06, 3.60908996231663e-06, 3.54333509849531e-06, 3.47759844620301e-06, 3.41254082601689e-06, 3.34755725225876e-06, 3.28329739015491e-06, 3.21917116992942e-06, 3.15586112065294e-06, 3.09250439907414e-06, 3.03026815024548e-06, 2.96789707905998e-06, 2.90651253940365e-06, 2.84534746585168e-06, 2.78515359568984e-06, 2.72502556403521e-06, 2.66588370269542e-06, 2.60694079790385e-06, 2.54904626588095e-06, 2.49131860508909e-06, 2.43461484557276e-06, 2.37811232502338e-06, 2.32270367024371e-06, 2.26753452245018e-06, 2.21344673621392e-06, 2.15960953108923e-06, 2.10671996122087e-06, 2.05440229847222e-06, 2.00274982053528e-06, 1.95172125266670e-06, 1.90190541457320e-06, 1.85213180801677e-06, 1.80354697649463e-06, 1.75531183154730e-06, 1.70832466623602e-06, 1.66152581672090e-06, 1.61590430260585e-06, 1.57052770327227e-06, 1.52645417739943e-06, 1.48263736669695e-06, 1.44009364782760e-06, 1.39768396625082e-06, 1.35656260640872e-06, 1.31548405641171e-06, 1.27597253424280e-06, 1.23612003796729e-06, 1.19822784284488e-06, 1.16035624735089e-06, 1.12300409054529e-06, 1.08676147556840e-06, 1.05143714735623e-06, 1.01643933513151e-06, 9.82217633251451e-07, 9.48565090704124e-07, 9.15965803598408e-07, 8.83993876825403e-07, 8.52904112434704e-07, 8.22319204892483e-07, 7.92457626845786e-07, 7.63210937527310e-07, 7.34607521511639e-07, 7.06900952158772e-07, 6.79457125689371e-07, 6.53603188407001e-07, 6.27541356389415e-07, 6.00698053897355e-07, 5.79062251172147e-07, 5.53883059492054e-07, 5.30402400375842e-07, 5.06629365749489e-07, 4.85127823306893e-07, 4.63474354546465e-07, 4.43414078442301e-07, 4.22883429696171e-07, 4.03659300931941e-07, 3.84037888145959e-07, 3.65790534295599e-07, 3.47320034430519e-07, 3.30279379977406e-07, 3.13057205526705e-07, 2.97200797125842e-07, 2.81092420097884e-07, 2.66244224670397e-07, 2.25877153377331e-06 }; int lp_fifo_num = 1; int bp_fifo_num = 1; int value[] = {0,0}; float mag = 0; float calc_mag = 0; double mag_total = 0; float phase = 0; float calc_phase = 0; float phase_total = 0; int NumInBlock = 0; float mag_result = 0; float phase_result = 0; /* int diff_0[3] = {0, 0, 0}; int diff_1[3] = {0, 0, 0}; */ double final_mag = 0; float final_phase = 0; // Finite State Machine int current_state = 0; // Flag bool ADC_reading = false; bool isTransmitting = false; //IntervalTimer timer0; Ticker timer0; Timer t1; int adc_cal(void) { ADC0_CFG1 |= (ADC_CFG1_MODE(3) | // 16 bits mode ADC_CFG1_ADICLK(1)| // Input Bus Clock divided by 2 (20-25 MHz out of reset (FEI mode) / 2) ADC_CFG1_ADIV(2)) ; // Clock divide by 4 (2.5-3 MHz) ADC0_SC3 |= ADC_SC3_AVGE_MASK | // Enable HW average ADC_SC3_AVGS(3) | // Set HW average of 32 samples ADC_SC3_CAL_MASK; // Start calibration process while(ADC0_SC3 & ADC_SC3_CAL_MASK); // Wait for calibration to end if(ADC0_SC3 & ADC_SC3_CALF_MASK) return 1; // Check for successful calibration uint16_t calib = 0; // calibration variable calib += ADC0->CLPS + ADC0_CLP4 + ADC0_CLP3 + ADC0_CLP2 + ADC0_CLP1 + ADC0_CLP0; calib /= 2; calib |= 0x8000; // Set MSB ADC0_PG = calib; calib = 0; calib += ADC0_CLMS + ADC0_CLM4 + ADC0_CLM3 + ADC0_CLM2 + ADC0_CLM1 + ADC0_CLM0; calib /= 2; calib |= 0x8000; // Set MSB ADC0_MG = calib; return 0; } void adc_init() { // red, indicating not ready // Turn on the ADC0 and ADC1 clocks SIM_SCGC6 |= SIM_SCGC6_ADC0_MASK; SIM_SCGC3 |= SIM_SCGC3_ADC1_MASK; __disable_irq(); adc_cal(); //if(adc_cal()) {red = 0; green = 0;} // if calibration fails, display yellow __enable_irq(); // Setup Configuration Register 1 ADC0_CFG1 = 0; // clear register ADC0_CFG1 |= ADC_CFG1_ADICLK(0); // select bus clock ADC0_CFG1 |= ADC_CFG1_MODE(3); // select 16-bit 2's complement output ADC0_CFG1 |= ADC_CFG1_ADIV(0); // clock divisor = 0. ADC0_CFG1 &= ~ADC_CFG1_ADLSMP_MASK; // select short sample time //QUESTION ADC0_CFG1 &= ~ADC_CFG1_ADLPC_MASK; // select normal power configuration ADC1_CFG1 = 0; // clear register ADC1_CFG1 |= ADC_CFG1_ADICLK(0); // select bus clock ADC1_CFG1 |= ADC_CFG1_MODE(3); // select 16-bit 2's complement output ADC1_CFG1 |= ADC_CFG1_ADIV(0); // clock divisor = 0. ADC1_CFG1 &= ~ADC_CFG1_ADLSMP_MASK; // select short sample time ADC1_CFG1 &= ~ADC_CFG1_ADLPC_MASK; // select normal power configuration // Setup Configuration Register 2 ADC0_CFG2 = 0; // clear register //ADC0_CFG2 |= ADC_CFG2_ADHSC_MASK ; // select high-speed conversion ADC0_CFG2 |= ADC_CFG2_MUXSEL_MASK; // select a channels //possibly change to channel b. ADC1_CFG2 = 0; // clear register //ADC1_CFG2 |= ADC_CFG2_ADHSC_MASK ; // select high-speed conversion ADC1_CFG2 &= ~ADC_CFG2_MUXSEL_MASK; // select a channels // Setup Status and Control Register 2 ADC0_SC2 = 0; // clear register ADC0_SC2 |= ADC_SC2_REFSEL(0); // select external voltage reference //QUESTION //ADC0_SC2 |= ADC_SC2_DMAEN_MASK; // enable DMA //ADC0_SC2 &= ~ADC_SC2_ADTRG_MASK; // select hardware trigger //QESTION ADC1_SC2 = 0; // clear register ADC1_SC2 |= ADC_SC2_REFSEL(0); // select external voltage reference //ADC1_SC2 |= ADC_SC2_DMAEN_MASK; // enable DMA //ADC1_SC2 &= ~ADC_SC2_ADTRG_MASK; // select hardware trigger ADC0_SC3 = ADC_SC3_AVGS(0) | ADC_SC3_AVGE_MASK; // Hardware Average set to 16 samples averaged // select single conversion mode ADC1_SC3 = ADC_SC3_AVGS(0) | ADC_SC3_AVGE_MASK; // Hardware Average set to 16 samples averaged // Setup Status and Control Register 3 now that calibration is complete ADC0_SC3 = 0; // Hardware Average set to 4 samples averaged // Hardware Average Disabled // select single conversion mode ADC1_SC3 = 0; // Hardware Average set to 4 samples averaged // Hardware Average Disabled // select single conversion mode //ADC1_SC3 = ADC_SC3_AVGS(0) | ADC_SC3_AVGE_MASK;//JARED COME BACK AND LOOK AT THIS // Setup Status and Control Register 1A ADC0_SC1A = 0; // clear register ADC0_SC1A &= ~ADC_SC1_DIFF_MASK; // select single-ended mode ADC0_SC1A |= ADC_SC1_AIEN_MASK; // enable interrupt (for debugging) ADC0_SC1A |= ADC_SC1_ADCH(12); // select channel 13 ADC1_SC1A = 0; // clear register ADC1_SC1A &= ~ADC_SC1_DIFF_MASK; // select single-ended mode ADC1_SC1A |= ADC_SC1_AIEN_MASK; // enable interrupt (for debugging) ADC1_SC1A |= ADC_SC1_ADCH(14); // select channel 14 // Check if ADC is finished initializing TODO: This part doesn't seem right, but I did it according to 871 while( (ADC0_SC1B&ADC_SC1_COCO_MASK)) {} int gain = ADC0_RA; // read the register to clear SC1A[COCO] //possibly a while( (ADC1_SC1A&ADC_SC1_COCO_MASK)) {} gain = ADC1_RA; // read the register to clear SC1A[COCO] //QUESTION ADC0_SC3 &= ~ADC_SC3_ADCO_MASK; // single conversion mode ADC1_SC3 &= ~ADC_SC3_ADCO_MASK; // single conversion mode ADC0_SC2 &= ~ADC_SC2_ADTRG_MASK; // set ADC to software trigger ADC1_SC2 &= ~ADC_SC2_ADTRG_MASK; // set ADC to software trigger ADC0_SC1A |= ADC_SC1_ADCH(12); // write to SC1B causing a trigger ADC1_SC1A |= ADC_SC1_ADCH(14); // write to SC1A causing a trigger } void pre_compute_tables() { // This function will precompute the cos and sin tables used in the rest of the program for(int precompute_counter = 0; precompute_counter < pre_compute_length; precompute_counter++){ out_val_pre[precompute_counter] = (int) (cos(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter) * 4965.0 + 49650.0); i_mod_pre[precompute_counter] = (cos(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter)); q_mod_pre[precompute_counter] = (-sin(twopi * CarrierFrequency * TimerInterruptInMicroSeconds * 1e-6 * precompute_counter)); } } //pre_compute_tables void ISR_repeat() {//40 KHz // Calculation of loop for generating signal to output on DAC WaveOut.write_u16(out_val_pre[phase_counter]); //creates a wave that bounces between 0 & 3.3 V // ISR counter reset and increment if (ISR_counter >= ISR_counter_loop_reset)//10KHz { ISR_counter = 1; //JARED ADD THESE 2 LINES BACK IN ADC0_SC1A |= ADC_SC1_ADCH(12); // start ADC process Possibly change to B. ADC1_SC1A |= ADC_SC1_ADCH(14); // start ADC process ADC_reading = true; current_i_mod = i_mod_pre[phase_counter]; current_q_mod = q_mod_pre[phase_counter]; } else { ISR_counter++; } phase_counter++; if (phase_counter >= pre_compute_length) phase_counter = 0; } //ISR_repeat void execute_DSP() { /* bp_fifo_num++; if (bp_fifo_num >= bp_fir_length) bp_fifo_num = 0; x_0[bp_fifo_num] = (float) (value[1] - value[0]); x_1[bp_fifo_num] = (float) (value[0] - 32768); // Band pass filter of incoming data float y_0 = x_0[bp_fifo_num] * bp_filter_coeff[0]; float y_1 = x_1[bp_fifo_num] * bp_filter_coeff[0]; for(int fir_counter = 1; fir_counter < bp_fir_length; fir_counter++){ int fir_index = bp_fifo_num + fir_counter; if (fir_index >= bp_fir_length) { fir_index -= bp_fir_length; } y_0 += x_0[fir_index] * bp_filter_coeff[fir_counter]; y_1 += x_1[fir_index] * bp_filter_coeff[fir_counter]; } */ y_0 = (value[0]); y_1 = (value[1]); //y_0 = (value[0] - 32768); //y_1 = (value[1] - 32768); current_i_mod = i_mod_pre[phase_counter]; current_q_mod = q_mod_pre[phase_counter]; // Demodulation of the signal x_0_i[lp_fifo_num] = (y_0 * current_i_mod); x_0_q[lp_fifo_num] = (y_0 * current_q_mod); x_1_i[lp_fifo_num] = (y_1 * current_i_mod); x_1_q[lp_fifo_num] = (y_1 * current_q_mod); lp_fifo_num++; if (lp_fifo_num >= lp_fir_length) lp_fifo_num = 0; // Low pass filter of demodulated signal float y_0_i = x_0_i[lp_fifo_num] * lp_filter_coeff[0]; float y_0_q = x_0_q[lp_fifo_num] * lp_filter_coeff[0]; float y_1_i = x_1_i[lp_fifo_num] * lp_filter_coeff[0]; float y_1_q = x_1_q[lp_fifo_num] * lp_filter_coeff[0]; for(int fir_counter = 1; fir_counter < lp_fir_length; fir_counter++){ int fir_index = lp_fifo_num + fir_counter; if (fir_index >= lp_fir_length) { fir_index -= lp_fir_length; } y_0_i += x_0_i[fir_index] * lp_filter_coeff[fir_counter]; y_0_q += x_0_q[fir_index] * lp_filter_coeff[fir_counter]; y_1_i += x_1_i[fir_index] * lp_filter_coeff[fir_counter]; y_1_q += x_1_q[fir_index] * lp_filter_coeff[fir_counter]; } real_ip = y_0_i * y_1_i + y_0_q * y_1_q; imag_ip = y_0_q * y_1_i - y_0_i * y_1_q; y_0_squared = y_0_i * y_0_i + y_0_q * y_0_q; y_1_squared = y_1_i * y_1_i + y_1_q * y_1_q; // float mag = sqrt((real_ip * real_ip + imag_ip * imag_ip) / y_0_squared; mag = sqrt(((float) real_ip * (float) real_ip + (float) imag_ip * (float) imag_ip)) / ((float) y_0_squared); mag_total += mag; calc_mag = mag_total / NumInBlock; real_ip_total += real_ip; imag_ip_total += imag_ip; phase = -atan2(imag_ip_total, real_ip_total); calc_phase = phase_total / NumInBlock; } void setup() { printf("Starting UP"); adc_init(); pre_compute_tables(); wait(1); } //setup using namespace std; int main() { led_blue = 1; led_green = 1; led_red = 0; setup(); int count = 0; t1.start(); pc.baud(115200); for(int i = 0; i < 86; i++) { if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2); } // Give hardware associated with // sampling the highest priority NVIC_SetPriority(ADC1_IRQn,0); NVIC_SetPriority(ADC0_IRQn,0); NVIC_SetPriority(PDB0_IRQn,0); NVIC_SetPriority(DMA0_IRQn,0); NVIC_SetPriority(DMA1_IRQn,0); NVIC_SetPriority(DMA2_IRQn,0); NVIC_SetPriority(ENET_1588_Timer_IRQn,1); NVIC_SetPriority(ENET_Transmit_IRQn,1); NVIC_SetPriority(ENET_Receive_IRQn,1); NVIC_SetPriority(ENET_Error_IRQn,1); led_green = 1; led_red = 1; led_blue = 1; timer0.attach_us(&ISR_repeat, TimerInterruptInMicroSeconds); while(true) { count++; //printf("Loop"); while (!ADC_reading) { led_blue = 0; } counter++; CyclesInState++; execute_DSP(); NumInBlock++; if (NumInBlock >= NumCalculatedAverages) { printCounter++; mag_result = calc_mag; phase_result = calc_phase; final_mag = mag_result; final_phase = phase_result; NumInBlock = 0; mag_total = 0; real_ip_total = 0; imag_ip_total = 0; if (printCounter>PRINTTIMER) { printf("Coeficient%f Phase%f\n\r", final_mag, final_phase); printCounter = 0; } } value[0] = ADC0_RA;//Read adc value[1] = ADC1_RA;//Read adc //printf("%f %f\n\r", value[0], value[1]); ADC_reading = false;//lower flag }// end while(true) }// end main