├── .arduino-ci.yml ├── .github ├── FUNDING.yml └── workflows │ ├── arduino-lint.yml │ ├── arduino_test_runner.yml │ └── jsoncheck.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── examples ├── funcGenFreeWavePlotter │ └── funcGenFreeWavePlotter.ino ├── functionGenerator │ └── functionGenerator.ino ├── functionGeneratorDuoPlot │ └── functionGeneratorDuoPlot.ino ├── functionGeneratorPerformance │ ├── functionGeneratorPerformance.ino │ ├── performance_0.2.4.txt │ ├── performance_0.2.5.txt │ ├── performance_0.2.7.txt │ └── performance_0.3.0.txt ├── functionGeneratorPlotter │ └── functionGeneratorPlotter.ino ├── functionGenerator_MCP4725 │ └── functionGenerator_MCP4725.ino ├── functionGenerator_double_MCP4725 │ └── functionGenerator_double_MCP4725.ino └── generateFreeWave │ └── generateFreeWave.ino ├── functionGenerator.cpp ├── functionGenerator.h ├── keywords.txt ├── library.json ├── library.properties └── test └── unit_test_001.cpp /.arduino-ci.yml: -------------------------------------------------------------------------------- 1 | platforms: 2 | rpipico: 3 | board: rp2040:rp2040:rpipico 4 | package: rp2040:rp2040 5 | gcc: 6 | features: 7 | defines: 8 | - ARDUINO_ARCH_RP2040 9 | warnings: 10 | flags: 11 | 12 | packages: 13 | rp2040:rp2040: 14 | url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json 15 | 16 | compile: 17 | # Choosing to run compilation tests on 2 different Arduino platforms 18 | platforms: 19 | - uno 20 | # - due 21 | # - zero 22 | # - leonardo 23 | - m4 24 | - esp32 25 | # - esp8266 26 | # - mega2560 27 | - rpipico 28 | 29 | # Declaring Dependent Arduino Libraries (to be installed via the Arduino Library Manager) 30 | libraries: 31 | - "MCP4725" 32 | - "printHelpers" 33 | 34 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: RobTillaart 4 | custom: "https://www.paypal.me/robtillaart" 5 | -------------------------------------------------------------------------------- /.github/workflows/arduino-lint.yml: -------------------------------------------------------------------------------- 1 | name: Arduino-lint 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | lint: 6 | runs-on: ubuntu-latest 7 | timeout-minutes: 5 8 | steps: 9 | - uses: actions/checkout@v4 10 | - uses: arduino/arduino-lint-action@v1 11 | with: 12 | library-manager: update 13 | # compliance: strict 14 | -------------------------------------------------------------------------------- /.github/workflows/arduino_test_runner.yml: -------------------------------------------------------------------------------- 1 | name: Arduino CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | runTest: 7 | runs-on: ubuntu-latest 8 | timeout-minutes: 20 9 | 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: ruby/setup-ruby@v1 13 | with: 14 | ruby-version: 2.6 15 | - run: | 16 | gem install arduino_ci 17 | arduino_ci.rb 18 | -------------------------------------------------------------------------------- /.github/workflows/jsoncheck.yml: -------------------------------------------------------------------------------- 1 | name: JSON check 2 | 3 | on: 4 | push: 5 | paths: 6 | - '**.json' 7 | pull_request: 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 5 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: json-syntax-check 16 | uses: limitusus/json-syntax-check@v2 17 | with: 18 | pattern: "\\.json$" -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log functionGenerator 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/). 7 | 8 | 9 | ## [0.3.0] - 2024-07-05 10 | - add **float sinusDiode(float t)** 11 | - add **float sinusRectified(float t)** 12 | - add **float trapezium1(float t)** with duty cycle. 13 | - add **float trapezium2(float t)** with duty cycle. 14 | - add **float heartBeat(float t)** 15 | - add **float freeWave(float t, int16_t arr, int size)** arbitrary wave generator. 16 | - update **functionGeneratorPerformance.ino** 17 | - add examples for **freeWave()** 18 | - fix Arduino-lint.yml (long library name error) 19 | - update readme.md 20 | - minor edits 21 | 22 | ---- 23 | 24 | ## [0.2.6] - 2023-11-02 25 | - update readme.md 26 | - update keywords.txt (align) 27 | 28 | ## [0.2.5] - 2023-03-25 29 | - add **setDutyCycle()**, **getDutyCycle()** 30 | - implement duty cycle for square(), triangle() and random() 31 | - add **seedRandom(a, b)** 32 | - add some optimizations 33 | - move code from .h to .cpp 34 | - update readme.md 35 | - update GitHub actions 36 | - update license 2023 37 | - minor edits 38 | 39 | ## [0.2.4] - 2022-11-07 40 | - add changelog.md 41 | - add rp2040 to build-CI 42 | - update readme.md 43 | 44 | ## [0.2.3] - 2021-12-18 45 | - update library.json, license, minor edits 46 | 47 | ## [0.2.2] - 2021-11-02 48 | - update Arduino-CI, badges 49 | - add mode for sawtooth and stair. 50 | 51 | ## [0.2.0] - 2020-06-10 52 | - main refactoring and cleanup 53 | 54 | ## [0.2.1] - 2020-12-24 55 | - add Arduino-CI + unit tests 56 | 57 | ---- 58 | 59 | ## [0.1.5] - 2017-07-29 60 | - Fix issue #33 (dbl -> float) 61 | 62 | ## [0.1.04] - 2015-01-03 63 | - add integer versions - to be used with 8 bit DAC 64 | 65 | ## [0.1.03] - 2015-01-02 66 | - add stair 67 | - more refactoring 68 | 69 | ## [0.1.02] - 2015-01-01 70 | - refactor and research 71 | 72 | ## [0.1.01] - 2015-01-01 73 | - initial class version 74 | 75 | ## [0.1.00] - 2015-01-01 76 | - initial version 77 | 78 | 79 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2015-2024 Rob Tillaart 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Arduino CI](https://github.com/RobTillaart/FunctionGenerator/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci) 3 | [![Arduino-lint](https://github.com/RobTillaart/FunctionGenerator/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/FunctionGenerator/actions/workflows/arduino-lint.yml) 4 | [![JSON check](https://github.com/RobTillaart/FunctionGenerator/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/FunctionGenerator/actions/workflows/jsoncheck.yml) 5 | [![GitHub issues](https://img.shields.io/github/issues/RobTillaart/FunctionGenerator.svg)](https://github.com/RobTillaart/FunctionGenerator/issues) 6 | 7 | [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/FunctionGenerator/blob/master/LICENSE) 8 | [![GitHub release](https://img.shields.io/github/release/RobTillaart/FunctionGenerator.svg?maxAge=3600)](https://github.com/RobTillaart/FunctionGenerator/releases) 9 | [![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/FunctionGenerator.svg)](https://registry.platformio.org/libraries/robtillaart/FunctionGenerator) 10 | 11 | 12 | # FunctionGenerator 13 | 14 | Arduino library to generate (numeric) wave forms for a DAC. 15 | 16 | 17 | ## Description 18 | 19 | This library presents a class for a function generator in **software**. 20 | It is typical used to control one or more DAC's. 21 | To maximize signal quality one has to apply all (or most) processor power 22 | to calculate new values over and over again to get enough resolution. 23 | In practice the generator is useful for low frequencies, 24 | 0.01 - 25 Hz, depending on waveform and processor and number of DAC's. 25 | (see indication below). 26 | 27 | Note: this class generates float values, performance wise this can be optimized, 28 | to achieve higher speeds at cost of accuracy / precision. 29 | 30 | As always, feedback and ideas are welcome. 31 | 32 | 33 | ### Performance 34 | 35 | You always have to verify your own performance measurements to see if 36 | your requirements are met by this library. 37 | 38 | **Indication** of what performance can be expected (based upon 0.2.1 version). 39 | Note that the values need to be transported to a DAC or serial port too. 40 | Numbers based on performance example, for one single signal. 41 | 42 | 43 | | Processor | Clock | Waveform | usec/call | max freq | max values/period | 44 | |:--------------|----------:|:-----------|------------:|-----------:|--------:| 45 | | Arduino UNO | 16 MHz | sawtooth | 62 | 60 Hz | 268 | 46 | | Arduino UNO | 16 MHz | triangle | 74 | 50 Hz | 270 | 47 | | Arduino UNO | 16 MHz | square | 53 | 1000 Hz | 19 | 48 | | Arduino UNO | 16 MHz | sinus | 164 | 25 Hz | 152 | 49 | | Arduino UNO | 16 MHz | stair | 81 | 50 Hz | 246 | 50 | | Arduino UNO | 16 MHz | random | 37 | 1000 Hz | 27 | 51 | | ESP32 | 240 MHz | sawtooth | 3.8 | 1000 Hz | 263 | 52 | | ESP32 | 240 MHz | triangle | 3.9 | 1000 Hz | 256 | 53 | | ESP32 | 240 MHz | square | 2.8 | 1000 Hz | 357 | 54 | | ESP32 | 240 MHz | sinus | 13.6 | 250 Hz | 294 | 55 | | ESP32 | 240 MHz | stair | 4.8 | 800 Hz | 260 | 56 | | ESP32 | 240 MHz | random | 1.3 | 1000 Hz | 769 | 57 | 58 | 59 | - Assumption minimal around 250 samples per period to get a smooth signal. 60 | If a rougher signal is OK, higher frequencies are possible. 61 | For **square()** and **random()** less samples per period are often acceptable. 62 | - ESP32 can do more calculations however 1000 Hz seems to be a nice 63 | upper limit for a software based function generator. 64 | - If one needs to control multiple DAC's one should divide the numbers 65 | and round down to get an estimate. 66 | 67 | 68 | Note: hardware function generator https://github.com/RobTillaart/AD985X 69 | 70 | 71 | Note: 0.2.5 due to duty cycle the triangle and square 72 | have become slightly slower. 73 | 74 | | Processor | Clock | Waveform | usec/call | max freq | 75 | |:--------------|----------:|:-----------|------------:|-----------:| 76 | | Arduino UNO | 16 MHz | triangle | 84 | 50 Hz | 77 | | Arduino UNO | 16 MHz | square | 57 | 1000 Hz | 78 | | Arduino UNO | 16 MHz | random_DC | 68 | 500 Hz | 79 | 80 | See **functionGeneratorPerformance.ino** 81 | 82 | 83 | ### Accuracy 84 | 85 | If the time parameter **t** grows large, the internal math may have rounding 86 | problems after some time. This can and will affect the quality of the output. 87 | It is advised to reset **t** after a number (e.g. 100) full periods 88 | 89 | Needs further investigations. 90 | 91 | ### Related 92 | 93 | - https://github.com/RobTillaart/AD9833 hardware waveform generator. 94 | - https://github.com/RobTillaart/AD985X hardware waveform generator. 95 | - https://github.com/RobTillaart/functionGenerator software waveform generator. 96 | - https://pages.mtu.edu/~suits/notefreqs.html frequency table for notes. 97 | 98 | 99 | ## Interface 100 | 101 | ```cpp 102 | #include "functionGenerator.h" 103 | ``` 104 | 105 | ### Constructor 106 | 107 | - **funcgen(float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0)** 108 | All parameters (except duty cycle) can be set in the constructor but also later in configuration. 109 | Default dutyCycle is 50%. 110 | 111 | 112 | ### Configuration 113 | 114 | - **void setPeriod(float period = 1.0)** set the period of the wave in seconds. 115 | This is the inverse of the frequency. 116 | - **float getPeriod()** returns the set period. 117 | - **void setFrequency(float frequency = 1.0)** set the frequency of the wave in Hertz (1/s). 118 | This is the inverse of the period. 119 | - **float getFrequency()** returns the set frequency in Hertz. 120 | - **void setAmplitude(float amplitude = 1.0)** sets the amplitude of the wave. 121 | The range is from **-amplitude** to **+amplitude**. 122 | Setting the amplitude to 0 gives effectively a zero signal. 123 | Setting the amplitude to a negative value effectively inverts the signal. 124 | - **float getAmplitude()** returns the set amplitude. 125 | - **void setPhase(float phase = 0.0)** shifts the phase of the wave. 126 | Will only be noticeable when compared with other waves. 127 | Phase is also known as the X- or horizontal shift. 128 | - **float getPhase()** returns the set phase. 129 | - **void setYShift(float yShift = 0.0)** sets an Y-shift or vertical offset in amplitude. 130 | This allows to set e.g. the zero level. 131 | - **float getYShift()** returns the set Y-shift. 132 | - **void setDutyCycle(float percentage = 100)** sets the duty cycle of the signal. 133 | Experimental, not all waveforms have a duty cycle or interpret it differently, see below. 134 | Duty cycle must be between 0 and 100% and will be clipped otherwise. 135 | - **float getDutyCycle()** returns the set (clipped) duty cycle. 136 | - **void setRandomSeed(uint32_t a, uint32_t b = 314159265)** sets the initial seeds for the 137 | (Marsaglia) random number generator. The first is mandatory, the second is optional. 138 | 139 | 140 | ### Wave forms 141 | 142 | The variable t == time in seconds. 143 | 144 | - **float sawtooth(float t, uint8_t mode = 0)** mode 0 is default. 145 | - mode == 0 ==> sawtooth /|. 146 | - mode == 1 ==> sawtooth |\\. Effectively equals inverting the amplitude. 147 | - **float triangle(float t)** triangle form, duty cycle default 50%. 148 | - **float square(float t)** square wave with duty cycle default 50%. 149 | - **float sinus(float t)** sinus wave, has no duty cycle. 150 | - **float stair(float t, uint16_t steps = 8, uint8_t mode = 0)** defaults to 8 steps up. 151 | - mode = 0 ==> steps up 152 | - mode = 1 ==> steps down. Effectively equals inverting the amplitude. 153 | - **float random()** random noise generation between 0 and amplitude. 154 | Uses Marsaglia random generator. 155 | - **float line()** constant voltage line. 156 | Height depends on the YShift and amplitude. 157 | - **float zero()** constant zero. 158 | 159 | The functions **line()** and **zero()** can be used to drive a constant voltage 160 | from a DAC and can be used to calibrate the generator / DAC combination. 161 | 162 | 163 | Experimental 0.2.7 164 | 165 | - **float sinusDiode(float t)** sinus wave, only positive pulses. 166 | (better name welcome). 167 | - **float sinusRectified(float t)** sinus wave, with "abs(negative pulses)". 168 | (better name welcome). 169 | - **float trapezium1(float t)** trapezium wave. 170 | DutyCycle changes steepness of the falling and rising edge. 171 | The wave changes from a square wave, via trapezium to a triangle wave. 172 | - **float trapezium2(float t)** trapezium wave. 173 | DutyCycle changes duration HIGH vs LOW, wave stays trapezium like. 174 | Note at 50% DC the two trapezium functions are identical. 175 | - **float heartBeat(float t)** simplified heartbeat wave. 176 | To get a regular BPM heartbeat one should **setFrequency(BPM/60.0)** e.g 72/60 = 1.2. 177 | - **float freeWave(float t, int16_t arr, int16_t N)** define a free wave form. 178 | It uses an array of **N+1** values, dividing a full period in **N** equidistant steps. 179 | The last value should equal the first value to have a smooth transition. 180 | The values of the array normally vary between -10000 and +10000 to manage 181 | the set the relative amplitude in small steps. 182 | These are scaled back to -1.0 to +1.0 times the amplitude. 183 | 184 | 185 | ### Duty Cycle 186 | 187 | Since 0.2.5 the library has **experimental** support for duty cycle. 188 | The meaning of duty cycle differs per wave form. 189 | Implementation may change in the future. 190 | 191 | In first iteration the following behaviour is implemented: 192 | 193 | - **square()** implements duty cycle in a well known way. 194 | At the start of the period the signal goes "HIGH". 195 | After duty cycle % of the period the signal goes LOW until the end of the period. 196 | - **triangle()** function uses the duty cycle to shift the peak from the 197 | begin (0%) to middle (50%) to end (100%) of the period. 198 | - **random_DC()** A duty cycle of 0% is no noise 100% is full amplitude noise 199 | with respect to previous value. 200 | Implemented as a weighed average between new and previous value. 201 | Made a separate function as handling the duty cycle slows performance substantial. 202 | Initial starts at zero and can be adjusted with **YShift()**. 203 | - **float trapezium1(float t)** The duty cycle changes the steepness of the rising 204 | and falling edges. This changes the form from square wave to trapezium to triangle. 205 | The length of the HIGH LOW level go from 0 to half a period. 206 | - **float trapezium2(float t)** The duty cycle determines the length of the HIGH level, 207 | which is 0 for 0% DC and half a period for 100% DC. 208 | The rising and falling edges stay same. 209 | - **float heartBeat(float t)** The duty cycle determines the part of the period 210 | that the signal ~zero. 211 | 212 | ### No duty cycle 213 | 214 | The other functions need to be investigated what duty cycle means. 215 | Current ideas that are **NOT** implemented: 216 | 217 | - **sawtooth()** - move from /|. to /|__ so 0% is a spike, 100% = normal. 218 | Think of it as the halve of the triangle wave. 219 | - **sinus()** move the two peaks like the triangle (adjusting steepness / freq)?? 220 | - **stair()** like sawtooth?? 221 | - **line()** has no period so does not make sense (yet). 222 | - **zero()** has no period so does not make sense (yet). 223 | - **float sinusDiode(float t)** 224 | - **float sinusRectified(float t)** 225 | - **float freeWave(float t, int16_t arr, int16_t N)** 226 | 227 | ## Future 228 | 229 | #### Must 230 | 231 | - improve documentation 232 | - reorganize 233 | - section per function might be better. 234 | 235 | #### Should 236 | 237 | - smart reseed needed for random(). 238 | - initialize random generator with compile file + date + time. 239 | - use function values for seed bits. 240 | - stand-alone functions in separate .h 241 | - clean up code 242 | 243 | #### Could 244 | 245 | - ASDR wave 246 | - https://en.wikipedia.org/wiki/Envelope_(music) 247 | - **float ADSR(float t, float A, float D, float S, float R)** 248 | - ADSR are percentages, A + D + R < 1.0 249 | - S = % of amplitude. 250 | - external clock to synchronize two or more software function generators. 251 | - check for synergy with https://github.com/RobTillaart/AD985X 252 | - investigate performance. 253 | - algorithms for DAC specific gains e.g. 10-12-16 bit. 254 | - improve performance sin() lookup table. 255 | - add float variable for ```_perDC = _period * _dutyCycle``` 256 | - do we need **freq4** ? not since DC. 257 | - heartBeat 258 | - small noise/variation parameter on amplitude and frequency. 259 | - reduce footprint ==> wrapper around freeWave() 260 | - waves 261 | - white noise, pink noise (better done with hardware) 262 | - min() + max() => return +-amplitude + yshift? 263 | - RC function curve. 264 | - Gamma curve. 265 | - create a function table? with what? 266 | - create an example program to sample an arbitrary wave form 267 | - output in the right format. 268 | - slow sampling vs real time. 269 | 270 | 271 | #### Examples 272 | 273 | - Amplitude modulation ? 274 | - heartbeat curve? 275 | - example ESP32 version as separate task. 276 | - example with DAC. 8 12 16 bit. 277 | - example with potentiometers for 4 parameters 278 | 279 | #### Wont 280 | 281 | - investigate duty cycle for waveforms 282 | - Derived class for the duty cycle variants? or functions! 283 | - **float squareDC()** performance (loss) 284 | - **float triangleDC()** 285 | - **float sawtoothDC()** 286 | - **float sinusDC()** duty-cycle for sinus what does it mean. 287 | - ==> move peaks, two half sinus with diff frequency 288 | - **float stairDC()** 289 | - Bezier curve? (too complex) 290 | - record a signal and play back ==> separate class 291 | - document max frequency per wave form etc. 292 | Should this be in the library? differs per board. 293 | 294 | 295 | ## Support 296 | 297 | If you appreciate my libraries, you can support the development and maintenance. 298 | Improve the quality of the libraries by providing issues and Pull Requests, or 299 | donate through PayPal or GitHub sponsors. 300 | 301 | Thank you, 302 | 303 | -------------------------------------------------------------------------------- /examples/funcGenFreeWavePlotter/funcGenFreeWavePlotter.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: funcGenFreeWavePlotter.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // URL: https://github.com/RobTillaart/FunctionGenerator 6 | // 7 | // use a Serial plotter to show the data 8 | 9 | 10 | #include "functionGenerator.h" 11 | 12 | funcgen gen; 13 | 14 | // sin(t). 15 | int16_t arr_sin[101] = 16 | { 17 | 0, 627, 1253, 1873, 2486, 3090, 18 | 3681, 4257, 4817, 5358, 5877, 19 | 6374, 6845, 7289, 7705, 8090, 20 | 8443, 8763, 9048, 9297, 9510, 21 | 9685, 9822, 9921, 9980, 10000, 22 | 9980, 9921, 9822, 9685, 9510, 23 | 9297, 9048, 8763, 8443, 8090, 24 | 7705, 7289, 6845, 6374, 5877, 25 | 5358, 4817, 4257, 3681, 3090, 26 | 2486, 1873, 1253, 627, 0, 27 | -627, -1253, -1873, -2486, -3090, 28 | -3681, -4257, -4817, -5358, -5877, 29 | -6374, -6845, -7289, -7705, -8090, 30 | -8443, -8763, -9048, -9297, -9510, 31 | -9685, -9822, -9921, -9980, -10000, 32 | -9980, -9921, -9822, -9685, -9510, 33 | -9297, -9048, -8763, -8443, -8090, 34 | -7705, -7289, -6845, -6374, -5877, 35 | -5358, -4817, -4257, -3681, -3090, 36 | -2486, -1873, -1253, -627, 0, 37 | }; 38 | 39 | 40 | // sin(t) + 0.25 * sin(5t) 41 | int16_t arr_two_sin[101] = 42 | { 43 | 0, 1120, 2178, 3117, 3891, 4472, 44 | 4847, 5024, 5029, 4904, 4702, 45 | 4481, 4300, 4213, 4261, 4472, 46 | 4852, 5392, 6063, 6820, 7608, 47 | 8366, 9033, 9554, 9886, 10000, 48 | 9886, 9554, 9033, 8366, 7608, 49 | 6820, 6063, 5392, 4852, 4472, 50 | 4261, 4213, 4300, 4481, 4702, 51 | 4904, 5029, 5024, 4847, 4472, 52 | 3891, 3117, 2178, 1120, 0, 53 | -1120, -2178, -3117, -3891, -4472, 54 | -4847, -5024, -5029, -4904, -4702, 55 | -4481, -4300, -4213, -4261, -4472, 56 | -4852, -5392, -6063, -6820, -7608, 57 | -8366, -9033, -9554, -9886, -10000, 58 | -9886, -9554, -9033, -8366, -7608, 59 | -6820, -6063, -5392, -4852, -4472, 60 | -4261, -4213, -4300, -4481, -4702, 61 | -4904, -5029, -5024, -4847, -4472, 62 | -3891, -3117, -2178, -1120, 0, 63 | }; 64 | 65 | 66 | 67 | void setup() 68 | { 69 | Serial.begin(115200); 70 | // Serial.println(__FILE__); 71 | // Serial.print("FUNCTIONGENERATOR_LIB_VERSION: "); 72 | // Serial.println(FUNCTIONGENERATOR_LIB_VERSION); 73 | // Serial.println(); 74 | 75 | gen.setAmplitude(80); 76 | gen.setFrequency(0.5); 77 | gen.setDutyCycle(50); 78 | } 79 | 80 | 81 | void loop() 82 | { 83 | float t = millis() * 0.001; 84 | 85 | Serial.print(80); 86 | Serial.print("\t"); 87 | Serial.print(-80); 88 | Serial.print("\t"); 89 | Serial.print(gen.freeWave(t, arr_two_sin, 100)); 90 | Serial.println(); 91 | delay(10); 92 | } 93 | 94 | 95 | // -- END OF FILE -- 96 | -------------------------------------------------------------------------------- /examples/functionGenerator/functionGenerator.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGenerator.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // DATE: 2015-01-03 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | 8 | 9 | #include "functionGenerator.h" 10 | 11 | 12 | funcgen gen; 13 | 14 | uint32_t lastTime = 0; 15 | char choice = '0'; 16 | 17 | 18 | void setup() 19 | { 20 | Serial.begin(500000); 21 | Serial.println(__FILE__); 22 | Serial.println("Start "); 23 | 24 | gen.setFrequency(4); 25 | gen.setAmplitude(50); 26 | } 27 | 28 | 29 | void loop() 30 | { 31 | if (Serial.available()) 32 | { 33 | choice = Serial.read(); 34 | } 35 | // wave selection by potMeter 36 | // int choice = analogRead(A0) / 200; 37 | 38 | float value; 39 | // wait for next millisecond; 40 | if (millis() - lastTime > 0) 41 | { 42 | lastTime = millis(); 43 | float t = lastTime * 0.001; 44 | switch (choice) 45 | { 46 | case '0': value = gen.square(t); break; 47 | case '1': value = gen.sawtooth(t); break; 48 | case '2': value = gen.triangle(t); break; 49 | case '3': value = gen.stair(t); break; 50 | case '4': value = gen.sinus(t); break; 51 | case '5': value = gen.line(); break; 52 | case '6': value = gen.random(); break; 53 | default: value = gen.zero(); break; 54 | } 55 | Serial.println(value); 56 | } 57 | } 58 | 59 | 60 | // -- END OF FILE -- 61 | 62 | -------------------------------------------------------------------------------- /examples/functionGeneratorDuoPlot/functionGeneratorDuoPlot.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGeneratorDuoPlot.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // DATE: 2020-06-10 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | // 8 | // use a Serial plotter to show the data 9 | 10 | 11 | #include "functionGenerator.h" 12 | 13 | funcgen gen1; 14 | funcgen gen2; 15 | 16 | 17 | void setup() 18 | { 19 | Serial.begin(115200); 20 | // Serial.println(); 21 | // Serial.println(__FILE__); 22 | // Serial.print("FUNCTIONGENERATOR_LIB_VERSION: "); 23 | // Serial.println(FUNCTIONGENERATOR_LIB_VERSION); 24 | 25 | gen1.setFrequency(13); 26 | gen1.setAmplitude(50); 27 | gen1.setPhase(0); 28 | gen1.setYShift(0); 29 | 30 | gen2.setFrequency(17); 31 | gen2.setAmplitude(25); 32 | gen2.setPhase(0.25); 33 | gen2.setYShift(25); 34 | } 35 | 36 | 37 | void loop() 38 | { 39 | float t = millis() * 0.001; 40 | float x = gen1.sinus(t); 41 | float y = gen2.sinus(t); 42 | Serial.print(x); 43 | Serial.print("\t"); 44 | Serial.print(y); 45 | Serial.print("\t"); 46 | Serial.print(x + y); 47 | Serial.println(); 48 | } 49 | 50 | 51 | // -- END OF FILE -- 52 | 53 | -------------------------------------------------------------------------------- /examples/functionGeneratorPerformance/functionGeneratorPerformance.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGeneratorPerformance.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // DATE: 2015-01-01 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | 8 | 9 | #include "functionGenerator.h" 10 | 11 | uint32_t start; 12 | uint32_t stop; 13 | 14 | volatile float t; 15 | volatile float y; 16 | 17 | funcgen gen; 18 | 19 | 20 | // sin(t) + 0.25 * sin(5t) 21 | int16_t arr_two_sin[101] = 22 | { 23 | 0, 1120, 2178, 3117, 3891, 4472, 24 | 4847, 5024, 5029, 4904, 4702, 25 | 4481, 4300, 4213, 4261, 4472, 26 | 4852, 5392, 6063, 6820, 7608, 27 | 8366, 9033, 9554, 9886, 10000, 28 | 9886, 9554, 9033, 8366, 7608, 29 | 6820, 6063, 5392, 4852, 4472, 30 | 4261, 4213, 4300, 4481, 4702, 31 | 4904, 5029, 5024, 4847, 4472, 32 | 3891, 3117, 2178, 1120, 0, 33 | -1120, -2178, -3117, -3891, -4472, 34 | -4847, -5024, -5029, -4904, -4702, 35 | -4481, -4300, -4213, -4261, -4472, 36 | -4852, -5392, -6063, -6820, -7608, 37 | -8366, -9033, -9554, -9886, -10000, 38 | -9886, -9554, -9033, -8366, -7608, 39 | -6820, -6063, -5392, -4852, -4472, 40 | -4261, -4213, -4300, -4481, -4702, 41 | -4904, -5029, -5024, -4847, -4472, 42 | -3891, -3117, -2178, -1120, 0, 43 | }; 44 | 45 | 46 | void setup() 47 | { 48 | Serial.begin(115200); 49 | Serial.println(__FILE__); 50 | Serial.print("FUNCTIONGENERATOR_LIB_VERSION: "); 51 | Serial.println(FUNCTIONGENERATOR_LIB_VERSION); 52 | Serial.println(); 53 | 54 | Serial.println("func \t\tusec\tmax calls/sec (indicative)"); 55 | y = analogRead(A0) / 1024; 56 | test_square(); 57 | delay(10); 58 | test_sawtooth(); 59 | delay(10); 60 | test_triangle(); 61 | delay(10); 62 | test_sinus(); 63 | delay(10); 64 | test_stair(); 65 | delay(10); 66 | test_random(); 67 | delay(10); 68 | test_random_DC(); 69 | delay(10); 70 | test_line(); 71 | delay(10); 72 | test_zero(); 73 | delay(10); 74 | test_sinusDiode(); 75 | delay(10); 76 | test_sinusRectified(); 77 | delay(10); 78 | test_trapezium1(); 79 | delay(10); 80 | test_trapezium2(); 81 | delay(10); 82 | test_heartBeat(); 83 | delay(10); 84 | test_freeWave(); 85 | delay(10); 86 | Serial.println(); 87 | 88 | Serial.println("t \t sqr\t saw\t tri\t sin\t str\t rnd\t line\t zero\t sinD\t sinR\t trap"); 89 | for (int i = -400; i < 400; i += 2) 90 | { 91 | float t = i * 0.01; 92 | Serial.print(t); 93 | Serial.print("\t"); 94 | Serial.print(gen.square(t)); 95 | Serial.print("\t"); 96 | Serial.print(gen.sawtooth(t)); 97 | Serial.print("\t"); 98 | Serial.print(gen.triangle(t)); 99 | Serial.print("\t"); 100 | Serial.print(gen.sinus(t)); 101 | Serial.print("\t"); 102 | Serial.print(gen.stair(t)); 103 | Serial.print("\t"); 104 | Serial.print(gen.random()); 105 | Serial.print("\t"); 106 | Serial.print(gen.line()); 107 | Serial.print("\t"); 108 | Serial.print(gen.zero()); 109 | Serial.print("\t"); 110 | Serial.print(gen.sinusDiode(t)); 111 | Serial.print("\t"); 112 | Serial.print(gen.sinusRectified(t)); 113 | Serial.print("\t"); 114 | Serial.print(gen.trapezium2(t)); 115 | Serial.println(); 116 | } 117 | Serial.println("\ndone..."); 118 | } 119 | 120 | 121 | /******************************************************************/ 122 | 123 | void test_square() 124 | { 125 | start = micros(); 126 | for (int i = 0; i < 10000; i++) 127 | { 128 | t = gen.square(i); 129 | } 130 | stop = micros(); 131 | Serial.print(__FUNCTION__); 132 | Serial.print(":\t"); 133 | Serial.print((stop - start) / 10000.0); 134 | Serial.print("\t"); 135 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 136 | } 137 | 138 | 139 | void test_sawtooth() 140 | { 141 | start = micros(); 142 | for (int i = 0; i < 10000; i++) 143 | { 144 | t = gen.sawtooth(i); 145 | } 146 | stop = micros(); 147 | Serial.print(__FUNCTION__); 148 | Serial.print(":\t"); 149 | Serial.print((stop - start) / 10000.0); 150 | Serial.print("\t"); 151 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 152 | } 153 | 154 | 155 | void test_triangle() 156 | { 157 | start = micros(); 158 | for (int i = 0; i < 10000; i++) 159 | { 160 | t = gen.triangle(i); 161 | } 162 | stop = micros(); 163 | Serial.print(__FUNCTION__); 164 | Serial.print(":\t"); 165 | Serial.print((stop - start) / 10000.0); 166 | Serial.print("\t"); 167 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 168 | } 169 | 170 | 171 | void test_sinus() 172 | { 173 | start = micros(); 174 | for (int i = 0; i < 10000; i++) 175 | { 176 | t = gen.sinus(i); 177 | } 178 | stop = micros(); 179 | Serial.print(__FUNCTION__); 180 | Serial.print(":\t"); 181 | Serial.print((stop - start) / 10000.0); 182 | Serial.print("\t"); 183 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 184 | } 185 | 186 | 187 | void test_stair() 188 | { 189 | start = micros(); 190 | for (int i = 0; i < 10000; i++) 191 | { 192 | t = gen.stair(i); 193 | } 194 | stop = micros(); 195 | Serial.print(__FUNCTION__); 196 | Serial.print(":\t"); 197 | Serial.print((stop - start) / 10000.0); 198 | Serial.print("\t"); 199 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 200 | } 201 | 202 | 203 | void test_random() 204 | { 205 | start = micros(); 206 | for (int i = 0; i < 10000; i++) 207 | { 208 | t = gen.random(); 209 | } 210 | stop = micros(); 211 | Serial.print(__FUNCTION__); 212 | Serial.print(":\t"); 213 | Serial.print((stop - start) / 10000.0); 214 | Serial.print("\t"); 215 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 216 | } 217 | 218 | 219 | void test_random_DC() 220 | { 221 | start = micros(); 222 | for (int i = 0; i < 10000; i++) 223 | { 224 | t = gen.random_DC(); 225 | } 226 | stop = micros(); 227 | Serial.print(__FUNCTION__); 228 | Serial.print(":\t"); 229 | Serial.print((stop - start) / 10000.0); 230 | Serial.print("\t"); 231 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 232 | } 233 | 234 | 235 | void test_line() 236 | { 237 | start = micros(); 238 | for (int i = 0; i < 10000; i++) 239 | { 240 | t = gen.line(); 241 | } 242 | stop = micros(); 243 | Serial.print(__FUNCTION__); 244 | Serial.print(":\t"); 245 | Serial.print((stop - start) / 10000.0); 246 | Serial.print("\t"); 247 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 248 | } 249 | 250 | 251 | void test_zero() 252 | { 253 | start = micros(); 254 | for (int i = 0; i < 10000; i++) 255 | { 256 | t = gen.zero(); 257 | } 258 | stop = micros(); 259 | Serial.print(__FUNCTION__); 260 | Serial.print(":\t"); 261 | Serial.print((stop - start) / 10000.0); 262 | Serial.print("\t"); 263 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 264 | } 265 | 266 | 267 | void test_sinusDiode() 268 | { 269 | start = micros(); 270 | for (int i = 0; i < 10000; i++) 271 | { 272 | t = gen.sinusDiode(i); 273 | } 274 | stop = micros(); 275 | Serial.print(__FUNCTION__); 276 | Serial.print(":\t"); 277 | Serial.print((stop - start) / 10000.0); 278 | Serial.print("\t"); 279 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 280 | } 281 | 282 | 283 | void test_sinusRectified() 284 | { 285 | start = micros(); 286 | for (int i = 0; i < 10000; i++) 287 | { 288 | t = gen.sinusRectified(i); 289 | } 290 | stop = micros(); 291 | Serial.print(__FUNCTION__); 292 | Serial.print(":\t"); 293 | Serial.print((stop - start) / 10000.0); 294 | Serial.print("\t"); 295 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 296 | } 297 | 298 | 299 | void test_trapezium1() 300 | { 301 | start = micros(); 302 | for (int i = 0; i < 10000; i++) 303 | { 304 | t = gen.trapezium1(i); 305 | } 306 | stop = micros(); 307 | Serial.print(__FUNCTION__); 308 | Serial.print(":\t"); 309 | Serial.print((stop - start) / 10000.0); 310 | Serial.print("\t"); 311 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 312 | } 313 | 314 | 315 | void test_trapezium2() 316 | { 317 | start = micros(); 318 | for (int i = 0; i < 10000; i++) 319 | { 320 | t = gen.trapezium2(i); 321 | } 322 | stop = micros(); 323 | Serial.print(__FUNCTION__); 324 | Serial.print(":\t"); 325 | Serial.print((stop - start) / 10000.0); 326 | Serial.print("\t"); 327 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 328 | } 329 | 330 | 331 | void test_heartBeat() 332 | { 333 | start = micros(); 334 | for (int i = 0; i < 10000; i++) 335 | { 336 | t = gen.heartBeat(i); 337 | } 338 | stop = micros(); 339 | Serial.print(__FUNCTION__); 340 | Serial.print(":\t"); 341 | Serial.print((stop - start) / 10000.0); 342 | Serial.print("\t"); 343 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 344 | } 345 | 346 | 347 | void test_freeWave() 348 | { 349 | start = micros(); 350 | for (int i = 0; i < 10000; i++) 351 | { 352 | t = gen.freeWave(i, arr_two_sin, 100); 353 | } 354 | stop = micros(); 355 | Serial.print(__FUNCTION__); 356 | Serial.print(":\t"); 357 | Serial.print((stop - start) / 10000.0); 358 | Serial.print("\t"); 359 | Serial.println(1000000.0 / ((stop - start) / 10000.0)); 360 | } 361 | 362 | 363 | void loop() 364 | { 365 | } 366 | 367 | 368 | // -- END OF FILE -- 369 | -------------------------------------------------------------------------------- /examples/functionGeneratorPerformance/performance_0.2.4.txt: -------------------------------------------------------------------------------- 1 | Start functionGeneratorPerformance - LIB VERSION: 0.2.4 2 | func usec max calls/sec 3 | test_square: 53.00 18869.07 4 | test_sawtooth: 62.13 16095.80 5 | test_triangle: 74.89 13352.77 6 | test_sinus: 164.87 6065.36 7 | test_stair: 81.30 12299.52 8 | test_random: 37.71 26518.17 9 | test_line: 0.76 1324152.50 10 | test_zero: 0.76 1324152.50 11 | 12 | t sqr saw tri sin str rnd line zero 13 | -4.00 -1.00 1.00 -1.00 -0.00 1.00 0.37 1.00 0.00 14 | -3.98 1.00 -0.96 -0.92 0.13 -1.00 0.13 1.00 0.00 15 | -3.96 1.00 -0.92 -0.84 0.25 -1.00 0.21 1.00 0.00 16 | -3.94 1.00 -0.88 -0.76 0.37 -1.00 0.37 1.00 0.00 17 | -3.92 1.00 -0.84 -0.68 0.48 -1.00 0.50 1.00 0.00 18 | -3.90 1.00 -0.80 -0.60 0.59 -1.00 0.96 1.00 0.00 19 | -3.88 1.00 -0.76 -0.52 0.68 -1.00 0.15 1.00 0.00 20 | -3.86 1.00 -0.72 -0.44 0.77 -0.71 0.92 1.00 0.00 21 | -3.84 1.00 -0.68 -0.36 0.84 -0.71 0.21 1.00 0.00 22 | -3.82 1.00 -0.64 -0.28 0.90 -0.71 0.69 1.00 0.00 23 | -3.80 1.00 -0.60 -0.20 0.95 -0.71 0.82 1.00 0.00 24 | -3.78 1.00 -0.56 -0.12 0.98 -0.71 0.33 1.00 0.00 25 | -3.76 1.00 -0.52 -0.04 1.00 -0.71 0.96 1.00 0.00 26 | -3.74 1.00 -0.48 0.04 1.00 -0.43 0.63 1.00 0.00 27 | -3.72 1.00 -0.44 0.12 0.98 -0.43 0.23 1.00 0.00 28 | -3.70 1.00 -0.40 0.20 0.95 -0.43 0.12 1.00 0.00 29 | -3.68 1.00 -0.36 0.28 0.90 -0.43 0.74 1.00 0.00 30 | -3.66 1.00 -0.32 0.36 0.84 -0.43 0.19 1.00 0.00 31 | -3.64 1.00 -0.28 0.44 0.77 -0.43 0.60 1.00 0.00 32 | -3.62 1.00 -0.24 0.52 0.68 -0.14 0.24 1.00 0.00 33 | -3.60 1.00 -0.20 0.60 0.59 -0.14 0.23 1.00 0.00 34 | -3.58 1.00 -0.16 0.68 0.48 -0.14 0.23 1.00 0.00 35 | -3.56 1.00 -0.12 0.76 0.37 -0.14 0.96 1.00 0.00 36 | -3.54 1.00 -0.08 0.84 0.25 -0.14 0.01 1.00 0.00 37 | -3.52 1.00 -0.04 0.92 0.13 -0.14 0.10 1.00 0.00 38 | -3.50 1.00 0.00 1.00 0.00 -0.14 0.63 1.00 0.00 39 | -3.48 -1.00 0.04 0.92 -0.13 0.14 0.16 1.00 0.00 40 | -3.46 -1.00 0.08 0.84 -0.25 0.14 0.62 1.00 0.00 41 | -3.44 -1.00 0.12 0.76 -0.37 0.14 0.91 1.00 0.00 42 | -3.42 -1.00 0.16 0.68 -0.48 0.14 0.98 1.00 0.00 43 | -3.40 -1.00 0.20 0.60 -0.59 0.14 0.73 1.00 0.00 44 | -3.38 -1.00 0.24 0.52 -0.68 0.14 0.14 1.00 0.00 45 | -3.36 -1.00 0.28 0.44 -0.77 0.43 0.53 1.00 0.00 46 | -3.34 -1.00 0.32 0.36 -0.84 0.43 0.11 1.00 0.00 47 | -3.32 -1.00 0.36 0.28 -0.90 0.43 0.21 1.00 0.00 48 | -3.30 -1.00 0.40 0.20 -0.95 0.43 0.17 1.00 0.00 49 | -3.28 -1.00 0.44 0.12 -0.98 0.43 0.36 1.00 0.00 50 | -3.26 -1.00 0.48 0.04 -1.00 0.43 0.89 1.00 0.00 51 | -3.24 -1.00 0.52 -0.04 -1.00 0.71 0.16 1.00 0.00 52 | -3.22 -1.00 0.56 -0.12 -0.98 0.71 0.19 1.00 0.00 53 | -3.20 -1.00 0.60 -0.20 -0.95 0.71 0.13 1.00 0.00 54 | -3.18 -1.00 0.64 -0.28 -0.90 0.71 0.12 1.00 0.00 55 | -3.16 -1.00 0.68 -0.36 -0.84 0.71 0.20 1.00 0.00 56 | -3.14 -1.00 0.72 -0.44 -0.77 0.71 0.81 1.00 0.00 57 | -3.12 -1.00 0.76 -0.52 -0.68 1.00 0.52 1.00 0.00 58 | -3.10 -1.00 0.80 -0.60 -0.59 1.00 0.82 1.00 0.00 59 | -3.08 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 60 | -3.06 -1.00 0.88 -0.76 -0.37 1.00 0.57 1.00 0.00 61 | -3.04 -1.00 0.92 -0.84 -0.25 1.00 0.30 1.00 0.00 62 | -3.02 -1.00 0.96 -0.92 -0.13 1.00 0.08 1.00 0.00 63 | -3.00 -1.00 1.00 -1.00 -0.00 1.00 0.20 1.00 0.00 64 | -2.98 1.00 -0.96 -0.92 0.13 -1.00 0.44 1.00 0.00 65 | -2.96 1.00 -0.92 -0.84 0.25 -1.00 0.98 1.00 0.00 66 | -2.94 1.00 -0.88 -0.76 0.37 -1.00 0.65 1.00 0.00 67 | -2.92 1.00 -0.84 -0.68 0.48 -1.00 0.70 1.00 0.00 68 | -2.90 1.00 -0.80 -0.60 0.59 -1.00 0.02 1.00 0.00 69 | -2.88 1.00 -0.76 -0.52 0.68 -1.00 0.39 1.00 0.00 70 | -2.86 1.00 -0.72 -0.44 0.77 -0.71 0.95 1.00 0.00 71 | -2.84 1.00 -0.68 -0.36 0.84 -0.71 0.12 1.00 0.00 72 | -2.82 1.00 -0.64 -0.28 0.90 -0.71 0.79 1.00 0.00 73 | -2.80 1.00 -0.60 -0.20 0.95 -0.71 0.65 1.00 0.00 74 | -2.78 1.00 -0.56 -0.12 0.98 -0.71 0.62 1.00 0.00 75 | -2.76 1.00 -0.52 -0.04 1.00 -0.71 0.01 1.00 0.00 76 | -2.74 1.00 -0.48 0.04 1.00 -0.43 0.62 1.00 0.00 77 | -2.72 1.00 -0.44 0.12 0.98 -0.43 0.78 1.00 0.00 78 | -2.70 1.00 -0.40 0.20 0.95 -0.43 0.55 1.00 0.00 79 | -2.68 1.00 -0.36 0.28 0.90 -0.43 0.06 1.00 0.00 80 | -2.66 1.00 -0.32 0.36 0.84 -0.43 0.84 1.00 0.00 81 | -2.64 1.00 -0.28 0.44 0.77 -0.43 0.75 1.00 0.00 82 | -2.62 1.00 -0.24 0.52 0.68 -0.14 0.71 1.00 0.00 83 | -2.60 1.00 -0.20 0.60 0.59 -0.14 0.50 1.00 0.00 84 | -2.58 1.00 -0.16 0.68 0.48 -0.14 0.82 1.00 0.00 85 | -2.56 1.00 -0.12 0.76 0.37 -0.14 0.37 1.00 0.00 86 | -2.54 1.00 -0.08 0.84 0.25 -0.14 0.44 1.00 0.00 87 | -2.52 1.00 -0.04 0.92 0.13 -0.14 0.47 1.00 0.00 88 | -2.50 1.00 0.00 1.00 0.00 -0.14 0.00 1.00 0.00 89 | -2.48 -1.00 0.04 0.92 -0.13 0.14 0.25 1.00 0.00 90 | -2.46 -1.00 0.08 0.84 -0.25 0.14 0.01 1.00 0.00 91 | -2.44 -1.00 0.12 0.76 -0.37 0.14 0.11 1.00 0.00 92 | -2.42 -1.00 0.16 0.68 -0.48 0.14 0.76 1.00 0.00 93 | -2.40 -1.00 0.20 0.60 -0.59 0.14 0.77 1.00 0.00 94 | -2.38 -1.00 0.24 0.52 -0.68 0.14 0.61 1.00 0.00 95 | -2.36 -1.00 0.28 0.44 -0.77 0.43 0.52 1.00 0.00 96 | -2.34 -1.00 0.32 0.36 -0.84 0.43 0.78 1.00 0.00 97 | -2.32 -1.00 0.36 0.28 -0.90 0.43 0.35 1.00 0.00 98 | -2.30 -1.00 0.40 0.20 -0.95 0.43 0.77 1.00 0.00 99 | -2.28 -1.00 0.44 0.12 -0.98 0.43 0.20 1.00 0.00 100 | -2.26 -1.00 0.48 0.04 -1.00 0.43 0.04 1.00 0.00 101 | -2.24 -1.00 0.52 -0.04 -1.00 0.71 0.46 1.00 0.00 102 | -2.22 -1.00 0.56 -0.12 -0.98 0.71 0.00 1.00 0.00 103 | -2.20 -1.00 0.60 -0.20 -0.95 0.71 0.96 1.00 0.00 104 | -2.18 -1.00 0.64 -0.28 -0.90 0.71 0.07 1.00 0.00 105 | -2.16 -1.00 0.68 -0.36 -0.84 0.71 0.14 1.00 0.00 106 | -2.14 -1.00 0.72 -0.44 -0.77 0.71 0.27 1.00 0.00 107 | -2.12 -1.00 0.76 -0.52 -0.68 1.00 0.30 1.00 0.00 108 | -2.10 -1.00 0.80 -0.60 -0.59 1.00 0.56 1.00 0.00 109 | -2.08 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 110 | -2.06 -1.00 0.88 -0.76 -0.37 1.00 0.59 1.00 0.00 111 | -2.04 -1.00 0.92 -0.84 -0.25 1.00 0.37 1.00 0.00 112 | -2.02 -1.00 0.96 -0.92 -0.13 1.00 0.45 1.00 0.00 113 | -2.00 -1.00 1.00 -1.00 -0.00 1.00 0.95 1.00 0.00 114 | -1.98 1.00 -0.96 -0.92 0.13 -1.00 0.06 1.00 0.00 115 | -1.96 1.00 -0.92 -0.84 0.25 -1.00 0.42 1.00 0.00 116 | -1.94 1.00 -0.88 -0.76 0.37 -1.00 0.80 1.00 0.00 117 | -1.92 1.00 -0.84 -0.68 0.48 -1.00 0.83 1.00 0.00 118 | -1.90 1.00 -0.80 -0.60 0.59 -1.00 0.00 1.00 0.00 119 | -1.88 1.00 -0.76 -0.52 0.68 -1.00 0.13 1.00 0.00 120 | -1.86 1.00 -0.72 -0.44 0.77 -0.71 0.27 1.00 0.00 121 | -1.84 1.00 -0.68 -0.36 0.84 -0.71 0.44 1.00 0.00 122 | -1.82 1.00 -0.64 -0.28 0.90 -0.71 0.25 1.00 0.00 123 | -1.80 1.00 -0.60 -0.20 0.95 -0.71 0.95 1.00 0.00 124 | -1.78 1.00 -0.56 -0.12 0.98 -0.71 0.85 1.00 0.00 125 | -1.76 1.00 -0.52 -0.04 1.00 -0.71 0.83 1.00 0.00 126 | -1.74 1.00 -0.48 0.04 1.00 -0.43 0.32 1.00 0.00 127 | -1.72 1.00 -0.44 0.12 0.98 -0.43 0.81 1.00 0.00 128 | -1.70 1.00 -0.40 0.20 0.95 -0.43 0.02 1.00 0.00 129 | -1.68 1.00 -0.36 0.28 0.90 -0.43 0.11 1.00 0.00 130 | -1.66 1.00 -0.32 0.36 0.84 -0.43 0.98 1.00 0.00 131 | -1.64 1.00 -0.28 0.44 0.77 -0.43 0.54 1.00 0.00 132 | -1.62 1.00 -0.24 0.52 0.68 -0.14 0.65 1.00 0.00 133 | -1.60 1.00 -0.20 0.60 0.59 -0.14 0.50 1.00 0.00 134 | -1.58 1.00 -0.16 0.68 0.48 -0.14 0.39 1.00 0.00 135 | -1.56 1.00 -0.12 0.76 0.37 -0.14 0.26 1.00 0.00 136 | -1.54 1.00 -0.08 0.84 0.25 -0.14 0.20 1.00 0.00 137 | -1.52 1.00 -0.04 0.92 0.13 -0.14 0.26 1.00 0.00 138 | -1.50 1.00 0.00 1.00 0.00 -0.14 0.77 1.00 0.00 139 | -1.48 -1.00 0.04 0.92 -0.13 0.14 0.50 1.00 0.00 140 | -1.46 -1.00 0.08 0.84 -0.25 0.14 0.06 1.00 0.00 141 | -1.44 -1.00 0.12 0.76 -0.37 0.14 0.04 1.00 0.00 142 | -1.42 -1.00 0.16 0.68 -0.48 0.14 0.98 1.00 0.00 143 | -1.40 -1.00 0.20 0.60 -0.59 0.14 0.65 1.00 0.00 144 | -1.38 -1.00 0.24 0.52 -0.68 0.14 0.34 1.00 0.00 145 | -1.36 -1.00 0.28 0.44 -0.77 0.43 0.89 1.00 0.00 146 | -1.34 -1.00 0.32 0.36 -0.84 0.43 0.67 1.00 0.00 147 | -1.32 -1.00 0.36 0.28 -0.90 0.43 0.13 1.00 0.00 148 | -1.30 -1.00 0.40 0.20 -0.95 0.43 0.85 1.00 0.00 149 | -1.28 -1.00 0.44 0.12 -0.98 0.43 0.06 1.00 0.00 150 | -1.26 -1.00 0.48 0.04 -1.00 0.43 0.20 1.00 0.00 151 | -1.24 -1.00 0.52 -0.04 -1.00 0.71 0.79 1.00 0.00 152 | -1.22 -1.00 0.56 -0.12 -0.98 0.71 0.31 1.00 0.00 153 | -1.20 -1.00 0.60 -0.20 -0.95 0.71 0.75 1.00 0.00 154 | -1.18 -1.00 0.64 -0.28 -0.90 0.71 0.84 1.00 0.00 155 | -1.16 -1.00 0.68 -0.36 -0.84 0.71 0.47 1.00 0.00 156 | -1.14 -1.00 0.72 -0.44 -0.77 0.71 0.05 1.00 0.00 157 | -1.12 -1.00 0.76 -0.52 -0.68 1.00 0.27 1.00 0.00 158 | -1.10 -1.00 0.80 -0.60 -0.59 1.00 0.81 1.00 0.00 159 | -1.08 -1.00 0.84 -0.68 -0.48 1.00 0.60 1.00 0.00 160 | -1.06 -1.00 0.88 -0.76 -0.37 1.00 0.20 1.00 0.00 161 | -1.04 -1.00 0.92 -0.84 -0.25 1.00 0.74 1.00 0.00 162 | -1.02 -1.00 0.96 -0.92 -0.13 1.00 0.79 1.00 0.00 163 | -1.00 -1.00 1.00 -1.00 -0.00 1.00 0.06 1.00 0.00 164 | -0.98 1.00 -0.96 -0.92 0.13 -1.00 0.18 1.00 0.00 165 | -0.96 1.00 -0.92 -0.84 0.25 -1.00 0.79 1.00 0.00 166 | -0.94 1.00 -0.88 -0.76 0.37 -1.00 0.42 1.00 0.00 167 | -0.92 1.00 -0.84 -0.68 0.48 -1.00 0.98 1.00 0.00 168 | -0.90 1.00 -0.80 -0.60 0.59 -1.00 0.64 1.00 0.00 169 | -0.88 1.00 -0.76 -0.52 0.68 -1.00 0.30 1.00 0.00 170 | -0.86 1.00 -0.72 -0.44 0.77 -0.71 0.34 1.00 0.00 171 | -0.84 1.00 -0.68 -0.36 0.84 -0.71 0.22 1.00 0.00 172 | -0.82 1.00 -0.64 -0.28 0.90 -0.71 0.69 1.00 0.00 173 | -0.80 1.00 -0.60 -0.20 0.95 -0.71 0.92 1.00 0.00 174 | -0.78 1.00 -0.56 -0.12 0.98 -0.71 0.16 1.00 0.00 175 | -0.76 1.00 -0.52 -0.04 1.00 -0.71 0.64 1.00 0.00 176 | -0.74 1.00 -0.48 0.04 1.00 -0.43 0.91 1.00 0.00 177 | -0.72 1.00 -0.44 0.12 0.98 -0.43 0.61 1.00 0.00 178 | -0.70 1.00 -0.40 0.20 0.95 -0.43 0.65 1.00 0.00 179 | -0.68 1.00 -0.36 0.28 0.90 -0.43 0.79 1.00 0.00 180 | -0.66 1.00 -0.32 0.36 0.84 -0.43 0.73 1.00 0.00 181 | -0.64 1.00 -0.28 0.44 0.77 -0.43 0.99 1.00 0.00 182 | -0.62 1.00 -0.24 0.52 0.68 -0.14 0.91 1.00 0.00 183 | -0.60 1.00 -0.20 0.60 0.59 -0.14 0.77 1.00 0.00 184 | -0.58 1.00 -0.16 0.68 0.48 -0.14 0.97 1.00 0.00 185 | -0.56 1.00 -0.12 0.76 0.37 -0.14 0.05 1.00 0.00 186 | -0.54 1.00 -0.08 0.84 0.25 -0.14 0.03 1.00 0.00 187 | -0.52 1.00 -0.04 0.92 0.13 -0.14 0.21 1.00 0.00 188 | -0.50 1.00 0.00 1.00 0.00 -0.14 0.94 1.00 0.00 189 | -0.48 -1.00 0.04 0.92 -0.13 0.14 0.83 1.00 0.00 190 | -0.46 -1.00 0.08 0.84 -0.25 0.14 0.57 1.00 0.00 191 | -0.44 -1.00 0.12 0.76 -0.37 0.14 0.70 1.00 0.00 192 | -0.42 -1.00 0.16 0.68 -0.48 0.14 0.11 1.00 0.00 193 | -0.40 -1.00 0.20 0.60 -0.59 0.14 0.84 1.00 0.00 194 | -0.38 -1.00 0.24 0.52 -0.68 0.14 0.52 1.00 0.00 195 | -0.36 -1.00 0.28 0.44 -0.77 0.43 0.31 1.00 0.00 196 | -0.34 -1.00 0.32 0.36 -0.84 0.43 0.16 1.00 0.00 197 | -0.32 -1.00 0.36 0.28 -0.90 0.43 0.53 1.00 0.00 198 | -0.30 -1.00 0.40 0.20 -0.95 0.43 0.48 1.00 0.00 199 | -0.28 -1.00 0.44 0.12 -0.98 0.43 0.39 1.00 0.00 200 | -0.26 -1.00 0.48 0.04 -1.00 0.43 0.57 1.00 0.00 201 | -0.24 -1.00 0.52 -0.04 -1.00 0.71 0.73 1.00 0.00 202 | -0.22 -1.00 0.56 -0.12 -0.98 0.71 0.74 1.00 0.00 203 | -0.20 -1.00 0.60 -0.20 -0.95 0.71 0.61 1.00 0.00 204 | -0.18 -1.00 0.64 -0.28 -0.90 0.71 0.36 1.00 0.00 205 | -0.16 -1.00 0.68 -0.36 -0.84 0.71 0.32 1.00 0.00 206 | -0.14 -1.00 0.72 -0.44 -0.77 0.71 0.37 1.00 0.00 207 | -0.12 -1.00 0.76 -0.52 -0.68 1.00 0.27 1.00 0.00 208 | -0.10 -1.00 0.80 -0.60 -0.59 1.00 0.10 1.00 0.00 209 | -0.08 -1.00 0.84 -0.68 -0.48 1.00 0.96 1.00 0.00 210 | -0.06 -1.00 0.88 -0.76 -0.37 1.00 0.45 1.00 0.00 211 | -0.04 -1.00 0.92 -0.84 -0.25 1.00 0.84 1.00 0.00 212 | -0.02 -1.00 0.96 -0.92 -0.13 1.00 0.76 1.00 0.00 213 | 0.00 1.00 -1.00 -1.00 0.00 -1.00 0.67 1.00 0.00 214 | 0.02 1.00 -0.96 -0.92 0.13 -1.00 0.68 1.00 0.00 215 | 0.04 1.00 -0.92 -0.84 0.25 -1.00 0.36 1.00 0.00 216 | 0.06 1.00 -0.88 -0.76 0.37 -1.00 0.18 1.00 0.00 217 | 0.08 1.00 -0.84 -0.68 0.48 -1.00 0.66 1.00 0.00 218 | 0.10 1.00 -0.80 -0.60 0.59 -1.00 0.71 1.00 0.00 219 | 0.12 1.00 -0.76 -0.52 0.68 -1.00 0.71 1.00 0.00 220 | 0.14 1.00 -0.72 -0.44 0.77 -0.71 0.08 1.00 0.00 221 | 0.16 1.00 -0.68 -0.36 0.84 -0.71 0.98 1.00 0.00 222 | 0.18 1.00 -0.64 -0.28 0.90 -0.71 0.30 1.00 0.00 223 | 0.20 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 224 | 0.22 1.00 -0.56 -0.12 0.98 -0.71 0.78 1.00 0.00 225 | 0.24 1.00 -0.52 -0.04 1.00 -0.71 0.99 1.00 0.00 226 | 0.26 1.00 -0.48 0.04 1.00 -0.43 0.10 1.00 0.00 227 | 0.28 1.00 -0.44 0.12 0.98 -0.43 0.79 1.00 0.00 228 | 0.30 1.00 -0.40 0.20 0.95 -0.43 0.22 1.00 0.00 229 | 0.32 1.00 -0.36 0.28 0.90 -0.43 0.85 1.00 0.00 230 | 0.34 1.00 -0.32 0.36 0.84 -0.43 0.55 1.00 0.00 231 | 0.36 1.00 -0.28 0.44 0.77 -0.43 0.31 1.00 0.00 232 | 0.38 1.00 -0.24 0.52 0.68 -0.14 0.05 1.00 0.00 233 | 0.40 1.00 -0.20 0.60 0.59 -0.14 0.92 1.00 0.00 234 | 0.42 1.00 -0.16 0.68 0.48 -0.14 0.34 1.00 0.00 235 | 0.44 1.00 -0.12 0.76 0.37 -0.14 0.98 1.00 0.00 236 | 0.46 1.00 -0.08 0.84 0.25 -0.14 0.09 1.00 0.00 237 | 0.48 1.00 -0.04 0.92 0.13 -0.14 0.44 1.00 0.00 238 | 0.50 -1.00 0.00 1.00 -0.00 0.14 0.30 1.00 0.00 239 | 0.52 -1.00 0.04 0.92 -0.13 0.14 0.14 1.00 0.00 240 | 0.54 -1.00 0.08 0.84 -0.25 0.14 0.37 1.00 0.00 241 | 0.56 -1.00 0.12 0.76 -0.37 0.14 0.20 1.00 0.00 242 | 0.58 -1.00 0.16 0.68 -0.48 0.14 0.85 1.00 0.00 243 | 0.60 -1.00 0.20 0.60 -0.59 0.14 0.00 1.00 0.00 244 | 0.62 -1.00 0.24 0.52 -0.68 0.14 0.06 1.00 0.00 245 | 0.64 -1.00 0.28 0.44 -0.77 0.43 0.36 1.00 0.00 246 | 0.66 -1.00 0.32 0.36 -0.84 0.43 0.69 1.00 0.00 247 | 0.68 -1.00 0.36 0.28 -0.90 0.43 0.14 1.00 0.00 248 | 0.70 -1.00 0.40 0.20 -0.95 0.43 0.52 1.00 0.00 249 | 0.72 -1.00 0.44 0.12 -0.98 0.43 0.55 1.00 0.00 250 | 0.74 -1.00 0.48 0.04 -1.00 0.43 0.49 1.00 0.00 251 | 0.76 -1.00 0.52 -0.04 -1.00 0.71 0.48 1.00 0.00 252 | 0.78 -1.00 0.56 -0.12 -0.98 0.71 0.17 1.00 0.00 253 | 0.80 -1.00 0.60 -0.20 -0.95 0.71 0.98 1.00 0.00 254 | 0.82 -1.00 0.64 -0.28 -0.90 0.71 0.35 1.00 0.00 255 | 0.84 -1.00 0.68 -0.36 -0.84 0.71 0.17 1.00 0.00 256 | 0.86 -1.00 0.72 -0.44 -0.77 0.71 0.59 1.00 0.00 257 | 0.88 -1.00 0.76 -0.52 -0.68 1.00 0.01 1.00 0.00 258 | 0.90 -1.00 0.80 -0.60 -0.59 1.00 0.13 1.00 0.00 259 | 0.92 -1.00 0.84 -0.68 -0.48 1.00 0.30 1.00 0.00 260 | 0.94 -1.00 0.88 -0.76 -0.37 1.00 0.97 1.00 0.00 261 | 0.96 -1.00 0.92 -0.84 -0.25 1.00 0.86 1.00 0.00 262 | 0.98 -1.00 0.96 -0.92 -0.13 1.00 0.30 1.00 0.00 263 | 1.00 1.00 -1.00 -1.00 0.00 -1.00 0.07 1.00 0.00 264 | 1.02 1.00 -0.96 -0.92 0.13 -1.00 0.48 1.00 0.00 265 | 1.04 1.00 -0.92 -0.84 0.25 -1.00 0.48 1.00 0.00 266 | 1.06 1.00 -0.88 -0.76 0.37 -1.00 0.62 1.00 0.00 267 | 1.08 1.00 -0.84 -0.68 0.48 -1.00 0.30 1.00 0.00 268 | 1.10 1.00 -0.80 -0.60 0.59 -1.00 0.77 1.00 0.00 269 | 1.12 1.00 -0.76 -0.52 0.68 -1.00 0.01 1.00 0.00 270 | 1.14 1.00 -0.72 -0.44 0.77 -0.71 0.33 1.00 0.00 271 | 1.16 1.00 -0.68 -0.36 0.84 -0.71 0.67 1.00 0.00 272 | 1.18 1.00 -0.64 -0.28 0.90 -0.71 0.13 1.00 0.00 273 | 1.20 1.00 -0.60 -0.20 0.95 -0.71 0.10 1.00 0.00 274 | 1.22 1.00 -0.56 -0.12 0.98 -0.71 0.95 1.00 0.00 275 | 1.24 1.00 -0.52 -0.04 1.00 -0.71 0.44 1.00 0.00 276 | 1.26 1.00 -0.48 0.04 1.00 -0.43 0.64 1.00 0.00 277 | 1.28 1.00 -0.44 0.12 0.98 -0.43 0.03 1.00 0.00 278 | 1.30 1.00 -0.40 0.20 0.95 -0.43 0.10 1.00 0.00 279 | 1.32 1.00 -0.36 0.28 0.90 -0.43 0.05 1.00 0.00 280 | 1.34 1.00 -0.32 0.36 0.84 -0.43 0.42 1.00 0.00 281 | 1.36 1.00 -0.28 0.44 0.77 -0.43 0.99 1.00 0.00 282 | 1.38 1.00 -0.24 0.52 0.68 -0.14 0.04 1.00 0.00 283 | 1.40 1.00 -0.20 0.60 0.59 -0.14 0.98 1.00 0.00 284 | 1.42 1.00 -0.16 0.68 0.48 -0.14 0.17 1.00 0.00 285 | 1.44 1.00 -0.12 0.76 0.37 -0.14 0.47 1.00 0.00 286 | 1.46 1.00 -0.08 0.84 0.25 -0.14 0.58 1.00 0.00 287 | 1.48 1.00 -0.04 0.92 0.13 -0.14 0.62 1.00 0.00 288 | 1.50 -1.00 0.00 1.00 -0.00 0.14 0.63 1.00 0.00 289 | 1.52 -1.00 0.04 0.92 -0.13 0.14 0.74 1.00 0.00 290 | 1.54 -1.00 0.08 0.84 -0.25 0.14 0.22 1.00 0.00 291 | 1.56 -1.00 0.12 0.76 -0.37 0.14 0.29 1.00 0.00 292 | 1.58 -1.00 0.16 0.68 -0.48 0.14 0.57 1.00 0.00 293 | 1.60 -1.00 0.20 0.60 -0.59 0.14 0.86 1.00 0.00 294 | 1.62 -1.00 0.24 0.52 -0.68 0.14 0.66 1.00 0.00 295 | 1.64 -1.00 0.28 0.44 -0.77 0.43 0.79 1.00 0.00 296 | 1.66 -1.00 0.32 0.36 -0.84 0.43 0.73 1.00 0.00 297 | 1.68 -1.00 0.36 0.28 -0.90 0.43 0.90 1.00 0.00 298 | 1.70 -1.00 0.40 0.20 -0.95 0.43 0.15 1.00 0.00 299 | 1.72 -1.00 0.44 0.12 -0.98 0.43 0.24 1.00 0.00 300 | 1.74 -1.00 0.48 0.04 -1.00 0.43 0.86 1.00 0.00 301 | 1.76 -1.00 0.52 -0.04 -1.00 0.71 0.35 1.00 0.00 302 | 1.78 -1.00 0.56 -0.12 -0.98 0.71 0.50 1.00 0.00 303 | 1.80 -1.00 0.60 -0.20 -0.95 0.71 0.55 1.00 0.00 304 | 1.82 -1.00 0.64 -0.28 -0.90 0.71 0.37 1.00 0.00 305 | 1.84 -1.00 0.68 -0.36 -0.84 0.71 0.88 1.00 0.00 306 | 1.86 -1.00 0.72 -0.44 -0.77 0.71 0.50 1.00 0.00 307 | 1.88 -1.00 0.76 -0.52 -0.68 1.00 0.08 1.00 0.00 308 | 1.90 -1.00 0.80 -0.60 -0.59 1.00 0.74 1.00 0.00 309 | 1.92 -1.00 0.84 -0.68 -0.48 1.00 0.26 1.00 0.00 310 | 1.94 -1.00 0.88 -0.76 -0.37 1.00 0.58 1.00 0.00 311 | 1.96 -1.00 0.92 -0.84 -0.25 1.00 0.38 1.00 0.00 312 | 1.98 -1.00 0.96 -0.92 -0.13 1.00 0.87 1.00 0.00 313 | 2.00 1.00 -1.00 -1.00 0.00 -1.00 0.77 1.00 0.00 314 | 2.02 1.00 -0.96 -0.92 0.13 -1.00 0.66 1.00 0.00 315 | 2.04 1.00 -0.92 -0.84 0.25 -1.00 0.71 1.00 0.00 316 | 2.06 1.00 -0.88 -0.76 0.37 -1.00 0.99 1.00 0.00 317 | 2.08 1.00 -0.84 -0.68 0.48 -1.00 0.41 1.00 0.00 318 | 2.10 1.00 -0.80 -0.60 0.59 -1.00 0.73 1.00 0.00 319 | 2.12 1.00 -0.76 -0.52 0.68 -1.00 0.62 1.00 0.00 320 | 2.14 1.00 -0.72 -0.44 0.77 -0.71 0.44 1.00 0.00 321 | 2.16 1.00 -0.68 -0.36 0.84 -0.71 0.47 1.00 0.00 322 | 2.18 1.00 -0.64 -0.28 0.90 -0.71 0.83 1.00 0.00 323 | 2.20 1.00 -0.60 -0.20 0.95 -0.71 0.64 1.00 0.00 324 | 2.22 1.00 -0.56 -0.12 0.98 -0.71 0.81 1.00 0.00 325 | 2.24 1.00 -0.52 -0.04 1.00 -0.71 0.62 1.00 0.00 326 | 2.26 1.00 -0.48 0.04 1.00 -0.43 0.77 1.00 0.00 327 | 2.28 1.00 -0.44 0.12 0.98 -0.43 0.32 1.00 0.00 328 | 2.30 1.00 -0.40 0.20 0.95 -0.43 0.18 1.00 0.00 329 | 2.32 1.00 -0.36 0.28 0.90 -0.43 0.22 1.00 0.00 330 | 2.34 1.00 -0.32 0.36 0.84 -0.43 0.78 1.00 0.00 331 | 2.36 1.00 -0.28 0.44 0.77 -0.43 0.87 1.00 0.00 332 | 2.38 1.00 -0.24 0.52 0.68 -0.14 0.43 1.00 0.00 333 | 2.40 1.00 -0.20 0.60 0.59 -0.14 0.05 1.00 0.00 334 | 2.42 1.00 -0.16 0.68 0.48 -0.14 0.87 1.00 0.00 335 | 2.44 1.00 -0.12 0.76 0.37 -0.14 0.12 1.00 0.00 336 | 2.46 1.00 -0.08 0.84 0.25 -0.14 0.86 1.00 0.00 337 | 2.48 1.00 -0.04 0.92 0.13 -0.14 0.45 1.00 0.00 338 | 2.50 -1.00 0.00 1.00 -0.00 0.14 0.15 1.00 0.00 339 | 2.52 -1.00 0.04 0.92 -0.13 0.14 0.92 1.00 0.00 340 | 2.54 -1.00 0.08 0.84 -0.25 0.14 0.38 1.00 0.00 341 | 2.56 -1.00 0.12 0.76 -0.37 0.14 0.70 1.00 0.00 342 | 2.58 -1.00 0.16 0.68 -0.48 0.14 0.82 1.00 0.00 343 | 2.60 -1.00 0.20 0.60 -0.59 0.14 0.57 1.00 0.00 344 | 2.62 -1.00 0.24 0.52 -0.68 0.14 0.71 1.00 0.00 345 | 2.64 -1.00 0.28 0.44 -0.77 0.43 0.31 1.00 0.00 346 | 2.66 -1.00 0.32 0.36 -0.84 0.43 0.23 1.00 0.00 347 | 2.68 -1.00 0.36 0.28 -0.90 0.43 0.97 1.00 0.00 348 | 2.70 -1.00 0.40 0.20 -0.95 0.43 0.86 1.00 0.00 349 | 2.72 -1.00 0.44 0.12 -0.98 0.43 0.41 1.00 0.00 350 | 2.74 -1.00 0.48 0.04 -1.00 0.43 0.57 1.00 0.00 351 | 2.76 -1.00 0.52 -0.04 -1.00 0.71 0.06 1.00 0.00 352 | 2.78 -1.00 0.56 -0.12 -0.98 0.71 0.19 1.00 0.00 353 | 2.80 -1.00 0.60 -0.20 -0.95 0.71 0.09 1.00 0.00 354 | 2.82 -1.00 0.64 -0.28 -0.90 0.71 0.46 1.00 0.00 355 | 2.84 -1.00 0.68 -0.36 -0.84 0.71 0.06 1.00 0.00 356 | 2.86 -1.00 0.72 -0.44 -0.77 0.71 0.86 1.00 0.00 357 | 2.88 -1.00 0.76 -0.52 -0.68 1.00 0.54 1.00 0.00 358 | 2.90 -1.00 0.80 -0.60 -0.59 1.00 0.42 1.00 0.00 359 | 2.92 -1.00 0.84 -0.68 -0.48 1.00 0.08 1.00 0.00 360 | 2.94 -1.00 0.88 -0.76 -0.37 1.00 0.76 1.00 0.00 361 | 2.96 -1.00 0.92 -0.84 -0.25 1.00 0.91 1.00 0.00 362 | 2.98 -1.00 0.96 -0.92 -0.13 1.00 0.55 1.00 0.00 363 | 3.00 1.00 -1.00 -1.00 0.00 -1.00 0.46 1.00 0.00 364 | 3.02 1.00 -0.96 -0.92 0.13 -1.00 0.82 1.00 0.00 365 | 3.04 1.00 -0.92 -0.84 0.25 -1.00 0.59 1.00 0.00 366 | 3.06 1.00 -0.88 -0.76 0.37 -1.00 0.29 1.00 0.00 367 | 3.08 1.00 -0.84 -0.68 0.48 -1.00 0.42 1.00 0.00 368 | 3.10 1.00 -0.80 -0.60 0.59 -1.00 0.29 1.00 0.00 369 | 3.12 1.00 -0.76 -0.52 0.68 -1.00 0.51 1.00 0.00 370 | 3.14 1.00 -0.72 -0.44 0.77 -0.71 0.58 1.00 0.00 371 | 3.16 1.00 -0.68 -0.36 0.84 -0.71 0.16 1.00 0.00 372 | 3.18 1.00 -0.64 -0.28 0.90 -0.71 0.86 1.00 0.00 373 | 3.20 1.00 -0.60 -0.20 0.95 -0.71 0.04 1.00 0.00 374 | 3.22 1.00 -0.56 -0.12 0.98 -0.71 0.59 1.00 0.00 375 | 3.24 1.00 -0.52 -0.04 1.00 -0.71 0.14 1.00 0.00 376 | 3.26 1.00 -0.48 0.04 1.00 -0.43 0.48 1.00 0.00 377 | 3.28 1.00 -0.44 0.12 0.98 -0.43 0.65 1.00 0.00 378 | 3.30 1.00 -0.40 0.20 0.95 -0.43 0.54 1.00 0.00 379 | 3.32 1.00 -0.36 0.28 0.90 -0.43 0.72 1.00 0.00 380 | 3.34 1.00 -0.32 0.36 0.84 -0.43 0.66 1.00 0.00 381 | 3.36 1.00 -0.28 0.44 0.77 -0.43 0.66 1.00 0.00 382 | 3.38 1.00 -0.24 0.52 0.68 -0.14 0.66 1.00 0.00 383 | 3.40 1.00 -0.20 0.60 0.59 -0.14 0.81 1.00 0.00 384 | 3.42 1.00 -0.16 0.68 0.48 -0.14 0.09 1.00 0.00 385 | 3.44 1.00 -0.12 0.76 0.37 -0.14 0.01 1.00 0.00 386 | 3.46 1.00 -0.08 0.84 0.25 -0.14 0.70 1.00 0.00 387 | 3.48 1.00 -0.04 0.92 0.13 -0.14 0.29 1.00 0.00 388 | 3.50 -1.00 0.00 1.00 -0.00 0.14 0.39 1.00 0.00 389 | 3.52 -1.00 0.04 0.92 -0.13 0.14 0.60 1.00 0.00 390 | 3.54 -1.00 0.08 0.84 -0.25 0.14 0.04 1.00 0.00 391 | 3.56 -1.00 0.12 0.76 -0.37 0.14 0.51 1.00 0.00 392 | 3.58 -1.00 0.16 0.68 -0.48 0.14 0.61 1.00 0.00 393 | 3.60 -1.00 0.20 0.60 -0.59 0.14 0.19 1.00 0.00 394 | 3.62 -1.00 0.24 0.52 -0.68 0.14 0.99 1.00 0.00 395 | 3.64 -1.00 0.28 0.44 -0.77 0.43 0.69 1.00 0.00 396 | 3.66 -1.00 0.32 0.36 -0.84 0.43 0.83 1.00 0.00 397 | 3.68 -1.00 0.36 0.28 -0.90 0.43 0.63 1.00 0.00 398 | 3.70 -1.00 0.40 0.20 -0.95 0.43 0.71 1.00 0.00 399 | 3.72 -1.00 0.44 0.12 -0.98 0.43 0.84 1.00 0.00 400 | 3.74 -1.00 0.48 0.04 -1.00 0.43 0.60 1.00 0.00 401 | 3.76 -1.00 0.52 -0.04 -1.00 0.71 0.07 1.00 0.00 402 | 3.78 -1.00 0.56 -0.12 -0.98 0.71 0.62 1.00 0.00 403 | 3.80 -1.00 0.60 -0.20 -0.95 0.71 0.40 1.00 0.00 404 | 3.82 -1.00 0.64 -0.28 -0.90 0.71 0.82 1.00 0.00 405 | 3.84 -1.00 0.68 -0.36 -0.84 0.71 0.69 1.00 0.00 406 | 3.86 -1.00 0.72 -0.44 -0.77 0.71 0.57 1.00 0.00 407 | 3.88 -1.00 0.76 -0.52 -0.68 1.00 0.99 1.00 0.00 408 | 3.90 -1.00 0.80 -0.60 -0.59 1.00 0.27 1.00 0.00 409 | 3.92 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 410 | 3.94 -1.00 0.88 -0.76 -0.37 1.00 0.49 1.00 0.00 411 | 3.96 -1.00 0.92 -0.84 -0.25 1.00 0.86 1.00 0.00 412 | 3.98 -1.00 0.96 -0.92 -0.13 1.00 0.39 1.00 0.00 413 | 414 | done... 415 | -------------------------------------------------------------------------------- /examples/functionGeneratorPerformance/performance_0.2.5.txt: -------------------------------------------------------------------------------- 1 | Start functionGeneratorPerformance - LIB VERSION: 0.2.5 2 | func usec max calls/sec 3 | test_square: 55.20 18116.73 4 | test_sawtooth: 62.32 16047.04 5 | test_triangle: 80.42 12434.10 6 | test_sinus: 164.87 6065.36 7 | test_stair: 81.49 12271.02 8 | test_random: 43.18 23159.08 9 | test_random_DC: 67.75 14760.93 10 | test_line: 0.76 1322751.37 11 | test_zero: 0.75 1325556.75 12 | 13 | t sqr saw tri sin str rnd line zero 14 | -4.00 -1.00 1.00 -1.00 -0.00 1.00 0.50 1.00 0.00 15 | -3.98 1.00 -0.96 -0.92 0.13 -1.00 0.06 1.00 0.00 16 | -3.96 1.00 -0.92 -0.84 0.25 -1.00 0.34 1.00 0.00 17 | -3.94 1.00 -0.88 -0.76 0.37 -1.00 0.33 1.00 0.00 18 | -3.92 1.00 -0.84 -0.68 0.48 -1.00 0.95 1.00 0.00 19 | -3.90 1.00 -0.80 -0.60 0.59 -1.00 0.75 1.00 0.00 20 | -3.88 1.00 -0.76 -0.52 0.68 -1.00 0.20 1.00 0.00 21 | -3.86 1.00 -0.72 -0.44 0.77 -0.71 0.33 1.00 0.00 22 | -3.84 1.00 -0.68 -0.36 0.84 -0.71 0.25 1.00 0.00 23 | -3.82 1.00 -0.64 -0.28 0.90 -0.71 0.39 1.00 0.00 24 | -3.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 25 | -3.78 1.00 -0.56 -0.12 0.98 -0.71 0.95 1.00 0.00 26 | -3.76 1.00 -0.52 -0.04 1.00 -0.71 0.56 1.00 0.00 27 | -3.74 1.00 -0.48 0.04 1.00 -0.43 0.64 1.00 0.00 28 | -3.72 1.00 -0.44 0.12 0.98 -0.43 0.17 1.00 0.00 29 | -3.70 1.00 -0.40 0.20 0.95 -0.43 0.78 1.00 0.00 30 | -3.68 1.00 -0.36 0.28 0.90 -0.43 0.02 1.00 0.00 31 | -3.66 1.00 -0.32 0.36 0.84 -0.43 0.31 1.00 0.00 32 | -3.64 1.00 -0.28 0.44 0.77 -0.43 0.49 1.00 0.00 33 | -3.62 1.00 -0.24 0.52 0.68 -0.14 0.09 1.00 0.00 34 | -3.60 1.00 -0.20 0.60 0.59 -0.14 0.21 1.00 0.00 35 | -3.58 1.00 -0.16 0.68 0.48 -0.14 0.82 1.00 0.00 36 | -3.56 1.00 -0.12 0.76 0.37 -0.14 0.51 1.00 0.00 37 | -3.54 1.00 -0.08 0.84 0.25 -0.14 0.74 1.00 0.00 38 | -3.52 1.00 -0.04 0.92 0.13 -0.14 0.20 1.00 0.00 39 | -3.50 1.00 0.00 1.00 0.00 -0.14 0.27 1.00 0.00 40 | -3.48 -1.00 0.04 0.92 -0.13 0.14 0.15 1.00 0.00 41 | -3.46 -1.00 0.08 0.84 -0.25 0.14 0.67 1.00 0.00 42 | -3.44 -1.00 0.12 0.76 -0.37 0.14 0.54 1.00 0.00 43 | -3.42 -1.00 0.16 0.68 -0.48 0.14 0.44 1.00 0.00 44 | -3.40 -1.00 0.20 0.60 -0.59 0.14 0.85 1.00 0.00 45 | -3.38 -1.00 0.24 0.52 -0.68 0.14 0.90 1.00 0.00 46 | -3.36 -1.00 0.28 0.44 -0.77 0.43 0.43 1.00 0.00 47 | -3.34 -1.00 0.32 0.36 -0.84 0.43 0.11 1.00 0.00 48 | -3.32 -1.00 0.36 0.28 -0.90 0.43 0.91 1.00 0.00 49 | -3.30 -1.00 0.40 0.20 -0.95 0.43 0.79 1.00 0.00 50 | -3.28 -1.00 0.44 0.12 -0.98 0.43 0.17 1.00 0.00 51 | -3.26 -1.00 0.48 0.04 -1.00 0.43 0.72 1.00 0.00 52 | -3.24 -1.00 0.52 -0.04 -1.00 0.71 0.77 1.00 0.00 53 | -3.22 -1.00 0.56 -0.12 -0.98 0.71 0.86 1.00 0.00 54 | -3.20 -1.00 0.60 -0.20 -0.95 0.71 0.50 1.00 0.00 55 | -3.18 -1.00 0.64 -0.28 -0.90 0.71 0.42 1.00 0.00 56 | -3.16 -1.00 0.68 -0.36 -0.84 0.71 0.73 1.00 0.00 57 | -3.14 -1.00 0.72 -0.44 -0.77 0.71 0.01 1.00 0.00 58 | -3.12 -1.00 0.76 -0.52 -0.68 1.00 0.52 1.00 0.00 59 | -3.10 -1.00 0.80 -0.60 -0.59 1.00 0.72 1.00 0.00 60 | -3.08 -1.00 0.84 -0.68 -0.48 1.00 0.61 1.00 0.00 61 | -3.06 -1.00 0.88 -0.76 -0.37 1.00 0.41 1.00 0.00 62 | -3.04 -1.00 0.92 -0.84 -0.25 1.00 0.68 1.00 0.00 63 | -3.02 -1.00 0.96 -0.92 -0.13 1.00 0.34 1.00 0.00 64 | -3.00 -1.00 1.00 -1.00 -0.00 1.00 0.90 1.00 0.00 65 | -2.98 1.00 -0.96 -0.92 0.13 -1.00 0.43 1.00 0.00 66 | -2.96 1.00 -0.92 -0.84 0.25 -1.00 0.47 1.00 0.00 67 | -2.94 1.00 -0.88 -0.76 0.37 -1.00 0.51 1.00 0.00 68 | -2.92 1.00 -0.84 -0.68 0.48 -1.00 0.29 1.00 0.00 69 | -2.90 1.00 -0.80 -0.60 0.59 -1.00 0.42 1.00 0.00 70 | -2.88 1.00 -0.76 -0.52 0.68 -1.00 0.02 1.00 0.00 71 | -2.86 1.00 -0.72 -0.44 0.77 -0.71 0.91 1.00 0.00 72 | -2.84 1.00 -0.68 -0.36 0.84 -0.71 0.00 1.00 0.00 73 | -2.82 1.00 -0.64 -0.28 0.90 -0.71 0.22 1.00 0.00 74 | -2.80 1.00 -0.60 -0.20 0.95 -0.71 0.55 1.00 0.00 75 | -2.78 1.00 -0.56 -0.12 0.98 -0.71 0.96 1.00 0.00 76 | -2.76 1.00 -0.52 -0.04 1.00 -0.71 0.30 1.00 0.00 77 | -2.74 1.00 -0.48 0.04 1.00 -0.43 0.19 1.00 0.00 78 | -2.72 1.00 -0.44 0.12 0.98 -0.43 0.62 1.00 0.00 79 | -2.70 1.00 -0.40 0.20 0.95 -0.43 0.61 1.00 0.00 80 | -2.68 1.00 -0.36 0.28 0.90 -0.43 0.28 1.00 0.00 81 | -2.66 1.00 -0.32 0.36 0.84 -0.43 0.85 1.00 0.00 82 | -2.64 1.00 -0.28 0.44 0.77 -0.43 0.22 1.00 0.00 83 | -2.62 1.00 -0.24 0.52 0.68 -0.14 0.66 1.00 0.00 84 | -2.60 1.00 -0.20 0.60 0.59 -0.14 0.62 1.00 0.00 85 | -2.58 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 86 | -2.56 1.00 -0.12 0.76 0.37 -0.14 0.38 1.00 0.00 87 | -2.54 1.00 -0.08 0.84 0.25 -0.14 0.00 1.00 0.00 88 | -2.52 1.00 -0.04 0.92 0.13 -0.14 0.09 1.00 0.00 89 | -2.50 1.00 0.00 1.00 0.00 -0.14 0.56 1.00 0.00 90 | -2.48 -1.00 0.04 0.92 -0.13 0.14 0.67 1.00 0.00 91 | -2.46 -1.00 0.08 0.84 -0.25 0.14 0.66 1.00 0.00 92 | -2.44 -1.00 0.12 0.76 -0.37 0.14 0.15 1.00 0.00 93 | -2.42 -1.00 0.16 0.68 -0.48 0.14 0.71 1.00 0.00 94 | -2.40 -1.00 0.20 0.60 -0.59 0.14 0.75 1.00 0.00 95 | -2.38 -1.00 0.24 0.52 -0.68 0.14 0.13 1.00 0.00 96 | -2.36 -1.00 0.28 0.44 -0.77 0.43 0.99 1.00 0.00 97 | -2.34 -1.00 0.32 0.36 -0.84 0.43 0.01 1.00 0.00 98 | -2.32 -1.00 0.36 0.28 -0.90 0.43 0.92 1.00 0.00 99 | -2.30 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 100 | -2.28 -1.00 0.44 0.12 -0.98 0.43 0.38 1.00 0.00 101 | -2.26 -1.00 0.48 0.04 -1.00 0.43 0.87 1.00 0.00 102 | -2.24 -1.00 0.52 -0.04 -1.00 0.71 0.42 1.00 0.00 103 | -2.22 -1.00 0.56 -0.12 -0.98 0.71 0.88 1.00 0.00 104 | -2.20 -1.00 0.60 -0.20 -0.95 0.71 0.71 1.00 0.00 105 | -2.18 -1.00 0.64 -0.28 -0.90 0.71 0.97 1.00 0.00 106 | -2.16 -1.00 0.68 -0.36 -0.84 0.71 0.27 1.00 0.00 107 | -2.14 -1.00 0.72 -0.44 -0.77 0.71 0.94 1.00 0.00 108 | -2.12 -1.00 0.76 -0.52 -0.68 1.00 0.92 1.00 0.00 109 | -2.10 -1.00 0.80 -0.60 -0.59 1.00 0.02 1.00 0.00 110 | -2.08 -1.00 0.84 -0.68 -0.48 1.00 0.26 1.00 0.00 111 | -2.06 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 112 | -2.04 -1.00 0.92 -0.84 -0.25 1.00 0.93 1.00 0.00 113 | -2.02 -1.00 0.96 -0.92 -0.13 1.00 0.25 1.00 0.00 114 | -2.00 -1.00 1.00 -1.00 -0.00 1.00 0.77 1.00 0.00 115 | -1.98 1.00 -0.96 -0.92 0.13 -1.00 0.71 1.00 0.00 116 | -1.96 1.00 -0.92 -0.84 0.25 -1.00 0.86 1.00 0.00 117 | -1.94 1.00 -0.88 -0.76 0.37 -1.00 0.15 1.00 0.00 118 | -1.92 1.00 -0.84 -0.68 0.48 -1.00 0.80 1.00 0.00 119 | -1.90 1.00 -0.80 -0.60 0.59 -1.00 0.17 1.00 0.00 120 | -1.88 1.00 -0.76 -0.52 0.68 -1.00 0.18 1.00 0.00 121 | -1.86 1.00 -0.72 -0.44 0.77 -0.71 0.54 1.00 0.00 122 | -1.84 1.00 -0.68 -0.36 0.84 -0.71 0.13 1.00 0.00 123 | -1.82 1.00 -0.64 -0.28 0.90 -0.71 0.71 1.00 0.00 124 | -1.80 1.00 -0.60 -0.20 0.95 -0.71 0.24 1.00 0.00 125 | -1.78 1.00 -0.56 -0.12 0.98 -0.71 0.73 1.00 0.00 126 | -1.76 1.00 -0.52 -0.04 1.00 -0.71 0.08 1.00 0.00 127 | -1.74 1.00 -0.48 0.04 1.00 -0.43 0.13 1.00 0.00 128 | -1.72 1.00 -0.44 0.12 0.98 -0.43 0.28 1.00 0.00 129 | -1.70 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 130 | -1.68 1.00 -0.36 0.28 0.90 -0.43 0.53 1.00 0.00 131 | -1.66 1.00 -0.32 0.36 0.84 -0.43 0.48 1.00 0.00 132 | -1.64 1.00 -0.28 0.44 0.77 -0.43 0.38 1.00 0.00 133 | -1.62 1.00 -0.24 0.52 0.68 -0.14 0.28 1.00 0.00 134 | -1.60 1.00 -0.20 0.60 0.59 -0.14 0.06 1.00 0.00 135 | -1.58 1.00 -0.16 0.68 0.48 -0.14 0.84 1.00 0.00 136 | -1.56 1.00 -0.12 0.76 0.37 -0.14 0.35 1.00 0.00 137 | -1.54 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 138 | -1.52 1.00 -0.04 0.92 0.13 -0.14 0.51 1.00 0.00 139 | -1.50 1.00 0.00 1.00 0.00 -0.14 0.37 1.00 0.00 140 | -1.48 -1.00 0.04 0.92 -0.13 0.14 0.40 1.00 0.00 141 | -1.46 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 142 | -1.44 -1.00 0.12 0.76 -0.37 0.14 0.30 1.00 0.00 143 | -1.42 -1.00 0.16 0.68 -0.48 0.14 0.76 1.00 0.00 144 | -1.40 -1.00 0.20 0.60 -0.59 0.14 0.59 1.00 0.00 145 | -1.38 -1.00 0.24 0.52 -0.68 0.14 0.32 1.00 0.00 146 | -1.36 -1.00 0.28 0.44 -0.77 0.43 0.79 1.00 0.00 147 | -1.34 -1.00 0.32 0.36 -0.84 0.43 0.63 1.00 0.00 148 | -1.32 -1.00 0.36 0.28 -0.90 0.43 0.20 1.00 0.00 149 | -1.30 -1.00 0.40 0.20 -0.95 0.43 0.83 1.00 0.00 150 | -1.28 -1.00 0.44 0.12 -0.98 0.43 0.25 1.00 0.00 151 | -1.26 -1.00 0.48 0.04 -1.00 0.43 0.36 1.00 0.00 152 | -1.24 -1.00 0.52 -0.04 -1.00 0.71 0.25 1.00 0.00 153 | -1.22 -1.00 0.56 -0.12 -0.98 0.71 0.25 1.00 0.00 154 | -1.20 -1.00 0.60 -0.20 -0.95 0.71 0.18 1.00 0.00 155 | -1.18 -1.00 0.64 -0.28 -0.90 0.71 0.30 1.00 0.00 156 | -1.16 -1.00 0.68 -0.36 -0.84 0.71 0.09 1.00 0.00 157 | -1.14 -1.00 0.72 -0.44 -0.77 0.71 0.32 1.00 0.00 158 | -1.12 -1.00 0.76 -0.52 -0.68 1.00 0.69 1.00 0.00 159 | -1.10 -1.00 0.80 -0.60 -0.59 1.00 0.96 1.00 0.00 160 | -1.08 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 161 | -1.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 162 | -1.04 -1.00 0.92 -0.84 -0.25 1.00 0.21 1.00 0.00 163 | -1.02 -1.00 0.96 -0.92 -0.13 1.00 0.87 1.00 0.00 164 | -1.00 -1.00 1.00 -1.00 -0.00 1.00 0.57 1.00 0.00 165 | -0.98 1.00 -0.96 -0.92 0.13 -1.00 0.42 1.00 0.00 166 | -0.96 1.00 -0.92 -0.84 0.25 -1.00 0.81 1.00 0.00 167 | -0.94 1.00 -0.88 -0.76 0.37 -1.00 0.39 1.00 0.00 168 | -0.92 1.00 -0.84 -0.68 0.48 -1.00 0.71 1.00 0.00 169 | -0.90 1.00 -0.80 -0.60 0.59 -1.00 0.47 1.00 0.00 170 | -0.88 1.00 -0.76 -0.52 0.68 -1.00 0.56 1.00 0.00 171 | -0.86 1.00 -0.72 -0.44 0.77 -0.71 0.86 1.00 0.00 172 | -0.84 1.00 -0.68 -0.36 0.84 -0.71 0.87 1.00 0.00 173 | -0.82 1.00 -0.64 -0.28 0.90 -0.71 0.43 1.00 0.00 174 | -0.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 175 | -0.78 1.00 -0.56 -0.12 0.98 -0.71 0.60 1.00 0.00 176 | -0.76 1.00 -0.52 -0.04 1.00 -0.71 0.13 1.00 0.00 177 | -0.74 1.00 -0.48 0.04 1.00 -0.43 0.04 1.00 0.00 178 | -0.72 1.00 -0.44 0.12 0.98 -0.43 0.30 1.00 0.00 179 | -0.70 1.00 -0.40 0.20 0.95 -0.43 0.84 1.00 0.00 180 | -0.68 1.00 -0.36 0.28 0.90 -0.43 0.52 1.00 0.00 181 | -0.66 1.00 -0.32 0.36 0.84 -0.43 0.25 1.00 0.00 182 | -0.64 1.00 -0.28 0.44 0.77 -0.43 0.04 1.00 0.00 183 | -0.62 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 184 | -0.60 1.00 -0.20 0.60 0.59 -0.14 0.46 1.00 0.00 185 | -0.58 1.00 -0.16 0.68 0.48 -0.14 0.66 1.00 0.00 186 | -0.56 1.00 -0.12 0.76 0.37 -0.14 0.55 1.00 0.00 187 | -0.54 1.00 -0.08 0.84 0.25 -0.14 0.84 1.00 0.00 188 | -0.52 1.00 -0.04 0.92 0.13 -0.14 0.66 1.00 0.00 189 | -0.50 1.00 0.00 1.00 0.00 -0.14 0.97 1.00 0.00 190 | -0.48 -1.00 0.04 0.92 -0.13 0.14 0.94 1.00 0.00 191 | -0.46 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 192 | -0.44 -1.00 0.12 0.76 -0.37 0.14 0.27 1.00 0.00 193 | -0.42 -1.00 0.16 0.68 -0.48 0.14 0.62 1.00 0.00 194 | -0.40 -1.00 0.20 0.60 -0.59 0.14 0.22 1.00 0.00 195 | -0.38 -1.00 0.24 0.52 -0.68 0.14 0.12 1.00 0.00 196 | -0.36 -1.00 0.28 0.44 -0.77 0.43 0.51 1.00 0.00 197 | -0.34 -1.00 0.32 0.36 -0.84 0.43 0.54 1.00 0.00 198 | -0.32 -1.00 0.36 0.28 -0.90 0.43 0.36 1.00 0.00 199 | -0.30 -1.00 0.40 0.20 -0.95 0.43 0.19 1.00 0.00 200 | -0.28 -1.00 0.44 0.12 -0.98 0.43 0.73 1.00 0.00 201 | -0.26 -1.00 0.48 0.04 -1.00 0.43 0.58 1.00 0.00 202 | -0.24 -1.00 0.52 -0.04 -1.00 0.71 0.74 1.00 0.00 203 | -0.22 -1.00 0.56 -0.12 -0.98 0.71 0.48 1.00 0.00 204 | -0.20 -1.00 0.60 -0.20 -0.95 0.71 0.37 1.00 0.00 205 | -0.18 -1.00 0.64 -0.28 -0.90 0.71 0.49 1.00 0.00 206 | -0.16 -1.00 0.68 -0.36 -0.84 0.71 0.99 1.00 0.00 207 | -0.14 -1.00 0.72 -0.44 -0.77 0.71 0.38 1.00 0.00 208 | -0.12 -1.00 0.76 -0.52 -0.68 1.00 0.16 1.00 0.00 209 | -0.10 -1.00 0.80 -0.60 -0.59 1.00 0.20 1.00 0.00 210 | -0.08 -1.00 0.84 -0.68 -0.48 1.00 0.36 1.00 0.00 211 | -0.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 212 | -0.04 -1.00 0.92 -0.84 -0.25 1.00 0.31 1.00 0.00 213 | -0.02 -1.00 0.96 -0.92 -0.13 1.00 0.71 1.00 0.00 214 | 0.00 1.00 -1.00 -1.00 0.00 -1.00 0.35 1.00 0.00 215 | 0.02 1.00 -0.96 -0.92 0.13 -1.00 0.58 1.00 0.00 216 | 0.04 1.00 -0.92 -0.84 0.25 -1.00 0.38 1.00 0.00 217 | 0.06 1.00 -0.88 -0.76 0.37 -1.00 0.45 1.00 0.00 218 | 0.08 1.00 -0.84 -0.68 0.48 -1.00 0.96 1.00 0.00 219 | 0.10 1.00 -0.80 -0.60 0.59 -1.00 0.00 1.00 0.00 220 | 0.12 1.00 -0.76 -0.52 0.68 -1.00 0.59 1.00 0.00 221 | 0.14 1.00 -0.72 -0.44 0.77 -0.71 0.09 1.00 0.00 222 | 0.16 1.00 -0.68 -0.36 0.84 -0.71 0.93 1.00 0.00 223 | 0.18 1.00 -0.64 -0.28 0.90 -0.71 0.17 1.00 0.00 224 | 0.20 1.00 -0.60 -0.20 0.95 -0.71 0.32 1.00 0.00 225 | 0.22 1.00 -0.56 -0.12 0.98 -0.71 0.18 1.00 0.00 226 | 0.24 1.00 -0.52 -0.04 1.00 -0.71 0.87 1.00 0.00 227 | 0.26 1.00 -0.48 0.04 1.00 -0.43 0.67 1.00 0.00 228 | 0.28 1.00 -0.44 0.12 0.98 -0.43 0.22 1.00 0.00 229 | 0.30 1.00 -0.40 0.20 0.95 -0.43 0.83 1.00 0.00 230 | 0.32 1.00 -0.36 0.28 0.90 -0.43 0.65 1.00 0.00 231 | 0.34 1.00 -0.32 0.36 0.84 -0.43 0.32 1.00 0.00 232 | 0.36 1.00 -0.28 0.44 0.77 -0.43 0.30 1.00 0.00 233 | 0.38 1.00 -0.24 0.52 0.68 -0.14 0.90 1.00 0.00 234 | 0.40 1.00 -0.20 0.60 0.59 -0.14 0.86 1.00 0.00 235 | 0.42 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 236 | 0.44 1.00 -0.12 0.76 0.37 -0.14 0.68 1.00 0.00 237 | 0.46 1.00 -0.08 0.84 0.25 -0.14 0.06 1.00 0.00 238 | 0.48 1.00 -0.04 0.92 0.13 -0.14 0.27 1.00 0.00 239 | 0.50 -1.00 0.00 1.00 -0.00 0.14 0.00 1.00 0.00 240 | 0.52 -1.00 0.04 0.92 -0.13 0.14 0.62 1.00 0.00 241 | 0.54 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 242 | 0.56 -1.00 0.12 0.76 -0.37 0.14 0.13 1.00 0.00 243 | 0.58 -1.00 0.16 0.68 -0.48 0.14 0.96 1.00 0.00 244 | 0.60 -1.00 0.20 0.60 -0.59 0.14 0.83 1.00 0.00 245 | 0.62 -1.00 0.24 0.52 -0.68 0.14 0.11 1.00 0.00 246 | 0.64 -1.00 0.28 0.44 -0.77 0.43 0.56 1.00 0.00 247 | 0.66 -1.00 0.32 0.36 -0.84 0.43 0.44 1.00 0.00 248 | 0.68 -1.00 0.36 0.28 -0.90 0.43 0.05 1.00 0.00 249 | 0.70 -1.00 0.40 0.20 -0.95 0.43 0.35 1.00 0.00 250 | 0.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 251 | 0.74 -1.00 0.48 0.04 -1.00 0.43 0.71 1.00 0.00 252 | 0.76 -1.00 0.52 -0.04 -1.00 0.71 0.26 1.00 0.00 253 | 0.78 -1.00 0.56 -0.12 -0.98 0.71 0.79 1.00 0.00 254 | 0.80 -1.00 0.60 -0.20 -0.95 0.71 0.63 1.00 0.00 255 | 0.82 -1.00 0.64 -0.28 -0.90 0.71 0.54 1.00 0.00 256 | 0.84 -1.00 0.68 -0.36 -0.84 0.71 0.34 1.00 0.00 257 | 0.86 -1.00 0.72 -0.44 -0.77 0.71 0.59 1.00 0.00 258 | 0.88 -1.00 0.76 -0.52 -0.68 1.00 0.43 1.00 0.00 259 | 0.90 -1.00 0.80 -0.60 -0.59 1.00 0.24 1.00 0.00 260 | 0.92 -1.00 0.84 -0.68 -0.48 1.00 0.94 1.00 0.00 261 | 0.94 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 262 | 0.96 -1.00 0.92 -0.84 -0.25 1.00 0.77 1.00 0.00 263 | 0.98 -1.00 0.96 -0.92 -0.13 1.00 0.43 1.00 0.00 264 | 1.00 1.00 -1.00 -1.00 0.00 -1.00 0.16 1.00 0.00 265 | 1.02 1.00 -0.96 -0.92 0.13 -1.00 0.44 1.00 0.00 266 | 1.04 1.00 -0.92 -0.84 0.25 -1.00 0.76 1.00 0.00 267 | 1.06 1.00 -0.88 -0.76 0.37 -1.00 0.54 1.00 0.00 268 | 1.08 1.00 -0.84 -0.68 0.48 -1.00 0.52 1.00 0.00 269 | 1.10 1.00 -0.80 -0.60 0.59 -1.00 0.56 1.00 0.00 270 | 1.12 1.00 -0.76 -0.52 0.68 -1.00 0.25 1.00 0.00 271 | 1.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 272 | 1.16 1.00 -0.68 -0.36 0.84 -0.71 0.02 1.00 0.00 273 | 1.18 1.00 -0.64 -0.28 0.90 -0.71 0.85 1.00 0.00 274 | 1.20 1.00 -0.60 -0.20 0.95 -0.71 0.13 1.00 0.00 275 | 1.22 1.00 -0.56 -0.12 0.98 -0.71 0.05 1.00 0.00 276 | 1.24 1.00 -0.52 -0.04 1.00 -0.71 0.93 1.00 0.00 277 | 1.26 1.00 -0.48 0.04 1.00 -0.43 0.97 1.00 0.00 278 | 1.28 1.00 -0.44 0.12 0.98 -0.43 0.34 1.00 0.00 279 | 1.30 1.00 -0.40 0.20 0.95 -0.43 0.57 1.00 0.00 280 | 1.32 1.00 -0.36 0.28 0.90 -0.43 0.60 1.00 0.00 281 | 1.34 1.00 -0.32 0.36 0.84 -0.43 0.91 1.00 0.00 282 | 1.36 1.00 -0.28 0.44 0.77 -0.43 0.96 1.00 0.00 283 | 1.38 1.00 -0.24 0.52 0.68 -0.14 0.25 1.00 0.00 284 | 1.40 1.00 -0.20 0.60 0.59 -0.14 0.56 1.00 0.00 285 | 1.42 1.00 -0.16 0.68 0.48 -0.14 0.06 1.00 0.00 286 | 1.44 1.00 -0.12 0.76 0.37 -0.14 0.75 1.00 0.00 287 | 1.46 1.00 -0.08 0.84 0.25 -0.14 0.14 1.00 0.00 288 | 1.48 1.00 -0.04 0.92 0.13 -0.14 0.92 1.00 0.00 289 | 1.50 -1.00 0.00 1.00 -0.00 0.14 0.35 1.00 0.00 290 | 1.52 -1.00 0.04 0.92 -0.13 0.14 0.32 1.00 0.00 291 | 1.54 -1.00 0.08 0.84 -0.25 0.14 0.50 1.00 0.00 292 | 1.56 -1.00 0.12 0.76 -0.37 0.14 0.97 1.00 0.00 293 | 1.58 -1.00 0.16 0.68 -0.48 0.14 0.28 1.00 0.00 294 | 1.60 -1.00 0.20 0.60 -0.59 0.14 0.43 1.00 0.00 295 | 1.62 -1.00 0.24 0.52 -0.68 0.14 0.42 1.00 0.00 296 | 1.64 -1.00 0.28 0.44 -0.77 0.43 0.87 1.00 0.00 297 | 1.66 -1.00 0.32 0.36 -0.84 0.43 0.20 1.00 0.00 298 | 1.68 -1.00 0.36 0.28 -0.90 0.43 0.51 1.00 0.00 299 | 1.70 -1.00 0.40 0.20 -0.95 0.43 0.34 1.00 0.00 300 | 1.72 -1.00 0.44 0.12 -0.98 0.43 0.26 1.00 0.00 301 | 1.74 -1.00 0.48 0.04 -1.00 0.43 0.04 1.00 0.00 302 | 1.76 -1.00 0.52 -0.04 -1.00 0.71 0.04 1.00 0.00 303 | 1.78 -1.00 0.56 -0.12 -0.98 0.71 0.60 1.00 0.00 304 | 1.80 -1.00 0.60 -0.20 -0.95 0.71 0.82 1.00 0.00 305 | 1.82 -1.00 0.64 -0.28 -0.90 0.71 0.23 1.00 0.00 306 | 1.84 -1.00 0.68 -0.36 -0.84 0.71 0.93 1.00 0.00 307 | 1.86 -1.00 0.72 -0.44 -0.77 0.71 0.31 1.00 0.00 308 | 1.88 -1.00 0.76 -0.52 -0.68 1.00 0.50 1.00 0.00 309 | 1.90 -1.00 0.80 -0.60 -0.59 1.00 0.08 1.00 0.00 310 | 1.92 -1.00 0.84 -0.68 -0.48 1.00 0.47 1.00 0.00 311 | 1.94 -1.00 0.88 -0.76 -0.37 1.00 0.30 1.00 0.00 312 | 1.96 -1.00 0.92 -0.84 -0.25 1.00 0.63 1.00 0.00 313 | 1.98 -1.00 0.96 -0.92 -0.13 1.00 0.59 1.00 0.00 314 | 2.00 1.00 -1.00 -1.00 0.00 -1.00 0.36 1.00 0.00 315 | 2.02 1.00 -0.96 -0.92 0.13 -1.00 0.53 1.00 0.00 316 | 2.04 1.00 -0.92 -0.84 0.25 -1.00 0.87 1.00 0.00 317 | 2.06 1.00 -0.88 -0.76 0.37 -1.00 0.18 1.00 0.00 318 | 2.08 1.00 -0.84 -0.68 0.48 -1.00 0.24 1.00 0.00 319 | 2.10 1.00 -0.80 -0.60 0.59 -1.00 0.27 1.00 0.00 320 | 2.12 1.00 -0.76 -0.52 0.68 -1.00 0.31 1.00 0.00 321 | 2.14 1.00 -0.72 -0.44 0.77 -0.71 0.06 1.00 0.00 322 | 2.16 1.00 -0.68 -0.36 0.84 -0.71 0.64 1.00 0.00 323 | 2.18 1.00 -0.64 -0.28 0.90 -0.71 0.30 1.00 0.00 324 | 2.20 1.00 -0.60 -0.20 0.95 -0.71 0.75 1.00 0.00 325 | 2.22 1.00 -0.56 -0.12 0.98 -0.71 0.87 1.00 0.00 326 | 2.24 1.00 -0.52 -0.04 1.00 -0.71 0.96 1.00 0.00 327 | 2.26 1.00 -0.48 0.04 1.00 -0.43 0.48 1.00 0.00 328 | 2.28 1.00 -0.44 0.12 0.98 -0.43 0.54 1.00 0.00 329 | 2.30 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 330 | 2.32 1.00 -0.36 0.28 0.90 -0.43 0.64 1.00 0.00 331 | 2.34 1.00 -0.32 0.36 0.84 -0.43 0.72 1.00 0.00 332 | 2.36 1.00 -0.28 0.44 0.77 -0.43 0.07 1.00 0.00 333 | 2.38 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 334 | 2.40 1.00 -0.20 0.60 0.59 -0.14 0.51 1.00 0.00 335 | 2.42 1.00 -0.16 0.68 0.48 -0.14 0.47 1.00 0.00 336 | 2.44 1.00 -0.12 0.76 0.37 -0.14 0.93 1.00 0.00 337 | 2.46 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 338 | 2.48 1.00 -0.04 0.92 0.13 -0.14 0.80 1.00 0.00 339 | 2.50 -1.00 0.00 1.00 -0.00 0.14 0.10 1.00 0.00 340 | 2.52 -1.00 0.04 0.92 -0.13 0.14 0.61 1.00 0.00 341 | 2.54 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 342 | 2.56 -1.00 0.12 0.76 -0.37 0.14 0.40 1.00 0.00 343 | 2.58 -1.00 0.16 0.68 -0.48 0.14 0.90 1.00 0.00 344 | 2.60 -1.00 0.20 0.60 -0.59 0.14 0.77 1.00 0.00 345 | 2.62 -1.00 0.24 0.52 -0.68 0.14 0.20 1.00 0.00 346 | 2.64 -1.00 0.28 0.44 -0.77 0.43 0.54 1.00 0.00 347 | 2.66 -1.00 0.32 0.36 -0.84 0.43 0.88 1.00 0.00 348 | 2.68 -1.00 0.36 0.28 -0.90 0.43 1.00 1.00 0.00 349 | 2.70 -1.00 0.40 0.20 -0.95 0.43 0.38 1.00 0.00 350 | 2.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 351 | 2.74 -1.00 0.48 0.04 -1.00 0.43 0.92 1.00 0.00 352 | 2.76 -1.00 0.52 -0.04 -1.00 0.71 0.88 1.00 0.00 353 | 2.78 -1.00 0.56 -0.12 -0.98 0.71 0.90 1.00 0.00 354 | 2.80 -1.00 0.60 -0.20 -0.95 0.71 0.48 1.00 0.00 355 | 2.82 -1.00 0.64 -0.28 -0.90 0.71 0.57 1.00 0.00 356 | 2.84 -1.00 0.68 -0.36 -0.84 0.71 0.60 1.00 0.00 357 | 2.86 -1.00 0.72 -0.44 -0.77 0.71 0.49 1.00 0.00 358 | 2.88 -1.00 0.76 -0.52 -0.68 1.00 0.60 1.00 0.00 359 | 2.90 -1.00 0.80 -0.60 -0.59 1.00 0.79 1.00 0.00 360 | 2.92 -1.00 0.84 -0.68 -0.48 1.00 0.35 1.00 0.00 361 | 2.94 -1.00 0.88 -0.76 -0.37 1.00 0.39 1.00 0.00 362 | 2.96 -1.00 0.92 -0.84 -0.25 1.00 0.85 1.00 0.00 363 | 2.98 -1.00 0.96 -0.92 -0.13 1.00 0.84 1.00 0.00 364 | 3.00 1.00 -1.00 -1.00 0.00 -1.00 0.30 1.00 0.00 365 | 3.02 1.00 -0.96 -0.92 0.13 -1.00 0.76 1.00 0.00 366 | 3.04 1.00 -0.92 -0.84 0.25 -1.00 0.07 1.00 0.00 367 | 3.06 1.00 -0.88 -0.76 0.37 -1.00 0.09 1.00 0.00 368 | 3.08 1.00 -0.84 -0.68 0.48 -1.00 0.22 1.00 0.00 369 | 3.10 1.00 -0.80 -0.60 0.59 -1.00 0.86 1.00 0.00 370 | 3.12 1.00 -0.76 -0.52 0.68 -1.00 0.04 1.00 0.00 371 | 3.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 372 | 3.16 1.00 -0.68 -0.36 0.84 -0.71 0.83 1.00 0.00 373 | 3.18 1.00 -0.64 -0.28 0.90 -0.71 0.23 1.00 0.00 374 | 3.20 1.00 -0.60 -0.20 0.95 -0.71 0.49 1.00 0.00 375 | 3.22 1.00 -0.56 -0.12 0.98 -0.71 0.77 1.00 0.00 376 | 3.24 1.00 -0.52 -0.04 1.00 -0.71 0.78 1.00 0.00 377 | 3.26 1.00 -0.48 0.04 1.00 -0.43 0.35 1.00 0.00 378 | 3.28 1.00 -0.44 0.12 0.98 -0.43 0.99 1.00 0.00 379 | 3.30 1.00 -0.40 0.20 0.95 -0.43 0.14 1.00 0.00 380 | 3.32 1.00 -0.36 0.28 0.90 -0.43 0.05 1.00 0.00 381 | 3.34 1.00 -0.32 0.36 0.84 -0.43 0.70 1.00 0.00 382 | 3.36 1.00 -0.28 0.44 0.77 -0.43 0.82 1.00 0.00 383 | 3.38 1.00 -0.24 0.52 0.68 -0.14 0.62 1.00 0.00 384 | 3.40 1.00 -0.20 0.60 0.59 -0.14 0.01 1.00 0.00 385 | 3.42 1.00 -0.16 0.68 0.48 -0.14 0.69 1.00 0.00 386 | 3.44 1.00 -0.12 0.76 0.37 -0.14 0.19 1.00 0.00 387 | 3.46 1.00 -0.08 0.84 0.25 -0.14 0.39 1.00 0.00 388 | 3.48 1.00 -0.04 0.92 0.13 -0.14 0.39 1.00 0.00 389 | 3.50 -1.00 0.00 1.00 -0.00 0.14 0.46 1.00 0.00 390 | 3.52 -1.00 0.04 0.92 -0.13 0.14 0.75 1.00 0.00 391 | 3.54 -1.00 0.08 0.84 -0.25 0.14 0.21 1.00 0.00 392 | 3.56 -1.00 0.12 0.76 -0.37 0.14 0.85 1.00 0.00 393 | 3.58 -1.00 0.16 0.68 -0.48 0.14 0.92 1.00 0.00 394 | 3.60 -1.00 0.20 0.60 -0.59 0.14 0.78 1.00 0.00 395 | 3.62 -1.00 0.24 0.52 -0.68 0.14 0.41 1.00 0.00 396 | 3.64 -1.00 0.28 0.44 -0.77 0.43 0.90 1.00 0.00 397 | 3.66 -1.00 0.32 0.36 -0.84 0.43 0.71 1.00 0.00 398 | 3.68 -1.00 0.36 0.28 -0.90 0.43 0.94 1.00 0.00 399 | 3.70 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 400 | 3.72 -1.00 0.44 0.12 -0.98 0.43 0.91 1.00 0.00 401 | 3.74 -1.00 0.48 0.04 -1.00 0.43 0.79 1.00 0.00 402 | 3.76 -1.00 0.52 -0.04 -1.00 0.71 0.64 1.00 0.00 403 | 3.78 -1.00 0.56 -0.12 -0.98 0.71 0.08 1.00 0.00 404 | 3.80 -1.00 0.60 -0.20 -0.95 0.71 0.49 1.00 0.00 405 | 3.82 -1.00 0.64 -0.28 -0.90 0.71 0.50 1.00 0.00 406 | 3.84 -1.00 0.68 -0.36 -0.84 0.71 0.86 1.00 0.00 407 | 3.86 -1.00 0.72 -0.44 -0.77 0.71 0.61 1.00 0.00 408 | 3.88 -1.00 0.76 -0.52 -0.68 1.00 0.42 1.00 0.00 409 | 3.90 -1.00 0.80 -0.60 -0.59 1.00 0.25 1.00 0.00 410 | 3.92 -1.00 0.84 -0.68 -0.48 1.00 0.06 1.00 0.00 411 | 3.94 -1.00 0.88 -0.76 -0.37 1.00 0.97 1.00 0.00 412 | 3.96 -1.00 0.92 -0.84 -0.25 1.00 0.81 1.00 0.00 413 | 3.98 -1.00 0.96 -0.92 -0.13 1.00 0.57 1.00 0.00 414 | 415 | done... 416 | -------------------------------------------------------------------------------- /examples/functionGeneratorPerformance/performance_0.2.7.txt: -------------------------------------------------------------------------------- 1 | 2 | functionGeneratorPerformance.ino 3 | FUNCTIONGENERATOR_LIB_VERSION: 0.2.7 4 | 5 | indicative output Arduino UNO 1.8.19, 16 MHz. 6 | 7 | | wave form name | usec | max calls/sec | 8 | |:---------------|-------:|----------------:| 9 | | square | 54.57 | 18325.49 | 10 | | sawtooth | 61.69 | 16210.61 | 11 | | triangle | 79.80 | 12531.96 | 12 | | sinus | 166.38 | 6010.37 | 13 | | stair | 80.86 | 12366.38 | 14 | | random | 42.61 | 23466.69 | 15 | | random_DC | 67.18 | 14885.12 | 16 | | line | 0.76 | 1322751.37 | 17 | | zero | 0.75 | 1324854.25 | 18 | | sinusDiode | 169.93 | 5884.79 | 19 | | sinusRectified | 169.49 | 5900.03 | 20 | | trapezium1 | 100.98 | 9903.30 | 21 | | trapezium2 | 143.98 | 6945.58 | 22 | | heartBeat | 128.52 | 7780.77 | 23 | | freeWave | 75.52 | 13241.31 | 24 | 25 | 26 | 27 | t sqr saw tri sin str rnd line zero sinD sinR trap 28 | -4.00 -1.00 1.00 -1.00 -0.00 1.00 0.50 1.00 0.00 0.00 0.00 -1.00 29 | -3.98 1.00 -0.96 -0.92 0.13 -1.00 0.06 1.00 0.00 0.13 0.13 -1.00 30 | -3.96 1.00 -0.92 -0.84 0.25 -1.00 0.34 1.00 0.00 0.25 0.25 -1.00 31 | -3.94 1.00 -0.88 -0.76 0.37 -1.00 0.33 1.00 0.00 0.37 0.37 -1.00 32 | -3.92 1.00 -0.84 -0.68 0.48 -1.00 0.95 1.00 0.00 0.48 0.48 -1.00 33 | -3.90 1.00 -0.80 -0.60 0.59 -1.00 0.75 1.00 0.00 0.59 0.59 -1.00 34 | -3.88 1.00 -0.76 -0.52 0.68 -1.00 0.20 1.00 0.00 0.68 0.68 -1.00 35 | -3.86 1.00 -0.72 -0.44 0.77 -0.71 0.33 1.00 0.00 0.77 0.77 -1.00 36 | -3.84 1.00 -0.68 -0.36 0.84 -0.71 0.25 1.00 0.00 0.84 0.84 -1.00 37 | -3.82 1.00 -0.64 -0.28 0.90 -0.71 0.39 1.00 0.00 0.90 0.90 -1.00 38 | -3.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 0.95 0.95 -1.00 39 | -3.78 1.00 -0.56 -0.12 0.98 -0.71 0.95 1.00 0.00 0.98 0.98 -1.00 40 | -3.76 1.00 -0.52 -0.04 1.00 -0.71 0.56 1.00 0.00 1.00 1.00 -1.00 41 | -3.74 1.00 -0.48 0.04 1.00 -0.43 0.64 1.00 0.00 1.00 1.00 -0.92 42 | -3.72 1.00 -0.44 0.12 0.98 -0.43 0.17 1.00 0.00 0.98 0.98 -0.76 43 | -3.70 1.00 -0.40 0.20 0.95 -0.43 0.78 1.00 0.00 0.95 0.95 -0.60 44 | -3.68 1.00 -0.36 0.28 0.90 -0.43 0.02 1.00 0.00 0.90 0.90 -0.44 45 | -3.66 1.00 -0.32 0.36 0.84 -0.43 0.31 1.00 0.00 0.84 0.84 -0.28 46 | -3.64 1.00 -0.28 0.44 0.77 -0.43 0.49 1.00 0.00 0.77 0.77 -0.12 47 | -3.62 1.00 -0.24 0.52 0.68 -0.14 0.09 1.00 0.00 0.68 0.68 0.04 48 | -3.60 1.00 -0.20 0.60 0.59 -0.14 0.21 1.00 0.00 0.59 0.59 0.20 49 | -3.58 1.00 -0.16 0.68 0.48 -0.14 0.82 1.00 0.00 0.48 0.48 0.36 50 | -3.56 1.00 -0.12 0.76 0.37 -0.14 0.51 1.00 0.00 0.37 0.37 0.52 51 | -3.54 1.00 -0.08 0.84 0.25 -0.14 0.74 1.00 0.00 0.25 0.25 0.68 52 | -3.52 1.00 -0.04 0.92 0.13 -0.14 0.20 1.00 0.00 0.13 0.13 0.84 53 | -3.50 1.00 0.00 1.00 0.00 -0.14 0.27 1.00 0.00 0.00 0.00 1.00 54 | -3.48 -1.00 0.04 0.92 -0.13 0.14 0.15 1.00 0.00 0.00 0.13 1.00 55 | -3.46 -1.00 0.08 0.84 -0.25 0.14 0.67 1.00 0.00 0.00 0.25 1.00 56 | -3.44 -1.00 0.12 0.76 -0.37 0.14 0.54 1.00 0.00 0.00 0.37 1.00 57 | -3.42 -1.00 0.16 0.68 -0.48 0.14 0.44 1.00 0.00 0.00 0.48 1.00 58 | -3.40 -1.00 0.20 0.60 -0.59 0.14 0.85 1.00 0.00 0.00 0.59 1.00 59 | -3.38 -1.00 0.24 0.52 -0.68 0.14 0.90 1.00 0.00 0.00 0.68 1.00 60 | -3.36 -1.00 0.28 0.44 -0.77 0.43 0.43 1.00 0.00 0.00 0.77 1.00 61 | -3.34 -1.00 0.32 0.36 -0.84 0.43 0.11 1.00 0.00 0.00 0.84 1.00 62 | -3.32 -1.00 0.36 0.28 -0.90 0.43 0.91 1.00 0.00 0.00 0.90 1.00 63 | -3.30 -1.00 0.40 0.20 -0.95 0.43 0.79 1.00 0.00 0.00 0.95 1.00 64 | -3.28 -1.00 0.44 0.12 -0.98 0.43 0.17 1.00 0.00 0.00 0.98 1.00 65 | -3.26 -1.00 0.48 0.04 -1.00 0.43 0.72 1.00 0.00 0.00 1.00 1.00 66 | -3.24 -1.00 0.52 -0.04 -1.00 0.71 0.77 1.00 0.00 0.00 1.00 0.92 67 | -3.22 -1.00 0.56 -0.12 -0.98 0.71 0.86 1.00 0.00 0.00 0.98 0.76 68 | -3.20 -1.00 0.60 -0.20 -0.95 0.71 0.50 1.00 0.00 0.00 0.95 0.60 69 | -3.18 -1.00 0.64 -0.28 -0.90 0.71 0.42 1.00 0.00 0.00 0.90 0.44 70 | -3.16 -1.00 0.68 -0.36 -0.84 0.71 0.73 1.00 0.00 0.00 0.84 0.28 71 | -3.14 -1.00 0.72 -0.44 -0.77 0.71 0.01 1.00 0.00 0.00 0.77 0.12 72 | -3.12 -1.00 0.76 -0.52 -0.68 1.00 0.52 1.00 0.00 0.00 0.68 -0.04 73 | -3.10 -1.00 0.80 -0.60 -0.59 1.00 0.72 1.00 0.00 0.00 0.59 -0.20 74 | -3.08 -1.00 0.84 -0.68 -0.48 1.00 0.61 1.00 0.00 0.00 0.48 -0.36 75 | -3.06 -1.00 0.88 -0.76 -0.37 1.00 0.41 1.00 0.00 0.00 0.37 -0.52 76 | -3.04 -1.00 0.92 -0.84 -0.25 1.00 0.68 1.00 0.00 0.00 0.25 -0.68 77 | -3.02 -1.00 0.96 -0.92 -0.13 1.00 0.34 1.00 0.00 0.00 0.13 -0.84 78 | -3.00 -1.00 1.00 -1.00 -0.00 1.00 0.90 1.00 0.00 0.00 0.00 -1.00 79 | -2.98 1.00 -0.96 -0.92 0.13 -1.00 0.43 1.00 0.00 0.13 0.13 -1.00 80 | -2.96 1.00 -0.92 -0.84 0.25 -1.00 0.47 1.00 0.00 0.25 0.25 -1.00 81 | -2.94 1.00 -0.88 -0.76 0.37 -1.00 0.51 1.00 0.00 0.37 0.37 -1.00 82 | -2.92 1.00 -0.84 -0.68 0.48 -1.00 0.29 1.00 0.00 0.48 0.48 -1.00 83 | -2.90 1.00 -0.80 -0.60 0.59 -1.00 0.42 1.00 0.00 0.59 0.59 -1.00 84 | -2.88 1.00 -0.76 -0.52 0.68 -1.00 0.02 1.00 0.00 0.68 0.68 -1.00 85 | -2.86 1.00 -0.72 -0.44 0.77 -0.71 0.91 1.00 0.00 0.77 0.77 -1.00 86 | -2.84 1.00 -0.68 -0.36 0.84 -0.71 0.00 1.00 0.00 0.84 0.84 -1.00 87 | -2.82 1.00 -0.64 -0.28 0.90 -0.71 0.22 1.00 0.00 0.90 0.90 -1.00 88 | -2.80 1.00 -0.60 -0.20 0.95 -0.71 0.55 1.00 0.00 0.95 0.95 -1.00 89 | -2.78 1.00 -0.56 -0.12 0.98 -0.71 0.96 1.00 0.00 0.98 0.98 -1.00 90 | -2.76 1.00 -0.52 -0.04 1.00 -0.71 0.30 1.00 0.00 1.00 1.00 -1.00 91 | -2.74 1.00 -0.48 0.04 1.00 -0.43 0.19 1.00 0.00 1.00 1.00 -0.92 92 | -2.72 1.00 -0.44 0.12 0.98 -0.43 0.62 1.00 0.00 0.98 0.98 -0.76 93 | -2.70 1.00 -0.40 0.20 0.95 -0.43 0.61 1.00 0.00 0.95 0.95 -0.60 94 | -2.68 1.00 -0.36 0.28 0.90 -0.43 0.28 1.00 0.00 0.90 0.90 -0.44 95 | -2.66 1.00 -0.32 0.36 0.84 -0.43 0.85 1.00 0.00 0.84 0.84 -0.28 96 | -2.64 1.00 -0.28 0.44 0.77 -0.43 0.22 1.00 0.00 0.77 0.77 -0.12 97 | -2.62 1.00 -0.24 0.52 0.68 -0.14 0.66 1.00 0.00 0.68 0.68 0.04 98 | -2.60 1.00 -0.20 0.60 0.59 -0.14 0.62 1.00 0.00 0.59 0.59 0.20 99 | -2.58 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 0.48 0.48 0.36 100 | -2.56 1.00 -0.12 0.76 0.37 -0.14 0.38 1.00 0.00 0.37 0.37 0.52 101 | -2.54 1.00 -0.08 0.84 0.25 -0.14 0.00 1.00 0.00 0.25 0.25 0.68 102 | -2.52 1.00 -0.04 0.92 0.13 -0.14 0.09 1.00 0.00 0.13 0.13 0.84 103 | -2.50 1.00 0.00 1.00 0.00 -0.14 0.56 1.00 0.00 0.00 0.00 1.00 104 | -2.48 -1.00 0.04 0.92 -0.13 0.14 0.67 1.00 0.00 0.00 0.13 1.00 105 | -2.46 -1.00 0.08 0.84 -0.25 0.14 0.66 1.00 0.00 0.00 0.25 1.00 106 | -2.44 -1.00 0.12 0.76 -0.37 0.14 0.15 1.00 0.00 0.00 0.37 1.00 107 | -2.42 -1.00 0.16 0.68 -0.48 0.14 0.71 1.00 0.00 0.00 0.48 1.00 108 | -2.40 -1.00 0.20 0.60 -0.59 0.14 0.75 1.00 0.00 0.00 0.59 1.00 109 | -2.38 -1.00 0.24 0.52 -0.68 0.14 0.13 1.00 0.00 0.00 0.68 1.00 110 | -2.36 -1.00 0.28 0.44 -0.77 0.43 0.99 1.00 0.00 0.00 0.77 1.00 111 | -2.34 -1.00 0.32 0.36 -0.84 0.43 0.01 1.00 0.00 0.00 0.84 1.00 112 | -2.32 -1.00 0.36 0.28 -0.90 0.43 0.92 1.00 0.00 0.00 0.90 1.00 113 | -2.30 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 0.00 0.95 1.00 114 | -2.28 -1.00 0.44 0.12 -0.98 0.43 0.38 1.00 0.00 0.00 0.98 1.00 115 | -2.26 -1.00 0.48 0.04 -1.00 0.43 0.87 1.00 0.00 0.00 1.00 1.00 116 | -2.24 -1.00 0.52 -0.04 -1.00 0.71 0.42 1.00 0.00 0.00 1.00 0.92 117 | -2.22 -1.00 0.56 -0.12 -0.98 0.71 0.88 1.00 0.00 0.00 0.98 0.76 118 | -2.20 -1.00 0.60 -0.20 -0.95 0.71 0.71 1.00 0.00 0.00 0.95 0.60 119 | -2.18 -1.00 0.64 -0.28 -0.90 0.71 0.97 1.00 0.00 0.00 0.90 0.44 120 | -2.16 -1.00 0.68 -0.36 -0.84 0.71 0.27 1.00 0.00 0.00 0.84 0.28 121 | -2.14 -1.00 0.72 -0.44 -0.77 0.71 0.94 1.00 0.00 0.00 0.77 0.12 122 | -2.12 -1.00 0.76 -0.52 -0.68 1.00 0.92 1.00 0.00 0.00 0.68 -0.04 123 | -2.10 -1.00 0.80 -0.60 -0.59 1.00 0.02 1.00 0.00 0.00 0.59 -0.20 124 | -2.08 -1.00 0.84 -0.68 -0.48 1.00 0.26 1.00 0.00 0.00 0.48 -0.36 125 | -2.06 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 0.00 0.37 -0.52 126 | -2.04 -1.00 0.92 -0.84 -0.25 1.00 0.93 1.00 0.00 0.00 0.25 -0.68 127 | -2.02 -1.00 0.96 -0.92 -0.13 1.00 0.25 1.00 0.00 0.00 0.13 -0.84 128 | -2.00 -1.00 1.00 -1.00 -0.00 1.00 0.77 1.00 0.00 0.00 0.00 -1.00 129 | -1.98 1.00 -0.96 -0.92 0.13 -1.00 0.71 1.00 0.00 0.13 0.13 -1.00 130 | -1.96 1.00 -0.92 -0.84 0.25 -1.00 0.86 1.00 0.00 0.25 0.25 -1.00 131 | -1.94 1.00 -0.88 -0.76 0.37 -1.00 0.15 1.00 0.00 0.37 0.37 -1.00 132 | -1.92 1.00 -0.84 -0.68 0.48 -1.00 0.80 1.00 0.00 0.48 0.48 -1.00 133 | -1.90 1.00 -0.80 -0.60 0.59 -1.00 0.17 1.00 0.00 0.59 0.59 -1.00 134 | -1.88 1.00 -0.76 -0.52 0.68 -1.00 0.18 1.00 0.00 0.68 0.68 -1.00 135 | -1.86 1.00 -0.72 -0.44 0.77 -0.71 0.54 1.00 0.00 0.77 0.77 -1.00 136 | -1.84 1.00 -0.68 -0.36 0.84 -0.71 0.13 1.00 0.00 0.84 0.84 -1.00 137 | -1.82 1.00 -0.64 -0.28 0.90 -0.71 0.71 1.00 0.00 0.90 0.90 -1.00 138 | -1.80 1.00 -0.60 -0.20 0.95 -0.71 0.24 1.00 0.00 0.95 0.95 -1.00 139 | -1.78 1.00 -0.56 -0.12 0.98 -0.71 0.73 1.00 0.00 0.98 0.98 -1.00 140 | -1.76 1.00 -0.52 -0.04 1.00 -0.71 0.08 1.00 0.00 1.00 1.00 -1.00 141 | -1.74 1.00 -0.48 0.04 1.00 -0.43 0.13 1.00 0.00 1.00 1.00 -0.92 142 | -1.72 1.00 -0.44 0.12 0.98 -0.43 0.28 1.00 0.00 0.98 0.98 -0.76 143 | -1.70 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 0.95 0.95 -0.60 144 | -1.68 1.00 -0.36 0.28 0.90 -0.43 0.53 1.00 0.00 0.90 0.90 -0.44 145 | -1.66 1.00 -0.32 0.36 0.84 -0.43 0.48 1.00 0.00 0.84 0.84 -0.28 146 | -1.64 1.00 -0.28 0.44 0.77 -0.43 0.38 1.00 0.00 0.77 0.77 -0.12 147 | -1.62 1.00 -0.24 0.52 0.68 -0.14 0.28 1.00 0.00 0.68 0.68 0.04 148 | -1.60 1.00 -0.20 0.60 0.59 -0.14 0.06 1.00 0.00 0.59 0.59 0.20 149 | -1.58 1.00 -0.16 0.68 0.48 -0.14 0.84 1.00 0.00 0.48 0.48 0.36 150 | -1.56 1.00 -0.12 0.76 0.37 -0.14 0.35 1.00 0.00 0.37 0.37 0.52 151 | -1.54 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 0.25 0.25 0.68 152 | -1.52 1.00 -0.04 0.92 0.13 -0.14 0.51 1.00 0.00 0.13 0.13 0.84 153 | -1.50 1.00 0.00 1.00 0.00 -0.14 0.37 1.00 0.00 0.00 0.00 1.00 154 | -1.48 -1.00 0.04 0.92 -0.13 0.14 0.40 1.00 0.00 0.00 0.13 1.00 155 | -1.46 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 0.00 0.25 1.00 156 | -1.44 -1.00 0.12 0.76 -0.37 0.14 0.30 1.00 0.00 0.00 0.37 1.00 157 | -1.42 -1.00 0.16 0.68 -0.48 0.14 0.76 1.00 0.00 0.00 0.48 1.00 158 | -1.40 -1.00 0.20 0.60 -0.59 0.14 0.59 1.00 0.00 0.00 0.59 1.00 159 | -1.38 -1.00 0.24 0.52 -0.68 0.14 0.32 1.00 0.00 0.00 0.68 1.00 160 | -1.36 -1.00 0.28 0.44 -0.77 0.43 0.79 1.00 0.00 0.00 0.77 1.00 161 | -1.34 -1.00 0.32 0.36 -0.84 0.43 0.63 1.00 0.00 0.00 0.84 1.00 162 | -1.32 -1.00 0.36 0.28 -0.90 0.43 0.20 1.00 0.00 0.00 0.90 1.00 163 | -1.30 -1.00 0.40 0.20 -0.95 0.43 0.83 1.00 0.00 0.00 0.95 1.00 164 | -1.28 -1.00 0.44 0.12 -0.98 0.43 0.25 1.00 0.00 0.00 0.98 1.00 165 | -1.26 -1.00 0.48 0.04 -1.00 0.43 0.36 1.00 0.00 0.00 1.00 1.00 166 | -1.24 -1.00 0.52 -0.04 -1.00 0.71 0.25 1.00 0.00 0.00 1.00 0.92 167 | -1.22 -1.00 0.56 -0.12 -0.98 0.71 0.25 1.00 0.00 0.00 0.98 0.76 168 | -1.20 -1.00 0.60 -0.20 -0.95 0.71 0.18 1.00 0.00 0.00 0.95 0.60 169 | -1.18 -1.00 0.64 -0.28 -0.90 0.71 0.30 1.00 0.00 0.00 0.90 0.44 170 | -1.16 -1.00 0.68 -0.36 -0.84 0.71 0.09 1.00 0.00 0.00 0.84 0.28 171 | -1.14 -1.00 0.72 -0.44 -0.77 0.71 0.32 1.00 0.00 0.00 0.77 0.12 172 | -1.12 -1.00 0.76 -0.52 -0.68 1.00 0.69 1.00 0.00 0.00 0.68 -0.04 173 | -1.10 -1.00 0.80 -0.60 -0.59 1.00 0.96 1.00 0.00 0.00 0.59 -0.20 174 | -1.08 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 0.00 0.48 -0.36 175 | -1.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 0.00 0.37 -0.52 176 | -1.04 -1.00 0.92 -0.84 -0.25 1.00 0.21 1.00 0.00 0.00 0.25 -0.68 177 | -1.02 -1.00 0.96 -0.92 -0.13 1.00 0.87 1.00 0.00 0.00 0.13 -0.84 178 | -1.00 -1.00 1.00 -1.00 -0.00 1.00 0.57 1.00 0.00 0.00 0.00 -1.00 179 | -0.98 1.00 -0.96 -0.92 0.13 -1.00 0.42 1.00 0.00 0.13 0.13 -1.00 180 | -0.96 1.00 -0.92 -0.84 0.25 -1.00 0.81 1.00 0.00 0.25 0.25 -1.00 181 | -0.94 1.00 -0.88 -0.76 0.37 -1.00 0.39 1.00 0.00 0.37 0.37 -1.00 182 | -0.92 1.00 -0.84 -0.68 0.48 -1.00 0.71 1.00 0.00 0.48 0.48 -1.00 183 | -0.90 1.00 -0.80 -0.60 0.59 -1.00 0.47 1.00 0.00 0.59 0.59 -1.00 184 | -0.88 1.00 -0.76 -0.52 0.68 -1.00 0.56 1.00 0.00 0.68 0.68 -1.00 185 | -0.86 1.00 -0.72 -0.44 0.77 -0.71 0.86 1.00 0.00 0.77 0.77 -1.00 186 | -0.84 1.00 -0.68 -0.36 0.84 -0.71 0.87 1.00 0.00 0.84 0.84 -1.00 187 | -0.82 1.00 -0.64 -0.28 0.90 -0.71 0.43 1.00 0.00 0.90 0.90 -1.00 188 | -0.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 0.95 0.95 -1.00 189 | -0.78 1.00 -0.56 -0.12 0.98 -0.71 0.60 1.00 0.00 0.98 0.98 -1.00 190 | -0.76 1.00 -0.52 -0.04 1.00 -0.71 0.13 1.00 0.00 1.00 1.00 -1.00 191 | -0.74 1.00 -0.48 0.04 1.00 -0.43 0.04 1.00 0.00 1.00 1.00 -0.92 192 | -0.72 1.00 -0.44 0.12 0.98 -0.43 0.30 1.00 0.00 0.98 0.98 -0.76 193 | -0.70 1.00 -0.40 0.20 0.95 -0.43 0.84 1.00 0.00 0.95 0.95 -0.60 194 | -0.68 1.00 -0.36 0.28 0.90 -0.43 0.52 1.00 0.00 0.90 0.90 -0.44 195 | -0.66 1.00 -0.32 0.36 0.84 -0.43 0.25 1.00 0.00 0.84 0.84 -0.28 196 | -0.64 1.00 -0.28 0.44 0.77 -0.43 0.04 1.00 0.00 0.77 0.77 -0.12 197 | -0.62 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 0.68 0.68 0.04 198 | -0.60 1.00 -0.20 0.60 0.59 -0.14 0.46 1.00 0.00 0.59 0.59 0.20 199 | -0.58 1.00 -0.16 0.68 0.48 -0.14 0.66 1.00 0.00 0.48 0.48 0.36 200 | -0.56 1.00 -0.12 0.76 0.37 -0.14 0.55 1.00 0.00 0.37 0.37 0.52 201 | -0.54 1.00 -0.08 0.84 0.25 -0.14 0.84 1.00 0.00 0.25 0.25 0.68 202 | -0.52 1.00 -0.04 0.92 0.13 -0.14 0.66 1.00 0.00 0.13 0.13 0.84 203 | -0.50 1.00 0.00 1.00 0.00 -0.14 0.97 1.00 0.00 0.00 0.00 1.00 204 | -0.48 -1.00 0.04 0.92 -0.13 0.14 0.94 1.00 0.00 0.00 0.13 1.00 205 | -0.46 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 0.00 0.25 1.00 206 | -0.44 -1.00 0.12 0.76 -0.37 0.14 0.27 1.00 0.00 0.00 0.37 1.00 207 | -0.42 -1.00 0.16 0.68 -0.48 0.14 0.62 1.00 0.00 0.00 0.48 1.00 208 | -0.40 -1.00 0.20 0.60 -0.59 0.14 0.22 1.00 0.00 0.00 0.59 1.00 209 | -0.38 -1.00 0.24 0.52 -0.68 0.14 0.12 1.00 0.00 0.00 0.68 1.00 210 | -0.36 -1.00 0.28 0.44 -0.77 0.43 0.51 1.00 0.00 0.00 0.77 1.00 211 | -0.34 -1.00 0.32 0.36 -0.84 0.43 0.54 1.00 0.00 0.00 0.84 1.00 212 | -0.32 -1.00 0.36 0.28 -0.90 0.43 0.36 1.00 0.00 0.00 0.90 1.00 213 | -0.30 -1.00 0.40 0.20 -0.95 0.43 0.19 1.00 0.00 0.00 0.95 1.00 214 | -0.28 -1.00 0.44 0.12 -0.98 0.43 0.73 1.00 0.00 0.00 0.98 1.00 215 | -0.26 -1.00 0.48 0.04 -1.00 0.43 0.58 1.00 0.00 0.00 1.00 1.00 216 | -0.24 -1.00 0.52 -0.04 -1.00 0.71 0.74 1.00 0.00 0.00 1.00 0.92 217 | -0.22 -1.00 0.56 -0.12 -0.98 0.71 0.48 1.00 0.00 0.00 0.98 0.76 218 | -0.20 -1.00 0.60 -0.20 -0.95 0.71 0.37 1.00 0.00 0.00 0.95 0.60 219 | -0.18 -1.00 0.64 -0.28 -0.90 0.71 0.49 1.00 0.00 0.00 0.90 0.44 220 | -0.16 -1.00 0.68 -0.36 -0.84 0.71 0.99 1.00 0.00 0.00 0.84 0.28 221 | -0.14 -1.00 0.72 -0.44 -0.77 0.71 0.38 1.00 0.00 0.00 0.77 0.12 222 | -0.12 -1.00 0.76 -0.52 -0.68 1.00 0.16 1.00 0.00 0.00 0.68 -0.04 223 | -0.10 -1.00 0.80 -0.60 -0.59 1.00 0.20 1.00 0.00 0.00 0.59 -0.20 224 | -0.08 -1.00 0.84 -0.68 -0.48 1.00 0.36 1.00 0.00 0.00 0.48 -0.36 225 | -0.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 0.00 0.37 -0.52 226 | -0.04 -1.00 0.92 -0.84 -0.25 1.00 0.31 1.00 0.00 0.00 0.25 -0.68 227 | -0.02 -1.00 0.96 -0.92 -0.13 1.00 0.71 1.00 0.00 0.00 0.13 -0.84 228 | 0.00 1.00 -1.00 -1.00 0.00 -1.00 0.35 1.00 0.00 0.00 0.00 -1.00 229 | 0.02 1.00 -0.96 -0.92 0.13 -1.00 0.58 1.00 0.00 0.13 0.13 -0.84 230 | 0.04 1.00 -0.92 -0.84 0.25 -1.00 0.38 1.00 0.00 0.25 0.25 -0.68 231 | 0.06 1.00 -0.88 -0.76 0.37 -1.00 0.45 1.00 0.00 0.37 0.37 -0.52 232 | 0.08 1.00 -0.84 -0.68 0.48 -1.00 0.96 1.00 0.00 0.48 0.48 -0.36 233 | 0.10 1.00 -0.80 -0.60 0.59 -1.00 0.00 1.00 0.00 0.59 0.59 -0.20 234 | 0.12 1.00 -0.76 -0.52 0.68 -1.00 0.59 1.00 0.00 0.68 0.68 -0.04 235 | 0.14 1.00 -0.72 -0.44 0.77 -0.71 0.09 1.00 0.00 0.77 0.77 0.12 236 | 0.16 1.00 -0.68 -0.36 0.84 -0.71 0.93 1.00 0.00 0.84 0.84 0.28 237 | 0.18 1.00 -0.64 -0.28 0.90 -0.71 0.17 1.00 0.00 0.90 0.90 0.44 238 | 0.20 1.00 -0.60 -0.20 0.95 -0.71 0.32 1.00 0.00 0.95 0.95 0.60 239 | 0.22 1.00 -0.56 -0.12 0.98 -0.71 0.18 1.00 0.00 0.98 0.98 0.76 240 | 0.24 1.00 -0.52 -0.04 1.00 -0.71 0.87 1.00 0.00 1.00 1.00 0.92 241 | 0.26 1.00 -0.48 0.04 1.00 -0.43 0.67 1.00 0.00 1.00 1.00 1.00 242 | 0.28 1.00 -0.44 0.12 0.98 -0.43 0.22 1.00 0.00 0.98 0.98 1.00 243 | 0.30 1.00 -0.40 0.20 0.95 -0.43 0.83 1.00 0.00 0.95 0.95 1.00 244 | 0.32 1.00 -0.36 0.28 0.90 -0.43 0.65 1.00 0.00 0.90 0.90 1.00 245 | 0.34 1.00 -0.32 0.36 0.84 -0.43 0.32 1.00 0.00 0.84 0.84 1.00 246 | 0.36 1.00 -0.28 0.44 0.77 -0.43 0.30 1.00 0.00 0.77 0.77 1.00 247 | 0.38 1.00 -0.24 0.52 0.68 -0.14 0.90 1.00 0.00 0.68 0.68 1.00 248 | 0.40 1.00 -0.20 0.60 0.59 -0.14 0.86 1.00 0.00 0.59 0.59 1.00 249 | 0.42 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 0.48 0.48 1.00 250 | 0.44 1.00 -0.12 0.76 0.37 -0.14 0.68 1.00 0.00 0.37 0.37 1.00 251 | 0.46 1.00 -0.08 0.84 0.25 -0.14 0.06 1.00 0.00 0.25 0.25 1.00 252 | 0.48 1.00 -0.04 0.92 0.13 -0.14 0.27 1.00 0.00 0.13 0.13 1.00 253 | 0.50 -1.00 0.00 1.00 -0.00 0.14 0.00 1.00 0.00 0.00 0.00 1.00 254 | 0.52 -1.00 0.04 0.92 -0.13 0.14 0.62 1.00 0.00 0.00 0.13 0.84 255 | 0.54 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 0.00 0.25 0.68 256 | 0.56 -1.00 0.12 0.76 -0.37 0.14 0.13 1.00 0.00 0.00 0.37 0.52 257 | 0.58 -1.00 0.16 0.68 -0.48 0.14 0.96 1.00 0.00 0.00 0.48 0.36 258 | 0.60 -1.00 0.20 0.60 -0.59 0.14 0.83 1.00 0.00 0.00 0.59 0.20 259 | 0.62 -1.00 0.24 0.52 -0.68 0.14 0.11 1.00 0.00 0.00 0.68 0.04 260 | 0.64 -1.00 0.28 0.44 -0.77 0.43 0.56 1.00 0.00 0.00 0.77 -0.12 261 | 0.66 -1.00 0.32 0.36 -0.84 0.43 0.44 1.00 0.00 0.00 0.84 -0.28 262 | 0.68 -1.00 0.36 0.28 -0.90 0.43 0.05 1.00 0.00 0.00 0.90 -0.44 263 | 0.70 -1.00 0.40 0.20 -0.95 0.43 0.35 1.00 0.00 0.00 0.95 -0.60 264 | 0.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 0.00 0.98 -0.76 265 | 0.74 -1.00 0.48 0.04 -1.00 0.43 0.71 1.00 0.00 0.00 1.00 -0.92 266 | 0.76 -1.00 0.52 -0.04 -1.00 0.71 0.26 1.00 0.00 0.00 1.00 -1.00 267 | 0.78 -1.00 0.56 -0.12 -0.98 0.71 0.79 1.00 0.00 0.00 0.98 -1.00 268 | 0.80 -1.00 0.60 -0.20 -0.95 0.71 0.63 1.00 0.00 0.00 0.95 -1.00 269 | 0.82 -1.00 0.64 -0.28 -0.90 0.71 0.54 1.00 0.00 0.00 0.90 -1.00 270 | 0.84 -1.00 0.68 -0.36 -0.84 0.71 0.34 1.00 0.00 0.00 0.84 -1.00 271 | 0.86 -1.00 0.72 -0.44 -0.77 0.71 0.59 1.00 0.00 0.00 0.77 -1.00 272 | 0.88 -1.00 0.76 -0.52 -0.68 1.00 0.43 1.00 0.00 0.00 0.68 -1.00 273 | 0.90 -1.00 0.80 -0.60 -0.59 1.00 0.24 1.00 0.00 0.00 0.59 -1.00 274 | 0.92 -1.00 0.84 -0.68 -0.48 1.00 0.94 1.00 0.00 0.00 0.48 -1.00 275 | 0.94 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 0.00 0.37 -1.00 276 | 0.96 -1.00 0.92 -0.84 -0.25 1.00 0.77 1.00 0.00 0.00 0.25 -1.00 277 | 0.98 -1.00 0.96 -0.92 -0.13 1.00 0.43 1.00 0.00 0.00 0.13 -1.00 278 | 1.00 1.00 -1.00 -1.00 0.00 -1.00 0.16 1.00 0.00 0.00 0.00 -1.00 279 | 1.02 1.00 -0.96 -0.92 0.13 -1.00 0.44 1.00 0.00 0.13 0.13 -0.84 280 | 1.04 1.00 -0.92 -0.84 0.25 -1.00 0.76 1.00 0.00 0.25 0.25 -0.68 281 | 1.06 1.00 -0.88 -0.76 0.37 -1.00 0.54 1.00 0.00 0.37 0.37 -0.52 282 | 1.08 1.00 -0.84 -0.68 0.48 -1.00 0.52 1.00 0.00 0.48 0.48 -0.36 283 | 1.10 1.00 -0.80 -0.60 0.59 -1.00 0.56 1.00 0.00 0.59 0.59 -0.20 284 | 1.12 1.00 -0.76 -0.52 0.68 -1.00 0.25 1.00 0.00 0.68 0.68 -0.04 285 | 1.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 0.77 0.77 0.12 286 | 1.16 1.00 -0.68 -0.36 0.84 -0.71 0.02 1.00 0.00 0.84 0.84 0.28 287 | 1.18 1.00 -0.64 -0.28 0.90 -0.71 0.85 1.00 0.00 0.90 0.90 0.44 288 | 1.20 1.00 -0.60 -0.20 0.95 -0.71 0.13 1.00 0.00 0.95 0.95 0.60 289 | 1.22 1.00 -0.56 -0.12 0.98 -0.71 0.05 1.00 0.00 0.98 0.98 0.76 290 | 1.24 1.00 -0.52 -0.04 1.00 -0.71 0.93 1.00 0.00 1.00 1.00 0.92 291 | 1.26 1.00 -0.48 0.04 1.00 -0.43 0.97 1.00 0.00 1.00 1.00 1.00 292 | 1.28 1.00 -0.44 0.12 0.98 -0.43 0.34 1.00 0.00 0.98 0.98 1.00 293 | 1.30 1.00 -0.40 0.20 0.95 -0.43 0.57 1.00 0.00 0.95 0.95 1.00 294 | 1.32 1.00 -0.36 0.28 0.90 -0.43 0.60 1.00 0.00 0.90 0.90 1.00 295 | 1.34 1.00 -0.32 0.36 0.84 -0.43 0.91 1.00 0.00 0.84 0.84 1.00 296 | 1.36 1.00 -0.28 0.44 0.77 -0.43 0.96 1.00 0.00 0.77 0.77 1.00 297 | 1.38 1.00 -0.24 0.52 0.68 -0.14 0.25 1.00 0.00 0.68 0.68 1.00 298 | 1.40 1.00 -0.20 0.60 0.59 -0.14 0.56 1.00 0.00 0.59 0.59 1.00 299 | 1.42 1.00 -0.16 0.68 0.48 -0.14 0.06 1.00 0.00 0.48 0.48 1.00 300 | 1.44 1.00 -0.12 0.76 0.37 -0.14 0.75 1.00 0.00 0.37 0.37 1.00 301 | 1.46 1.00 -0.08 0.84 0.25 -0.14 0.14 1.00 0.00 0.25 0.25 1.00 302 | 1.48 1.00 -0.04 0.92 0.13 -0.14 0.92 1.00 0.00 0.13 0.13 1.00 303 | 1.50 -1.00 0.00 1.00 -0.00 0.14 0.35 1.00 0.00 0.00 0.00 1.00 304 | 1.52 -1.00 0.04 0.92 -0.13 0.14 0.32 1.00 0.00 0.00 0.13 0.84 305 | 1.54 -1.00 0.08 0.84 -0.25 0.14 0.50 1.00 0.00 0.00 0.25 0.68 306 | 1.56 -1.00 0.12 0.76 -0.37 0.14 0.97 1.00 0.00 0.00 0.37 0.52 307 | 1.58 -1.00 0.16 0.68 -0.48 0.14 0.28 1.00 0.00 0.00 0.48 0.36 308 | 1.60 -1.00 0.20 0.60 -0.59 0.14 0.43 1.00 0.00 0.00 0.59 0.20 309 | 1.62 -1.00 0.24 0.52 -0.68 0.14 0.42 1.00 0.00 0.00 0.68 0.04 310 | 1.64 -1.00 0.28 0.44 -0.77 0.43 0.87 1.00 0.00 0.00 0.77 -0.12 311 | 1.66 -1.00 0.32 0.36 -0.84 0.43 0.20 1.00 0.00 0.00 0.84 -0.28 312 | 1.68 -1.00 0.36 0.28 -0.90 0.43 0.51 1.00 0.00 0.00 0.90 -0.44 313 | 1.70 -1.00 0.40 0.20 -0.95 0.43 0.34 1.00 0.00 0.00 0.95 -0.60 314 | 1.72 -1.00 0.44 0.12 -0.98 0.43 0.26 1.00 0.00 0.00 0.98 -0.76 315 | 1.74 -1.00 0.48 0.04 -1.00 0.43 0.04 1.00 0.00 0.00 1.00 -0.92 316 | 1.76 -1.00 0.52 -0.04 -1.00 0.71 0.04 1.00 0.00 0.00 1.00 -1.00 317 | 1.78 -1.00 0.56 -0.12 -0.98 0.71 0.60 1.00 0.00 0.00 0.98 -1.00 318 | 1.80 -1.00 0.60 -0.20 -0.95 0.71 0.82 1.00 0.00 0.00 0.95 -1.00 319 | 1.82 -1.00 0.64 -0.28 -0.90 0.71 0.23 1.00 0.00 0.00 0.90 -1.00 320 | 1.84 -1.00 0.68 -0.36 -0.84 0.71 0.93 1.00 0.00 0.00 0.84 -1.00 321 | 1.86 -1.00 0.72 -0.44 -0.77 0.71 0.31 1.00 0.00 0.00 0.77 -1.00 322 | 1.88 -1.00 0.76 -0.52 -0.68 1.00 0.50 1.00 0.00 0.00 0.68 -1.00 323 | 1.90 -1.00 0.80 -0.60 -0.59 1.00 0.08 1.00 0.00 0.00 0.59 -1.00 324 | 1.92 -1.00 0.84 -0.68 -0.48 1.00 0.47 1.00 0.00 0.00 0.48 -1.00 325 | 1.94 -1.00 0.88 -0.76 -0.37 1.00 0.30 1.00 0.00 0.00 0.37 -1.00 326 | 1.96 -1.00 0.92 -0.84 -0.25 1.00 0.63 1.00 0.00 0.00 0.25 -1.00 327 | 1.98 -1.00 0.96 -0.92 -0.13 1.00 0.59 1.00 0.00 0.00 0.13 -1.00 328 | 2.00 1.00 -1.00 -1.00 0.00 -1.00 0.36 1.00 0.00 0.00 0.00 -1.00 329 | 2.02 1.00 -0.96 -0.92 0.13 -1.00 0.53 1.00 0.00 0.13 0.13 -0.84 330 | 2.04 1.00 -0.92 -0.84 0.25 -1.00 0.87 1.00 0.00 0.25 0.25 -0.68 331 | 2.06 1.00 -0.88 -0.76 0.37 -1.00 0.18 1.00 0.00 0.37 0.37 -0.52 332 | 2.08 1.00 -0.84 -0.68 0.48 -1.00 0.24 1.00 0.00 0.48 0.48 -0.36 333 | 2.10 1.00 -0.80 -0.60 0.59 -1.00 0.27 1.00 0.00 0.59 0.59 -0.20 334 | 2.12 1.00 -0.76 -0.52 0.68 -1.00 0.31 1.00 0.00 0.68 0.68 -0.04 335 | 2.14 1.00 -0.72 -0.44 0.77 -0.71 0.06 1.00 0.00 0.77 0.77 0.12 336 | 2.16 1.00 -0.68 -0.36 0.84 -0.71 0.64 1.00 0.00 0.84 0.84 0.28 337 | 2.18 1.00 -0.64 -0.28 0.90 -0.71 0.30 1.00 0.00 0.90 0.90 0.44 338 | 2.20 1.00 -0.60 -0.20 0.95 -0.71 0.75 1.00 0.00 0.95 0.95 0.60 339 | 2.22 1.00 -0.56 -0.12 0.98 -0.71 0.87 1.00 0.00 0.98 0.98 0.76 340 | 2.24 1.00 -0.52 -0.04 1.00 -0.71 0.96 1.00 0.00 1.00 1.00 0.92 341 | 2.26 1.00 -0.48 0.04 1.00 -0.43 0.48 1.00 0.00 1.00 1.00 1.00 342 | 2.28 1.00 -0.44 0.12 0.98 -0.43 0.54 1.00 0.00 0.98 0.98 1.00 343 | 2.30 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 0.95 0.95 1.00 344 | 2.32 1.00 -0.36 0.28 0.90 -0.43 0.64 1.00 0.00 0.90 0.90 1.00 345 | 2.34 1.00 -0.32 0.36 0.84 -0.43 0.72 1.00 0.00 0.84 0.84 1.00 346 | 2.36 1.00 -0.28 0.44 0.77 -0.43 0.07 1.00 0.00 0.77 0.77 1.00 347 | 2.38 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 0.68 0.68 1.00 348 | 2.40 1.00 -0.20 0.60 0.59 -0.14 0.51 1.00 0.00 0.59 0.59 1.00 349 | 2.42 1.00 -0.16 0.68 0.48 -0.14 0.47 1.00 0.00 0.48 0.48 1.00 350 | 2.44 1.00 -0.12 0.76 0.37 -0.14 0.93 1.00 0.00 0.37 0.37 1.00 351 | 2.46 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 0.25 0.25 1.00 352 | 2.48 1.00 -0.04 0.92 0.13 -0.14 0.80 1.00 0.00 0.13 0.13 1.00 353 | 2.50 -1.00 0.00 1.00 -0.00 0.14 0.10 1.00 0.00 0.00 0.00 1.00 354 | 2.52 -1.00 0.04 0.92 -0.13 0.14 0.61 1.00 0.00 0.00 0.13 0.84 355 | 2.54 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 0.00 0.25 0.68 356 | 2.56 -1.00 0.12 0.76 -0.37 0.14 0.40 1.00 0.00 0.00 0.37 0.52 357 | 2.58 -1.00 0.16 0.68 -0.48 0.14 0.90 1.00 0.00 0.00 0.48 0.36 358 | 2.60 -1.00 0.20 0.60 -0.59 0.14 0.77 1.00 0.00 0.00 0.59 0.20 359 | 2.62 -1.00 0.24 0.52 -0.68 0.14 0.20 1.00 0.00 0.00 0.68 0.04 360 | 2.64 -1.00 0.28 0.44 -0.77 0.43 0.54 1.00 0.00 0.00 0.77 -0.12 361 | 2.66 -1.00 0.32 0.36 -0.84 0.43 0.88 1.00 0.00 0.00 0.84 -0.28 362 | 2.68 -1.00 0.36 0.28 -0.90 0.43 1.00 1.00 0.00 0.00 0.90 -0.44 363 | 2.70 -1.00 0.40 0.20 -0.95 0.43 0.38 1.00 0.00 0.00 0.95 -0.60 364 | 2.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 0.00 0.98 -0.76 365 | 2.74 -1.00 0.48 0.04 -1.00 0.43 0.92 1.00 0.00 0.00 1.00 -0.92 366 | 2.76 -1.00 0.52 -0.04 -1.00 0.71 0.88 1.00 0.00 0.00 1.00 -1.00 367 | 2.78 -1.00 0.56 -0.12 -0.98 0.71 0.90 1.00 0.00 0.00 0.98 -1.00 368 | 2.80 -1.00 0.60 -0.20 -0.95 0.71 0.48 1.00 0.00 0.00 0.95 -1.00 369 | 2.82 -1.00 0.64 -0.28 -0.90 0.71 0.57 1.00 0.00 0.00 0.90 -1.00 370 | 2.84 -1.00 0.68 -0.36 -0.84 0.71 0.60 1.00 0.00 0.00 0.84 -1.00 371 | 2.86 -1.00 0.72 -0.44 -0.77 0.71 0.49 1.00 0.00 0.00 0.77 -1.00 372 | 2.88 -1.00 0.76 -0.52 -0.68 1.00 0.60 1.00 0.00 0.00 0.68 -1.00 373 | 2.90 -1.00 0.80 -0.60 -0.59 1.00 0.79 1.00 0.00 0.00 0.59 -1.00 374 | 2.92 -1.00 0.84 -0.68 -0.48 1.00 0.35 1.00 0.00 0.00 0.48 -1.00 375 | 2.94 -1.00 0.88 -0.76 -0.37 1.00 0.39 1.00 0.00 0.00 0.37 -1.00 376 | 2.96 -1.00 0.92 -0.84 -0.25 1.00 0.85 1.00 0.00 0.00 0.25 -1.00 377 | 2.98 -1.00 0.96 -0.92 -0.13 1.00 0.84 1.00 0.00 0.00 0.13 -1.00 378 | 3.00 1.00 -1.00 -1.00 0.00 -1.00 0.30 1.00 0.00 0.00 0.00 -1.00 379 | 3.02 1.00 -0.96 -0.92 0.13 -1.00 0.76 1.00 0.00 0.13 0.13 -0.84 380 | 3.04 1.00 -0.92 -0.84 0.25 -1.00 0.07 1.00 0.00 0.25 0.25 -0.68 381 | 3.06 1.00 -0.88 -0.76 0.37 -1.00 0.09 1.00 0.00 0.37 0.37 -0.52 382 | 3.08 1.00 -0.84 -0.68 0.48 -1.00 0.22 1.00 0.00 0.48 0.48 -0.36 383 | 3.10 1.00 -0.80 -0.60 0.59 -1.00 0.86 1.00 0.00 0.59 0.59 -0.20 384 | 3.12 1.00 -0.76 -0.52 0.68 -1.00 0.04 1.00 0.00 0.68 0.68 -0.04 385 | 3.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 0.77 0.77 0.12 386 | 3.16 1.00 -0.68 -0.36 0.84 -0.71 0.83 1.00 0.00 0.84 0.84 0.28 387 | 3.18 1.00 -0.64 -0.28 0.90 -0.71 0.23 1.00 0.00 0.90 0.90 0.44 388 | 3.20 1.00 -0.60 -0.20 0.95 -0.71 0.49 1.00 0.00 0.95 0.95 0.60 389 | 3.22 1.00 -0.56 -0.12 0.98 -0.71 0.77 1.00 0.00 0.98 0.98 0.76 390 | 3.24 1.00 -0.52 -0.04 1.00 -0.71 0.78 1.00 0.00 1.00 1.00 0.92 391 | 3.26 1.00 -0.48 0.04 1.00 -0.43 0.35 1.00 0.00 1.00 1.00 1.00 392 | 3.28 1.00 -0.44 0.12 0.98 -0.43 0.99 1.00 0.00 0.98 0.98 1.00 393 | 3.30 1.00 -0.40 0.20 0.95 -0.43 0.14 1.00 0.00 0.95 0.95 1.00 394 | 3.32 1.00 -0.36 0.28 0.90 -0.43 0.05 1.00 0.00 0.90 0.90 1.00 395 | 3.34 1.00 -0.32 0.36 0.84 -0.43 0.70 1.00 0.00 0.84 0.84 1.00 396 | 3.36 1.00 -0.28 0.44 0.77 -0.43 0.82 1.00 0.00 0.77 0.77 1.00 397 | 3.38 1.00 -0.24 0.52 0.68 -0.14 0.62 1.00 0.00 0.68 0.68 1.00 398 | 3.40 1.00 -0.20 0.60 0.59 -0.14 0.01 1.00 0.00 0.59 0.59 1.00 399 | 3.42 1.00 -0.16 0.68 0.48 -0.14 0.69 1.00 0.00 0.48 0.48 1.00 400 | 3.44 1.00 -0.12 0.76 0.37 -0.14 0.19 1.00 0.00 0.37 0.37 1.00 401 | 3.46 1.00 -0.08 0.84 0.25 -0.14 0.39 1.00 0.00 0.25 0.25 1.00 402 | 3.48 1.00 -0.04 0.92 0.13 -0.14 0.39 1.00 0.00 0.13 0.13 1.00 403 | 3.50 -1.00 0.00 1.00 -0.00 0.14 0.46 1.00 0.00 0.00 0.00 1.00 404 | 3.52 -1.00 0.04 0.92 -0.13 0.14 0.75 1.00 0.00 0.00 0.13 0.84 405 | 3.54 -1.00 0.08 0.84 -0.25 0.14 0.21 1.00 0.00 0.00 0.25 0.68 406 | 3.56 -1.00 0.12 0.76 -0.37 0.14 0.85 1.00 0.00 0.00 0.37 0.52 407 | 3.58 -1.00 0.16 0.68 -0.48 0.14 0.92 1.00 0.00 0.00 0.48 0.36 408 | 3.60 -1.00 0.20 0.60 -0.59 0.14 0.78 1.00 0.00 0.00 0.59 0.20 409 | 3.62 -1.00 0.24 0.52 -0.68 0.14 0.41 1.00 0.00 0.00 0.68 0.04 410 | 3.64 -1.00 0.28 0.44 -0.77 0.43 0.90 1.00 0.00 0.00 0.77 -0.12 411 | 3.66 -1.00 0.32 0.36 -0.84 0.43 0.71 1.00 0.00 0.00 0.84 -0.28 412 | 3.68 -1.00 0.36 0.28 -0.90 0.43 0.94 1.00 0.00 0.00 0.90 -0.44 413 | 3.70 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 0.00 0.95 -0.60 414 | 3.72 -1.00 0.44 0.12 -0.98 0.43 0.91 1.00 0.00 0.00 0.98 -0.76 415 | 3.74 -1.00 0.48 0.04 -1.00 0.43 0.79 1.00 0.00 0.00 1.00 -0.92 416 | 3.76 -1.00 0.52 -0.04 -1.00 0.71 0.64 1.00 0.00 0.00 1.00 -1.00 417 | 3.78 -1.00 0.56 -0.12 -0.98 0.71 0.08 1.00 0.00 0.00 0.98 -1.00 418 | 3.80 -1.00 0.60 -0.20 -0.95 0.71 0.49 1.00 0.00 0.00 0.95 -1.00 419 | 3.82 -1.00 0.64 -0.28 -0.90 0.71 0.50 1.00 0.00 0.00 0.90 -1.00 420 | 3.84 -1.00 0.68 -0.36 -0.84 0.71 0.86 1.00 0.00 0.00 0.84 -1.00 421 | 3.86 -1.00 0.72 -0.44 -0.77 0.71 0.61 1.00 0.00 0.00 0.77 -1.00 422 | 3.88 -1.00 0.76 -0.52 -0.68 1.00 0.42 1.00 0.00 0.00 0.68 -1.00 423 | 3.90 -1.00 0.80 -0.60 -0.59 1.00 0.25 1.00 0.00 0.00 0.59 -1.00 424 | 3.92 -1.00 0.84 -0.68 -0.48 1.00 0.06 1.00 0.00 0.00 0.48 -1.00 425 | 3.94 -1.00 0.88 -0.76 -0.37 1.00 0.97 1.00 0.00 0.00 0.37 -1.00 426 | 3.96 -1.00 0.92 -0.84 -0.25 1.00 0.81 1.00 0.00 0.00 0.25 -1.00 427 | 3.98 -1.00 0.96 -0.92 -0.13 1.00 0.57 1.00 0.00 0.00 0.13 -1.00 428 | 429 | done... 430 | -------------------------------------------------------------------------------- /examples/functionGeneratorPerformance/performance_0.3.0.txt: -------------------------------------------------------------------------------- 1 | 2 | functionGeneratorPerformance.ino 3 | FUNCTIONGENERATOR_LIB_VERSION: 0.3.0 4 | 5 | indicative output Arduino UNO 1.8.19, 16 MHz. 6 | 7 | | wave form name | usec | max calls/sec | 8 | |:---------------|-------:|----------------:| 9 | | square | 54.57 | 18325.49 | 10 | | sawtooth | 61.69 | 16210.61 | 11 | | triangle | 79.80 | 12531.96 | 12 | | sinus | 166.38 | 6010.37 | 13 | | stair | 80.86 | 12366.38 | 14 | | random | 42.61 | 23466.69 | 15 | | random_DC | 67.18 | 14885.12 | 16 | | line | 0.76 | 1322751.37 | 17 | | zero | 0.75 | 1324854.25 | 18 | | sinusDiode | 169.93 | 5884.79 | 19 | | sinusRectified | 169.49 | 5900.03 | 20 | | trapezium1 | 100.98 | 9903.30 | 21 | | trapezium2 | 143.98 | 6945.58 | 22 | | heartBeat | 128.52 | 7780.77 | 23 | | freeWave | 75.52 | 13241.31 | 24 | 25 | 26 | 27 | t sqr saw tri sin str rnd line zero sinD sinR trap 28 | -4.00 -1.00 1.00 -1.00 -0.00 1.00 0.50 1.00 0.00 0.00 0.00 -1.00 29 | -3.98 1.00 -0.96 -0.92 0.13 -1.00 0.06 1.00 0.00 0.13 0.13 -1.00 30 | -3.96 1.00 -0.92 -0.84 0.25 -1.00 0.34 1.00 0.00 0.25 0.25 -1.00 31 | -3.94 1.00 -0.88 -0.76 0.37 -1.00 0.33 1.00 0.00 0.37 0.37 -1.00 32 | -3.92 1.00 -0.84 -0.68 0.48 -1.00 0.95 1.00 0.00 0.48 0.48 -1.00 33 | -3.90 1.00 -0.80 -0.60 0.59 -1.00 0.75 1.00 0.00 0.59 0.59 -1.00 34 | -3.88 1.00 -0.76 -0.52 0.68 -1.00 0.20 1.00 0.00 0.68 0.68 -1.00 35 | -3.86 1.00 -0.72 -0.44 0.77 -0.71 0.33 1.00 0.00 0.77 0.77 -1.00 36 | -3.84 1.00 -0.68 -0.36 0.84 -0.71 0.25 1.00 0.00 0.84 0.84 -1.00 37 | -3.82 1.00 -0.64 -0.28 0.90 -0.71 0.39 1.00 0.00 0.90 0.90 -1.00 38 | -3.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 0.95 0.95 -1.00 39 | -3.78 1.00 -0.56 -0.12 0.98 -0.71 0.95 1.00 0.00 0.98 0.98 -1.00 40 | -3.76 1.00 -0.52 -0.04 1.00 -0.71 0.56 1.00 0.00 1.00 1.00 -1.00 41 | -3.74 1.00 -0.48 0.04 1.00 -0.43 0.64 1.00 0.00 1.00 1.00 -0.92 42 | -3.72 1.00 -0.44 0.12 0.98 -0.43 0.17 1.00 0.00 0.98 0.98 -0.76 43 | -3.70 1.00 -0.40 0.20 0.95 -0.43 0.78 1.00 0.00 0.95 0.95 -0.60 44 | -3.68 1.00 -0.36 0.28 0.90 -0.43 0.02 1.00 0.00 0.90 0.90 -0.44 45 | -3.66 1.00 -0.32 0.36 0.84 -0.43 0.31 1.00 0.00 0.84 0.84 -0.28 46 | -3.64 1.00 -0.28 0.44 0.77 -0.43 0.49 1.00 0.00 0.77 0.77 -0.12 47 | -3.62 1.00 -0.24 0.52 0.68 -0.14 0.09 1.00 0.00 0.68 0.68 0.04 48 | -3.60 1.00 -0.20 0.60 0.59 -0.14 0.21 1.00 0.00 0.59 0.59 0.20 49 | -3.58 1.00 -0.16 0.68 0.48 -0.14 0.82 1.00 0.00 0.48 0.48 0.36 50 | -3.56 1.00 -0.12 0.76 0.37 -0.14 0.51 1.00 0.00 0.37 0.37 0.52 51 | -3.54 1.00 -0.08 0.84 0.25 -0.14 0.74 1.00 0.00 0.25 0.25 0.68 52 | -3.52 1.00 -0.04 0.92 0.13 -0.14 0.20 1.00 0.00 0.13 0.13 0.84 53 | -3.50 1.00 0.00 1.00 0.00 -0.14 0.27 1.00 0.00 0.00 0.00 1.00 54 | -3.48 -1.00 0.04 0.92 -0.13 0.14 0.15 1.00 0.00 0.00 0.13 1.00 55 | -3.46 -1.00 0.08 0.84 -0.25 0.14 0.67 1.00 0.00 0.00 0.25 1.00 56 | -3.44 -1.00 0.12 0.76 -0.37 0.14 0.54 1.00 0.00 0.00 0.37 1.00 57 | -3.42 -1.00 0.16 0.68 -0.48 0.14 0.44 1.00 0.00 0.00 0.48 1.00 58 | -3.40 -1.00 0.20 0.60 -0.59 0.14 0.85 1.00 0.00 0.00 0.59 1.00 59 | -3.38 -1.00 0.24 0.52 -0.68 0.14 0.90 1.00 0.00 0.00 0.68 1.00 60 | -3.36 -1.00 0.28 0.44 -0.77 0.43 0.43 1.00 0.00 0.00 0.77 1.00 61 | -3.34 -1.00 0.32 0.36 -0.84 0.43 0.11 1.00 0.00 0.00 0.84 1.00 62 | -3.32 -1.00 0.36 0.28 -0.90 0.43 0.91 1.00 0.00 0.00 0.90 1.00 63 | -3.30 -1.00 0.40 0.20 -0.95 0.43 0.79 1.00 0.00 0.00 0.95 1.00 64 | -3.28 -1.00 0.44 0.12 -0.98 0.43 0.17 1.00 0.00 0.00 0.98 1.00 65 | -3.26 -1.00 0.48 0.04 -1.00 0.43 0.72 1.00 0.00 0.00 1.00 1.00 66 | -3.24 -1.00 0.52 -0.04 -1.00 0.71 0.77 1.00 0.00 0.00 1.00 0.92 67 | -3.22 -1.00 0.56 -0.12 -0.98 0.71 0.86 1.00 0.00 0.00 0.98 0.76 68 | -3.20 -1.00 0.60 -0.20 -0.95 0.71 0.50 1.00 0.00 0.00 0.95 0.60 69 | -3.18 -1.00 0.64 -0.28 -0.90 0.71 0.42 1.00 0.00 0.00 0.90 0.44 70 | -3.16 -1.00 0.68 -0.36 -0.84 0.71 0.73 1.00 0.00 0.00 0.84 0.28 71 | -3.14 -1.00 0.72 -0.44 -0.77 0.71 0.01 1.00 0.00 0.00 0.77 0.12 72 | -3.12 -1.00 0.76 -0.52 -0.68 1.00 0.52 1.00 0.00 0.00 0.68 -0.04 73 | -3.10 -1.00 0.80 -0.60 -0.59 1.00 0.72 1.00 0.00 0.00 0.59 -0.20 74 | -3.08 -1.00 0.84 -0.68 -0.48 1.00 0.61 1.00 0.00 0.00 0.48 -0.36 75 | -3.06 -1.00 0.88 -0.76 -0.37 1.00 0.41 1.00 0.00 0.00 0.37 -0.52 76 | -3.04 -1.00 0.92 -0.84 -0.25 1.00 0.68 1.00 0.00 0.00 0.25 -0.68 77 | -3.02 -1.00 0.96 -0.92 -0.13 1.00 0.34 1.00 0.00 0.00 0.13 -0.84 78 | -3.00 -1.00 1.00 -1.00 -0.00 1.00 0.90 1.00 0.00 0.00 0.00 -1.00 79 | -2.98 1.00 -0.96 -0.92 0.13 -1.00 0.43 1.00 0.00 0.13 0.13 -1.00 80 | -2.96 1.00 -0.92 -0.84 0.25 -1.00 0.47 1.00 0.00 0.25 0.25 -1.00 81 | -2.94 1.00 -0.88 -0.76 0.37 -1.00 0.51 1.00 0.00 0.37 0.37 -1.00 82 | -2.92 1.00 -0.84 -0.68 0.48 -1.00 0.29 1.00 0.00 0.48 0.48 -1.00 83 | -2.90 1.00 -0.80 -0.60 0.59 -1.00 0.42 1.00 0.00 0.59 0.59 -1.00 84 | -2.88 1.00 -0.76 -0.52 0.68 -1.00 0.02 1.00 0.00 0.68 0.68 -1.00 85 | -2.86 1.00 -0.72 -0.44 0.77 -0.71 0.91 1.00 0.00 0.77 0.77 -1.00 86 | -2.84 1.00 -0.68 -0.36 0.84 -0.71 0.00 1.00 0.00 0.84 0.84 -1.00 87 | -2.82 1.00 -0.64 -0.28 0.90 -0.71 0.22 1.00 0.00 0.90 0.90 -1.00 88 | -2.80 1.00 -0.60 -0.20 0.95 -0.71 0.55 1.00 0.00 0.95 0.95 -1.00 89 | -2.78 1.00 -0.56 -0.12 0.98 -0.71 0.96 1.00 0.00 0.98 0.98 -1.00 90 | -2.76 1.00 -0.52 -0.04 1.00 -0.71 0.30 1.00 0.00 1.00 1.00 -1.00 91 | -2.74 1.00 -0.48 0.04 1.00 -0.43 0.19 1.00 0.00 1.00 1.00 -0.92 92 | -2.72 1.00 -0.44 0.12 0.98 -0.43 0.62 1.00 0.00 0.98 0.98 -0.76 93 | -2.70 1.00 -0.40 0.20 0.95 -0.43 0.61 1.00 0.00 0.95 0.95 -0.60 94 | -2.68 1.00 -0.36 0.28 0.90 -0.43 0.28 1.00 0.00 0.90 0.90 -0.44 95 | -2.66 1.00 -0.32 0.36 0.84 -0.43 0.85 1.00 0.00 0.84 0.84 -0.28 96 | -2.64 1.00 -0.28 0.44 0.77 -0.43 0.22 1.00 0.00 0.77 0.77 -0.12 97 | -2.62 1.00 -0.24 0.52 0.68 -0.14 0.66 1.00 0.00 0.68 0.68 0.04 98 | -2.60 1.00 -0.20 0.60 0.59 -0.14 0.62 1.00 0.00 0.59 0.59 0.20 99 | -2.58 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 0.48 0.48 0.36 100 | -2.56 1.00 -0.12 0.76 0.37 -0.14 0.38 1.00 0.00 0.37 0.37 0.52 101 | -2.54 1.00 -0.08 0.84 0.25 -0.14 0.00 1.00 0.00 0.25 0.25 0.68 102 | -2.52 1.00 -0.04 0.92 0.13 -0.14 0.09 1.00 0.00 0.13 0.13 0.84 103 | -2.50 1.00 0.00 1.00 0.00 -0.14 0.56 1.00 0.00 0.00 0.00 1.00 104 | -2.48 -1.00 0.04 0.92 -0.13 0.14 0.67 1.00 0.00 0.00 0.13 1.00 105 | -2.46 -1.00 0.08 0.84 -0.25 0.14 0.66 1.00 0.00 0.00 0.25 1.00 106 | -2.44 -1.00 0.12 0.76 -0.37 0.14 0.15 1.00 0.00 0.00 0.37 1.00 107 | -2.42 -1.00 0.16 0.68 -0.48 0.14 0.71 1.00 0.00 0.00 0.48 1.00 108 | -2.40 -1.00 0.20 0.60 -0.59 0.14 0.75 1.00 0.00 0.00 0.59 1.00 109 | -2.38 -1.00 0.24 0.52 -0.68 0.14 0.13 1.00 0.00 0.00 0.68 1.00 110 | -2.36 -1.00 0.28 0.44 -0.77 0.43 0.99 1.00 0.00 0.00 0.77 1.00 111 | -2.34 -1.00 0.32 0.36 -0.84 0.43 0.01 1.00 0.00 0.00 0.84 1.00 112 | -2.32 -1.00 0.36 0.28 -0.90 0.43 0.92 1.00 0.00 0.00 0.90 1.00 113 | -2.30 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 0.00 0.95 1.00 114 | -2.28 -1.00 0.44 0.12 -0.98 0.43 0.38 1.00 0.00 0.00 0.98 1.00 115 | -2.26 -1.00 0.48 0.04 -1.00 0.43 0.87 1.00 0.00 0.00 1.00 1.00 116 | -2.24 -1.00 0.52 -0.04 -1.00 0.71 0.42 1.00 0.00 0.00 1.00 0.92 117 | -2.22 -1.00 0.56 -0.12 -0.98 0.71 0.88 1.00 0.00 0.00 0.98 0.76 118 | -2.20 -1.00 0.60 -0.20 -0.95 0.71 0.71 1.00 0.00 0.00 0.95 0.60 119 | -2.18 -1.00 0.64 -0.28 -0.90 0.71 0.97 1.00 0.00 0.00 0.90 0.44 120 | -2.16 -1.00 0.68 -0.36 -0.84 0.71 0.27 1.00 0.00 0.00 0.84 0.28 121 | -2.14 -1.00 0.72 -0.44 -0.77 0.71 0.94 1.00 0.00 0.00 0.77 0.12 122 | -2.12 -1.00 0.76 -0.52 -0.68 1.00 0.92 1.00 0.00 0.00 0.68 -0.04 123 | -2.10 -1.00 0.80 -0.60 -0.59 1.00 0.02 1.00 0.00 0.00 0.59 -0.20 124 | -2.08 -1.00 0.84 -0.68 -0.48 1.00 0.26 1.00 0.00 0.00 0.48 -0.36 125 | -2.06 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 0.00 0.37 -0.52 126 | -2.04 -1.00 0.92 -0.84 -0.25 1.00 0.93 1.00 0.00 0.00 0.25 -0.68 127 | -2.02 -1.00 0.96 -0.92 -0.13 1.00 0.25 1.00 0.00 0.00 0.13 -0.84 128 | -2.00 -1.00 1.00 -1.00 -0.00 1.00 0.77 1.00 0.00 0.00 0.00 -1.00 129 | -1.98 1.00 -0.96 -0.92 0.13 -1.00 0.71 1.00 0.00 0.13 0.13 -1.00 130 | -1.96 1.00 -0.92 -0.84 0.25 -1.00 0.86 1.00 0.00 0.25 0.25 -1.00 131 | -1.94 1.00 -0.88 -0.76 0.37 -1.00 0.15 1.00 0.00 0.37 0.37 -1.00 132 | -1.92 1.00 -0.84 -0.68 0.48 -1.00 0.80 1.00 0.00 0.48 0.48 -1.00 133 | -1.90 1.00 -0.80 -0.60 0.59 -1.00 0.17 1.00 0.00 0.59 0.59 -1.00 134 | -1.88 1.00 -0.76 -0.52 0.68 -1.00 0.18 1.00 0.00 0.68 0.68 -1.00 135 | -1.86 1.00 -0.72 -0.44 0.77 -0.71 0.54 1.00 0.00 0.77 0.77 -1.00 136 | -1.84 1.00 -0.68 -0.36 0.84 -0.71 0.13 1.00 0.00 0.84 0.84 -1.00 137 | -1.82 1.00 -0.64 -0.28 0.90 -0.71 0.71 1.00 0.00 0.90 0.90 -1.00 138 | -1.80 1.00 -0.60 -0.20 0.95 -0.71 0.24 1.00 0.00 0.95 0.95 -1.00 139 | -1.78 1.00 -0.56 -0.12 0.98 -0.71 0.73 1.00 0.00 0.98 0.98 -1.00 140 | -1.76 1.00 -0.52 -0.04 1.00 -0.71 0.08 1.00 0.00 1.00 1.00 -1.00 141 | -1.74 1.00 -0.48 0.04 1.00 -0.43 0.13 1.00 0.00 1.00 1.00 -0.92 142 | -1.72 1.00 -0.44 0.12 0.98 -0.43 0.28 1.00 0.00 0.98 0.98 -0.76 143 | -1.70 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 0.95 0.95 -0.60 144 | -1.68 1.00 -0.36 0.28 0.90 -0.43 0.53 1.00 0.00 0.90 0.90 -0.44 145 | -1.66 1.00 -0.32 0.36 0.84 -0.43 0.48 1.00 0.00 0.84 0.84 -0.28 146 | -1.64 1.00 -0.28 0.44 0.77 -0.43 0.38 1.00 0.00 0.77 0.77 -0.12 147 | -1.62 1.00 -0.24 0.52 0.68 -0.14 0.28 1.00 0.00 0.68 0.68 0.04 148 | -1.60 1.00 -0.20 0.60 0.59 -0.14 0.06 1.00 0.00 0.59 0.59 0.20 149 | -1.58 1.00 -0.16 0.68 0.48 -0.14 0.84 1.00 0.00 0.48 0.48 0.36 150 | -1.56 1.00 -0.12 0.76 0.37 -0.14 0.35 1.00 0.00 0.37 0.37 0.52 151 | -1.54 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 0.25 0.25 0.68 152 | -1.52 1.00 -0.04 0.92 0.13 -0.14 0.51 1.00 0.00 0.13 0.13 0.84 153 | -1.50 1.00 0.00 1.00 0.00 -0.14 0.37 1.00 0.00 0.00 0.00 1.00 154 | -1.48 -1.00 0.04 0.92 -0.13 0.14 0.40 1.00 0.00 0.00 0.13 1.00 155 | -1.46 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 0.00 0.25 1.00 156 | -1.44 -1.00 0.12 0.76 -0.37 0.14 0.30 1.00 0.00 0.00 0.37 1.00 157 | -1.42 -1.00 0.16 0.68 -0.48 0.14 0.76 1.00 0.00 0.00 0.48 1.00 158 | -1.40 -1.00 0.20 0.60 -0.59 0.14 0.59 1.00 0.00 0.00 0.59 1.00 159 | -1.38 -1.00 0.24 0.52 -0.68 0.14 0.32 1.00 0.00 0.00 0.68 1.00 160 | -1.36 -1.00 0.28 0.44 -0.77 0.43 0.79 1.00 0.00 0.00 0.77 1.00 161 | -1.34 -1.00 0.32 0.36 -0.84 0.43 0.63 1.00 0.00 0.00 0.84 1.00 162 | -1.32 -1.00 0.36 0.28 -0.90 0.43 0.20 1.00 0.00 0.00 0.90 1.00 163 | -1.30 -1.00 0.40 0.20 -0.95 0.43 0.83 1.00 0.00 0.00 0.95 1.00 164 | -1.28 -1.00 0.44 0.12 -0.98 0.43 0.25 1.00 0.00 0.00 0.98 1.00 165 | -1.26 -1.00 0.48 0.04 -1.00 0.43 0.36 1.00 0.00 0.00 1.00 1.00 166 | -1.24 -1.00 0.52 -0.04 -1.00 0.71 0.25 1.00 0.00 0.00 1.00 0.92 167 | -1.22 -1.00 0.56 -0.12 -0.98 0.71 0.25 1.00 0.00 0.00 0.98 0.76 168 | -1.20 -1.00 0.60 -0.20 -0.95 0.71 0.18 1.00 0.00 0.00 0.95 0.60 169 | -1.18 -1.00 0.64 -0.28 -0.90 0.71 0.30 1.00 0.00 0.00 0.90 0.44 170 | -1.16 -1.00 0.68 -0.36 -0.84 0.71 0.09 1.00 0.00 0.00 0.84 0.28 171 | -1.14 -1.00 0.72 -0.44 -0.77 0.71 0.32 1.00 0.00 0.00 0.77 0.12 172 | -1.12 -1.00 0.76 -0.52 -0.68 1.00 0.69 1.00 0.00 0.00 0.68 -0.04 173 | -1.10 -1.00 0.80 -0.60 -0.59 1.00 0.96 1.00 0.00 0.00 0.59 -0.20 174 | -1.08 -1.00 0.84 -0.68 -0.48 1.00 0.28 1.00 0.00 0.00 0.48 -0.36 175 | -1.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 0.00 0.37 -0.52 176 | -1.04 -1.00 0.92 -0.84 -0.25 1.00 0.21 1.00 0.00 0.00 0.25 -0.68 177 | -1.02 -1.00 0.96 -0.92 -0.13 1.00 0.87 1.00 0.00 0.00 0.13 -0.84 178 | -1.00 -1.00 1.00 -1.00 -0.00 1.00 0.57 1.00 0.00 0.00 0.00 -1.00 179 | -0.98 1.00 -0.96 -0.92 0.13 -1.00 0.42 1.00 0.00 0.13 0.13 -1.00 180 | -0.96 1.00 -0.92 -0.84 0.25 -1.00 0.81 1.00 0.00 0.25 0.25 -1.00 181 | -0.94 1.00 -0.88 -0.76 0.37 -1.00 0.39 1.00 0.00 0.37 0.37 -1.00 182 | -0.92 1.00 -0.84 -0.68 0.48 -1.00 0.71 1.00 0.00 0.48 0.48 -1.00 183 | -0.90 1.00 -0.80 -0.60 0.59 -1.00 0.47 1.00 0.00 0.59 0.59 -1.00 184 | -0.88 1.00 -0.76 -0.52 0.68 -1.00 0.56 1.00 0.00 0.68 0.68 -1.00 185 | -0.86 1.00 -0.72 -0.44 0.77 -0.71 0.86 1.00 0.00 0.77 0.77 -1.00 186 | -0.84 1.00 -0.68 -0.36 0.84 -0.71 0.87 1.00 0.00 0.84 0.84 -1.00 187 | -0.82 1.00 -0.64 -0.28 0.90 -0.71 0.43 1.00 0.00 0.90 0.90 -1.00 188 | -0.80 1.00 -0.60 -0.20 0.95 -0.71 0.42 1.00 0.00 0.95 0.95 -1.00 189 | -0.78 1.00 -0.56 -0.12 0.98 -0.71 0.60 1.00 0.00 0.98 0.98 -1.00 190 | -0.76 1.00 -0.52 -0.04 1.00 -0.71 0.13 1.00 0.00 1.00 1.00 -1.00 191 | -0.74 1.00 -0.48 0.04 1.00 -0.43 0.04 1.00 0.00 1.00 1.00 -0.92 192 | -0.72 1.00 -0.44 0.12 0.98 -0.43 0.30 1.00 0.00 0.98 0.98 -0.76 193 | -0.70 1.00 -0.40 0.20 0.95 -0.43 0.84 1.00 0.00 0.95 0.95 -0.60 194 | -0.68 1.00 -0.36 0.28 0.90 -0.43 0.52 1.00 0.00 0.90 0.90 -0.44 195 | -0.66 1.00 -0.32 0.36 0.84 -0.43 0.25 1.00 0.00 0.84 0.84 -0.28 196 | -0.64 1.00 -0.28 0.44 0.77 -0.43 0.04 1.00 0.00 0.77 0.77 -0.12 197 | -0.62 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 0.68 0.68 0.04 198 | -0.60 1.00 -0.20 0.60 0.59 -0.14 0.46 1.00 0.00 0.59 0.59 0.20 199 | -0.58 1.00 -0.16 0.68 0.48 -0.14 0.66 1.00 0.00 0.48 0.48 0.36 200 | -0.56 1.00 -0.12 0.76 0.37 -0.14 0.55 1.00 0.00 0.37 0.37 0.52 201 | -0.54 1.00 -0.08 0.84 0.25 -0.14 0.84 1.00 0.00 0.25 0.25 0.68 202 | -0.52 1.00 -0.04 0.92 0.13 -0.14 0.66 1.00 0.00 0.13 0.13 0.84 203 | -0.50 1.00 0.00 1.00 0.00 -0.14 0.97 1.00 0.00 0.00 0.00 1.00 204 | -0.48 -1.00 0.04 0.92 -0.13 0.14 0.94 1.00 0.00 0.00 0.13 1.00 205 | -0.46 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 0.00 0.25 1.00 206 | -0.44 -1.00 0.12 0.76 -0.37 0.14 0.27 1.00 0.00 0.00 0.37 1.00 207 | -0.42 -1.00 0.16 0.68 -0.48 0.14 0.62 1.00 0.00 0.00 0.48 1.00 208 | -0.40 -1.00 0.20 0.60 -0.59 0.14 0.22 1.00 0.00 0.00 0.59 1.00 209 | -0.38 -1.00 0.24 0.52 -0.68 0.14 0.12 1.00 0.00 0.00 0.68 1.00 210 | -0.36 -1.00 0.28 0.44 -0.77 0.43 0.51 1.00 0.00 0.00 0.77 1.00 211 | -0.34 -1.00 0.32 0.36 -0.84 0.43 0.54 1.00 0.00 0.00 0.84 1.00 212 | -0.32 -1.00 0.36 0.28 -0.90 0.43 0.36 1.00 0.00 0.00 0.90 1.00 213 | -0.30 -1.00 0.40 0.20 -0.95 0.43 0.19 1.00 0.00 0.00 0.95 1.00 214 | -0.28 -1.00 0.44 0.12 -0.98 0.43 0.73 1.00 0.00 0.00 0.98 1.00 215 | -0.26 -1.00 0.48 0.04 -1.00 0.43 0.58 1.00 0.00 0.00 1.00 1.00 216 | -0.24 -1.00 0.52 -0.04 -1.00 0.71 0.74 1.00 0.00 0.00 1.00 0.92 217 | -0.22 -1.00 0.56 -0.12 -0.98 0.71 0.48 1.00 0.00 0.00 0.98 0.76 218 | -0.20 -1.00 0.60 -0.20 -0.95 0.71 0.37 1.00 0.00 0.00 0.95 0.60 219 | -0.18 -1.00 0.64 -0.28 -0.90 0.71 0.49 1.00 0.00 0.00 0.90 0.44 220 | -0.16 -1.00 0.68 -0.36 -0.84 0.71 0.99 1.00 0.00 0.00 0.84 0.28 221 | -0.14 -1.00 0.72 -0.44 -0.77 0.71 0.38 1.00 0.00 0.00 0.77 0.12 222 | -0.12 -1.00 0.76 -0.52 -0.68 1.00 0.16 1.00 0.00 0.00 0.68 -0.04 223 | -0.10 -1.00 0.80 -0.60 -0.59 1.00 0.20 1.00 0.00 0.00 0.59 -0.20 224 | -0.08 -1.00 0.84 -0.68 -0.48 1.00 0.36 1.00 0.00 0.00 0.48 -0.36 225 | -0.06 -1.00 0.88 -0.76 -0.37 1.00 0.93 1.00 0.00 0.00 0.37 -0.52 226 | -0.04 -1.00 0.92 -0.84 -0.25 1.00 0.31 1.00 0.00 0.00 0.25 -0.68 227 | -0.02 -1.00 0.96 -0.92 -0.13 1.00 0.71 1.00 0.00 0.00 0.13 -0.84 228 | 0.00 1.00 -1.00 -1.00 0.00 -1.00 0.35 1.00 0.00 0.00 0.00 -1.00 229 | 0.02 1.00 -0.96 -0.92 0.13 -1.00 0.58 1.00 0.00 0.13 0.13 -0.84 230 | 0.04 1.00 -0.92 -0.84 0.25 -1.00 0.38 1.00 0.00 0.25 0.25 -0.68 231 | 0.06 1.00 -0.88 -0.76 0.37 -1.00 0.45 1.00 0.00 0.37 0.37 -0.52 232 | 0.08 1.00 -0.84 -0.68 0.48 -1.00 0.96 1.00 0.00 0.48 0.48 -0.36 233 | 0.10 1.00 -0.80 -0.60 0.59 -1.00 0.00 1.00 0.00 0.59 0.59 -0.20 234 | 0.12 1.00 -0.76 -0.52 0.68 -1.00 0.59 1.00 0.00 0.68 0.68 -0.04 235 | 0.14 1.00 -0.72 -0.44 0.77 -0.71 0.09 1.00 0.00 0.77 0.77 0.12 236 | 0.16 1.00 -0.68 -0.36 0.84 -0.71 0.93 1.00 0.00 0.84 0.84 0.28 237 | 0.18 1.00 -0.64 -0.28 0.90 -0.71 0.17 1.00 0.00 0.90 0.90 0.44 238 | 0.20 1.00 -0.60 -0.20 0.95 -0.71 0.32 1.00 0.00 0.95 0.95 0.60 239 | 0.22 1.00 -0.56 -0.12 0.98 -0.71 0.18 1.00 0.00 0.98 0.98 0.76 240 | 0.24 1.00 -0.52 -0.04 1.00 -0.71 0.87 1.00 0.00 1.00 1.00 0.92 241 | 0.26 1.00 -0.48 0.04 1.00 -0.43 0.67 1.00 0.00 1.00 1.00 1.00 242 | 0.28 1.00 -0.44 0.12 0.98 -0.43 0.22 1.00 0.00 0.98 0.98 1.00 243 | 0.30 1.00 -0.40 0.20 0.95 -0.43 0.83 1.00 0.00 0.95 0.95 1.00 244 | 0.32 1.00 -0.36 0.28 0.90 -0.43 0.65 1.00 0.00 0.90 0.90 1.00 245 | 0.34 1.00 -0.32 0.36 0.84 -0.43 0.32 1.00 0.00 0.84 0.84 1.00 246 | 0.36 1.00 -0.28 0.44 0.77 -0.43 0.30 1.00 0.00 0.77 0.77 1.00 247 | 0.38 1.00 -0.24 0.52 0.68 -0.14 0.90 1.00 0.00 0.68 0.68 1.00 248 | 0.40 1.00 -0.20 0.60 0.59 -0.14 0.86 1.00 0.00 0.59 0.59 1.00 249 | 0.42 1.00 -0.16 0.68 0.48 -0.14 0.30 1.00 0.00 0.48 0.48 1.00 250 | 0.44 1.00 -0.12 0.76 0.37 -0.14 0.68 1.00 0.00 0.37 0.37 1.00 251 | 0.46 1.00 -0.08 0.84 0.25 -0.14 0.06 1.00 0.00 0.25 0.25 1.00 252 | 0.48 1.00 -0.04 0.92 0.13 -0.14 0.27 1.00 0.00 0.13 0.13 1.00 253 | 0.50 -1.00 0.00 1.00 -0.00 0.14 0.00 1.00 0.00 0.00 0.00 1.00 254 | 0.52 -1.00 0.04 0.92 -0.13 0.14 0.62 1.00 0.00 0.00 0.13 0.84 255 | 0.54 -1.00 0.08 0.84 -0.25 0.14 0.18 1.00 0.00 0.00 0.25 0.68 256 | 0.56 -1.00 0.12 0.76 -0.37 0.14 0.13 1.00 0.00 0.00 0.37 0.52 257 | 0.58 -1.00 0.16 0.68 -0.48 0.14 0.96 1.00 0.00 0.00 0.48 0.36 258 | 0.60 -1.00 0.20 0.60 -0.59 0.14 0.83 1.00 0.00 0.00 0.59 0.20 259 | 0.62 -1.00 0.24 0.52 -0.68 0.14 0.11 1.00 0.00 0.00 0.68 0.04 260 | 0.64 -1.00 0.28 0.44 -0.77 0.43 0.56 1.00 0.00 0.00 0.77 -0.12 261 | 0.66 -1.00 0.32 0.36 -0.84 0.43 0.44 1.00 0.00 0.00 0.84 -0.28 262 | 0.68 -1.00 0.36 0.28 -0.90 0.43 0.05 1.00 0.00 0.00 0.90 -0.44 263 | 0.70 -1.00 0.40 0.20 -0.95 0.43 0.35 1.00 0.00 0.00 0.95 -0.60 264 | 0.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 0.00 0.98 -0.76 265 | 0.74 -1.00 0.48 0.04 -1.00 0.43 0.71 1.00 0.00 0.00 1.00 -0.92 266 | 0.76 -1.00 0.52 -0.04 -1.00 0.71 0.26 1.00 0.00 0.00 1.00 -1.00 267 | 0.78 -1.00 0.56 -0.12 -0.98 0.71 0.79 1.00 0.00 0.00 0.98 -1.00 268 | 0.80 -1.00 0.60 -0.20 -0.95 0.71 0.63 1.00 0.00 0.00 0.95 -1.00 269 | 0.82 -1.00 0.64 -0.28 -0.90 0.71 0.54 1.00 0.00 0.00 0.90 -1.00 270 | 0.84 -1.00 0.68 -0.36 -0.84 0.71 0.34 1.00 0.00 0.00 0.84 -1.00 271 | 0.86 -1.00 0.72 -0.44 -0.77 0.71 0.59 1.00 0.00 0.00 0.77 -1.00 272 | 0.88 -1.00 0.76 -0.52 -0.68 1.00 0.43 1.00 0.00 0.00 0.68 -1.00 273 | 0.90 -1.00 0.80 -0.60 -0.59 1.00 0.24 1.00 0.00 0.00 0.59 -1.00 274 | 0.92 -1.00 0.84 -0.68 -0.48 1.00 0.94 1.00 0.00 0.00 0.48 -1.00 275 | 0.94 -1.00 0.88 -0.76 -0.37 1.00 0.54 1.00 0.00 0.00 0.37 -1.00 276 | 0.96 -1.00 0.92 -0.84 -0.25 1.00 0.77 1.00 0.00 0.00 0.25 -1.00 277 | 0.98 -1.00 0.96 -0.92 -0.13 1.00 0.43 1.00 0.00 0.00 0.13 -1.00 278 | 1.00 1.00 -1.00 -1.00 0.00 -1.00 0.16 1.00 0.00 0.00 0.00 -1.00 279 | 1.02 1.00 -0.96 -0.92 0.13 -1.00 0.44 1.00 0.00 0.13 0.13 -0.84 280 | 1.04 1.00 -0.92 -0.84 0.25 -1.00 0.76 1.00 0.00 0.25 0.25 -0.68 281 | 1.06 1.00 -0.88 -0.76 0.37 -1.00 0.54 1.00 0.00 0.37 0.37 -0.52 282 | 1.08 1.00 -0.84 -0.68 0.48 -1.00 0.52 1.00 0.00 0.48 0.48 -0.36 283 | 1.10 1.00 -0.80 -0.60 0.59 -1.00 0.56 1.00 0.00 0.59 0.59 -0.20 284 | 1.12 1.00 -0.76 -0.52 0.68 -1.00 0.25 1.00 0.00 0.68 0.68 -0.04 285 | 1.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 0.77 0.77 0.12 286 | 1.16 1.00 -0.68 -0.36 0.84 -0.71 0.02 1.00 0.00 0.84 0.84 0.28 287 | 1.18 1.00 -0.64 -0.28 0.90 -0.71 0.85 1.00 0.00 0.90 0.90 0.44 288 | 1.20 1.00 -0.60 -0.20 0.95 -0.71 0.13 1.00 0.00 0.95 0.95 0.60 289 | 1.22 1.00 -0.56 -0.12 0.98 -0.71 0.05 1.00 0.00 0.98 0.98 0.76 290 | 1.24 1.00 -0.52 -0.04 1.00 -0.71 0.93 1.00 0.00 1.00 1.00 0.92 291 | 1.26 1.00 -0.48 0.04 1.00 -0.43 0.97 1.00 0.00 1.00 1.00 1.00 292 | 1.28 1.00 -0.44 0.12 0.98 -0.43 0.34 1.00 0.00 0.98 0.98 1.00 293 | 1.30 1.00 -0.40 0.20 0.95 -0.43 0.57 1.00 0.00 0.95 0.95 1.00 294 | 1.32 1.00 -0.36 0.28 0.90 -0.43 0.60 1.00 0.00 0.90 0.90 1.00 295 | 1.34 1.00 -0.32 0.36 0.84 -0.43 0.91 1.00 0.00 0.84 0.84 1.00 296 | 1.36 1.00 -0.28 0.44 0.77 -0.43 0.96 1.00 0.00 0.77 0.77 1.00 297 | 1.38 1.00 -0.24 0.52 0.68 -0.14 0.25 1.00 0.00 0.68 0.68 1.00 298 | 1.40 1.00 -0.20 0.60 0.59 -0.14 0.56 1.00 0.00 0.59 0.59 1.00 299 | 1.42 1.00 -0.16 0.68 0.48 -0.14 0.06 1.00 0.00 0.48 0.48 1.00 300 | 1.44 1.00 -0.12 0.76 0.37 -0.14 0.75 1.00 0.00 0.37 0.37 1.00 301 | 1.46 1.00 -0.08 0.84 0.25 -0.14 0.14 1.00 0.00 0.25 0.25 1.00 302 | 1.48 1.00 -0.04 0.92 0.13 -0.14 0.92 1.00 0.00 0.13 0.13 1.00 303 | 1.50 -1.00 0.00 1.00 -0.00 0.14 0.35 1.00 0.00 0.00 0.00 1.00 304 | 1.52 -1.00 0.04 0.92 -0.13 0.14 0.32 1.00 0.00 0.00 0.13 0.84 305 | 1.54 -1.00 0.08 0.84 -0.25 0.14 0.50 1.00 0.00 0.00 0.25 0.68 306 | 1.56 -1.00 0.12 0.76 -0.37 0.14 0.97 1.00 0.00 0.00 0.37 0.52 307 | 1.58 -1.00 0.16 0.68 -0.48 0.14 0.28 1.00 0.00 0.00 0.48 0.36 308 | 1.60 -1.00 0.20 0.60 -0.59 0.14 0.43 1.00 0.00 0.00 0.59 0.20 309 | 1.62 -1.00 0.24 0.52 -0.68 0.14 0.42 1.00 0.00 0.00 0.68 0.04 310 | 1.64 -1.00 0.28 0.44 -0.77 0.43 0.87 1.00 0.00 0.00 0.77 -0.12 311 | 1.66 -1.00 0.32 0.36 -0.84 0.43 0.20 1.00 0.00 0.00 0.84 -0.28 312 | 1.68 -1.00 0.36 0.28 -0.90 0.43 0.51 1.00 0.00 0.00 0.90 -0.44 313 | 1.70 -1.00 0.40 0.20 -0.95 0.43 0.34 1.00 0.00 0.00 0.95 -0.60 314 | 1.72 -1.00 0.44 0.12 -0.98 0.43 0.26 1.00 0.00 0.00 0.98 -0.76 315 | 1.74 -1.00 0.48 0.04 -1.00 0.43 0.04 1.00 0.00 0.00 1.00 -0.92 316 | 1.76 -1.00 0.52 -0.04 -1.00 0.71 0.04 1.00 0.00 0.00 1.00 -1.00 317 | 1.78 -1.00 0.56 -0.12 -0.98 0.71 0.60 1.00 0.00 0.00 0.98 -1.00 318 | 1.80 -1.00 0.60 -0.20 -0.95 0.71 0.82 1.00 0.00 0.00 0.95 -1.00 319 | 1.82 -1.00 0.64 -0.28 -0.90 0.71 0.23 1.00 0.00 0.00 0.90 -1.00 320 | 1.84 -1.00 0.68 -0.36 -0.84 0.71 0.93 1.00 0.00 0.00 0.84 -1.00 321 | 1.86 -1.00 0.72 -0.44 -0.77 0.71 0.31 1.00 0.00 0.00 0.77 -1.00 322 | 1.88 -1.00 0.76 -0.52 -0.68 1.00 0.50 1.00 0.00 0.00 0.68 -1.00 323 | 1.90 -1.00 0.80 -0.60 -0.59 1.00 0.08 1.00 0.00 0.00 0.59 -1.00 324 | 1.92 -1.00 0.84 -0.68 -0.48 1.00 0.47 1.00 0.00 0.00 0.48 -1.00 325 | 1.94 -1.00 0.88 -0.76 -0.37 1.00 0.30 1.00 0.00 0.00 0.37 -1.00 326 | 1.96 -1.00 0.92 -0.84 -0.25 1.00 0.63 1.00 0.00 0.00 0.25 -1.00 327 | 1.98 -1.00 0.96 -0.92 -0.13 1.00 0.59 1.00 0.00 0.00 0.13 -1.00 328 | 2.00 1.00 -1.00 -1.00 0.00 -1.00 0.36 1.00 0.00 0.00 0.00 -1.00 329 | 2.02 1.00 -0.96 -0.92 0.13 -1.00 0.53 1.00 0.00 0.13 0.13 -0.84 330 | 2.04 1.00 -0.92 -0.84 0.25 -1.00 0.87 1.00 0.00 0.25 0.25 -0.68 331 | 2.06 1.00 -0.88 -0.76 0.37 -1.00 0.18 1.00 0.00 0.37 0.37 -0.52 332 | 2.08 1.00 -0.84 -0.68 0.48 -1.00 0.24 1.00 0.00 0.48 0.48 -0.36 333 | 2.10 1.00 -0.80 -0.60 0.59 -1.00 0.27 1.00 0.00 0.59 0.59 -0.20 334 | 2.12 1.00 -0.76 -0.52 0.68 -1.00 0.31 1.00 0.00 0.68 0.68 -0.04 335 | 2.14 1.00 -0.72 -0.44 0.77 -0.71 0.06 1.00 0.00 0.77 0.77 0.12 336 | 2.16 1.00 -0.68 -0.36 0.84 -0.71 0.64 1.00 0.00 0.84 0.84 0.28 337 | 2.18 1.00 -0.64 -0.28 0.90 -0.71 0.30 1.00 0.00 0.90 0.90 0.44 338 | 2.20 1.00 -0.60 -0.20 0.95 -0.71 0.75 1.00 0.00 0.95 0.95 0.60 339 | 2.22 1.00 -0.56 -0.12 0.98 -0.71 0.87 1.00 0.00 0.98 0.98 0.76 340 | 2.24 1.00 -0.52 -0.04 1.00 -0.71 0.96 1.00 0.00 1.00 1.00 0.92 341 | 2.26 1.00 -0.48 0.04 1.00 -0.43 0.48 1.00 0.00 1.00 1.00 1.00 342 | 2.28 1.00 -0.44 0.12 0.98 -0.43 0.54 1.00 0.00 0.98 0.98 1.00 343 | 2.30 1.00 -0.40 0.20 0.95 -0.43 0.20 1.00 0.00 0.95 0.95 1.00 344 | 2.32 1.00 -0.36 0.28 0.90 -0.43 0.64 1.00 0.00 0.90 0.90 1.00 345 | 2.34 1.00 -0.32 0.36 0.84 -0.43 0.72 1.00 0.00 0.84 0.84 1.00 346 | 2.36 1.00 -0.28 0.44 0.77 -0.43 0.07 1.00 0.00 0.77 0.77 1.00 347 | 2.38 1.00 -0.24 0.52 0.68 -0.14 0.38 1.00 0.00 0.68 0.68 1.00 348 | 2.40 1.00 -0.20 0.60 0.59 -0.14 0.51 1.00 0.00 0.59 0.59 1.00 349 | 2.42 1.00 -0.16 0.68 0.48 -0.14 0.47 1.00 0.00 0.48 0.48 1.00 350 | 2.44 1.00 -0.12 0.76 0.37 -0.14 0.93 1.00 0.00 0.37 0.37 1.00 351 | 2.46 1.00 -0.08 0.84 0.25 -0.14 0.13 1.00 0.00 0.25 0.25 1.00 352 | 2.48 1.00 -0.04 0.92 0.13 -0.14 0.80 1.00 0.00 0.13 0.13 1.00 353 | 2.50 -1.00 0.00 1.00 -0.00 0.14 0.10 1.00 0.00 0.00 0.00 1.00 354 | 2.52 -1.00 0.04 0.92 -0.13 0.14 0.61 1.00 0.00 0.00 0.13 0.84 355 | 2.54 -1.00 0.08 0.84 -0.25 0.14 0.26 1.00 0.00 0.00 0.25 0.68 356 | 2.56 -1.00 0.12 0.76 -0.37 0.14 0.40 1.00 0.00 0.00 0.37 0.52 357 | 2.58 -1.00 0.16 0.68 -0.48 0.14 0.90 1.00 0.00 0.00 0.48 0.36 358 | 2.60 -1.00 0.20 0.60 -0.59 0.14 0.77 1.00 0.00 0.00 0.59 0.20 359 | 2.62 -1.00 0.24 0.52 -0.68 0.14 0.20 1.00 0.00 0.00 0.68 0.04 360 | 2.64 -1.00 0.28 0.44 -0.77 0.43 0.54 1.00 0.00 0.00 0.77 -0.12 361 | 2.66 -1.00 0.32 0.36 -0.84 0.43 0.88 1.00 0.00 0.00 0.84 -0.28 362 | 2.68 -1.00 0.36 0.28 -0.90 0.43 1.00 1.00 0.00 0.00 0.90 -0.44 363 | 2.70 -1.00 0.40 0.20 -0.95 0.43 0.38 1.00 0.00 0.00 0.95 -0.60 364 | 2.72 -1.00 0.44 0.12 -0.98 0.43 0.82 1.00 0.00 0.00 0.98 -0.76 365 | 2.74 -1.00 0.48 0.04 -1.00 0.43 0.92 1.00 0.00 0.00 1.00 -0.92 366 | 2.76 -1.00 0.52 -0.04 -1.00 0.71 0.88 1.00 0.00 0.00 1.00 -1.00 367 | 2.78 -1.00 0.56 -0.12 -0.98 0.71 0.90 1.00 0.00 0.00 0.98 -1.00 368 | 2.80 -1.00 0.60 -0.20 -0.95 0.71 0.48 1.00 0.00 0.00 0.95 -1.00 369 | 2.82 -1.00 0.64 -0.28 -0.90 0.71 0.57 1.00 0.00 0.00 0.90 -1.00 370 | 2.84 -1.00 0.68 -0.36 -0.84 0.71 0.60 1.00 0.00 0.00 0.84 -1.00 371 | 2.86 -1.00 0.72 -0.44 -0.77 0.71 0.49 1.00 0.00 0.00 0.77 -1.00 372 | 2.88 -1.00 0.76 -0.52 -0.68 1.00 0.60 1.00 0.00 0.00 0.68 -1.00 373 | 2.90 -1.00 0.80 -0.60 -0.59 1.00 0.79 1.00 0.00 0.00 0.59 -1.00 374 | 2.92 -1.00 0.84 -0.68 -0.48 1.00 0.35 1.00 0.00 0.00 0.48 -1.00 375 | 2.94 -1.00 0.88 -0.76 -0.37 1.00 0.39 1.00 0.00 0.00 0.37 -1.00 376 | 2.96 -1.00 0.92 -0.84 -0.25 1.00 0.85 1.00 0.00 0.00 0.25 -1.00 377 | 2.98 -1.00 0.96 -0.92 -0.13 1.00 0.84 1.00 0.00 0.00 0.13 -1.00 378 | 3.00 1.00 -1.00 -1.00 0.00 -1.00 0.30 1.00 0.00 0.00 0.00 -1.00 379 | 3.02 1.00 -0.96 -0.92 0.13 -1.00 0.76 1.00 0.00 0.13 0.13 -0.84 380 | 3.04 1.00 -0.92 -0.84 0.25 -1.00 0.07 1.00 0.00 0.25 0.25 -0.68 381 | 3.06 1.00 -0.88 -0.76 0.37 -1.00 0.09 1.00 0.00 0.37 0.37 -0.52 382 | 3.08 1.00 -0.84 -0.68 0.48 -1.00 0.22 1.00 0.00 0.48 0.48 -0.36 383 | 3.10 1.00 -0.80 -0.60 0.59 -1.00 0.86 1.00 0.00 0.59 0.59 -0.20 384 | 3.12 1.00 -0.76 -0.52 0.68 -1.00 0.04 1.00 0.00 0.68 0.68 -0.04 385 | 3.14 1.00 -0.72 -0.44 0.77 -0.71 0.80 1.00 0.00 0.77 0.77 0.12 386 | 3.16 1.00 -0.68 -0.36 0.84 -0.71 0.83 1.00 0.00 0.84 0.84 0.28 387 | 3.18 1.00 -0.64 -0.28 0.90 -0.71 0.23 1.00 0.00 0.90 0.90 0.44 388 | 3.20 1.00 -0.60 -0.20 0.95 -0.71 0.49 1.00 0.00 0.95 0.95 0.60 389 | 3.22 1.00 -0.56 -0.12 0.98 -0.71 0.77 1.00 0.00 0.98 0.98 0.76 390 | 3.24 1.00 -0.52 -0.04 1.00 -0.71 0.78 1.00 0.00 1.00 1.00 0.92 391 | 3.26 1.00 -0.48 0.04 1.00 -0.43 0.35 1.00 0.00 1.00 1.00 1.00 392 | 3.28 1.00 -0.44 0.12 0.98 -0.43 0.99 1.00 0.00 0.98 0.98 1.00 393 | 3.30 1.00 -0.40 0.20 0.95 -0.43 0.14 1.00 0.00 0.95 0.95 1.00 394 | 3.32 1.00 -0.36 0.28 0.90 -0.43 0.05 1.00 0.00 0.90 0.90 1.00 395 | 3.34 1.00 -0.32 0.36 0.84 -0.43 0.70 1.00 0.00 0.84 0.84 1.00 396 | 3.36 1.00 -0.28 0.44 0.77 -0.43 0.82 1.00 0.00 0.77 0.77 1.00 397 | 3.38 1.00 -0.24 0.52 0.68 -0.14 0.62 1.00 0.00 0.68 0.68 1.00 398 | 3.40 1.00 -0.20 0.60 0.59 -0.14 0.01 1.00 0.00 0.59 0.59 1.00 399 | 3.42 1.00 -0.16 0.68 0.48 -0.14 0.69 1.00 0.00 0.48 0.48 1.00 400 | 3.44 1.00 -0.12 0.76 0.37 -0.14 0.19 1.00 0.00 0.37 0.37 1.00 401 | 3.46 1.00 -0.08 0.84 0.25 -0.14 0.39 1.00 0.00 0.25 0.25 1.00 402 | 3.48 1.00 -0.04 0.92 0.13 -0.14 0.39 1.00 0.00 0.13 0.13 1.00 403 | 3.50 -1.00 0.00 1.00 -0.00 0.14 0.46 1.00 0.00 0.00 0.00 1.00 404 | 3.52 -1.00 0.04 0.92 -0.13 0.14 0.75 1.00 0.00 0.00 0.13 0.84 405 | 3.54 -1.00 0.08 0.84 -0.25 0.14 0.21 1.00 0.00 0.00 0.25 0.68 406 | 3.56 -1.00 0.12 0.76 -0.37 0.14 0.85 1.00 0.00 0.00 0.37 0.52 407 | 3.58 -1.00 0.16 0.68 -0.48 0.14 0.92 1.00 0.00 0.00 0.48 0.36 408 | 3.60 -1.00 0.20 0.60 -0.59 0.14 0.78 1.00 0.00 0.00 0.59 0.20 409 | 3.62 -1.00 0.24 0.52 -0.68 0.14 0.41 1.00 0.00 0.00 0.68 0.04 410 | 3.64 -1.00 0.28 0.44 -0.77 0.43 0.90 1.00 0.00 0.00 0.77 -0.12 411 | 3.66 -1.00 0.32 0.36 -0.84 0.43 0.71 1.00 0.00 0.00 0.84 -0.28 412 | 3.68 -1.00 0.36 0.28 -0.90 0.43 0.94 1.00 0.00 0.00 0.90 -0.44 413 | 3.70 -1.00 0.40 0.20 -0.95 0.43 0.92 1.00 0.00 0.00 0.95 -0.60 414 | 3.72 -1.00 0.44 0.12 -0.98 0.43 0.91 1.00 0.00 0.00 0.98 -0.76 415 | 3.74 -1.00 0.48 0.04 -1.00 0.43 0.79 1.00 0.00 0.00 1.00 -0.92 416 | 3.76 -1.00 0.52 -0.04 -1.00 0.71 0.64 1.00 0.00 0.00 1.00 -1.00 417 | 3.78 -1.00 0.56 -0.12 -0.98 0.71 0.08 1.00 0.00 0.00 0.98 -1.00 418 | 3.80 -1.00 0.60 -0.20 -0.95 0.71 0.49 1.00 0.00 0.00 0.95 -1.00 419 | 3.82 -1.00 0.64 -0.28 -0.90 0.71 0.50 1.00 0.00 0.00 0.90 -1.00 420 | 3.84 -1.00 0.68 -0.36 -0.84 0.71 0.86 1.00 0.00 0.00 0.84 -1.00 421 | 3.86 -1.00 0.72 -0.44 -0.77 0.71 0.61 1.00 0.00 0.00 0.77 -1.00 422 | 3.88 -1.00 0.76 -0.52 -0.68 1.00 0.42 1.00 0.00 0.00 0.68 -1.00 423 | 3.90 -1.00 0.80 -0.60 -0.59 1.00 0.25 1.00 0.00 0.00 0.59 -1.00 424 | 3.92 -1.00 0.84 -0.68 -0.48 1.00 0.06 1.00 0.00 0.00 0.48 -1.00 425 | 3.94 -1.00 0.88 -0.76 -0.37 1.00 0.97 1.00 0.00 0.00 0.37 -1.00 426 | 3.96 -1.00 0.92 -0.84 -0.25 1.00 0.81 1.00 0.00 0.00 0.25 -1.00 427 | 3.98 -1.00 0.96 -0.92 -0.13 1.00 0.57 1.00 0.00 0.00 0.13 -1.00 428 | 429 | done... 430 | -------------------------------------------------------------------------------- /examples/functionGeneratorPlotter/functionGeneratorPlotter.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGeneratorPlotter.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // DATE: 2020-06-10 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | // 8 | // use a Serial plotter to show the data 9 | 10 | 11 | #include "functionGenerator.h" 12 | 13 | funcgen gen; 14 | funcgen gen2; 15 | 16 | 17 | void setup() 18 | { 19 | Serial.begin(115200); 20 | // Serial.println(__FILE__); 21 | // Serial.print("FUNCTIONGENERATOR_LIB_VERSION: "); 22 | // Serial.println(FUNCTIONGENERATOR_LIB_VERSION); 23 | // Serial.println(); 24 | 25 | gen.setAmplitude(80); 26 | gen.setFrequency(65.0 / 60.0); // HB = BPM/60.0 27 | gen.setDutyCycle(40); 28 | gen2.setYShift(+20); 29 | 30 | gen2.setAmplitude(80); 31 | gen2.setFrequency(120.0 / 60.0); // HB = BPM/60.0 32 | gen2.setDutyCycle(80); 33 | gen2.setYShift(-80); 34 | } 35 | 36 | 37 | void loop() 38 | { 39 | float t = millis() * 0.001; 40 | 41 | // UNCOMMENT WAVES YOU WANT TO SEE 42 | // DO NOT FORGET TO PRINT THE '\t' SEPARATOR 43 | 44 | // Serial.print(t, 3); 45 | // Serial.print("\t"); 46 | Serial.print(100); 47 | Serial.print("\t"); 48 | Serial.print(-100); 49 | Serial.print("\t"); 50 | // Serial.print(gen.square(t)); 51 | // Serial.print("\t"); 52 | // Serial.print(gen.sawtooth(t, 0)); // up /| signal 53 | // Serial.print("\t"); 54 | // Serial.print(gen.sawtooth(t, 1)); // down |\ signal 55 | // Serial.print("\t"); 56 | // Serial.print(gen.triangle(t)); 57 | // Serial.print("\t"); 58 | // Serial.print(gen.sinus(t)); 59 | // Serial.print("\t"); 60 | // Serial.print(gen.sinusDiode(t)); 61 | // Serial.print("\t"); 62 | // Serial.print(gen.sinusRectified(t)); 63 | // Serial.print("\t"); 64 | // Serial.print(gen.trapezium1(t)); 65 | // Serial.print("\t"); 66 | // Serial.print(gen.trapezium2(t)); 67 | // Serial.print("\t"); 68 | Serial.print(gen.heartBeat(t)); 69 | Serial.print("\t"); 70 | Serial.print(gen2.heartBeat(t)); 71 | // Serial.print("\t"); 72 | // Serial.print(gen.freeWave(t, array)); 73 | // Serial.print("\t"); 74 | // Serial.print(gen.stair(t, 16, 0)); // step up 75 | // Serial.print("\t"); 76 | // Serial.print(gen.stair(t, 16, 1)); // step down 77 | // Serial.print("\t"); 78 | // Serial.print(gen.random()); 79 | // Serial.print("\t"); 80 | // Serial.print(gen.random_DC()); 81 | // Serial.print("\t"); 82 | // Serial.print(gen.line()); 83 | // Serial.print("\t"); 84 | // Serial.print(gen.zero()); 85 | Serial.println(); 86 | delay(10); 87 | } 88 | 89 | 90 | // -- END OF FILE -- 91 | -------------------------------------------------------------------------------- /examples/functionGenerator_MCP4725/functionGenerator_MCP4725.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGenerator_MCP4725.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // DATE: 2021-01-06 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | // 8 | // depending on the platform, the range of "smooth" sinus is limited. 9 | // other signals are less difficult so have a slightly larger range. 10 | // see readme.md for mac frequency table. 11 | 12 | 13 | #include "functionGenerator.h" 14 | #include "MCP4725.h" 15 | #include "Wire.h" 16 | 17 | 18 | funcgen gen; 19 | float value = 0; 20 | float frequency = 40; 21 | float amplitude = 1.0; 22 | 23 | float d = 0; 24 | 25 | // q = square 26 | // s = sinus 27 | // w = sawtooth 28 | // t = stair 29 | // r = random 30 | char mode = 's'; 31 | 32 | MCP4725 MCP(0x63); 33 | uint32_t count; 34 | uint32_t lastTime = 0; 35 | 36 | 37 | void setup() 38 | { 39 | Serial.begin(230400); 40 | gen.setAmplitude(1); 41 | gen.setYShift(1); 42 | gen.setFrequency(frequency); 43 | value = 0; 44 | 45 | Wire.begin(); 46 | MCP.begin(); 47 | Wire.setClock(100000); 48 | 49 | MCP.setValue(0); 50 | if (!MCP.isConnected()) 51 | { 52 | Serial.println("err"); 53 | while (1); 54 | } 55 | 56 | while (1) 57 | { 58 | count++; 59 | float t = micros() * 0.000001; 60 | if (millis() - lastTime > 1000) 61 | { 62 | Serial.println(count); 63 | count = 0; 64 | lastTime = millis(); 65 | } 66 | 67 | if (Serial.available()) 68 | { 69 | int c = Serial.read(); 70 | switch (c) 71 | { 72 | case '+': 73 | frequency += 0.01; 74 | break; 75 | case '-': 76 | frequency -= 0.01; 77 | break; 78 | case '*': 79 | frequency *= 10; 80 | break; 81 | case '/': 82 | frequency /= 10; 83 | break; 84 | case '0' ... '9': 85 | frequency *= 10; 86 | frequency += (c - '0'); 87 | break; 88 | case 'c': 89 | frequency = 0; 90 | break; 91 | case 'A': 92 | break; 93 | case 'a': 94 | break; 95 | case 'D': 96 | d = gen.getDutyCycle(); 97 | d++; 98 | gen.setDutyCycle(d); 99 | break; 100 | case 'd': 101 | d = gen.getDutyCycle(); 102 | d--; 103 | gen.setDutyCycle(d); 104 | break; 105 | break; 106 | case 'q': 107 | case 's': 108 | case 'w': 109 | case 't': 110 | case 'r': 111 | mode = c; 112 | break; 113 | default: 114 | break; 115 | } 116 | gen.setFrequency(frequency); 117 | Serial.println(frequency); 118 | } 119 | 120 | switch (mode) 121 | { 122 | case 'q': 123 | value = 2047 * gen.square(t); 124 | break; 125 | case 'w': 126 | value = 2047 * gen.sawtooth(t); 127 | break; 128 | case 't': 129 | value = 2047 * gen.triangle(t); 130 | break; 131 | case 'r': 132 | value = 2047 * gen.random(); 133 | break; 134 | default: 135 | case 's': 136 | value = 2047 * gen.sinus(t); 137 | break; 138 | } 139 | MCP.setValue(value); 140 | } 141 | } 142 | 143 | 144 | void loop() 145 | { 146 | } 147 | 148 | 149 | // -- END OF FILE -- 150 | -------------------------------------------------------------------------------- /examples/functionGenerator_double_MCP4725/functionGenerator_double_MCP4725.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGenerator_double_MCP4725.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // URL: https://github.com/RobTillaart/FunctionGenerator 6 | // 7 | // depending on the platform, the range of "smooth" sinus is limited. 8 | // other signals are less difficult so have a slightly larger range. 9 | // see readme.md for mac frequency table. 10 | 11 | 12 | #include "functionGenerator.h" 13 | #include "MCP4725.h" 14 | #include "Wire.h" 15 | 16 | 17 | // two generators 18 | funcgen gen1; 19 | funcgen gen2; 20 | 21 | // two ADC 22 | MCP4725 MCP1(0x63); 23 | MCP4725 MCP2(0x64); 24 | 25 | uint32_t count = 0; 26 | uint32_t lastTime = 0; 27 | uint32_t t = 0; 28 | 29 | void setup() 30 | { 31 | Serial.begin(230400); 32 | Serial.println(); 33 | Serial.println(__FILE__); 34 | Serial.println(); 35 | 36 | Wire.begin(); 37 | MCP1.begin(); 38 | MCP2.begin(); 39 | Wire.setClock(100000); 40 | 41 | // if (!MCP1.isConnected()) 42 | // { 43 | // Serial.println("error 1!"); 44 | // while (1); 45 | // } 46 | MCP1.setValue(0); 47 | 48 | // if (!MCP2.isConnected()) 49 | // { 50 | // Serial.println("error 2!"); 51 | // while (1); 52 | // } 53 | MCP2.setValue(0); 54 | 55 | // set 5 Hz 56 | gen1.setAmplitude(1023); 57 | gen1.setYShift(1023); 58 | gen1.setFrequency(5); 59 | 60 | // set 10 Hz 61 | gen2.setAmplitude(1023); 62 | gen2.setYShift(1023); 63 | gen2.setFrequency(10); 64 | gen2.setPhase(0.025); 65 | } 66 | 67 | 68 | void loop() 69 | { 70 | uint32_t now = micros(); 71 | if (now - lastTime >= 1000) 72 | { 73 | lastTime = now; 74 | float t = millis() * 0.0001; 75 | MCP1.setValue(gen1.square(t)); 76 | MCP2.setValue(gen2.sinus(t)); 77 | 78 | // Serial.print(gen1.square(t)); 79 | // Serial.print("\t"); 80 | // Serial.print(gen2.sinus(t)); 81 | // Serial.println(); 82 | } 83 | } 84 | 85 | 86 | // -- END OF FILE -- 87 | -------------------------------------------------------------------------------- /examples/generateFreeWave/generateFreeWave.ino: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: generatorFreeWave.ino 3 | // AUTHOR: Rob Tillaart 4 | // PURPOSE: demo function generators 5 | // URL: https://github.com/RobTillaart/FunctionGenerator 6 | 7 | 8 | void setup() 9 | { 10 | Serial.begin(115200); 11 | Serial.println(__FILE__); 12 | Serial.println(); 13 | Serial.println(); 14 | 15 | Serial.println("int16_t arr[101] =\n{"); 16 | for (int i = 0; i < 101; i++) 17 | { 18 | // sin(t) + 0.25*sin(5t) 19 | float f = sin(i * 0.01 * 2 * PI); 20 | float g = sin(i * 0.05 * 2 * PI); 21 | int16_t v = 8000 * (f + 0.25 * g); 22 | Serial.print(""); 23 | Serial.print(v); 24 | Serial.print(","); 25 | if (i > 0 and i % 5 == 0) Serial.println(); 26 | } 27 | Serial.println("};"); 28 | } 29 | 30 | 31 | void loop() 32 | { 33 | } 34 | 35 | 36 | // -- END OF FILE -- 37 | -------------------------------------------------------------------------------- /functionGenerator.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: functionGenerator.cpp 3 | // AUTHOR: Rob Tillaart 4 | // VERSION: 0.3.0 5 | // PURPOSE: wave form generating functions (use with care) 6 | // URL: https://github.com/RobTillaart/FunctionGenerator 7 | 8 | 9 | #include "functionGenerator.h" 10 | 11 | 12 | funcgen::funcgen(float period, float amplitude, float phase, float yShift) 13 | { 14 | setPeriod(period); 15 | setAmplitude(amplitude); 16 | setPhase(phase); 17 | setYShift(yShift); 18 | setDutyCycle(50); // TODO param? 19 | } 20 | 21 | 22 | ///////////////////////////////////////////////////////////// 23 | // 24 | // CONFIGURATION 25 | // 26 | void funcgen::setPeriod(float period) 27 | { 28 | _period = period; 29 | _freq1 = 1 / period; 30 | _freq2 = 2 * _freq1; 31 | _freq4 = 4 * _freq1; 32 | _freq0 = TWO_PI * _freq1; 33 | } 34 | 35 | 36 | float funcgen::getPeriod() 37 | { 38 | return _period; 39 | } 40 | 41 | 42 | void funcgen::setFrequency(float freq) 43 | { 44 | setPeriod(1.0 / freq); 45 | } 46 | 47 | 48 | float funcgen::getFrequency() 49 | { 50 | return _freq1; 51 | } 52 | 53 | 54 | void funcgen::setAmplitude(float ampl) 55 | { 56 | _amplitude = ampl; 57 | } 58 | 59 | 60 | float funcgen::getAmplitude() 61 | { 62 | return _amplitude; 63 | } 64 | 65 | void funcgen::setPhase(float phase) 66 | { 67 | _phase = phase; 68 | } 69 | 70 | 71 | float funcgen::getPhase() 72 | { 73 | return _phase; 74 | } 75 | 76 | 77 | void funcgen::setYShift(float yShift) 78 | { 79 | _yShift = yShift; 80 | } 81 | 82 | 83 | float funcgen::getYShift() 84 | { 85 | return _yShift; 86 | } 87 | 88 | 89 | void funcgen::setDutyCycle(float dutyCycle) 90 | { 91 | // negative dutyCycle? => 1-dc? or abs()? 92 | if (dutyCycle < 0) _dutyCycle = 0.0; 93 | else if (dutyCycle > 100) _dutyCycle = 1.0; 94 | else _dutyCycle = dutyCycle * 0.01; 95 | } 96 | 97 | 98 | float funcgen::getDutyCycle() 99 | { 100 | return _dutyCycle * 100.0; 101 | } 102 | 103 | 104 | void funcgen::setRandomSeed(uint32_t a, uint32_t b) 105 | { 106 | // prevent zero loops in random() function. 107 | if (a == 0) a = 123; 108 | if (b == 0) b = 456; 109 | _m_w = a; 110 | _m_z = b; 111 | } 112 | 113 | 114 | ///////////////////////////////////////////////////////////// 115 | // 116 | // FUNCTIONS 117 | // 118 | float funcgen::line() 119 | { 120 | return _yShift + _amplitude; 121 | } 122 | 123 | 124 | float funcgen::zero() 125 | { 126 | return 0; 127 | } 128 | 129 | 130 | float funcgen::sawtooth(float t, uint8_t mode) 131 | { 132 | float rv; 133 | t += _phase; 134 | if (t >= 0.0) 135 | { 136 | t = fmod(t, _period); 137 | if (mode == 1) t = _period - t; 138 | rv = _amplitude * (-1.0 + t *_freq2); 139 | } 140 | else 141 | { 142 | t = -t; 143 | t = fmod(t, _period); 144 | if (mode == 1) t = _period - t; 145 | rv = _amplitude * ( 1.0 - t * _freq2); 146 | } 147 | rv += _yShift; 148 | return rv; 149 | } 150 | 151 | 152 | float funcgen::triangle(float t) 153 | { 154 | float rv; 155 | t += _phase; 156 | if (t < 0.0) 157 | { 158 | t = -t; 159 | } 160 | t = fmod(t, _period); 161 | if (t < (_period * _dutyCycle)) 162 | { 163 | rv = _amplitude * (-1.0 + t * _freq2 / _dutyCycle); 164 | } 165 | else 166 | { 167 | // mirror math 168 | t = _period - t; 169 | rv = _amplitude * (-1.0 + t * _freq2 /(1 - _dutyCycle)); 170 | } 171 | rv += _yShift; 172 | return rv; 173 | } 174 | 175 | 176 | float funcgen::square(float t) 177 | { 178 | float rv; 179 | t += _phase; 180 | if (t >= 0) 181 | { 182 | t = fmod(t, _period); 183 | if (t < (_period * _dutyCycle)) rv = _amplitude; 184 | else rv = -_amplitude; 185 | } 186 | else 187 | { 188 | t = -t; 189 | t = fmod(t, _period); 190 | if (t < (_period * _dutyCycle)) rv = -_amplitude; 191 | else rv = _amplitude; 192 | } 193 | rv += _yShift; 194 | return rv; 195 | } 196 | 197 | 198 | float funcgen::sinus(float t) 199 | { 200 | float rv; 201 | t += _phase; 202 | rv = _amplitude * sin(t * _freq0); 203 | rv += _yShift; 204 | return rv; 205 | } 206 | 207 | 208 | float funcgen::stair(float t, uint16_t steps, uint8_t mode) 209 | { 210 | t += _phase; 211 | if (t >= 0) 212 | { 213 | t = fmod(t, _period); 214 | if (mode == 1) t = _period - t; 215 | int level = steps * t / _period; 216 | return _yShift + _amplitude * (-1.0 + 2.0 * level / (steps - 1)); 217 | } 218 | t = -t; 219 | t = fmod(t, _period); 220 | if (mode == 1) t = _period - t; 221 | int level = steps * t / _period; 222 | return _yShift + _amplitude * (1.0 - 2.0 * level / (steps - 1)); 223 | } 224 | 225 | 226 | float funcgen::random() 227 | { 228 | float rv = _yShift + _amplitude * _random() * 0.2328306436E-9; // div 0xFFFFFFFF 229 | return rv; 230 | } 231 | 232 | 233 | // duty cycle variant takes more than twice as much time. 234 | float funcgen::random_DC() 235 | { 236 | static float rv = 0; 237 | float next = _yShift + _amplitude * _random() * 0.2328306436E-9; // div 0xFFFFFFFF 238 | rv += (next - rv) * _dutyCycle; 239 | return rv; 240 | } 241 | 242 | 243 | ///////////////////////////////////////////////////////////// 244 | // 245 | // EXPERIMENTAL 0.2.7 246 | // 247 | float funcgen::sinusDiode(float t) 248 | { 249 | float rv = sinus(t); 250 | if (rv < _yShift) return _yShift; 251 | return rv; 252 | 253 | // float rv; 254 | // t += _phase; 255 | // rv = sin(t * _freq0); 256 | // if (rv < 0) return _yShift; 257 | // rv *= amplitude; 258 | // rv += _yShift; 259 | // return rv; 260 | } 261 | 262 | 263 | float funcgen::sinusRectified(float t) 264 | { 265 | // float rv = sinus(t); 266 | // if (rv < _yShift) return _yShift - rv; 267 | // return rv; 268 | 269 | float rv; 270 | t += _phase; 271 | rv = _amplitude * sin(t * _freq0); 272 | if (rv < 0) rv = -rv; 273 | rv += _yShift; 274 | return rv; 275 | } 276 | 277 | 278 | float funcgen::trapezium1(float t) 279 | { 280 | t += _phase + _period * _dutyCycle / 4; // zero point for t = 0 281 | if (t < 0) 282 | { 283 | t = -t; 284 | } 285 | t = fmod(t, _period); 286 | 287 | if (t < _period * 0.5 * _dutyCycle) // rising part 288 | { 289 | return _yShift + -_amplitude + 2 * _amplitude * (t * 2 / (_period * _dutyCycle)); 290 | } 291 | else if (t < _period * 0.5) // high part 292 | { 293 | return _yShift + _amplitude; 294 | } 295 | else if (t < _period * (0.5 + 0.5 * _dutyCycle)) // falling part 296 | { 297 | return _yShift + _amplitude - 2 * _amplitude * ( (t * 2 - _period) / (_period * _dutyCycle)); 298 | } 299 | else // low part 300 | { 301 | return _yShift + -_amplitude; 302 | } 303 | } 304 | 305 | 306 | float funcgen::trapezium2(float t) 307 | { 308 | t += _phase + _period * _dutyCycle / 4; // zero point for t = 0 309 | if (t < 0) 310 | { 311 | t = -t; 312 | } 313 | t = fmod(t, _period); 314 | 315 | if (t < _period * 0.25) // rising part 316 | { 317 | return _yShift + -_amplitude + 2 * _amplitude * (t * 4 / _period); 318 | } 319 | else if (t < _period * (0.25 + 0.5 * _dutyCycle)) // high part 320 | { 321 | return _yShift + _amplitude; 322 | } 323 | else if (t < _period * (0.5 + 0.5 * _dutyCycle)) // falling part 324 | { 325 | return _yShift + _amplitude - 2 * _amplitude * ((t - _period * (0.25 + 0.5 * _dutyCycle)) * 4 / _period); 326 | } 327 | else // low part 328 | { 329 | return _yShift + -_amplitude; 330 | } 331 | } 332 | 333 | 334 | /* 335 | // no DC version (50% 336 | float funcgen::trapezium(float t) 337 | { 338 | t += _phase; 339 | if (t < 0) 340 | { 341 | t = -t; 342 | } 343 | t = fmod(t, _period); 344 | 345 | if (t < _period * 0.25) // rising part 346 | { 347 | return -_amplitude + 2 * _amplitude * (t * 4 / _period); 348 | } 349 | else if (t < _period * 0.5) // high part 350 | { 351 | return _amplitude; 352 | } 353 | else if (t < _period * 0.75) // high part 354 | { 355 | return _amplitude - 2 * _amplitude * ((t - _period/2) * 4 / _period); 356 | } 357 | else // low part 358 | { 359 | return -_amplitude; 360 | } 361 | } 362 | */ 363 | 364 | 365 | // 366 | // EXPERIMENTAL HEARTBEAT 367 | // => setFrequency(72.0 / 60.0); // BPM/60 = BPS. 368 | float funcgen::heartBeat(float t) 369 | { 370 | int16_t out[32] = { 371 | 0, 0, 1000, 2500, 372 | 1000, 1000, -50, 10000, 373 | -2500, 2000, 2500, 3000, 374 | 3000, 2000, 0, 0, 375 | 0,0,0,0, 376 | 0,0,0,0, 377 | 0,0,0,0, 378 | 0,0,0,0, 379 | }; 380 | // use duty cycle to determine zero level duration. 381 | int pts = map(_dutyCycle * 100, 0, 100, 31, 15); 382 | 383 | return freeWave(t, out, pts); 384 | } 385 | 386 | 387 | /* 388 | // points need to be optimized, 389 | // 0.2.7 uses 160 bytes for the two arrays. 390 | // wrapper around freeWave? 391 | float funcgen::heartBeat(float t) 392 | { 393 | // based upon MultiMap in[] array is normalized to 0.0 - 1.0 394 | // Heart beat phase P Q R S T U 395 | float in[21] = { 0.0, 0.07, 0.13, 0.20, 0.27, 0.33, 0.40, 0.46, 0.53, 0.60, 0.66, 0.73, 0.80, 0.86, 0.93, 1.00 }; 396 | float out[21] = { 0.0, 0.00, 0.10, 0.25, 0.10, 0.10, -0.05, 1.00, -0.25, 0.20, 0.25, 0.30, 0.30, 0.20, 0.00, 0.00 }; 397 | 398 | t += _phase; 399 | t = fmod(t, _period); 400 | 401 | // normalize t to 0.0 - 1.0 402 | t *= _freq1; 403 | // search interval 404 | int idx = 0; 405 | while (t > in[idx]) idx++; 406 | if (t == in[idx]) return _yShift + _amplitude * out[idx]; 407 | idx--; 408 | // interpolate. 409 | float factor = (t - in[idx]) / (in[idx+1] - in[idx]); 410 | return _yShift + _amplitude * (out[idx] + factor * (out[idx+1] - out[idx])); 411 | } 412 | */ 413 | 414 | 415 | float funcgen::freeWave(float t, int16_t * arr, int16_t size) 416 | { 417 | t += _phase; 418 | // normalize t to 0.0 - 1.0 419 | t = fmod(t, _period); 420 | t *= _freq1; 421 | 422 | // search interval, as arr is based upon N equidistant points, 423 | // we can easily calculate the points for direct access 424 | float factor = t * size; 425 | int idx = factor; // truncate to get index of output array. 426 | factor = factor - idx; // remainder is interpolate factor. 427 | // interpolate. 428 | return _yShift + _amplitude * 1e-4 * (arr[idx] + factor * (arr[idx+1] - arr[idx])); 429 | } 430 | 431 | 432 | ///////////////////////////////////////////////////////////// 433 | // 434 | // PRIVATE 435 | // 436 | // An example of a simple pseudo-random number generator is the 437 | // Multiply-with-carry method invented by George Marsaglia. 438 | // two initializers (not null) 439 | uint32_t funcgen::_random() 440 | { 441 | _m_z = 36969L * (_m_z & 65535L) + (_m_z >> 16); 442 | _m_w = 18000L * (_m_w & 65535L) + (_m_w >> 16); 443 | return (_m_z << 16) + _m_w; /* 32-bit result */ 444 | } 445 | 446 | 447 | 448 | ///////////////////////////////////////////////////////////// 449 | // 450 | // INTEGER VERSIONS FOR 8 BIT DAC 451 | // 452 | // 8 bits version 453 | // t = 0..9999 period 10000 in millis, returns 0..255 454 | 455 | /* 456 | 457 | uint8_t ifgsaw(uint16_t t, uint16_t period = 1000) 458 | { 459 | return 255L * t / period; 460 | } 461 | 462 | 463 | uint8_t ifgtri(uint16_t t, uint16_t period = 1000) 464 | { 465 | if (t * 2 < period) return 510L * t / period; 466 | return 255L - 510L * t / period; 467 | } 468 | 469 | 470 | uint8_t ifgsqr(uint16_t t, uint16_t period = 1000) 471 | { 472 | if (t * 2 < period) return 510L * t / period; 473 | return 255L - 510L * t / period; 474 | } 475 | 476 | 477 | uint8_t ifgsin(uint16_t t, uint16_t period = 1000) 478 | { 479 | return sin(355L * t / period / 113); // LUT 480 | } 481 | 482 | 483 | uint8_t ifgstr(uint16_t t, uint16_t period = 1000, uint16_t steps = 8) 484 | { 485 | int level = 1L * steps * t / period; 486 | return 255L * level / (steps - 1); 487 | } 488 | 489 | */ 490 | 491 | 492 | ///////////////////////////////////////////////////////////// 493 | // 494 | // SIMPLE float ONES 495 | // 496 | // t = 0..period 497 | // period = 0.001 ... 10000 ? 498 | 499 | /* 500 | float fgsaw(float t, float period = 1.0) 501 | { 502 | if (t >= 0) return -1.0 + 2 * t / period; 503 | return 1.0 + 2 * t / period; 504 | } 505 | 506 | 507 | float fgtri(float t, float period = 1.0) 508 | { 509 | if (t < 0) t = -t; 510 | if (t * 2 < period) return -1.0 + 4 * t / period; 511 | return 3.0 - 4 * t / period; 512 | } 513 | 514 | 515 | float fgsqr(float t, float period = 1.0) 516 | { 517 | if (t >= 0) 518 | { 519 | if ( 2 * t < period) return 1.0; 520 | return -1.0; 521 | } 522 | t = -t; 523 | if (2 * t < period) return -1.0; 524 | return 1.0; 525 | } 526 | 527 | 528 | float fgsin(float t, float period = 1.0) 529 | { 530 | return sin(TWO_PI * t / period); 531 | } 532 | 533 | 534 | float fgstr(float t, float period = 1.0, uint16_t steps = 8) 535 | { 536 | if (t >= 0) 537 | { 538 | int level = steps * t / period; 539 | return -1.0 + 2.0 * level / (steps - 1); 540 | } 541 | t = -t; 542 | int level = steps * t / period; 543 | return 1.0 - 2.0 * level / (steps - 1); 544 | } 545 | */ 546 | 547 | 548 | ///////////////////////////////////////////////////////////// 549 | // 550 | // FULL floatS ONES 551 | // 552 | // SAWTOOTH 553 | float fgsaw(float t, float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0) 554 | { 555 | t += phase; 556 | if (t >= 0) 557 | { 558 | if (t >= period) t = fmod(t, period); 559 | return yShift + amplitude * (-1.0 + 2 * t / period); 560 | } 561 | t = -t; 562 | if (t >= period) t = fmod(t, period); 563 | return yShift + amplitude * ( 1.0 - 2 * t / period); 564 | } 565 | 566 | 567 | // TRIANGLE 568 | float fgtri(float t, float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0, float dutyCycle = 0.50) 569 | { 570 | t += phase; 571 | if (t < 0) t = -t; 572 | if (t >= period) t = fmod(t, period); 573 | // 50 % dutyCycle = faster 574 | // if (t * 2 < period) return yShift + amplitude * (-1.0 + 4 * t / period); 575 | // return yShift + amplitude * (3.0 - 4 * t / period); 576 | if (t < dutyCycle * period) return yShift + amplitude * (-1.0 + 2 * t / (dutyCycle * period)); 577 | // return yShift + amplitude * (-1.0 + 2 / (1 - dutyCycle) - 2 * t / ((1 - dutyCycle) * period)); 578 | return yShift + amplitude * (-1.0 + 2 / (1 - dutyCycle) * ( 1 - t / period)); 579 | } 580 | 581 | 582 | // SQUARE 583 | float fgsqr(float t, float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0, float dutyCycle = 0.50) 584 | { 585 | t += phase; 586 | if (t >= 0) 587 | { 588 | if (t >= period) t = fmod(t, period); 589 | if (t < dutyCycle * period) return yShift + amplitude; 590 | return yShift - amplitude; 591 | } 592 | t = -t; 593 | if (t >= period) t = fmod(t, period); 594 | if (t < dutyCycle * period) return yShift - amplitude; 595 | return yShift + amplitude; 596 | } 597 | 598 | 599 | // SINUS 600 | float fgsin(float t, float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0) 601 | { 602 | t += phase; 603 | float rv = yShift + amplitude * sin(TWO_PI * t / period); 604 | return rv; 605 | } 606 | 607 | 608 | // STAIR 609 | float fgstr(float t, float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0, uint16_t steps = 8) 610 | { 611 | t += phase; 612 | if (t >= 0) 613 | { 614 | if (t >= period) t = fmod(t, period); 615 | int level = steps * t / period; 616 | return yShift + amplitude * (-1.0 + 2.0 * level / (steps - 1)); 617 | } 618 | t = -t; 619 | if (t >= period) t = fmod(t, period); 620 | int level = steps * t / period; 621 | return yShift + amplitude * (1.0 - 2.0 * level / (steps - 1)); 622 | } 623 | 624 | 625 | // -- END OF FILE -- 626 | 627 | -------------------------------------------------------------------------------- /functionGenerator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | // 3 | // FILE: functionGenerator.h 4 | // AUTHOR: Rob Tillaart 5 | // VERSION: 0.3.0 6 | // PURPOSE: wave form generating functions (use with care) 7 | // URL: https://github.com/RobTillaart/FunctionGenerator 8 | 9 | 10 | #include "Arduino.h" 11 | 12 | #define FUNCTIONGENERATOR_LIB_VERSION (F("0.3.0")) 13 | 14 | 15 | class funcgen 16 | { 17 | public: 18 | funcgen(float period = 1.0, float amplitude = 1.0, float phase = 0.0, float yShift = 0.0); 19 | 20 | 21 | ///////////////////////////////////////////////////////////// 22 | // 23 | // CONFIGURATION 24 | // 25 | void setPeriod(float period = 1.0); 26 | float getPeriod(); 27 | 28 | void setFrequency(float freq = 1.0); 29 | float getFrequency(); 30 | 31 | void setAmplitude(float ampl = 1.0); 32 | float getAmplitude(); 33 | 34 | void setPhase(float phase = 0.0); 35 | float getPhase(); 36 | 37 | void setYShift(float yShift = 0.0); 38 | float getYShift(); 39 | 40 | void setDutyCycle(float dutyCycle); 41 | float getDutyCycle(); 42 | 43 | void setRandomSeed(uint32_t a, uint32_t b = 314159265); 44 | 45 | 46 | ///////////////////////////////////////////////////////////// 47 | // 48 | // FUNCTIONS 49 | // 50 | // constant amplitude 51 | float line(); 52 | // constant zero for calibration. 53 | float zero(); 54 | 55 | // standard wave forms 56 | float sawtooth(float t, uint8_t mode = 0); // 0 ==> /|. 1 ==> sawtooth |\. 57 | float triangle(float t); 58 | float square(float t); 59 | float sinus(float t); 60 | float stair(float t, uint16_t steps = 8, uint8_t mode = 0); 61 | 62 | float random(); 63 | float random_DC(); // duty cycle variant. Experimental. 64 | 65 | ///////////////////////////////////////////////////////////// 66 | // 67 | // EXPERIMENTAL 0.2.7 68 | // 69 | float sinusDiode(float t); 70 | float sinusRectified(float t); 71 | float trapezium1(float t); 72 | float trapezium2(float t); 73 | float heartBeat(float t); // 72 BPM = 72/60 = 1 setFrequency(1.2) 74 | float freeWave(float t, int16_t * arr, int16_t size); // arr must be size+1 long 75 | 76 | 77 | private: 78 | float _period; 79 | float _freq0; 80 | float _freq1; 81 | float _freq2; 82 | float _freq4; 83 | float _amplitude; 84 | float _phase; 85 | float _yShift; 86 | float _dutyCycle; 87 | 88 | // Marsaglia 'constants' 89 | uint32_t _m_w = 1; 90 | uint32_t _m_z = 2; 91 | uint32_t _random(); 92 | }; 93 | 94 | 95 | // -- END OF FILE -- 96 | 97 | -------------------------------------------------------------------------------- /keywords.txt: -------------------------------------------------------------------------------- 1 | # Syntax Colouring Map for functionGenerator 2 | 3 | # Data types (KEYWORD1) 4 | funcgen KEYWORD1 5 | 6 | # Methods and Functions (KEYWORD2) 7 | setPeriod KEYWORD2 8 | getPeriod KEYWORD2 9 | setFrequency KEYWORD2 10 | getFrequency KEYWORD2 11 | 12 | setAmplitude KEYWORD2 13 | getAmplitude KEYWORD2 14 | setPhase KEYWORD2 15 | getPhase KEYWORD2 16 | 17 | setYShift KEYWORD2 18 | getYShift KEYWORD2 19 | setDutyCycle KEYWORD2 20 | getDutyCycle KEYWORD2 21 | 22 | setRandomSeed KEYWORD2 23 | 24 | line KEYWORD2 25 | zero KEYWORD2 26 | 27 | sawtooth KEYWORD2 28 | triangle KEYWORD2 29 | square KEYWORD2 30 | 31 | sinus KEYWORD2 32 | sinusDiode KEYWORD2 33 | sinusRectified KEYWORD2 34 | 35 | stair KEYWORD2 36 | trapezium1 KEYWORD2 37 | trapezium2 KEYWORD2 38 | 39 | heartBeat KEYWORD2 40 | freeWave KEYWORD2 41 | 42 | random KEYWORD2 43 | random_DC KEYWORD2 44 | 45 | 46 | # Constants (LITERAL1) 47 | FUNCTIONGENERATOR_LIB_VERSION LITERAL1 48 | -------------------------------------------------------------------------------- /library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FunctionGenerator", 3 | "keywords": "Function,wave,generator,sawtooth,sinus,square,stair,triangle", 4 | "description": "Arduino library to generate wave forms (nummeric) for a DAC", 5 | "authors": 6 | [ 7 | { 8 | "name": "Rob Tillaart", 9 | "email": "Rob.Tillaart@gmail.com", 10 | "maintainer": true 11 | } 12 | ], 13 | "repository": 14 | { 15 | "type": "git", 16 | "url": "https://github.com/RobTillaart/FunctionGenerator" 17 | }, 18 | "version": "0.3.0", 19 | "license": "MIT", 20 | "frameworks": "*", 21 | "platforms": "*", 22 | "headers": "functionGenerator.h" 23 | } 24 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=FunctionGenerator 2 | version=0.3.0 3 | author=Rob Tillaart 4 | maintainer=Rob Tillaart 5 | sentence=Arduino library to generate wave forms (nummeric) for a DAC 6 | paragraph=a.k.a. FunctionGenerator 7 | category=Data Processing 8 | url=https://github.com/RobTillaart/FunctionGenerator 9 | architectures=* 10 | includes=functionGenerator.h 11 | depends= 12 | -------------------------------------------------------------------------------- /test/unit_test_001.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // FILE: unit_test_001.cpp 3 | // AUTHOR: Rob Tillaart 4 | // DATE: 2020-12-24 5 | // PURPOSE: unit tests for the FunctionGenerator library 6 | // https://github.com/RobTillaart/FunctionGenerator 7 | // https://github.com/Arduino-CI/arduino_ci/blob/master/REFERENCE.md 8 | // 9 | 10 | // supported assertions 11 | // https://github.com/Arduino-CI/arduino_ci/blob/master/cpp/unittest/Assertion.h#L33-L42 12 | // ---------------------------- 13 | // assertEqual(expected, actual) 14 | // assertNotEqual(expected, actual) 15 | // assertLess(expected, actual) 16 | // assertMore(expected, actual) 17 | // assertLessOrEqual(expected, actual) 18 | // assertMoreOrEqual(expected, actual) 19 | // assertTrue(actual) 20 | // assertFalse(actual) 21 | // assertNull(actual) 22 | // assertNotNull(actual) 23 | 24 | #include 25 | 26 | 27 | #include "Arduino.h" 28 | #include "functionGenerator.h" 29 | 30 | 31 | unittest_setup() 32 | { 33 | fprintf(stderr, "FUNCTIONGENERATOR_LIB_VERSION: %s\n", (char*) FUNCTIONGENERATOR_LIB_VERSION); 34 | } 35 | 36 | 37 | unittest_teardown() 38 | { 39 | } 40 | 41 | 42 | unittest(test_constructor) 43 | { 44 | funcgen gen; 45 | 46 | fprintf(stderr, "Default values\n"); 47 | assertEqualFloat(1, gen.getPeriod(), 0.0001); 48 | assertEqualFloat(1, gen.getFrequency(), 0.0001); 49 | assertEqualFloat(1, gen.getAmplitude(), 0.0001); 50 | 51 | assertEqualFloat(0, gen.getPhase(), 0.0001); 52 | assertEqualFloat(0, gen.getYShift(), 0.0001); 53 | assertEqualFloat(50, gen.getDutyCycle(), 0.0001); 54 | } 55 | 56 | 57 | unittest(test_constructor_param) 58 | { 59 | funcgen gen(4, 2.5, 0.33, -0.5); 60 | 61 | fprintf(stderr, "funcgen gen(4, 2.5, 0.33, -0.5)\n"); 62 | 63 | assertEqualFloat(4.00, gen.getPeriod(), 0.0001); 64 | assertEqualFloat(0.25, gen.getFrequency(), 0.0001); 65 | assertEqualFloat(2.50, gen.getAmplitude(), 0.0001); 66 | 67 | assertEqualFloat(0.33, gen.getPhase(), 0.0001); 68 | assertEqualFloat(-0.5, gen.getYShift(), 0.0001); 69 | assertEqualFloat(50, gen.getDutyCycle(), 0.0001); 70 | } 71 | 72 | 73 | unittest(test_set_get_param) 74 | { 75 | funcgen gen; 76 | 77 | fprintf(stderr, "set get parameters\n"); 78 | 79 | gen.setPeriod(3.1415); 80 | assertEqualFloat(3.1415, gen.getPeriod(), 0.0001); 81 | 82 | gen.setFrequency(142.5); 83 | assertEqualFloat(142.5, gen.getFrequency(), 0.0001); 84 | 85 | gen.setAmplitude(2.345); 86 | assertEqualFloat(2.345, gen.getAmplitude(), 0.0001); 87 | 88 | gen.setPhase(1.5); 89 | assertEqualFloat(1.5, gen.getPhase(), 0.0001); 90 | 91 | gen.setYShift(6.89); 92 | assertEqualFloat(6.89, gen.getYShift(), 0.0001); 93 | 94 | gen.setDutyCycle(14.28); 95 | assertEqualFloat(14.28, gen.getDutyCycle(), 0.0001); 96 | } 97 | 98 | 99 | unittest(test_line_zero) 100 | { 101 | funcgen gen; 102 | 103 | fprintf(stderr, "default line = 1.0 \n"); 104 | 105 | assertEqualFloat(1.00, gen.line(), 0.0001); 106 | 107 | fprintf(stderr, "line = amplitude + yshift\n"); 108 | 109 | gen.setAmplitude(2.34); 110 | gen.setYShift(6.89); 111 | assertEqualFloat(9.23, gen.line(), 0.0001); 112 | 113 | fprintf(stderr, "zero == 0 \n"); 114 | 115 | assertEqual(0, gen.zero()); 116 | } 117 | 118 | 119 | /* 120 | TODO wave forms 6x ? 121 | */ 122 | 123 | 124 | unittest_main() 125 | 126 | 127 | // -- END OF FILE -- 128 | 129 | --------------------------------------------------------------------------------