├── .github └── workflows │ └── python-package.yml ├── .gitignore ├── .travis.yml ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── pyproject.toml ├── pysstv ├── __init__.py ├── __main__.py ├── color.py ├── examples │ ├── __init__.py │ ├── codegen.py │ ├── codeman.c │ ├── get_floats.py │ ├── get_freq_bits.py │ ├── gimp-plugin.py │ ├── overlay.py │ ├── pyaudio_sstv.py │ └── repeater.py ├── grayscale.py ├── sstv.py └── tests │ ├── __init__.py │ ├── assets │ ├── 320x256.png │ ├── MartinM1_encode_line_lena1.p │ ├── MartinM1_encode_line_lena10.p │ ├── MartinM1_encode_line_lena100.p │ ├── MartinM1_freq_bits.p │ ├── MartinM1_freq_bits_lena.p │ ├── MartinM1_values.p │ ├── SSTV_gen_samples.p │ └── SSTV_gen_values.p │ ├── common.py │ ├── test_color.py │ └── test_sstv.py ├── requirements.txt └── setup.py /.github/workflows/python-package.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a variety of Python versions 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python 3 | 4 | name: Python package 5 | 6 | on: 7 | push: 8 | branches: [ "master" ] 9 | pull_request: 10 | branches: [ "master" ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | strategy: 17 | fail-fast: false 18 | matrix: 19 | python-version: ["3.9", "3.10", "3.11"] 20 | 21 | steps: 22 | - uses: actions/checkout@v3 23 | - name: Set up Python ${{ matrix.python-version }} 24 | uses: actions/setup-python@v3 25 | with: 26 | python-version: ${{ matrix.python-version }} 27 | - name: Install dependencies 28 | run: | 29 | python -m pip install --upgrade pip 30 | python -m pip install flake8 pytest 31 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi 32 | - name: Lint with flake8 33 | run: | 34 | # stop the build if there are Python syntax errors or undefined names 35 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 36 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 37 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 38 | - name: Test with pytest 39 | run: | 40 | pytest 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | stb_image.h 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - "3.6" 4 | - "3.7" 5 | - "3.8" 6 | - "3.9" 7 | sudo: false 8 | install: "pip install -r requirements.txt" 9 | script: nosetests 10 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Andras Veres-Szentkiralyi 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.md 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SSTV generator in pure Python 2 | ============================= 3 | 4 | PySSTV generates SSTV modulated WAV files from any image that PIL can open 5 | (PNG, JPEG, GIF, and many others). These WAV files then can be played by any 6 | audio player connected to a shortwave radio for example. 7 | 8 | My main motivation was to understand the internals of SSTV in practice, so 9 | performance is far from optimal. I tried keeping the code readable, and only 10 | performed such optimizations that wouldn't have complicated the codebase. 11 | 12 | Command line usage 13 | ------------------ 14 | 15 | $ python -m pysstv -h 16 | usage: __main__.py [-h] 17 | [--mode {MartinM1,MartinM2,ScottieS1,ScottieS2,ScottieDX,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120,PD160,PD180,PD240,PD290,WraaseSC2120,WraaseSC2180,Robot8BW,Robot24BW}] 18 | [--rate RATE] [--bits BITS] [--vox] [--fskid FSKID] 19 | [--chan CHAN] [--resize] [--keep-aspect-ratio] 20 | [--keep-aspect] [--resample {nearest,bicubic,lanczos}] 21 | image.png output.wav 22 | 23 | Converts an image to an SSTV modulated WAV file. 24 | 25 | positional arguments: 26 | image.png input image file name 27 | output.wav output WAV file name 28 | 29 | options: 30 | -h, --help show this help message and exit 31 | --mode {MartinM1,MartinM2,ScottieS1,ScottieS2,ScottieDX,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120,PD160,PD180,PD240,PD290,WraaseSC2120,WraaseSC2180,Robot8BW,Robot24BW} 32 | image mode (default: Martin M1) 33 | --rate RATE sampling rate (default: 48000) 34 | --bits BITS bits per sample (default: 16) 35 | --vox add VOX tones at the beginning 36 | --fskid FSKID add FSKID at the end 37 | --chan CHAN number of channels (default: mono) 38 | --resize resize the image to the correct size 39 | --keep-aspect-ratio keep the original aspect ratio when resizing 40 | (and cut off excess pixels) 41 | --keep-aspect keep the original aspect ratio when resizing 42 | (not cut off excess pixels) 43 | --resample {nearest,bicubic,lanczos} 44 | which resampling filter to use for resizing 45 | (see Pillow documentation) 46 | 47 | Python interface 48 | ---------------- 49 | 50 | The `SSTV` class in the `sstv` module implements basic SSTV-related 51 | functionality, and the classes of other modules such as `grayscale` and 52 | `color` extend this. Most instances implement the following methods: 53 | 54 | - `__init__` takes a PIL image, the samples per second, and the bits per 55 | sample as a parameter, but doesn't perform any hard calculations 56 | - `gen_freq_bits` generates tuples that describe a sine wave segment with 57 | frequency in Hz and duration in ms 58 | - `gen_values` generates samples between -1 and +1, performing sampling 59 | according to the samples per second value given during construction 60 | - `gen_samples` generates discrete samples, performing quantization 61 | according to the bits per sample value given during construction 62 | - `write_wav` writes the whole image to a Microsoft WAV file 63 | 64 | The above methods all build upon those above them, for example `write_wav` 65 | calls `gen_samples`, while latter calls `gen_values`, so typically, only 66 | the first and the last, maybe the last two should be called directly, the 67 | others are just listed here for the sake of completeness and to make the 68 | flow easier to understand. 69 | 70 | License 71 | ------- 72 | 73 | The whole project is available under MIT license. 74 | 75 | Useful links 76 | ------------ 77 | 78 | - receive-only "counterpart": https://github.com/windytan/slowrx 79 | - free SSTV handbook: http://www.sstv-handbook.com/ 80 | - robot 36 encoder/decoder in C: https://github.com/xdsopl/robot36/ 81 | 82 | Dependencies 83 | ------------ 84 | 85 | - Python 3.5 or later 86 | - Python Imaging Library (Debian/Ubuntu package: `python3-pil`) 87 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools"] 3 | build-backend = "setuptools.build_meta" 4 | -------------------------------------------------------------------------------- /pysstv/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | __all__ = ['color', 'grayscale', 'sstv', 'tests', 'examples'] 4 | -------------------------------------------------------------------------------- /pysstv/__main__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from __future__ import print_function, division 4 | from PIL import Image 5 | from argparse import ArgumentParser 6 | from sys import stderr 7 | from pysstv import color, grayscale 8 | 9 | SSTV_MODULES = [color, grayscale] 10 | 11 | 12 | def main(): 13 | module_map = build_module_map() 14 | parser = ArgumentParser( 15 | description='Converts an image to an SSTV modulated WAV file.') 16 | parser.add_argument('img_file', metavar='image.png', 17 | help='input image file name') 18 | parser.add_argument('wav_file', metavar='output.wav', 19 | help='output WAV file name') 20 | parser.add_argument( 21 | '--mode', dest='mode', default='MartinM1', choices=module_map, 22 | help='image mode (default: Martin M1)') 23 | parser.add_argument('--rate', dest='rate', type=int, default=48000, 24 | help='sampling rate (default: 48000)') 25 | parser.add_argument('--bits', dest='bits', type=int, default=16, 26 | help='bits per sample (default: 16)') 27 | parser.add_argument('--vox', dest='vox', action='store_true', 28 | help='add VOX tones at the beginning') 29 | parser.add_argument('--fskid', dest='fskid', 30 | help='add FSKID at the end') 31 | parser.add_argument('--chan', dest='chan', type=int, 32 | help='number of channels (default: mono)') 33 | parser.add_argument('--resize', dest='resize', action='store_true', 34 | help='resize the image to the correct size') 35 | parser.add_argument('--keep-aspect-ratio', dest='keep_aspect_ratio', action='store_true', 36 | help='keep the original aspect ratio when resizing (and cut off excess pixels)') 37 | parser.add_argument('--keep-aspect', dest='keep_aspect', action='store_true', 38 | help='keep the original aspect ratio when resizing (not cut off excess pixels)') 39 | parser.add_argument('--resample', dest='resample', default='lanczos', 40 | choices=('nearest', 'bicubic', 'lanczos'), 41 | help='which resampling filter to use for resizing (see Pillow documentation)') 42 | args = parser.parse_args() 43 | image = Image.open(args.img_file) 44 | mode = module_map[args.mode] 45 | if args.resize and any(i != m for i, m in zip(image.size, (mode.WIDTH, mode.HEIGHT))): 46 | resample = getattr(Image, args.resample.upper()) 47 | if args.keep_aspect_ratio or args.keep_aspect: 48 | orig_ratio = image.width / image.height 49 | mode_ratio = mode.WIDTH / mode.HEIGHT 50 | crop = orig_ratio != mode_ratio 51 | else: 52 | crop = False 53 | if crop: 54 | t = orig_ratio < mode_ratio 55 | if args.keep_aspect: 56 | t = orig_ratio > mode_ratio 57 | if t: 58 | w = mode.WIDTH 59 | h = int(w / orig_ratio) 60 | else: 61 | h = mode.HEIGHT 62 | w = int(orig_ratio * h) 63 | else: 64 | w = mode.WIDTH 65 | h = mode.HEIGHT 66 | image = image.resize((w, h), resample) 67 | if args.keep_aspect: 68 | newbg = Image.new('RGB', (mode.WIDTH, mode.HEIGHT)) 69 | if t: 70 | newbg.paste(image, (0, int((mode.HEIGHT/2)-(h/2)))) 71 | else: 72 | newbg.paste(image, (int((mode.WIDTH/2)-(w/2)), 0)) 73 | image = newbg.copy() 74 | crop = False 75 | if crop: 76 | x = (image.width - mode.WIDTH) / 2 77 | y = (image.height - mode.HEIGHT) / 2 78 | image = image.crop((x, y, mode.WIDTH + x, mode.HEIGHT + y)) 79 | elif not all(i >= m for i, m in zip(image.size, (mode.WIDTH, mode.HEIGHT))): 80 | print(('Image must be at least {m.WIDTH} x {m.HEIGHT} pixels ' 81 | 'for mode {m.__name__}').format(m=mode), file=stderr) 82 | raise SystemExit(1) 83 | s = mode(image, args.rate, args.bits) 84 | s.vox_enabled = args.vox 85 | if args.fskid: 86 | s.add_fskid_text(args.fskid) 87 | if args.chan: 88 | s.nchannels = args.chan 89 | s.write_wav(args.wav_file) 90 | 91 | 92 | def build_module_map(): 93 | try: 94 | from collections import OrderedDict 95 | module_map = OrderedDict() 96 | except ImportError: 97 | module_map = {} 98 | for module in SSTV_MODULES: 99 | for mode in module.MODES: 100 | module_map[mode.__name__] = mode 101 | return module_map 102 | 103 | 104 | if __name__ == '__main__': 105 | main() 106 | -------------------------------------------------------------------------------- /pysstv/color.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from __future__ import division 3 | from pysstv.sstv import byte_to_freq, FREQ_BLACK, FREQ_WHITE, FREQ_VIS_START 4 | from pysstv.grayscale import GrayscaleSSTV 5 | from itertools import chain 6 | from enum import Enum 7 | 8 | 9 | class Color(Enum): 10 | red = 0 11 | green = 1 12 | blue = 2 13 | 14 | 15 | class ColorSSTV(GrayscaleSSTV): 16 | def on_init(self): 17 | self.pixels = self.image.convert('RGB').load() 18 | 19 | def encode_line(self, line): 20 | msec_pixel = self.SCAN / self.WIDTH 21 | image = self.pixels 22 | for color in self.COLOR_SEQ: 23 | yield from self.before_channel(color) 24 | for col in range(self.WIDTH): 25 | pixel = image[col, line] 26 | freq_pixel = byte_to_freq(pixel[color.value]) 27 | yield freq_pixel, msec_pixel 28 | yield from self.after_channel(color) 29 | 30 | def before_channel(self, color): 31 | return [] 32 | 33 | after_channel = before_channel 34 | 35 | 36 | class MartinM1(ColorSSTV): 37 | COLOR_SEQ = (Color.green, Color.blue, Color.red) 38 | VIS_CODE = 0x2c 39 | WIDTH = 320 40 | HEIGHT = 256 41 | SYNC = 4.862 42 | SCAN = 146.432 43 | INTER_CH_GAP = 0.572 44 | 45 | def before_channel(self, color): 46 | if color is Color.green: 47 | yield FREQ_BLACK, self.INTER_CH_GAP 48 | 49 | def after_channel(self, color): 50 | yield FREQ_BLACK, self.INTER_CH_GAP 51 | 52 | 53 | class MartinM2(MartinM1): 54 | VIS_CODE = 0x28 55 | WIDTH = 160 56 | SCAN = 73.216 57 | 58 | 59 | class ScottieS1(MartinM1): 60 | VIS_CODE = 0x3c 61 | SYNC = 9 62 | INTER_CH_GAP = 1.5 63 | SCAN = 138.24 - INTER_CH_GAP 64 | 65 | def horizontal_sync(self): 66 | return [] 67 | 68 | def before_channel(self, color): 69 | if color is Color.red: 70 | yield from MartinM1.horizontal_sync(self) 71 | yield FREQ_BLACK, self.INTER_CH_GAP 72 | 73 | 74 | class ScottieS2(ScottieS1): 75 | VIS_CODE = 0x38 76 | SCAN = 88.064 - ScottieS1.INTER_CH_GAP 77 | WIDTH = 160 78 | 79 | 80 | class ScottieDX(ScottieS1): 81 | VIS_CODE = 0x4c 82 | # http://www.barberdsp.com/downloads/Dayton%20Paper.pdf 83 | SCAN = 345.6000 - ScottieS1.INTER_CH_GAP 84 | 85 | 86 | class Robot36(ColorSSTV): 87 | VIS_CODE = 0x08 88 | WIDTH = 320 89 | HEIGHT = 240 90 | SYNC = 9 91 | INTER_CH_GAP = 4.5 92 | Y_SCAN = 88 93 | C_SCAN = 44 94 | PORCH = 1.5 95 | SYNC_PORCH = 3 96 | INTER_CH_FREQS = [None, FREQ_WHITE, FREQ_BLACK] 97 | 98 | def on_init(self): 99 | self.yuv = self.image.convert('YCbCr').load() 100 | 101 | def encode_line(self, line): 102 | pixels = [self.yuv[col, line] for col in range(self.WIDTH)] 103 | channel = 2 - (line % 2) 104 | y_pixel_time = self.Y_SCAN / self.WIDTH 105 | uv_pixel_time = self.C_SCAN / self.WIDTH 106 | return chain( 107 | [(FREQ_BLACK, self.SYNC_PORCH)], 108 | ((byte_to_freq(p[0]), y_pixel_time) for p in pixels), 109 | [(self.INTER_CH_FREQS[channel], self.INTER_CH_GAP), 110 | (FREQ_VIS_START, self.PORCH)], 111 | ((byte_to_freq(p[channel]), uv_pixel_time) for p in pixels)) 112 | 113 | 114 | class PasokonP3(ColorSSTV): 115 | """ 116 | [ VIS code or horizontal sync here ] 117 | Back porch - 5 time units of black (1500 Hz). 118 | Red component - 640 pixels of 1 time unit each. 119 | Gap - 5 time units of black. 120 | Green component - 640 pixels of 1 time unit each. 121 | Gap - 5 time units of black. 122 | Blue component - 640 pixels of 1 time unit each. 123 | Front porch - 5 time units of black. 124 | Horizontal Sync - 25 time units of 1200 Hz. 125 | """ 126 | TIMEUNIT = 1000/4800. # ms 127 | COLOR_SEQ = (Color.red, Color.green, Color.blue) 128 | VIS_CODE = 0x71 129 | WIDTH = 640 130 | HEIGHT = 480+16 131 | SYNC = 25 * TIMEUNIT 132 | SCAN = WIDTH * TIMEUNIT 133 | INTER_CH_GAP = 5 * TIMEUNIT 134 | 135 | def before_channel(self, color): 136 | if color is Color.red: 137 | yield FREQ_BLACK, self.INTER_CH_GAP 138 | 139 | def after_channel(self, color): 140 | yield FREQ_BLACK, self.INTER_CH_GAP 141 | 142 | 143 | class PasokonP5(PasokonP3): 144 | TIMEUNIT = 1000/3200. # ms 145 | VIS_CODE = 0x72 146 | SYNC = 25 * TIMEUNIT 147 | SCAN = PasokonP3.WIDTH * TIMEUNIT 148 | INTER_CH_GAP = 5 * TIMEUNIT 149 | 150 | class PasokonP7(PasokonP3): 151 | TIMEUNIT = 1000/2400. # ms 152 | VIS_CODE = 0xF3 153 | SYNC = 25 * TIMEUNIT 154 | SCAN = PasokonP3.WIDTH * TIMEUNIT 155 | INTER_CH_GAP = 5 * TIMEUNIT 156 | 157 | 158 | class PD90(ColorSSTV): 159 | VIS_CODE = 0x63 160 | WIDTH = 320 161 | HEIGHT = 256 162 | SYNC = 20 163 | PORCH = 2.08 164 | PIXEL = 0.532 165 | 166 | def gen_image_tuples(self): 167 | yuv = self.image.convert('YCbCr').load() 168 | for line in range(0, self.HEIGHT, 2): 169 | yield from self.horizontal_sync() 170 | yield FREQ_BLACK, self.PORCH 171 | pixels0 = [yuv[col, line] for col in range(self.WIDTH)] 172 | pixels1 = [yuv[col, line + 1] for col in range(self.WIDTH)] 173 | for p in pixels0: 174 | yield byte_to_freq(p[0]), self.PIXEL 175 | for p0, p1 in zip(pixels0, pixels1): 176 | yield byte_to_freq((p0[2] + p1[2]) / 2), self.PIXEL 177 | for p0, p1 in zip(pixels0, pixels1): 178 | yield byte_to_freq((p0[1] + p1[1]) / 2), self.PIXEL 179 | for p in pixels1: 180 | yield byte_to_freq(p[0]), self.PIXEL 181 | 182 | 183 | class PD120(PD90): 184 | VIS_CODE = 0x5f 185 | WIDTH = 640 186 | HEIGHT = 496 187 | PIXEL = 0.19 188 | 189 | class PD160(PD90): 190 | VIS_CODE = 0x62 191 | WIDTH = 512 192 | HEIGHT = 400 193 | PIXEL = 0.382 194 | 195 | class PD180(PD120): 196 | VIS_CODE = 0x60 197 | PIXEL = 0.286 198 | 199 | class PD240(PD120): 200 | VIS_CODE = 0x61 201 | PIXEL = 0.382 202 | 203 | class PD290(PD240): 204 | VIS_CODE = 0x5e 205 | WIDTH = 800 206 | HEIGHT = 616 207 | PIXEL = 0.286 208 | 209 | 210 | class WraaseSC2180(ColorSSTV): 211 | VIS_CODE = 0x37 212 | WIDTH = 320 213 | HEIGHT = 256 214 | COLOR_SEQ = (Color.red, Color.green, Color.blue) 215 | 216 | SYNC = 5.5225 217 | PORCH = 0.5 218 | SCAN = 235.0 219 | 220 | def before_channel(self, color): 221 | if color is Color.red: 222 | yield FREQ_BLACK, self.PORCH 223 | else: 224 | return [] 225 | 226 | def after_channel(self, color): 227 | return [] 228 | 229 | 230 | class WraaseSC2120(WraaseSC2180): 231 | VIS_CODE = 0x3f 232 | 233 | # NB: there are "authoritative" sounding documents that will tell you SC-2 234 | # 120 uses red and blue channels that have half the line width of the 235 | # green channel. Having spent several hours trying to nut out why SC2-120 236 | # images weren't decoding in anything else, I can say this is utter 237 | # bunkum. The line width is the same for all three channels, just 238 | # shorter. 239 | 240 | SCAN = 156.0 241 | 242 | def before_channel(self, color): 243 | # Not sure why, but SC2-120 decoding seems to need an extra few sync 244 | # pulses to decode in QSSTV and slowrx. Take the extra pulse out, and 245 | # it slants something chronic and QSSTV loses sync regularly even on 246 | # DX mode. Put it in, and both decode reliably. Go figure. SC2-180 247 | # works just fine without this extra pulse at the start of each 248 | # channel. 249 | yield FREQ_BLACK, self.PORCH 250 | yield from super().before_channel(color) 251 | 252 | 253 | MODES = (MartinM1, MartinM2, ScottieS1, ScottieS2, ScottieDX, Robot36, 254 | PasokonP3, PasokonP5, PasokonP7, PD90, PD120, PD160, PD180, PD240, 255 | PD290, WraaseSC2120, WraaseSC2180) 256 | -------------------------------------------------------------------------------- /pysstv/examples/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | __all__ = ['overlay', 'pyaudio_sstv', 'repeater'] 4 | -------------------------------------------------------------------------------- /pysstv/examples/codegen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | class Image(object): 4 | def __init__(self, content): 5 | self.content = content 6 | 7 | def load(self): 8 | return self 9 | 10 | def __getitem__(self, item): 11 | if isinstance(item, tuple): 12 | x, y = item 13 | return Image('{0}[(ROW({1}) + COL({2})) * 3'.format(self.content, y, x)) 14 | elif isinstance(item, int): 15 | return Image('{0} + RGB({1})]'.format(self.content, item)) 16 | else: 17 | raise NotImplementedError() 18 | 19 | def __rmul__(self, n): 20 | return Image('({1} * {0})'.format(self.content, float(n))) 21 | 22 | def __mul__(self, n): 23 | return Image('({0} * {1})'.format(self.content, float(n))) 24 | 25 | def __rtruediv__(self, n): 26 | return Image('({1} / {0})'.format(self.content, n)) 27 | 28 | def __truediv__(self, n): 29 | return Image('({0} / {1})'.format(self.content, n)) 30 | 31 | def __radd__(self, n): 32 | return Image('({1} + {0})'.format(self.content, n)) 33 | 34 | def __add__(self, n): 35 | return Image('({0} + {1})'.format(self.content, n)) 36 | 37 | def __str__(self): 38 | return self.content 39 | 40 | from pysstv.color import MartinM1, MartinM2, PasokonP3, PasokonP5, PasokonP7 41 | import re 42 | 43 | supported = [MartinM1, MartinM2, PasokonP3, PasokonP5, PasokonP7] 44 | ROW_RE = re.compile(r'ROW\(\d+\)') 45 | 46 | def main(sstv_class=None): 47 | if sstv_class is None: 48 | sstv_class = MartinM1 49 | elif sstv_class not in supported: 50 | raise NotImplementedError() 51 | sstv = sstv_class(Image('img'), 44100, 16) 52 | n = 0 53 | yield '#define ROW(x) x' 54 | yield '#define COL(x) x' 55 | yield '#define RGB(x) x' 56 | yield 'void convert(unsigned char *img, float *freqs, float *msecs, const int width) {\nint frq = 0;' 57 | history = [] 58 | lut = {} 59 | same_as = {} 60 | for freq, msec in sstv.gen_freq_bits(): 61 | printed = 'freqs[frq] = {1}; msecs[frq++] = {2};'.format(n, freq, msec) 62 | key = ROW_RE.sub('row', printed) 63 | old = lut.get(key) 64 | if old is not None: 65 | same_as[n] = old 66 | else: 67 | lut[key] = n 68 | history.append((printed, key)) 69 | n += 1 70 | del lut 71 | m_start, m_len = gen_matches(same_as, history, n) 72 | for i in range(same_as[m_start]): 73 | yield history[i][0] 74 | yield 'for (int row = 0; row < width * {0}; row += width) {{'.format(sstv.HEIGHT) 75 | for i in range(same_as[m_start], same_as[m_start] + m_len - 1): 76 | yield ' ' + history[i][1] 77 | yield '}' 78 | yield '}}\n\n#define FREQ_COUNT {0}'.format(n) 79 | 80 | 81 | 82 | def gen_matches(same_as, history, n): 83 | cur_start = None 84 | cur_len = None 85 | cur_end = None 86 | for i in range(n): 87 | if cur_start is None: 88 | tmp = same_as.get(i) 89 | if tmp is not None: 90 | cur_len = 1 91 | cur_start = i 92 | cur_end = tmp 93 | else: 94 | tmp = same_as.get(i) 95 | if tmp is not None and history[tmp][1] == history[cur_end + 1][1] and cur_start > cur_end: 96 | cur_len += 1 97 | cur_end += 1 98 | else: 99 | if tmp is not None and history[tmp][1] == history[cur_end + 1][1]: 100 | return cur_start, cur_len 101 | tmp = same_as.get(i) 102 | if tmp is None: 103 | cur_start = None 104 | else: 105 | cur_len = 1 106 | cur_start = i 107 | cur_end = tmp 108 | 109 | def test(img_file): 110 | from subprocess import Popen, PIPE, check_output 111 | from os import remove, path 112 | from PIL import Image 113 | from datetime import datetime 114 | import struct 115 | exe = './codegen-test-executable' 116 | if not path.exists('stb_image.h'): 117 | from urllib.request import urlretrieve 118 | urlretrieve('https://raw.githubusercontent.com/nothings/stb/master/stb_image.h', 'stb_image.h') 119 | try: 120 | for sstv_class in supported: 121 | print('Testing', sstv_class) 122 | gcc = Popen(['gcc', '-xc', '-lm', '-o', exe, '-'], stdin=PIPE) 123 | start = datetime.now() 124 | with open(path.join(path.dirname(__file__), 'codeman.c')) as cm: 125 | c_src = cm.read().replace('#include "codegen.c"', '\n'.join(main(sstv_class))) 126 | gcc.communicate(c_src) 127 | gen_elapsed = datetime.now() - start 128 | print(' - gengcc took', gen_elapsed) 129 | start = datetime.now() 130 | gen = check_output([exe, img_file]) 131 | native_elapsed = datetime.now() - start 132 | print(' - native took', native_elapsed) 133 | img = Image.open(img_file) 134 | sstv = sstv_class(img, 44100, 16) 135 | start = datetime.now() 136 | try: 137 | for n, (freq, msec) in enumerate(sstv.gen_freq_bits()): 138 | assert gen[n * 8:(n + 1) * 8] == struct.pack('ff', freq, msec) 139 | except AssertionError: 140 | mode_name = sstv_class.__name__ 141 | with open('/tmp/{0}-c.bin'.format(mode_name), 'wb') as f: 142 | f.write(gen) 143 | with open('/tmp/{0}-py.bin'.format(mode_name), 'wb') as f: 144 | for n, (freq, msec) in enumerate(sstv.gen_freq_bits()): 145 | f.write(struct.pack('ff', freq, msec)) 146 | with open('/tmp/{0}.c'.format(mode_name), 'w') as f: 147 | f.write(c_src) 148 | print((" ! Outputs are different, they've been saved to " 149 | "/tmp/{0}-{{c,py}}.bin, along with the C source code " 150 | "in /tmp/{0}.c").format(mode_name)) 151 | python_elapsed = datetime.now() - start 152 | print(' - python took', python_elapsed) 153 | print(' - speedup:', python_elapsed.total_seconds() / native_elapsed.total_seconds()) 154 | print('OK') 155 | finally: 156 | try: 157 | remove(exe) 158 | except OSError: 159 | pass 160 | 161 | 162 | if __name__ == '__main__': 163 | from sys import argv 164 | if len(argv) > 2 and argv[1] == 'test': 165 | test(argv[2]) 166 | else: 167 | print('\n'.join(main())) 168 | -------------------------------------------------------------------------------- /pysstv/examples/codeman.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define STB_IMAGE_IMPLEMENTATION 4 | #include "stb_image.h" 5 | #include "codegen.c" 6 | 7 | int main(int argc, char **argv) { 8 | int x, y, n; 9 | unsigned char *img = stbi_load(argv[1], &x, &y, &n, 0); 10 | if (n != 3) { 11 | fprintf(stderr, "Only RGB images are supported\n"); 12 | return 1; 13 | } 14 | 15 | float freqs[FREQ_COUNT], msecs[FREQ_COUNT]; 16 | 17 | convert(img, freqs, msecs, x); 18 | 19 | for (int i = 0; i < FREQ_COUNT; i++) { 20 | fwrite(&(freqs[i]), 4, 1, stdout); 21 | fwrite(&(msecs[i]), 4, 1, stdout); 22 | } 23 | 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /pysstv/examples/get_floats.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | This example streams the raw floating point samples to stdout in 4-byte 5 | single precision format, so that it can be processed outside PySSTV. 6 | 7 | Usage example: get_floats.py | play -r 44100 -t f32 -c 1 --norm - 8 | """ 9 | 10 | from PIL import Image 11 | from pysstv.grayscale import Robot8BW 12 | import struct, sys 13 | 14 | def main(): 15 | img = Image.open("160x120bw.png") 16 | sstv = Robot8BW(img, 44100, 16) 17 | sstv.vox_enabled = True 18 | for value in sstv.gen_values(): 19 | sys.stdout.write(struct.pack('f', value)) 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /pysstv/examples/get_freq_bits.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | This example streams the raw floating point (freq, msec) tuples to stdout 5 | in 4-byte single precision format (8 bytes per tuple), so that it can be 6 | processed outside PySSTV. 7 | 8 | Usage example using unixsstv/gen_values: 9 | get_freq_bits.py | gen_values 44100 | play -r 44100 -t f32 -c 1 --norm - 10 | """ 11 | 12 | from PIL import Image 13 | from pysstv.color import MartinM1 14 | import struct, sys 15 | 16 | def main(): 17 | img = Image.open("320x256rgb.png") 18 | sstv = MartinM1(img, 44100, 16) 19 | for freq, msec in sstv.gen_freq_bits(): 20 | sys.stdout.write(struct.pack('ff', freq, msec)) 21 | 22 | if __name__ == '__main__': 23 | main() 24 | -------------------------------------------------------------------------------- /pysstv/examples/gimp-plugin.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- encoding: utf-8 -*- 3 | 4 | # copy to ~/.gimp-2.8/plug-ins/ 5 | # dependencies: GIMP 2.8, python-imaging-tk, python-pyaudio 6 | 7 | from gimpfu import register, main, pdb, PF_BOOL, PF_STRING, PF_RADIO, CLIP_TO_IMAGE 8 | from PIL import Image, ImageTk 9 | from tkinter import Tk, Canvas, Button, Checkbutton, IntVar, Frame, LEFT, NW 10 | from pysstv import __main__ as pysstv_main 11 | from pysstv.examples.pyaudio_sstv import PyAudioSSTV 12 | from pysstv.sstv import SSTV 13 | from itertools import repeat 14 | from threading import Thread 15 | from queue import Queue, Empty 16 | from time import sleep 17 | import gimp, os 18 | 19 | MODULE_MAP = pysstv_main.build_module_map() 20 | 21 | class AudioThread(Thread): 22 | def __init__(self, sstv, parent): 23 | Thread.__init__(self) 24 | self.pas = PyAudioSSTV(sstv) 25 | self.parent = parent 26 | 27 | def run(self): 28 | self.pas.execute() 29 | self.parent.audio_thread_ended() 30 | 31 | def stop(self): 32 | if self.pas is not None: 33 | self.pas.sampler = [] 34 | self.pas = None 35 | 36 | 37 | class Sine1750(SSTV): 38 | encode_line = None 39 | 40 | def gen_freq_bits(self): 41 | return repeat((1750, 1000)) 42 | 43 | 44 | class Transmitter(object): 45 | def __init__(self, sstv, root, progress, set_ptt_pin, ptt_state): 46 | def encode_line_hooked(line): 47 | progress.update_image(line) 48 | return self.original_encode_line(line) 49 | self.progress = progress 50 | self.sstv = sstv 51 | self.original_encode_line = sstv.encode_line 52 | sstv.encode_line = encode_line_hooked 53 | self.root = root 54 | self.tx_enabled = IntVar() 55 | self.audio_thread = None 56 | self.stopping = False 57 | self.set_ptt_pin = set_ptt_pin 58 | self.ptt_state = ptt_state 59 | 60 | def set_ptt(self, state): 61 | if self.set_ptt_pin is None: 62 | return 63 | if not state: 64 | sleep(0.2) 65 | self.set_ptt_pin(state != self.ptt_state) 66 | if state: 67 | sleep(0.2) 68 | 69 | def start_stop_tx(self): 70 | if self.tx_enabled.get(): 71 | self.stopping = False 72 | self.audio_thread = AudioThread(self.sstv, self) 73 | self.set_ptt(True) 74 | self.audio_thread.start() 75 | else: 76 | self.stop() 77 | if self.progress is not None: 78 | self.progress.update_image() 79 | 80 | def stop(self): 81 | if self.audio_thread is not None: 82 | self.stopping = True 83 | self.audio_thread.stop() 84 | self.set_ptt(False) 85 | 86 | def audio_thread_ended(self): 87 | if not self.stopping: 88 | self.set_ptt(False) 89 | self.tx_enabled.set(0) 90 | 91 | def close(self): 92 | self.root.destroy() 93 | 94 | 95 | class CanvasUpdater(Thread): 96 | def __init__(self, progress): 97 | Thread.__init__(self) 98 | self.progress = progress 99 | self.queue = Queue() 100 | self.should_run = True 101 | 102 | def stop(self): 103 | self.should_run = False 104 | 105 | def update_image(self, line=None): 106 | self.queue.put(line) 107 | 108 | def run(self): 109 | while self.should_run: 110 | try: 111 | self.progress.update_image(self.queue.get(timeout=0.5)) 112 | except Empty: 113 | pass 114 | 115 | 116 | class ProgressCanvas(Canvas): 117 | def __init__(self, master, image): 118 | self.height_ratio = 1 119 | width, height = image.size 120 | pixels = image.load() 121 | RED, GREEN, BLUE = list(range(3)) 122 | self.colors = ['#{0:02x}{1:02x}{2:02x}'.format( 123 | contrast(sum(pixels[x, y][RED] for x in range(width)) / width), 124 | contrast(sum(pixels[x, y][GREEN] for x in range(width)) / width), 125 | contrast(sum(pixels[x, y][BLUE] for x in range(width)) / width)) 126 | for y in range(height)] 127 | if height / float(width) > 1.5: 128 | width *= 2 129 | elif width < 200: 130 | width *= 2 131 | height *= 2 132 | self.height_ratio = 2 133 | if (width, height) != image.size: 134 | image = image.resize((width, height)) 135 | Canvas.__init__(self, master, width=width, height=height) 136 | self.tk_img = ImageTk.PhotoImage(image) 137 | self.update_image() 138 | self.pack() 139 | 140 | def update_image(self, line=None): 141 | image = self.tk_img 142 | self.create_image(0, 0, anchor=NW, image=image) 143 | if line is not None: 144 | fill = self.colors[line] 145 | line *= self.height_ratio 146 | self.create_line(0, line, image.width(), line, fill=fill) 147 | 148 | 149 | def contrast(value): 150 | if 80 < value < 160: 151 | return value + (80 if value < 120 else -80) 152 | else: 153 | return 255 - value 154 | 155 | def transmit_current_image(image, drawable, mode, vox, fskid, ptt_port, ptt_pin, ptt_state): 156 | sstv = MODULE_MAP[mode] 157 | if ptt_port is not None: 158 | from serial import Serial 159 | set_ptt_pin = getattr(Serial(ptt_port), 'set' + ptt_pin) 160 | set_ptt_pin(ptt_state) 161 | else: 162 | set_ptt_pin = None 163 | pil_img = match_image_with_sstv_mode(image_gimp_to_pil(image), sstv) 164 | root = Tk() 165 | cu = CanvasUpdater(ProgressCanvas(root, pil_img)) 166 | cu.start() 167 | tm = Transmitter(init_sstv(sstv, pil_img, vox, fskid), root, cu, set_ptt_pin, ptt_state) 168 | tm1750 = Transmitter(Sine1750(None, 44100, 16), None, None, set_ptt_pin, ptt_state) 169 | buttons = Frame(root) 170 | for text, tram in (('TX', tm), ('1750 Hz', tm1750)): 171 | Checkbutton(buttons, text=text, indicatoron=False, padx=5, pady=5, 172 | variable=tram.tx_enabled, command=tram.start_stop_tx).pack(side=LEFT) 173 | Button(buttons, text="Close", command=tm.close).pack(side=LEFT) 174 | buttons.pack() 175 | root.mainloop() 176 | for obj in (tm, tm1750, cu): 177 | obj.stop() 178 | 179 | def image_gimp_to_pil(image): 180 | try: 181 | sandbox = image.duplicate() 182 | for layer in sandbox.layers: 183 | if not layer.visible: 184 | sandbox.remove_layer(layer) 185 | sandbox.merge_visible_layers(CLIP_TO_IMAGE) 186 | layer = sandbox.layers[0] 187 | if not layer.is_rgb: 188 | pdb.gimp_image_convert_rgb(sandbox) 189 | if layer.has_alpha: 190 | pdb.gimp_layer_flatten(layer) 191 | w, h = layer.width, layer.height 192 | pixels = layer.get_pixel_rgn(0, 0, w, h)[:, :] # all pixels 193 | return Image.frombuffer('RGB', (w, h), pixels, 'raw', 'RGB', 0, 0) 194 | finally: 195 | gimp.delete(sandbox) 196 | 197 | def match_image_with_sstv_mode(image, mode): 198 | mode_size = mode.WIDTH, mode.HEIGHT 199 | if image.size != mode_size: 200 | image = image.resize(mode_size, Image.ANTIALIAS) 201 | if 'grayscale' in mode.__module__: 202 | image = image.convert('LA').convert('RGB') 203 | return image 204 | 205 | def init_sstv(mode, image, vox, fskid): 206 | s = mode(image, 44100, 16) 207 | s.vox_enabled = vox 208 | if fskid: 209 | s.add_fskid_text(fskid) 210 | return s 211 | 212 | def get_serial_ports(): 213 | try: 214 | if os.name == 'nt': 215 | from serial.tools.list_ports_windows import comports 216 | elif os.name == 'posix': 217 | from serial.tools.list_ports_posix import comports 218 | else: 219 | raise ImportError("Sorry: no implementation for your" 220 | "platform ('%s') available" % (os.name,)) 221 | except ImportError: 222 | yield "(couldn't import PySerial)", None 223 | else: 224 | yield "(disabled)", None 225 | for port, desc, _ in comports(): 226 | yield '{0} ({1})'.format(port, desc.strip()), port 227 | 228 | 229 | register( 230 | "pysstv_for_gimp", 231 | "PySSTV for GIMP", 232 | "Transmits the current image using PySSTV", 233 | "Andras Veres-Szentkiralyi", 234 | "Andras Veres-Szentkiralyi", 235 | "November 2013", 236 | "/PySSTV/Transmit...", 237 | "*", 238 | [ 239 | (PF_RADIO, "mode", "SSTV mode", "MartinM1", 240 | tuple((n, n) for n in sorted(MODULE_MAP.keys()))), 241 | (PF_BOOL, "vox", "Include VOX tones", True), 242 | (PF_STRING, "fskid", "FSK ID", ""), 243 | (PF_RADIO, "ptt_port", "PTT port", None, 244 | tuple(get_serial_ports())), 245 | (PF_RADIO, "ptt_pin", "PTT pin", "RTS", 246 | tuple((n, n) for n in ("RTS", "DTR"))), 247 | (PF_BOOL, "ptt_state", "PTT inversion", False), 248 | ], 249 | [], 250 | transmit_current_image 251 | ) 252 | 253 | main() 254 | -------------------------------------------------------------------------------- /pysstv/examples/overlay.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Demonstrates adding text overlay (callsign, RSV, etc.) using PIL 5 | See example output received by slowrx at the following URL: 6 | http://vsza.hu/c6fa52b2c7b20320bdab2da15877f0efbd466e67d37c8d124a557367de9380da.png 7 | """ 8 | 9 | from PIL import Image, ImageFont, ImageDraw 10 | from pysstv.grayscale import Robot8BW 11 | 12 | img = Image.open("160x120bw.png") 13 | font = ImageFont.load_default() 14 | draw = ImageDraw.Draw(img) 15 | draw.text((0, 0), "HA5VSA", (255,255,255), font=font) 16 | sstv = Robot8BW(img, 44100, 16) 17 | sstv.write_wav("overlay.wav") 18 | -------------------------------------------------------------------------------- /pysstv/examples/pyaudio_sstv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Demonstrates playing the generated samples directly using PyAudio 5 | Tested on PyAudio 0.2.7 http://people.csail.mit.edu/hubert/pyaudio/ 6 | """ 7 | 8 | 9 | from pysstv.sstv import SSTV 10 | from time import sleep 11 | from itertools import islice 12 | import struct, pyaudio 13 | 14 | class PyAudioSSTV(object): 15 | def __init__(self, sstv): 16 | self.pa = pyaudio.PyAudio() 17 | self.sstv = sstv 18 | self.fmt = '<' + SSTV.BITS_TO_STRUCT[sstv.bits] 19 | 20 | def __del__(self): 21 | self.pa.terminate() 22 | 23 | def execute(self): 24 | self.sampler = self.sstv.gen_samples() 25 | stream = self.pa.open( 26 | format=self.pa.get_format_from_width(self.sstv.bits // 8), 27 | channels=1, rate=self.sstv.samples_per_sec, output=True, 28 | stream_callback=self.callback) 29 | stream.start_stream() 30 | while stream.is_active(): 31 | sleep(0.5) 32 | stream.stop_stream() 33 | stream.close() 34 | 35 | def callback(self, in_data, frame_count, time_info, status): 36 | frames = ''.join(struct.pack(self.fmt, b) 37 | for b in islice(self.sampler, frame_count)) 38 | return frames, pyaudio.paContinue 39 | 40 | 41 | def main(): 42 | from PIL import Image 43 | from pysstv.grayscale import Robot8BW 44 | 45 | img = Image.open("160x120bw.png") 46 | sstv = Robot8BW(img, 44100, 16) 47 | sstv.vox_enabled = True 48 | PyAudioSSTV(sstv).execute() 49 | 50 | if __name__ == '__main__': 51 | main() 52 | -------------------------------------------------------------------------------- /pysstv/examples/repeater.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Simple repeater that monitors a single directory using inotify, and if 5 | an image appears, it tries to repeat it on using the PyAudio example, 6 | trying to match the mode used for receiving it. It can be tested by 7 | simply copying/linking images to the directory or suing an SSTV 8 | receiver such as slowrx or QSSTV. 9 | """ 10 | 11 | 12 | from pyinotify import WatchManager, Notifier, ProcessEvent, IN_CREATE 13 | from .pyaudio_sstv import PyAudioSSTV 14 | from pysstv.color import MartinM1, MartinM2, ScottieS1, ScottieS2 15 | from pysstv.grayscale import Robot8BW, Robot24BW 16 | from PIL import Image 17 | from os import path 18 | 19 | # matches the abbreviations used by slowrx and QSSTV 20 | MODE_MAP = { 21 | 'M1': MartinM1, 22 | 'M2': MartinM2, 23 | 'S1': ScottieS1, 24 | 'S2': ScottieS2, 25 | 'R8BW': Robot8BW, 26 | 'R24BW': Robot24BW, 27 | } 28 | 29 | class EventHandler(ProcessEvent): 30 | def process_IN_CREATE(self, event): 31 | filename = event.pathname 32 | print('Found image', filename) 33 | mode = get_module_for_filename(filename) 34 | img = Image.open(filename) 35 | if mode is None: 36 | mode = get_module_for_image(img) 37 | if mode is None: 38 | print('No suitable mode found to repeat', filename) 39 | return 40 | print('Repeating image using', mode.__name__) 41 | sstv = mode(img, 44100, 16) 42 | sstv.vox_enabled = True 43 | PyAudioSSTV(sstv).execute() 44 | 45 | def get_module_for_filename(filename): 46 | basename, _ = path.splitext(path.basename(filename)) 47 | for mode, module in MODE_MAP.items(): 48 | if mode in basename: 49 | return module 50 | 51 | def get_module_for_image(image): 52 | size = image.size 53 | for mode in MODE_MAP.values(): 54 | if all(i >= m for i, m in zip(size, (mode.WIDTH, mode.HEIGHT))): 55 | return mode 56 | 57 | def main(): 58 | from sys import argv, stderr 59 | try: 60 | directory = argv[1] 61 | except IndexError: 62 | print("Usage: {0} ".format(argv[0]), file=stderr) 63 | else: 64 | watch(directory) 65 | 66 | def watch(directory): 67 | wm = WatchManager() 68 | notifier = Notifier(wm, EventHandler()) 69 | wm.add_watch(directory, IN_CREATE) 70 | notifier.loop() 71 | 72 | if __name__ == '__main__': 73 | main() 74 | -------------------------------------------------------------------------------- /pysstv/grayscale.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from __future__ import division 4 | from pysstv.sstv import SSTV, byte_to_freq 5 | 6 | 7 | class GrayscaleSSTV(SSTV): 8 | def on_init(self): 9 | self.pixels = self.image.convert('LA').load() 10 | 11 | def gen_image_tuples(self): 12 | for line in range(self.HEIGHT): 13 | yield from self.horizontal_sync() 14 | yield from self.encode_line(line) 15 | 16 | def encode_line(self, line): 17 | msec_pixel = self.SCAN / self.WIDTH 18 | image = self.pixels 19 | for col in range(self.WIDTH): 20 | pixel = image[col, line] 21 | freq_pixel = byte_to_freq(pixel[0]) 22 | yield freq_pixel, msec_pixel 23 | 24 | 25 | class Robot8BW(GrayscaleSSTV): 26 | VIS_CODE = 0x02 27 | WIDTH = 160 28 | HEIGHT = 120 29 | SYNC = 7 30 | SCAN = 60 31 | 32 | 33 | class Robot24BW(GrayscaleSSTV): 34 | VIS_CODE = 0x0A 35 | WIDTH = 320 36 | HEIGHT = 240 37 | SYNC = 7 38 | SCAN = 93 39 | 40 | MODES = (Robot8BW, Robot24BW) 41 | -------------------------------------------------------------------------------- /pysstv/sstv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from __future__ import division, with_statement 4 | from math import sin, pi 5 | from random import random 6 | from contextlib import closing 7 | from itertools import cycle, chain 8 | from array import array 9 | import wave 10 | 11 | FREQ_VIS_BIT1 = 1100 12 | FREQ_SYNC = 1200 13 | FREQ_VIS_BIT0 = 1300 14 | FREQ_BLACK = 1500 15 | FREQ_VIS_START = 1900 16 | FREQ_WHITE = 2300 17 | FREQ_RANGE = FREQ_WHITE - FREQ_BLACK 18 | FREQ_FSKID_BIT1 = 1900 19 | FREQ_FSKID_BIT0 = 2100 20 | 21 | MSEC_VIS_START = 300 22 | MSEC_VIS_SYNC = 10 23 | MSEC_VIS_BIT = 30 24 | MSEC_FSKID_BIT = 22 25 | 26 | 27 | class SSTV(object): 28 | 29 | def __init__(self, image, samples_per_sec, bits): 30 | self.image = image 31 | self.samples_per_sec = samples_per_sec 32 | self.bits = bits 33 | self.vox_enabled = False 34 | self.fskid_payload = '' 35 | self.nchannels = 1 36 | self.on_init() 37 | 38 | def on_init(self): 39 | pass 40 | 41 | BITS_TO_STRUCT = {8: 'b', 16: 'h'} 42 | 43 | def write_wav(self, filename): 44 | """writes the whole image to a Microsoft WAV file""" 45 | fmt = self.BITS_TO_STRUCT[self.bits] 46 | data = array(fmt, self.gen_samples()) 47 | if self.nchannels != 1: 48 | data = array(fmt, chain.from_iterable( 49 | zip(*([data] * self.nchannels)))) 50 | with closing(wave.open(filename, 'wb')) as wav: 51 | wav.setnchannels(self.nchannels) 52 | wav.setsampwidth(self.bits // 8) 53 | wav.setframerate(self.samples_per_sec) 54 | wav.writeframes(data) 55 | 56 | def gen_samples(self): 57 | """generates discrete samples from gen_values() 58 | 59 | performs quantization according to 60 | the bits per sample value given during construction 61 | """ 62 | max_value = 2 ** self.bits 63 | alias = 1 / max_value 64 | amp = max_value // 2 65 | lowest = -amp 66 | highest = amp - 1 67 | alias_cycle = cycle((alias * (random() - 0.5) for _ in range(1024))) 68 | for value, alias_item in zip(self.gen_values(), alias_cycle): 69 | sample = int(value * amp + alias_item) 70 | yield (lowest if sample <= lowest else 71 | sample if sample <= highest else highest) 72 | 73 | def gen_values(self): 74 | """generates samples between -1 and +1 from gen_freq_bits() 75 | 76 | performs sampling according to 77 | the samples per second value given during construction 78 | """ 79 | spms = self.samples_per_sec / 1000 80 | offset = 0 81 | samples = 0 82 | factor = 2 * pi / self.samples_per_sec 83 | sample = 0 84 | for freq, msec in self.gen_freq_bits(): 85 | samples += spms * msec 86 | tx = int(samples) 87 | freq_factor = freq * factor 88 | for sample in range(tx): 89 | yield sin(sample * freq_factor + offset) 90 | offset += (sample + 1) * freq_factor 91 | samples -= tx 92 | 93 | def gen_freq_bits(self): 94 | """generates tuples (freq, msec) that describe a sine wave segment 95 | 96 | frequency "freq" in Hz and duration "msec" in ms 97 | """ 98 | if self.vox_enabled: 99 | for freq in (1900, 1500, 1900, 1500, 2300, 1500, 2300, 1500): 100 | yield freq, 100 101 | yield FREQ_VIS_START, MSEC_VIS_START 102 | yield FREQ_SYNC, MSEC_VIS_SYNC 103 | yield FREQ_VIS_START, MSEC_VIS_START 104 | yield FREQ_SYNC, MSEC_VIS_BIT # start bit 105 | vis = self.VIS_CODE 106 | num_ones = 0 107 | for _ in range(7): 108 | bit = vis & 1 109 | vis >>= 1 110 | num_ones += bit 111 | bit_freq = FREQ_VIS_BIT1 if bit == 1 else FREQ_VIS_BIT0 112 | yield bit_freq, MSEC_VIS_BIT 113 | parity_freq = FREQ_VIS_BIT1 if num_ones % 2 == 1 else FREQ_VIS_BIT0 114 | yield parity_freq, MSEC_VIS_BIT 115 | yield FREQ_SYNC, MSEC_VIS_BIT # stop bit 116 | yield from self.gen_image_tuples() 117 | for fskid_byte in map(ord, self.fskid_payload): 118 | for _ in range(6): 119 | bit = fskid_byte & 1 120 | fskid_byte >>= 1 121 | bit_freq = FREQ_FSKID_BIT1 if bit == 1 else FREQ_FSKID_BIT0 122 | yield bit_freq, MSEC_FSKID_BIT 123 | 124 | def gen_image_tuples(self): 125 | return [] 126 | 127 | def add_fskid_text(self, text): 128 | self.fskid_payload += '\x20\x2a{0}\x01'.format( 129 | ''.join(chr(ord(c) - 0x20) for c in text)) 130 | 131 | def horizontal_sync(self): 132 | yield FREQ_SYNC, self.SYNC 133 | 134 | 135 | def byte_to_freq(value): 136 | return FREQ_BLACK + FREQ_RANGE * value / 255 137 | -------------------------------------------------------------------------------- /pysstv/tests/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | __all__ = ['common', 'test_color', 'test_sstv'] 4 | -------------------------------------------------------------------------------- /pysstv/tests/assets/320x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dnet/pySSTV/a4c840177c5c916bc5f2be0e4c69d09998e439c9/pysstv/tests/assets/320x256.png -------------------------------------------------------------------------------- /pysstv/tests/assets/MartinM1_freq_bits.p: -------------------------------------------------------------------------------- 1 | (lp0 2 | (I1900 3 | I300 4 | tp1 5 | a(I1200 6 | I10 7 | tp2 8 | a(I1900 9 | I300 10 | tp3 11 | a(I1200 12 | I30 13 | tp4 14 | a(I1300 15 | I30 16 | tp5 17 | a(I1300 18 | I30 19 | tp6 20 | a(I1100 21 | I30 22 | tp7 23 | a(I1100 24 | I30 25 | tp8 26 | a(I1300 27 | I30 28 | tp9 29 | a(I1100 30 | I30 31 | tp10 32 | a(I1300 33 | I30 34 | tp11 35 | a(I1100 36 | I30 37 | tp12 38 | a(I1200 39 | I30 40 | tp13 41 | a(I1200 42 | F4.862 43 | tp14 44 | a(I1500 45 | F0.572 46 | tp15 47 | a(F1500.0 48 | F0.45759999999999995 49 | tp16 50 | a(F1500.0 51 | F0.45759999999999995 52 | tp17 53 | a(F1500.0 54 | F0.45759999999999995 55 | tp18 56 | a(F1500.0 57 | F0.45759999999999995 58 | tp19 59 | a(F1500.0 60 | F0.45759999999999995 61 | tp20 62 | a(F1500.0 63 | F0.45759999999999995 64 | tp21 65 | a(F1500.0 66 | F0.45759999999999995 67 | tp22 68 | a(F1500.0 69 | F0.45759999999999995 70 | tp23 71 | a(F1500.0 72 | F0.45759999999999995 73 | tp24 74 | a(F1500.0 75 | F0.45759999999999995 76 | tp25 77 | a(F1500.0 78 | F0.45759999999999995 79 | tp26 80 | a(F1500.0 81 | F0.45759999999999995 82 | tp27 83 | a(F1500.0 84 | F0.45759999999999995 85 | tp28 86 | a(F1500.0 87 | F0.45759999999999995 88 | tp29 89 | a(F1500.0 90 | F0.45759999999999995 91 | tp30 92 | a(F1500.0 93 | F0.45759999999999995 94 | tp31 95 | a(F1500.0 96 | F0.45759999999999995 97 | tp32 98 | a(F1500.0 99 | F0.45759999999999995 100 | tp33 101 | a(F1500.0 102 | F0.45759999999999995 103 | tp34 104 | a(F1500.0 105 | F0.45759999999999995 106 | tp35 107 | a(F1500.0 108 | F0.45759999999999995 109 | tp36 110 | a(F1500.0 111 | F0.45759999999999995 112 | tp37 113 | a(F1500.0 114 | F0.45759999999999995 115 | tp38 116 | a(F1500.0 117 | F0.45759999999999995 118 | tp39 119 | a(F1500.0 120 | F0.45759999999999995 121 | tp40 122 | a(F1500.0 123 | F0.45759999999999995 124 | tp41 125 | a(F1500.0 126 | F0.45759999999999995 127 | tp42 128 | a(F1500.0 129 | F0.45759999999999995 130 | tp43 131 | a(F1500.0 132 | F0.45759999999999995 133 | tp44 134 | a(F1500.0 135 | F0.45759999999999995 136 | tp45 137 | a(F1500.0 138 | F0.45759999999999995 139 | tp46 140 | a(F1500.0 141 | F0.45759999999999995 142 | tp47 143 | a(F1500.0 144 | F0.45759999999999995 145 | tp48 146 | a(F1500.0 147 | F0.45759999999999995 148 | tp49 149 | a(F1500.0 150 | F0.45759999999999995 151 | tp50 152 | a(F1500.0 153 | F0.45759999999999995 154 | tp51 155 | a(F1500.0 156 | F0.45759999999999995 157 | tp52 158 | a(F1500.0 159 | F0.45759999999999995 160 | tp53 161 | a(F1500.0 162 | F0.45759999999999995 163 | tp54 164 | a(F1500.0 165 | F0.45759999999999995 166 | tp55 167 | a(F1500.0 168 | F0.45759999999999995 169 | tp56 170 | a(F1500.0 171 | F0.45759999999999995 172 | tp57 173 | a(F1500.0 174 | F0.45759999999999995 175 | tp58 176 | a(F1500.0 177 | F0.45759999999999995 178 | tp59 179 | a(F1500.0 180 | F0.45759999999999995 181 | tp60 182 | a(F1500.0 183 | F0.45759999999999995 184 | tp61 185 | a(F1500.0 186 | F0.45759999999999995 187 | tp62 188 | a(F1500.0 189 | F0.45759999999999995 190 | tp63 191 | a(F1500.0 192 | F0.45759999999999995 193 | tp64 194 | a(F1500.0 195 | F0.45759999999999995 196 | tp65 197 | a(F1500.0 198 | F0.45759999999999995 199 | tp66 200 | a(F1500.0 201 | F0.45759999999999995 202 | tp67 203 | a(F1500.0 204 | F0.45759999999999995 205 | tp68 206 | a(F1500.0 207 | F0.45759999999999995 208 | tp69 209 | a(F1500.0 210 | F0.45759999999999995 211 | tp70 212 | a(F1500.0 213 | F0.45759999999999995 214 | tp71 215 | a(F1500.0 216 | F0.45759999999999995 217 | tp72 218 | a(F1500.0 219 | F0.45759999999999995 220 | tp73 221 | a(F1500.0 222 | F0.45759999999999995 223 | tp74 224 | a(F1500.0 225 | F0.45759999999999995 226 | tp75 227 | a(F1500.0 228 | F0.45759999999999995 229 | tp76 230 | a(F1500.0 231 | F0.45759999999999995 232 | tp77 233 | a(F1500.0 234 | F0.45759999999999995 235 | tp78 236 | a(F1500.0 237 | F0.45759999999999995 238 | tp79 239 | a(F1500.0 240 | F0.45759999999999995 241 | tp80 242 | a(F1500.0 243 | F0.45759999999999995 244 | tp81 245 | a(F1500.0 246 | F0.45759999999999995 247 | tp82 248 | a(F1500.0 249 | F0.45759999999999995 250 | tp83 251 | a(F1500.0 252 | F0.45759999999999995 253 | tp84 254 | a(F1500.0 255 | F0.45759999999999995 256 | tp85 257 | a(F1500.0 258 | F0.45759999999999995 259 | tp86 260 | a(F1500.0 261 | F0.45759999999999995 262 | tp87 263 | a(F1500.0 264 | F0.45759999999999995 265 | tp88 266 | a(F1500.0 267 | F0.45759999999999995 268 | tp89 269 | a(F1500.0 270 | F0.45759999999999995 271 | tp90 272 | a(F1500.0 273 | F0.45759999999999995 274 | tp91 275 | a(F1500.0 276 | F0.45759999999999995 277 | tp92 278 | a(F1500.0 279 | F0.45759999999999995 280 | tp93 281 | a(F1500.0 282 | F0.45759999999999995 283 | tp94 284 | a(F1500.0 285 | F0.45759999999999995 286 | tp95 287 | a(F1500.0 288 | F0.45759999999999995 289 | tp96 290 | a(F1500.0 291 | F0.45759999999999995 292 | tp97 293 | a(F1500.0 294 | F0.45759999999999995 295 | tp98 296 | a(F1500.0 297 | F0.45759999999999995 298 | tp99 299 | a(F1500.0 300 | F0.45759999999999995 301 | tp100 302 | a(F1500.0 303 | F0.45759999999999995 304 | tp101 305 | a(F1500.0 306 | F0.45759999999999995 307 | tp102 308 | a(F1500.0 309 | F0.45759999999999995 310 | tp103 311 | a(F1500.0 312 | F0.45759999999999995 313 | tp104 314 | a(F1500.0 315 | F0.45759999999999995 316 | tp105 317 | a(F1500.0 318 | F0.45759999999999995 319 | tp106 320 | a(F1500.0 321 | F0.45759999999999995 322 | tp107 323 | a(F1500.0 324 | F0.45759999999999995 325 | tp108 326 | a(F1500.0 327 | F0.45759999999999995 328 | tp109 329 | a(F1500.0 330 | F0.45759999999999995 331 | tp110 332 | a(F1500.0 333 | F0.45759999999999995 334 | tp111 335 | a(F1500.0 336 | F0.45759999999999995 337 | tp112 338 | a(F1500.0 339 | F0.45759999999999995 340 | tp113 341 | a(F1500.0 342 | F0.45759999999999995 343 | tp114 344 | a(F1500.0 345 | F0.45759999999999995 346 | tp115 347 | a(F1500.0 348 | F0.45759999999999995 349 | tp116 350 | a(F1500.0 351 | F0.45759999999999995 352 | tp117 353 | a(F1500.0 354 | F0.45759999999999995 355 | tp118 356 | a(F1500.0 357 | F0.45759999999999995 358 | tp119 359 | a(F1500.0 360 | F0.45759999999999995 361 | tp120 362 | a(F1500.0 363 | F0.45759999999999995 364 | tp121 365 | a(F1500.0 366 | F0.45759999999999995 367 | tp122 368 | a(F1500.0 369 | F0.45759999999999995 370 | tp123 371 | a(F1500.0 372 | F0.45759999999999995 373 | tp124 374 | a(F1500.0 375 | F0.45759999999999995 376 | tp125 377 | a(F1500.0 378 | F0.45759999999999995 379 | tp126 380 | a(F1500.0 381 | F0.45759999999999995 382 | tp127 383 | a(F1500.0 384 | F0.45759999999999995 385 | tp128 386 | a(F1500.0 387 | F0.45759999999999995 388 | tp129 389 | a(F1500.0 390 | F0.45759999999999995 391 | tp130 392 | a(F1500.0 393 | F0.45759999999999995 394 | tp131 395 | a(F1500.0 396 | F0.45759999999999995 397 | tp132 398 | a(F1500.0 399 | F0.45759999999999995 400 | tp133 401 | a(F1500.0 402 | F0.45759999999999995 403 | tp134 404 | a(F1500.0 405 | F0.45759999999999995 406 | tp135 407 | a(F1500.0 408 | F0.45759999999999995 409 | tp136 410 | a(F1500.0 411 | F0.45759999999999995 412 | tp137 413 | a(F1500.0 414 | F0.45759999999999995 415 | tp138 416 | a(F1500.0 417 | F0.45759999999999995 418 | tp139 419 | a(F1500.0 420 | F0.45759999999999995 421 | tp140 422 | a(F1500.0 423 | F0.45759999999999995 424 | tp141 425 | a(F1500.0 426 | F0.45759999999999995 427 | tp142 428 | a(F1500.0 429 | F0.45759999999999995 430 | tp143 431 | a(F1500.0 432 | F0.45759999999999995 433 | tp144 434 | a(F1500.0 435 | F0.45759999999999995 436 | tp145 437 | a(F1500.0 438 | F0.45759999999999995 439 | tp146 440 | a(F1500.0 441 | F0.45759999999999995 442 | tp147 443 | a(F1500.0 444 | F0.45759999999999995 445 | tp148 446 | a(F1500.0 447 | F0.45759999999999995 448 | tp149 449 | a(F1500.0 450 | F0.45759999999999995 451 | tp150 452 | a(F1500.0 453 | F0.45759999999999995 454 | tp151 455 | a(F1500.0 456 | F0.45759999999999995 457 | tp152 458 | a(F1500.0 459 | F0.45759999999999995 460 | tp153 461 | a(F1500.0 462 | F0.45759999999999995 463 | tp154 464 | a(F1500.0 465 | F0.45759999999999995 466 | tp155 467 | a(F1500.0 468 | F0.45759999999999995 469 | tp156 470 | a(F1500.0 471 | F0.45759999999999995 472 | tp157 473 | a(F1500.0 474 | F0.45759999999999995 475 | tp158 476 | a(F1500.0 477 | F0.45759999999999995 478 | tp159 479 | a(F1500.0 480 | F0.45759999999999995 481 | tp160 482 | a(F1500.0 483 | F0.45759999999999995 484 | tp161 485 | a(F1500.0 486 | F0.45759999999999995 487 | tp162 488 | a(F1500.0 489 | F0.45759999999999995 490 | tp163 491 | a(F1500.0 492 | F0.45759999999999995 493 | tp164 494 | a(F1500.0 495 | F0.45759999999999995 496 | tp165 497 | a(F1500.0 498 | F0.45759999999999995 499 | tp166 500 | a(F1500.0 501 | F0.45759999999999995 502 | tp167 503 | a(F1500.0 504 | F0.45759999999999995 505 | tp168 506 | a(F1500.0 507 | F0.45759999999999995 508 | tp169 509 | a(F1500.0 510 | F0.45759999999999995 511 | tp170 512 | a(F1500.0 513 | F0.45759999999999995 514 | tp171 515 | a(F1500.0 516 | F0.45759999999999995 517 | tp172 518 | a(F1500.0 519 | F0.45759999999999995 520 | tp173 521 | a(F1500.0 522 | F0.45759999999999995 523 | tp174 524 | a(F1500.0 525 | F0.45759999999999995 526 | tp175 527 | a(F1500.0 528 | F0.45759999999999995 529 | tp176 530 | a(F1500.0 531 | F0.45759999999999995 532 | tp177 533 | a(F1500.0 534 | F0.45759999999999995 535 | tp178 536 | a(F1500.0 537 | F0.45759999999999995 538 | tp179 539 | a(F1500.0 540 | F0.45759999999999995 541 | tp180 542 | a(F1500.0 543 | F0.45759999999999995 544 | tp181 545 | a(F1500.0 546 | F0.45759999999999995 547 | tp182 548 | a(F1500.0 549 | F0.45759999999999995 550 | tp183 551 | a(F1500.0 552 | F0.45759999999999995 553 | tp184 554 | a(F1500.0 555 | F0.45759999999999995 556 | tp185 557 | a(F1500.0 558 | F0.45759999999999995 559 | tp186 560 | a(F1500.0 561 | F0.45759999999999995 562 | tp187 563 | a(F1500.0 564 | F0.45759999999999995 565 | tp188 566 | a(F1500.0 567 | F0.45759999999999995 568 | tp189 569 | a(F1500.0 570 | F0.45759999999999995 571 | tp190 572 | a(F1500.0 573 | F0.45759999999999995 574 | tp191 575 | a(F1500.0 576 | F0.45759999999999995 577 | tp192 578 | a(F1500.0 579 | F0.45759999999999995 580 | tp193 581 | a(F1500.0 582 | F0.45759999999999995 583 | tp194 584 | a(F1500.0 585 | F0.45759999999999995 586 | tp195 587 | a(F1500.0 588 | F0.45759999999999995 589 | tp196 590 | a(F1500.0 591 | F0.45759999999999995 592 | tp197 593 | a(F1500.0 594 | F0.45759999999999995 595 | tp198 596 | a(F1500.0 597 | F0.45759999999999995 598 | tp199 599 | a(F1500.0 600 | F0.45759999999999995 601 | tp200 602 | a(F1500.0 603 | F0.45759999999999995 604 | tp201 605 | a(F1500.0 606 | F0.45759999999999995 607 | tp202 608 | a(F1500.0 609 | F0.45759999999999995 610 | tp203 611 | a(F1500.0 612 | F0.45759999999999995 613 | tp204 614 | a(F1500.0 615 | F0.45759999999999995 616 | tp205 617 | a(F1500.0 618 | F0.45759999999999995 619 | tp206 620 | a(F1500.0 621 | F0.45759999999999995 622 | tp207 623 | a(F1500.0 624 | F0.45759999999999995 625 | tp208 626 | a(F1500.0 627 | F0.45759999999999995 628 | tp209 629 | a(F1500.0 630 | F0.45759999999999995 631 | tp210 632 | a(F1500.0 633 | F0.45759999999999995 634 | tp211 635 | a(F1500.0 636 | F0.45759999999999995 637 | tp212 638 | a(F1500.0 639 | F0.45759999999999995 640 | tp213 641 | a(F1500.0 642 | F0.45759999999999995 643 | tp214 644 | a(F1500.0 645 | F0.45759999999999995 646 | tp215 647 | a(F1500.0 648 | F0.45759999999999995 649 | tp216 650 | a(F1500.0 651 | F0.45759999999999995 652 | tp217 653 | a(F1500.0 654 | F0.45759999999999995 655 | tp218 656 | a(F1500.0 657 | F0.45759999999999995 658 | tp219 659 | a(F1500.0 660 | F0.45759999999999995 661 | tp220 662 | a(F1500.0 663 | F0.45759999999999995 664 | tp221 665 | a(F1500.0 666 | F0.45759999999999995 667 | tp222 668 | a(F1500.0 669 | F0.45759999999999995 670 | tp223 671 | a(F1500.0 672 | F0.45759999999999995 673 | tp224 674 | a(F1500.0 675 | F0.45759999999999995 676 | tp225 677 | a(F1500.0 678 | F0.45759999999999995 679 | tp226 680 | a(F1500.0 681 | F0.45759999999999995 682 | tp227 683 | a(F1500.0 684 | F0.45759999999999995 685 | tp228 686 | a(F1500.0 687 | F0.45759999999999995 688 | tp229 689 | a(F1500.0 690 | F0.45759999999999995 691 | tp230 692 | a(F1500.0 693 | F0.45759999999999995 694 | tp231 695 | a(F1500.0 696 | F0.45759999999999995 697 | tp232 698 | a(F1500.0 699 | F0.45759999999999995 700 | tp233 701 | a(F1500.0 702 | F0.45759999999999995 703 | tp234 704 | a(F1500.0 705 | F0.45759999999999995 706 | tp235 707 | a(F1500.0 708 | F0.45759999999999995 709 | tp236 710 | a(F1500.0 711 | F0.45759999999999995 712 | tp237 713 | a(F1500.0 714 | F0.45759999999999995 715 | tp238 716 | a(F1500.0 717 | F0.45759999999999995 718 | tp239 719 | a(F1500.0 720 | F0.45759999999999995 721 | tp240 722 | a(F1500.0 723 | F0.45759999999999995 724 | tp241 725 | a(F1500.0 726 | F0.45759999999999995 727 | tp242 728 | a(F1500.0 729 | F0.45759999999999995 730 | tp243 731 | a(F1500.0 732 | F0.45759999999999995 733 | tp244 734 | a(F1500.0 735 | F0.45759999999999995 736 | tp245 737 | a(F1500.0 738 | F0.45759999999999995 739 | tp246 740 | a(F1500.0 741 | F0.45759999999999995 742 | tp247 743 | a(F1500.0 744 | F0.45759999999999995 745 | tp248 746 | a(F1500.0 747 | F0.45759999999999995 748 | tp249 749 | a(F1500.0 750 | F0.45759999999999995 751 | tp250 752 | a(F1500.0 753 | F0.45759999999999995 754 | tp251 755 | a(F1500.0 756 | F0.45759999999999995 757 | tp252 758 | a(F1500.0 759 | F0.45759999999999995 760 | tp253 761 | a(F1500.0 762 | F0.45759999999999995 763 | tp254 764 | a(F1500.0 765 | F0.45759999999999995 766 | tp255 767 | a(F1500.0 768 | F0.45759999999999995 769 | tp256 770 | a(F1500.0 771 | F0.45759999999999995 772 | tp257 773 | a(F1500.0 774 | F0.45759999999999995 775 | tp258 776 | a(F1500.0 777 | F0.45759999999999995 778 | tp259 779 | a(F1500.0 780 | F0.45759999999999995 781 | tp260 782 | a(F1500.0 783 | F0.45759999999999995 784 | tp261 785 | a(F1500.0 786 | F0.45759999999999995 787 | tp262 788 | a(F1500.0 789 | F0.45759999999999995 790 | tp263 791 | a(F1500.0 792 | F0.45759999999999995 793 | tp264 794 | a(F1500.0 795 | F0.45759999999999995 796 | tp265 797 | a(F1500.0 798 | F0.45759999999999995 799 | tp266 800 | a(F1500.0 801 | F0.45759999999999995 802 | tp267 803 | a(F1500.0 804 | F0.45759999999999995 805 | tp268 806 | a(F1500.0 807 | F0.45759999999999995 808 | tp269 809 | a(F1500.0 810 | F0.45759999999999995 811 | tp270 812 | a(F1500.0 813 | F0.45759999999999995 814 | tp271 815 | a(F1500.0 816 | F0.45759999999999995 817 | tp272 818 | a(F1500.0 819 | F0.45759999999999995 820 | tp273 821 | a(F1500.0 822 | F0.45759999999999995 823 | tp274 824 | a(F1500.0 825 | F0.45759999999999995 826 | tp275 827 | a(F1500.0 828 | F0.45759999999999995 829 | tp276 830 | a(F1500.0 831 | F0.45759999999999995 832 | tp277 833 | a(F1500.0 834 | F0.45759999999999995 835 | tp278 836 | a(F1500.0 837 | F0.45759999999999995 838 | tp279 839 | a(F1500.0 840 | F0.45759999999999995 841 | tp280 842 | a(F1500.0 843 | F0.45759999999999995 844 | tp281 845 | a(F1500.0 846 | F0.45759999999999995 847 | tp282 848 | a(F1500.0 849 | F0.45759999999999995 850 | tp283 851 | a(F1500.0 852 | F0.45759999999999995 853 | tp284 854 | a(F1500.0 855 | F0.45759999999999995 856 | tp285 857 | a(F1500.0 858 | F0.45759999999999995 859 | tp286 860 | a(F1500.0 861 | F0.45759999999999995 862 | tp287 863 | a(F1500.0 864 | F0.45759999999999995 865 | tp288 866 | a(F1500.0 867 | F0.45759999999999995 868 | tp289 869 | a(F1500.0 870 | F0.45759999999999995 871 | tp290 872 | a(F1500.0 873 | F0.45759999999999995 874 | tp291 875 | a(F1500.0 876 | F0.45759999999999995 877 | tp292 878 | a(F1500.0 879 | F0.45759999999999995 880 | tp293 881 | a(F1500.0 882 | F0.45759999999999995 883 | tp294 884 | a(F1500.0 885 | F0.45759999999999995 886 | tp295 887 | a(F1500.0 888 | F0.45759999999999995 889 | tp296 890 | a(F1500.0 891 | F0.45759999999999995 892 | tp297 893 | a(F1500.0 894 | F0.45759999999999995 895 | tp298 896 | a(F1500.0 897 | F0.45759999999999995 898 | tp299 899 | a(F1500.0 900 | F0.45759999999999995 901 | tp300 902 | a(F1500.0 903 | F0.45759999999999995 904 | tp301 905 | a(F1500.0 906 | F0.45759999999999995 907 | tp302 908 | a(F1500.0 909 | F0.45759999999999995 910 | tp303 911 | a(F1500.0 912 | F0.45759999999999995 913 | tp304 914 | a(F1500.0 915 | F0.45759999999999995 916 | tp305 917 | a(F1500.0 918 | F0.45759999999999995 919 | tp306 920 | a(F1500.0 921 | F0.45759999999999995 922 | tp307 923 | a(F1500.0 924 | F0.45759999999999995 925 | tp308 926 | a(F1500.0 927 | F0.45759999999999995 928 | tp309 929 | a(F1500.0 930 | F0.45759999999999995 931 | tp310 932 | a(F1500.0 933 | F0.45759999999999995 934 | tp311 935 | a(F1500.0 936 | F0.45759999999999995 937 | tp312 938 | a(F1500.0 939 | F0.45759999999999995 940 | tp313 941 | a(F1500.0 942 | F0.45759999999999995 943 | tp314 944 | a(F1500.0 945 | F0.45759999999999995 946 | tp315 947 | a(F1500.0 948 | F0.45759999999999995 949 | tp316 950 | a(F1500.0 951 | F0.45759999999999995 952 | tp317 953 | a(F1500.0 954 | F0.45759999999999995 955 | tp318 956 | a(F1500.0 957 | F0.45759999999999995 958 | tp319 959 | a(F1500.0 960 | F0.45759999999999995 961 | tp320 962 | a(F1500.0 963 | F0.45759999999999995 964 | tp321 965 | a(F1500.0 966 | F0.45759999999999995 967 | tp322 968 | a(F1500.0 969 | F0.45759999999999995 970 | tp323 971 | a(F1500.0 972 | F0.45759999999999995 973 | tp324 974 | a(F1500.0 975 | F0.45759999999999995 976 | tp325 977 | a(F1500.0 978 | F0.45759999999999995 979 | tp326 980 | a(F1500.0 981 | F0.45759999999999995 982 | tp327 983 | a(F1500.0 984 | F0.45759999999999995 985 | tp328 986 | a(F1500.0 987 | F0.45759999999999995 988 | tp329 989 | a(F1500.0 990 | F0.45759999999999995 991 | tp330 992 | a(F1500.0 993 | F0.45759999999999995 994 | tp331 995 | a(F1500.0 996 | F0.45759999999999995 997 | tp332 998 | a(F1500.0 999 | F0.45759999999999995 1000 | tp333 1001 | a(F1500.0 1002 | F0.45759999999999995 1003 | tp334 1004 | a(F1500.0 1005 | F0.45759999999999995 1006 | tp335 1007 | a(I1500 1008 | F0.572 1009 | tp336 1010 | a(F1500.0 1011 | F0.45759999999999995 1012 | tp337 1013 | a(F1500.0 1014 | F0.45759999999999995 1015 | tp338 1016 | a(F1500.0 1017 | F0.45759999999999995 1018 | tp339 1019 | a(F1500.0 1020 | F0.45759999999999995 1021 | tp340 1022 | a(F1500.0 1023 | F0.45759999999999995 1024 | tp341 1025 | a(F1500.0 1026 | F0.45759999999999995 1027 | tp342 1028 | a(F1500.0 1029 | F0.45759999999999995 1030 | tp343 1031 | a(F1500.0 1032 | F0.45759999999999995 1033 | tp344 1034 | a(F1500.0 1035 | F0.45759999999999995 1036 | tp345 1037 | a(F1500.0 1038 | F0.45759999999999995 1039 | tp346 1040 | a(F1500.0 1041 | F0.45759999999999995 1042 | tp347 1043 | a(F1500.0 1044 | F0.45759999999999995 1045 | tp348 1046 | a(F1500.0 1047 | F0.45759999999999995 1048 | tp349 1049 | a(F1500.0 1050 | F0.45759999999999995 1051 | tp350 1052 | a(F1500.0 1053 | F0.45759999999999995 1054 | tp351 1055 | a(F1500.0 1056 | F0.45759999999999995 1057 | tp352 1058 | a(F1500.0 1059 | F0.45759999999999995 1060 | tp353 1061 | a(F1500.0 1062 | F0.45759999999999995 1063 | tp354 1064 | a(F1500.0 1065 | F0.45759999999999995 1066 | tp355 1067 | a(F1500.0 1068 | F0.45759999999999995 1069 | tp356 1070 | a(F1500.0 1071 | F0.45759999999999995 1072 | tp357 1073 | a(F1500.0 1074 | F0.45759999999999995 1075 | tp358 1076 | a(F1500.0 1077 | F0.45759999999999995 1078 | tp359 1079 | a(F1500.0 1080 | F0.45759999999999995 1081 | tp360 1082 | a(F1500.0 1083 | F0.45759999999999995 1084 | tp361 1085 | a(F1500.0 1086 | F0.45759999999999995 1087 | tp362 1088 | a(F1500.0 1089 | F0.45759999999999995 1090 | tp363 1091 | a(F1500.0 1092 | F0.45759999999999995 1093 | tp364 1094 | a(F1500.0 1095 | F0.45759999999999995 1096 | tp365 1097 | a(F1500.0 1098 | F0.45759999999999995 1099 | tp366 1100 | a(F1500.0 1101 | F0.45759999999999995 1102 | tp367 1103 | a(F1500.0 1104 | F0.45759999999999995 1105 | tp368 1106 | a(F1500.0 1107 | F0.45759999999999995 1108 | tp369 1109 | a(F1500.0 1110 | F0.45759999999999995 1111 | tp370 1112 | a(F1500.0 1113 | F0.45759999999999995 1114 | tp371 1115 | a(F1500.0 1116 | F0.45759999999999995 1117 | tp372 1118 | a(F1500.0 1119 | F0.45759999999999995 1120 | tp373 1121 | a(F1500.0 1122 | F0.45759999999999995 1123 | tp374 1124 | a(F1500.0 1125 | F0.45759999999999995 1126 | tp375 1127 | a(F1500.0 1128 | F0.45759999999999995 1129 | tp376 1130 | a(F1500.0 1131 | F0.45759999999999995 1132 | tp377 1133 | a(F1500.0 1134 | F0.45759999999999995 1135 | tp378 1136 | a(F1500.0 1137 | F0.45759999999999995 1138 | tp379 1139 | a(F1500.0 1140 | F0.45759999999999995 1141 | tp380 1142 | a(F1500.0 1143 | F0.45759999999999995 1144 | tp381 1145 | a(F1500.0 1146 | F0.45759999999999995 1147 | tp382 1148 | a(F1500.0 1149 | F0.45759999999999995 1150 | tp383 1151 | a(F1500.0 1152 | F0.45759999999999995 1153 | tp384 1154 | a(F1500.0 1155 | F0.45759999999999995 1156 | tp385 1157 | a(F1500.0 1158 | F0.45759999999999995 1159 | tp386 1160 | a(F1500.0 1161 | F0.45759999999999995 1162 | tp387 1163 | a(F1500.0 1164 | F0.45759999999999995 1165 | tp388 1166 | a(F1500.0 1167 | F0.45759999999999995 1168 | tp389 1169 | a(F1500.0 1170 | F0.45759999999999995 1171 | tp390 1172 | a(F1500.0 1173 | F0.45759999999999995 1174 | tp391 1175 | a(F1500.0 1176 | F0.45759999999999995 1177 | tp392 1178 | a(F1500.0 1179 | F0.45759999999999995 1180 | tp393 1181 | a(F1500.0 1182 | F0.45759999999999995 1183 | tp394 1184 | a(F1500.0 1185 | F0.45759999999999995 1186 | tp395 1187 | a(F1500.0 1188 | F0.45759999999999995 1189 | tp396 1190 | a(F1500.0 1191 | F0.45759999999999995 1192 | tp397 1193 | a(F1500.0 1194 | F0.45759999999999995 1195 | tp398 1196 | a(F1500.0 1197 | F0.45759999999999995 1198 | tp399 1199 | a(F1500.0 1200 | F0.45759999999999995 1201 | tp400 1202 | a(F1500.0 1203 | F0.45759999999999995 1204 | tp401 1205 | a(F1500.0 1206 | F0.45759999999999995 1207 | tp402 1208 | a(F1500.0 1209 | F0.45759999999999995 1210 | tp403 1211 | a(F1500.0 1212 | F0.45759999999999995 1213 | tp404 1214 | a(F1500.0 1215 | F0.45759999999999995 1216 | tp405 1217 | a(F1500.0 1218 | F0.45759999999999995 1219 | tp406 1220 | a(F1500.0 1221 | F0.45759999999999995 1222 | tp407 1223 | a(F1500.0 1224 | F0.45759999999999995 1225 | tp408 1226 | a(F1500.0 1227 | F0.45759999999999995 1228 | tp409 1229 | a(F1500.0 1230 | F0.45759999999999995 1231 | tp410 1232 | a(F1500.0 1233 | F0.45759999999999995 1234 | tp411 1235 | a(F1500.0 1236 | F0.45759999999999995 1237 | tp412 1238 | a(F1500.0 1239 | F0.45759999999999995 1240 | tp413 1241 | a(F1500.0 1242 | F0.45759999999999995 1243 | tp414 1244 | a(F1500.0 1245 | F0.45759999999999995 1246 | tp415 1247 | a(F1500.0 1248 | F0.45759999999999995 1249 | tp416 1250 | a(F1500.0 1251 | F0.45759999999999995 1252 | tp417 1253 | a(F1500.0 1254 | F0.45759999999999995 1255 | tp418 1256 | a(F1500.0 1257 | F0.45759999999999995 1258 | tp419 1259 | a(F1500.0 1260 | F0.45759999999999995 1261 | tp420 1262 | a(F1500.0 1263 | F0.45759999999999995 1264 | tp421 1265 | a(F1500.0 1266 | F0.45759999999999995 1267 | tp422 1268 | a(F1500.0 1269 | F0.45759999999999995 1270 | tp423 1271 | a(F1500.0 1272 | F0.45759999999999995 1273 | tp424 1274 | a(F1500.0 1275 | F0.45759999999999995 1276 | tp425 1277 | a(F1500.0 1278 | F0.45759999999999995 1279 | tp426 1280 | a(F1500.0 1281 | F0.45759999999999995 1282 | tp427 1283 | a(F1500.0 1284 | F0.45759999999999995 1285 | tp428 1286 | a(F1500.0 1287 | F0.45759999999999995 1288 | tp429 1289 | a(F1500.0 1290 | F0.45759999999999995 1291 | tp430 1292 | a(F1500.0 1293 | F0.45759999999999995 1294 | tp431 1295 | a(F1500.0 1296 | F0.45759999999999995 1297 | tp432 1298 | a(F1500.0 1299 | F0.45759999999999995 1300 | tp433 1301 | a(F1500.0 1302 | F0.45759999999999995 1303 | tp434 1304 | a(F1500.0 1305 | F0.45759999999999995 1306 | tp435 1307 | a(F1500.0 1308 | F0.45759999999999995 1309 | tp436 1310 | a(F1500.0 1311 | F0.45759999999999995 1312 | tp437 1313 | a(F1500.0 1314 | F0.45759999999999995 1315 | tp438 1316 | a(F1500.0 1317 | F0.45759999999999995 1318 | tp439 1319 | a(F1500.0 1320 | F0.45759999999999995 1321 | tp440 1322 | a(F1500.0 1323 | F0.45759999999999995 1324 | tp441 1325 | a(F1500.0 1326 | F0.45759999999999995 1327 | tp442 1328 | a(F1500.0 1329 | F0.45759999999999995 1330 | tp443 1331 | a(F1500.0 1332 | F0.45759999999999995 1333 | tp444 1334 | a(F1500.0 1335 | F0.45759999999999995 1336 | tp445 1337 | a(F1500.0 1338 | F0.45759999999999995 1339 | tp446 1340 | a(F1500.0 1341 | F0.45759999999999995 1342 | tp447 1343 | a(F1500.0 1344 | F0.45759999999999995 1345 | tp448 1346 | a(F1500.0 1347 | F0.45759999999999995 1348 | tp449 1349 | a(F1500.0 1350 | F0.45759999999999995 1351 | tp450 1352 | a(F1500.0 1353 | F0.45759999999999995 1354 | tp451 1355 | a(F1500.0 1356 | F0.45759999999999995 1357 | tp452 1358 | a(F1500.0 1359 | F0.45759999999999995 1360 | tp453 1361 | a(F1500.0 1362 | F0.45759999999999995 1363 | tp454 1364 | a(F1500.0 1365 | F0.45759999999999995 1366 | tp455 1367 | a(F1500.0 1368 | F0.45759999999999995 1369 | tp456 1370 | a(F1500.0 1371 | F0.45759999999999995 1372 | tp457 1373 | a(F1500.0 1374 | F0.45759999999999995 1375 | tp458 1376 | a(F1500.0 1377 | F0.45759999999999995 1378 | tp459 1379 | a(F1500.0 1380 | F0.45759999999999995 1381 | tp460 1382 | a(F1500.0 1383 | F0.45759999999999995 1384 | tp461 1385 | a(F1500.0 1386 | F0.45759999999999995 1387 | tp462 1388 | a(F1500.0 1389 | F0.45759999999999995 1390 | tp463 1391 | a(F1500.0 1392 | F0.45759999999999995 1393 | tp464 1394 | a(F1500.0 1395 | F0.45759999999999995 1396 | tp465 1397 | a(F1500.0 1398 | F0.45759999999999995 1399 | tp466 1400 | a(F1500.0 1401 | F0.45759999999999995 1402 | tp467 1403 | a(F1500.0 1404 | F0.45759999999999995 1405 | tp468 1406 | a(F1500.0 1407 | F0.45759999999999995 1408 | tp469 1409 | a(F1500.0 1410 | F0.45759999999999995 1411 | tp470 1412 | a(F1500.0 1413 | F0.45759999999999995 1414 | tp471 1415 | a(F1500.0 1416 | F0.45759999999999995 1417 | tp472 1418 | a(F1500.0 1419 | F0.45759999999999995 1420 | tp473 1421 | a(F1500.0 1422 | F0.45759999999999995 1423 | tp474 1424 | a(F1500.0 1425 | F0.45759999999999995 1426 | tp475 1427 | a(F1500.0 1428 | F0.45759999999999995 1429 | tp476 1430 | a(F1500.0 1431 | F0.45759999999999995 1432 | tp477 1433 | a(F1500.0 1434 | F0.45759999999999995 1435 | tp478 1436 | a(F1500.0 1437 | F0.45759999999999995 1438 | tp479 1439 | a(F1500.0 1440 | F0.45759999999999995 1441 | tp480 1442 | a(F1500.0 1443 | F0.45759999999999995 1444 | tp481 1445 | a(F1500.0 1446 | F0.45759999999999995 1447 | tp482 1448 | a(F1500.0 1449 | F0.45759999999999995 1450 | tp483 1451 | a(F1500.0 1452 | F0.45759999999999995 1453 | tp484 1454 | a(F1500.0 1455 | F0.45759999999999995 1456 | tp485 1457 | a(F1500.0 1458 | F0.45759999999999995 1459 | tp486 1460 | a(F1500.0 1461 | F0.45759999999999995 1462 | tp487 1463 | a(F1500.0 1464 | F0.45759999999999995 1465 | tp488 1466 | a(F1500.0 1467 | F0.45759999999999995 1468 | tp489 1469 | a(F1500.0 1470 | F0.45759999999999995 1471 | tp490 1472 | a(F1500.0 1473 | F0.45759999999999995 1474 | tp491 1475 | a(F1500.0 1476 | F0.45759999999999995 1477 | tp492 1478 | a(F1500.0 1479 | F0.45759999999999995 1480 | tp493 1481 | a(F1500.0 1482 | F0.45759999999999995 1483 | tp494 1484 | a(F1500.0 1485 | F0.45759999999999995 1486 | tp495 1487 | a(F1500.0 1488 | F0.45759999999999995 1489 | tp496 1490 | a(F1500.0 1491 | F0.45759999999999995 1492 | tp497 1493 | a(F1500.0 1494 | F0.45759999999999995 1495 | tp498 1496 | a(F1500.0 1497 | F0.45759999999999995 1498 | tp499 1499 | a(F1500.0 1500 | F0.45759999999999995 1501 | tp500 1502 | a(F1500.0 1503 | F0.45759999999999995 1504 | tp501 1505 | a(F1500.0 1506 | F0.45759999999999995 1507 | tp502 1508 | a(F1500.0 1509 | F0.45759999999999995 1510 | tp503 1511 | a(F1500.0 1512 | F0.45759999999999995 1513 | tp504 1514 | a(F1500.0 1515 | F0.45759999999999995 1516 | tp505 1517 | a(F1500.0 1518 | F0.45759999999999995 1519 | tp506 1520 | a(F1500.0 1521 | F0.45759999999999995 1522 | tp507 1523 | a(F1500.0 1524 | F0.45759999999999995 1525 | tp508 1526 | a(F1500.0 1527 | F0.45759999999999995 1528 | tp509 1529 | a(F1500.0 1530 | F0.45759999999999995 1531 | tp510 1532 | a(F1500.0 1533 | F0.45759999999999995 1534 | tp511 1535 | a(F1500.0 1536 | F0.45759999999999995 1537 | tp512 1538 | a(F1500.0 1539 | F0.45759999999999995 1540 | tp513 1541 | a(F1500.0 1542 | F0.45759999999999995 1543 | tp514 1544 | a(F1500.0 1545 | F0.45759999999999995 1546 | tp515 1547 | a(F1500.0 1548 | F0.45759999999999995 1549 | tp516 1550 | a(F1500.0 1551 | F0.45759999999999995 1552 | tp517 1553 | a(F1500.0 1554 | F0.45759999999999995 1555 | tp518 1556 | a(F1500.0 1557 | F0.45759999999999995 1558 | tp519 1559 | a(F1500.0 1560 | F0.45759999999999995 1561 | tp520 1562 | a(F1500.0 1563 | F0.45759999999999995 1564 | tp521 1565 | a(F1500.0 1566 | F0.45759999999999995 1567 | tp522 1568 | a(F1500.0 1569 | F0.45759999999999995 1570 | tp523 1571 | a(F1500.0 1572 | F0.45759999999999995 1573 | tp524 1574 | a(F1500.0 1575 | F0.45759999999999995 1576 | tp525 1577 | a(F1500.0 1578 | F0.45759999999999995 1579 | tp526 1580 | a(F1500.0 1581 | F0.45759999999999995 1582 | tp527 1583 | a(F1500.0 1584 | F0.45759999999999995 1585 | tp528 1586 | a(F1500.0 1587 | F0.45759999999999995 1588 | tp529 1589 | a(F1500.0 1590 | F0.45759999999999995 1591 | tp530 1592 | a(F1500.0 1593 | F0.45759999999999995 1594 | tp531 1595 | a(F1500.0 1596 | F0.45759999999999995 1597 | tp532 1598 | a(F1500.0 1599 | F0.45759999999999995 1600 | tp533 1601 | a(F1500.0 1602 | F0.45759999999999995 1603 | tp534 1604 | a(F1500.0 1605 | F0.45759999999999995 1606 | tp535 1607 | a(F1500.0 1608 | F0.45759999999999995 1609 | tp536 1610 | a(F1500.0 1611 | F0.45759999999999995 1612 | tp537 1613 | a(F1500.0 1614 | F0.45759999999999995 1615 | tp538 1616 | a(F1500.0 1617 | F0.45759999999999995 1618 | tp539 1619 | a(F1500.0 1620 | F0.45759999999999995 1621 | tp540 1622 | a(F1500.0 1623 | F0.45759999999999995 1624 | tp541 1625 | a(F1500.0 1626 | F0.45759999999999995 1627 | tp542 1628 | a(F1500.0 1629 | F0.45759999999999995 1630 | tp543 1631 | a(F1500.0 1632 | F0.45759999999999995 1633 | tp544 1634 | a(F1500.0 1635 | F0.45759999999999995 1636 | tp545 1637 | a(F1500.0 1638 | F0.45759999999999995 1639 | tp546 1640 | a(F1500.0 1641 | F0.45759999999999995 1642 | tp547 1643 | a(F1500.0 1644 | F0.45759999999999995 1645 | tp548 1646 | a(F1500.0 1647 | F0.45759999999999995 1648 | tp549 1649 | a(F1500.0 1650 | F0.45759999999999995 1651 | tp550 1652 | a(F1500.0 1653 | F0.45759999999999995 1654 | tp551 1655 | a(F1500.0 1656 | F0.45759999999999995 1657 | tp552 1658 | a(F1500.0 1659 | F0.45759999999999995 1660 | tp553 1661 | a(F1500.0 1662 | F0.45759999999999995 1663 | tp554 1664 | a(F1500.0 1665 | F0.45759999999999995 1666 | tp555 1667 | a(F1500.0 1668 | F0.45759999999999995 1669 | tp556 1670 | a(F1500.0 1671 | F0.45759999999999995 1672 | tp557 1673 | a(F1500.0 1674 | F0.45759999999999995 1675 | tp558 1676 | a(F1500.0 1677 | F0.45759999999999995 1678 | tp559 1679 | a(F1500.0 1680 | F0.45759999999999995 1681 | tp560 1682 | a(F1500.0 1683 | F0.45759999999999995 1684 | tp561 1685 | a(F1500.0 1686 | F0.45759999999999995 1687 | tp562 1688 | a(F1500.0 1689 | F0.45759999999999995 1690 | tp563 1691 | a(F1500.0 1692 | F0.45759999999999995 1693 | tp564 1694 | a(F1500.0 1695 | F0.45759999999999995 1696 | tp565 1697 | a(F1500.0 1698 | F0.45759999999999995 1699 | tp566 1700 | a(F1500.0 1701 | F0.45759999999999995 1702 | tp567 1703 | a(F1500.0 1704 | F0.45759999999999995 1705 | tp568 1706 | a(F1500.0 1707 | F0.45759999999999995 1708 | tp569 1709 | a(F1500.0 1710 | F0.45759999999999995 1711 | tp570 1712 | a(F1500.0 1713 | F0.45759999999999995 1714 | tp571 1715 | a(F1500.0 1716 | F0.45759999999999995 1717 | tp572 1718 | a(F1500.0 1719 | F0.45759999999999995 1720 | tp573 1721 | a(F1500.0 1722 | F0.45759999999999995 1723 | tp574 1724 | a(F1500.0 1725 | F0.45759999999999995 1726 | tp575 1727 | a(F1500.0 1728 | F0.45759999999999995 1729 | tp576 1730 | a(F1500.0 1731 | F0.45759999999999995 1732 | tp577 1733 | a(F1500.0 1734 | F0.45759999999999995 1735 | tp578 1736 | a(F1500.0 1737 | F0.45759999999999995 1738 | tp579 1739 | a(F1500.0 1740 | F0.45759999999999995 1741 | tp580 1742 | a(F1500.0 1743 | F0.45759999999999995 1744 | tp581 1745 | a(F1500.0 1746 | F0.45759999999999995 1747 | tp582 1748 | a(F1500.0 1749 | F0.45759999999999995 1750 | tp583 1751 | a(F1500.0 1752 | F0.45759999999999995 1753 | tp584 1754 | a(F1500.0 1755 | F0.45759999999999995 1756 | tp585 1757 | a(F1500.0 1758 | F0.45759999999999995 1759 | tp586 1760 | a(F1500.0 1761 | F0.45759999999999995 1762 | tp587 1763 | a(F1500.0 1764 | F0.45759999999999995 1765 | tp588 1766 | a(F1500.0 1767 | F0.45759999999999995 1768 | tp589 1769 | a(F1500.0 1770 | F0.45759999999999995 1771 | tp590 1772 | a(F1500.0 1773 | F0.45759999999999995 1774 | tp591 1775 | a(F1500.0 1776 | F0.45759999999999995 1777 | tp592 1778 | a(F1500.0 1779 | F0.45759999999999995 1780 | tp593 1781 | a(F1500.0 1782 | F0.45759999999999995 1783 | tp594 1784 | a(F1500.0 1785 | F0.45759999999999995 1786 | tp595 1787 | a(F1500.0 1788 | F0.45759999999999995 1789 | tp596 1790 | a(F1500.0 1791 | F0.45759999999999995 1792 | tp597 1793 | a(F1500.0 1794 | F0.45759999999999995 1795 | tp598 1796 | a(F1500.0 1797 | F0.45759999999999995 1798 | tp599 1799 | a(F1500.0 1800 | F0.45759999999999995 1801 | tp600 1802 | a(F1500.0 1803 | F0.45759999999999995 1804 | tp601 1805 | a(F1500.0 1806 | F0.45759999999999995 1807 | tp602 1808 | a(F1500.0 1809 | F0.45759999999999995 1810 | tp603 1811 | a(F1500.0 1812 | F0.45759999999999995 1813 | tp604 1814 | a(F1500.0 1815 | F0.45759999999999995 1816 | tp605 1817 | a(F1500.0 1818 | F0.45759999999999995 1819 | tp606 1820 | a(F1500.0 1821 | F0.45759999999999995 1822 | tp607 1823 | a(F1500.0 1824 | F0.45759999999999995 1825 | tp608 1826 | a(F1500.0 1827 | F0.45759999999999995 1828 | tp609 1829 | a(F1500.0 1830 | F0.45759999999999995 1831 | tp610 1832 | a(F1500.0 1833 | F0.45759999999999995 1834 | tp611 1835 | a(F1500.0 1836 | F0.45759999999999995 1837 | tp612 1838 | a(F1500.0 1839 | F0.45759999999999995 1840 | tp613 1841 | a(F1500.0 1842 | F0.45759999999999995 1843 | tp614 1844 | a(F1500.0 1845 | F0.45759999999999995 1846 | tp615 1847 | a(F1500.0 1848 | F0.45759999999999995 1849 | tp616 1850 | a(F1500.0 1851 | F0.45759999999999995 1852 | tp617 1853 | a(F1500.0 1854 | F0.45759999999999995 1855 | tp618 1856 | a(F1500.0 1857 | F0.45759999999999995 1858 | tp619 1859 | a(F1500.0 1860 | F0.45759999999999995 1861 | tp620 1862 | a(F1500.0 1863 | F0.45759999999999995 1864 | tp621 1865 | a(F1500.0 1866 | F0.45759999999999995 1867 | tp622 1868 | a(F1500.0 1869 | F0.45759999999999995 1870 | tp623 1871 | a(F1500.0 1872 | F0.45759999999999995 1873 | tp624 1874 | a(F1500.0 1875 | F0.45759999999999995 1876 | tp625 1877 | a(F1500.0 1878 | F0.45759999999999995 1879 | tp626 1880 | a(F1500.0 1881 | F0.45759999999999995 1882 | tp627 1883 | a(F1500.0 1884 | F0.45759999999999995 1885 | tp628 1886 | a(F1500.0 1887 | F0.45759999999999995 1888 | tp629 1889 | a(F1500.0 1890 | F0.45759999999999995 1891 | tp630 1892 | a(F1500.0 1893 | F0.45759999999999995 1894 | tp631 1895 | a(F1500.0 1896 | F0.45759999999999995 1897 | tp632 1898 | a(F1500.0 1899 | F0.45759999999999995 1900 | tp633 1901 | a(F1500.0 1902 | F0.45759999999999995 1903 | tp634 1904 | a(F1500.0 1905 | F0.45759999999999995 1906 | tp635 1907 | a(F1500.0 1908 | F0.45759999999999995 1909 | tp636 1910 | a(F1500.0 1911 | F0.45759999999999995 1912 | tp637 1913 | a(F1500.0 1914 | F0.45759999999999995 1915 | tp638 1916 | a(F1500.0 1917 | F0.45759999999999995 1918 | tp639 1919 | a(F1500.0 1920 | F0.45759999999999995 1921 | tp640 1922 | a(F1500.0 1923 | F0.45759999999999995 1924 | tp641 1925 | a(F1500.0 1926 | F0.45759999999999995 1927 | tp642 1928 | a(F1500.0 1929 | F0.45759999999999995 1930 | tp643 1931 | a(F1500.0 1932 | F0.45759999999999995 1933 | tp644 1934 | a(F1500.0 1935 | F0.45759999999999995 1936 | tp645 1937 | a(F1500.0 1938 | F0.45759999999999995 1939 | tp646 1940 | a(F1500.0 1941 | F0.45759999999999995 1942 | tp647 1943 | a(F1500.0 1944 | F0.45759999999999995 1945 | tp648 1946 | a(F1500.0 1947 | F0.45759999999999995 1948 | tp649 1949 | a(F1500.0 1950 | F0.45759999999999995 1951 | tp650 1952 | a(F1500.0 1953 | F0.45759999999999995 1954 | tp651 1955 | a(F1500.0 1956 | F0.45759999999999995 1957 | tp652 1958 | a(F1500.0 1959 | F0.45759999999999995 1960 | tp653 1961 | a(F1500.0 1962 | F0.45759999999999995 1963 | tp654 1964 | a(F1500.0 1965 | F0.45759999999999995 1966 | tp655 1967 | a(F1500.0 1968 | F0.45759999999999995 1969 | tp656 1970 | a(I1500 1971 | F0.572 1972 | tp657 1973 | a(F1500.0 1974 | F0.45759999999999995 1975 | tp658 1976 | a(F1500.0 1977 | F0.45759999999999995 1978 | tp659 1979 | a(F1500.0 1980 | F0.45759999999999995 1981 | tp660 1982 | a(F1500.0 1983 | F0.45759999999999995 1984 | tp661 1985 | a(F1500.0 1986 | F0.45759999999999995 1987 | tp662 1988 | a(F1500.0 1989 | F0.45759999999999995 1990 | tp663 1991 | a(F1500.0 1992 | F0.45759999999999995 1993 | tp664 1994 | a(F1500.0 1995 | F0.45759999999999995 1996 | tp665 1997 | a(F1500.0 1998 | F0.45759999999999995 1999 | tp666 2000 | a(F1500.0 2001 | F0.45759999999999995 2002 | tp667 2003 | a(F1500.0 2004 | F0.45759999999999995 2005 | tp668 2006 | a(F1500.0 2007 | F0.45759999999999995 2008 | tp669 2009 | a(F1500.0 2010 | F0.45759999999999995 2011 | tp670 2012 | a(F1500.0 2013 | F0.45759999999999995 2014 | tp671 2015 | a(F1500.0 2016 | F0.45759999999999995 2017 | tp672 2018 | a(F1500.0 2019 | F0.45759999999999995 2020 | tp673 2021 | a(F1500.0 2022 | F0.45759999999999995 2023 | tp674 2024 | a(F1500.0 2025 | F0.45759999999999995 2026 | tp675 2027 | a(F1500.0 2028 | F0.45759999999999995 2029 | tp676 2030 | a(F1500.0 2031 | F0.45759999999999995 2032 | tp677 2033 | a(F1500.0 2034 | F0.45759999999999995 2035 | tp678 2036 | a(F1500.0 2037 | F0.45759999999999995 2038 | tp679 2039 | a(F1500.0 2040 | F0.45759999999999995 2041 | tp680 2042 | a(F1500.0 2043 | F0.45759999999999995 2044 | tp681 2045 | a(F1500.0 2046 | F0.45759999999999995 2047 | tp682 2048 | a(F1500.0 2049 | F0.45759999999999995 2050 | tp683 2051 | a(F1500.0 2052 | F0.45759999999999995 2053 | tp684 2054 | a(F1500.0 2055 | F0.45759999999999995 2056 | tp685 2057 | a(F1500.0 2058 | F0.45759999999999995 2059 | tp686 2060 | a(F1500.0 2061 | F0.45759999999999995 2062 | tp687 2063 | a(F1500.0 2064 | F0.45759999999999995 2065 | tp688 2066 | a(F1500.0 2067 | F0.45759999999999995 2068 | tp689 2069 | a(F1500.0 2070 | F0.45759999999999995 2071 | tp690 2072 | a(F1500.0 2073 | F0.45759999999999995 2074 | tp691 2075 | a(F1500.0 2076 | F0.45759999999999995 2077 | tp692 2078 | a(F1500.0 2079 | F0.45759999999999995 2080 | tp693 2081 | a(F1500.0 2082 | F0.45759999999999995 2083 | tp694 2084 | a(F1500.0 2085 | F0.45759999999999995 2086 | tp695 2087 | a(F1500.0 2088 | F0.45759999999999995 2089 | tp696 2090 | a(F1500.0 2091 | F0.45759999999999995 2092 | tp697 2093 | a(F1500.0 2094 | F0.45759999999999995 2095 | tp698 2096 | a(F1500.0 2097 | F0.45759999999999995 2098 | tp699 2099 | a(F1500.0 2100 | F0.45759999999999995 2101 | tp700 2102 | a(F1500.0 2103 | F0.45759999999999995 2104 | tp701 2105 | a(F1500.0 2106 | F0.45759999999999995 2107 | tp702 2108 | a(F1500.0 2109 | F0.45759999999999995 2110 | tp703 2111 | a(F1500.0 2112 | F0.45759999999999995 2113 | tp704 2114 | a(F1500.0 2115 | F0.45759999999999995 2116 | tp705 2117 | a(F1500.0 2118 | F0.45759999999999995 2119 | tp706 2120 | a(F1500.0 2121 | F0.45759999999999995 2122 | tp707 2123 | a(F1500.0 2124 | F0.45759999999999995 2125 | tp708 2126 | a(F1500.0 2127 | F0.45759999999999995 2128 | tp709 2129 | a(F1500.0 2130 | F0.45759999999999995 2131 | tp710 2132 | a(F1500.0 2133 | F0.45759999999999995 2134 | tp711 2135 | a(F1500.0 2136 | F0.45759999999999995 2137 | tp712 2138 | a(F1500.0 2139 | F0.45759999999999995 2140 | tp713 2141 | a(F1500.0 2142 | F0.45759999999999995 2143 | tp714 2144 | a(F1500.0 2145 | F0.45759999999999995 2146 | tp715 2147 | a(F1500.0 2148 | F0.45759999999999995 2149 | tp716 2150 | a(F1500.0 2151 | F0.45759999999999995 2152 | tp717 2153 | a(F1500.0 2154 | F0.45759999999999995 2155 | tp718 2156 | a(F1500.0 2157 | F0.45759999999999995 2158 | tp719 2159 | a(F1500.0 2160 | F0.45759999999999995 2161 | tp720 2162 | a(F1500.0 2163 | F0.45759999999999995 2164 | tp721 2165 | a(F1500.0 2166 | F0.45759999999999995 2167 | tp722 2168 | a(F1500.0 2169 | F0.45759999999999995 2170 | tp723 2171 | a(F1500.0 2172 | F0.45759999999999995 2173 | tp724 2174 | a(F1500.0 2175 | F0.45759999999999995 2176 | tp725 2177 | a(F1500.0 2178 | F0.45759999999999995 2179 | tp726 2180 | a(F1500.0 2181 | F0.45759999999999995 2182 | tp727 2183 | a(F1500.0 2184 | F0.45759999999999995 2185 | tp728 2186 | a(F1500.0 2187 | F0.45759999999999995 2188 | tp729 2189 | a(F1500.0 2190 | F0.45759999999999995 2191 | tp730 2192 | a(F1500.0 2193 | F0.45759999999999995 2194 | tp731 2195 | a(F1500.0 2196 | F0.45759999999999995 2197 | tp732 2198 | a(F1500.0 2199 | F0.45759999999999995 2200 | tp733 2201 | a(F1500.0 2202 | F0.45759999999999995 2203 | tp734 2204 | a(F1500.0 2205 | F0.45759999999999995 2206 | tp735 2207 | a(F1500.0 2208 | F0.45759999999999995 2209 | tp736 2210 | a(F1500.0 2211 | F0.45759999999999995 2212 | tp737 2213 | a(F1500.0 2214 | F0.45759999999999995 2215 | tp738 2216 | a(F1500.0 2217 | F0.45759999999999995 2218 | tp739 2219 | a(F1500.0 2220 | F0.45759999999999995 2221 | tp740 2222 | a(F1500.0 2223 | F0.45759999999999995 2224 | tp741 2225 | a(F1500.0 2226 | F0.45759999999999995 2227 | tp742 2228 | a(F1500.0 2229 | F0.45759999999999995 2230 | tp743 2231 | a(F1500.0 2232 | F0.45759999999999995 2233 | tp744 2234 | a(F1500.0 2235 | F0.45759999999999995 2236 | tp745 2237 | a(F1500.0 2238 | F0.45759999999999995 2239 | tp746 2240 | a(F1500.0 2241 | F0.45759999999999995 2242 | tp747 2243 | a(F1500.0 2244 | F0.45759999999999995 2245 | tp748 2246 | a(F1500.0 2247 | F0.45759999999999995 2248 | tp749 2249 | a(F1500.0 2250 | F0.45759999999999995 2251 | tp750 2252 | a(F1500.0 2253 | F0.45759999999999995 2254 | tp751 2255 | a(F1500.0 2256 | F0.45759999999999995 2257 | tp752 2258 | a(F1500.0 2259 | F0.45759999999999995 2260 | tp753 2261 | a(F1500.0 2262 | F0.45759999999999995 2263 | tp754 2264 | a(F1500.0 2265 | F0.45759999999999995 2266 | tp755 2267 | a(F1500.0 2268 | F0.45759999999999995 2269 | tp756 2270 | a(F1500.0 2271 | F0.45759999999999995 2272 | tp757 2273 | a(F1500.0 2274 | F0.45759999999999995 2275 | tp758 2276 | a(F1500.0 2277 | F0.45759999999999995 2278 | tp759 2279 | a(F1500.0 2280 | F0.45759999999999995 2281 | tp760 2282 | a(F1500.0 2283 | F0.45759999999999995 2284 | tp761 2285 | a(F1500.0 2286 | F0.45759999999999995 2287 | tp762 2288 | a(F1500.0 2289 | F0.45759999999999995 2290 | tp763 2291 | a(F1500.0 2292 | F0.45759999999999995 2293 | tp764 2294 | a(F1500.0 2295 | F0.45759999999999995 2296 | tp765 2297 | a(F1500.0 2298 | F0.45759999999999995 2299 | tp766 2300 | a(F1500.0 2301 | F0.45759999999999995 2302 | tp767 2303 | a(F1500.0 2304 | F0.45759999999999995 2305 | tp768 2306 | a(F1500.0 2307 | F0.45759999999999995 2308 | tp769 2309 | a(F1500.0 2310 | F0.45759999999999995 2311 | tp770 2312 | a(F1500.0 2313 | F0.45759999999999995 2314 | tp771 2315 | a(F1500.0 2316 | F0.45759999999999995 2317 | tp772 2318 | a(F1500.0 2319 | F0.45759999999999995 2320 | tp773 2321 | a(F1500.0 2322 | F0.45759999999999995 2323 | tp774 2324 | a(F1500.0 2325 | F0.45759999999999995 2326 | tp775 2327 | a(F1500.0 2328 | F0.45759999999999995 2329 | tp776 2330 | a(F1500.0 2331 | F0.45759999999999995 2332 | tp777 2333 | a(F1500.0 2334 | F0.45759999999999995 2335 | tp778 2336 | a(F1500.0 2337 | F0.45759999999999995 2338 | tp779 2339 | a(F1500.0 2340 | F0.45759999999999995 2341 | tp780 2342 | a(F1500.0 2343 | F0.45759999999999995 2344 | tp781 2345 | a(F1500.0 2346 | F0.45759999999999995 2347 | tp782 2348 | a(F1500.0 2349 | F0.45759999999999995 2350 | tp783 2351 | a(F1500.0 2352 | F0.45759999999999995 2353 | tp784 2354 | a(F1500.0 2355 | F0.45759999999999995 2356 | tp785 2357 | a(F1500.0 2358 | F0.45759999999999995 2359 | tp786 2360 | a(F1500.0 2361 | F0.45759999999999995 2362 | tp787 2363 | a(F1500.0 2364 | F0.45759999999999995 2365 | tp788 2366 | a(F1500.0 2367 | F0.45759999999999995 2368 | tp789 2369 | a(F1500.0 2370 | F0.45759999999999995 2371 | tp790 2372 | a(F1500.0 2373 | F0.45759999999999995 2374 | tp791 2375 | a(F1500.0 2376 | F0.45759999999999995 2377 | tp792 2378 | a(F1500.0 2379 | F0.45759999999999995 2380 | tp793 2381 | a(F1500.0 2382 | F0.45759999999999995 2383 | tp794 2384 | a(F1500.0 2385 | F0.45759999999999995 2386 | tp795 2387 | a(F1500.0 2388 | F0.45759999999999995 2389 | tp796 2390 | a(F1500.0 2391 | F0.45759999999999995 2392 | tp797 2393 | a(F1500.0 2394 | F0.45759999999999995 2395 | tp798 2396 | a(F1500.0 2397 | F0.45759999999999995 2398 | tp799 2399 | a(F1500.0 2400 | F0.45759999999999995 2401 | tp800 2402 | a(F1500.0 2403 | F0.45759999999999995 2404 | tp801 2405 | a(F1500.0 2406 | F0.45759999999999995 2407 | tp802 2408 | a(F1500.0 2409 | F0.45759999999999995 2410 | tp803 2411 | a(F1500.0 2412 | F0.45759999999999995 2413 | tp804 2414 | a(F1500.0 2415 | F0.45759999999999995 2416 | tp805 2417 | a(F1500.0 2418 | F0.45759999999999995 2419 | tp806 2420 | a(F1500.0 2421 | F0.45759999999999995 2422 | tp807 2423 | a(F1500.0 2424 | F0.45759999999999995 2425 | tp808 2426 | a(F1500.0 2427 | F0.45759999999999995 2428 | tp809 2429 | a(F1500.0 2430 | F0.45759999999999995 2431 | tp810 2432 | a(F1500.0 2433 | F0.45759999999999995 2434 | tp811 2435 | a(F1500.0 2436 | F0.45759999999999995 2437 | tp812 2438 | a(F1500.0 2439 | F0.45759999999999995 2440 | tp813 2441 | a(F1500.0 2442 | F0.45759999999999995 2443 | tp814 2444 | a(F1500.0 2445 | F0.45759999999999995 2446 | tp815 2447 | a(F1500.0 2448 | F0.45759999999999995 2449 | tp816 2450 | a(F1500.0 2451 | F0.45759999999999995 2452 | tp817 2453 | a(F1500.0 2454 | F0.45759999999999995 2455 | tp818 2456 | a(F1500.0 2457 | F0.45759999999999995 2458 | tp819 2459 | a(F1500.0 2460 | F0.45759999999999995 2461 | tp820 2462 | a(F1500.0 2463 | F0.45759999999999995 2464 | tp821 2465 | a(F1500.0 2466 | F0.45759999999999995 2467 | tp822 2468 | a(F1500.0 2469 | F0.45759999999999995 2470 | tp823 2471 | a(F1500.0 2472 | F0.45759999999999995 2473 | tp824 2474 | a(F1500.0 2475 | F0.45759999999999995 2476 | tp825 2477 | a(F1500.0 2478 | F0.45759999999999995 2479 | tp826 2480 | a(F1500.0 2481 | F0.45759999999999995 2482 | tp827 2483 | a(F1500.0 2484 | F0.45759999999999995 2485 | tp828 2486 | a(F1500.0 2487 | F0.45759999999999995 2488 | tp829 2489 | a(F1500.0 2490 | F0.45759999999999995 2491 | tp830 2492 | a(F1500.0 2493 | F0.45759999999999995 2494 | tp831 2495 | a(F1500.0 2496 | F0.45759999999999995 2497 | tp832 2498 | a(F1500.0 2499 | F0.45759999999999995 2500 | tp833 2501 | a(F1500.0 2502 | F0.45759999999999995 2503 | tp834 2504 | a(F1500.0 2505 | F0.45759999999999995 2506 | tp835 2507 | a(F1500.0 2508 | F0.45759999999999995 2509 | tp836 2510 | a(F1500.0 2511 | F0.45759999999999995 2512 | tp837 2513 | a(F1500.0 2514 | F0.45759999999999995 2515 | tp838 2516 | a(F1500.0 2517 | F0.45759999999999995 2518 | tp839 2519 | a(F1500.0 2520 | F0.45759999999999995 2521 | tp840 2522 | a(F1500.0 2523 | F0.45759999999999995 2524 | tp841 2525 | a(F1500.0 2526 | F0.45759999999999995 2527 | tp842 2528 | a(F1500.0 2529 | F0.45759999999999995 2530 | tp843 2531 | a(F1500.0 2532 | F0.45759999999999995 2533 | tp844 2534 | a(F1500.0 2535 | F0.45759999999999995 2536 | tp845 2537 | a(F1500.0 2538 | F0.45759999999999995 2539 | tp846 2540 | a(F1500.0 2541 | F0.45759999999999995 2542 | tp847 2543 | a(F1500.0 2544 | F0.45759999999999995 2545 | tp848 2546 | a(F1500.0 2547 | F0.45759999999999995 2548 | tp849 2549 | a(F1500.0 2550 | F0.45759999999999995 2551 | tp850 2552 | a(F1500.0 2553 | F0.45759999999999995 2554 | tp851 2555 | a(F1500.0 2556 | F0.45759999999999995 2557 | tp852 2558 | a(F1500.0 2559 | F0.45759999999999995 2560 | tp853 2561 | a(F1500.0 2562 | F0.45759999999999995 2563 | tp854 2564 | a(F1500.0 2565 | F0.45759999999999995 2566 | tp855 2567 | a(F1500.0 2568 | F0.45759999999999995 2569 | tp856 2570 | a(F1500.0 2571 | F0.45759999999999995 2572 | tp857 2573 | a(F1500.0 2574 | F0.45759999999999995 2575 | tp858 2576 | a(F1500.0 2577 | F0.45759999999999995 2578 | tp859 2579 | a(F1500.0 2580 | F0.45759999999999995 2581 | tp860 2582 | a(F1500.0 2583 | F0.45759999999999995 2584 | tp861 2585 | a(F1500.0 2586 | F0.45759999999999995 2587 | tp862 2588 | a(F1500.0 2589 | F0.45759999999999995 2590 | tp863 2591 | a(F1500.0 2592 | F0.45759999999999995 2593 | tp864 2594 | a(F1500.0 2595 | F0.45759999999999995 2596 | tp865 2597 | a(F1500.0 2598 | F0.45759999999999995 2599 | tp866 2600 | a(F1500.0 2601 | F0.45759999999999995 2602 | tp867 2603 | a(F1500.0 2604 | F0.45759999999999995 2605 | tp868 2606 | a(F1500.0 2607 | F0.45759999999999995 2608 | tp869 2609 | a(F1500.0 2610 | F0.45759999999999995 2611 | tp870 2612 | a(F1500.0 2613 | F0.45759999999999995 2614 | tp871 2615 | a(F1500.0 2616 | F0.45759999999999995 2617 | tp872 2618 | a(F1500.0 2619 | F0.45759999999999995 2620 | tp873 2621 | a(F1500.0 2622 | F0.45759999999999995 2623 | tp874 2624 | a(F1500.0 2625 | F0.45759999999999995 2626 | tp875 2627 | a(F1500.0 2628 | F0.45759999999999995 2629 | tp876 2630 | a(F1500.0 2631 | F0.45759999999999995 2632 | tp877 2633 | a(F1500.0 2634 | F0.45759999999999995 2635 | tp878 2636 | a(F1500.0 2637 | F0.45759999999999995 2638 | tp879 2639 | a(F1500.0 2640 | F0.45759999999999995 2641 | tp880 2642 | a(F1500.0 2643 | F0.45759999999999995 2644 | tp881 2645 | a(F1500.0 2646 | F0.45759999999999995 2647 | tp882 2648 | a(F1500.0 2649 | F0.45759999999999995 2650 | tp883 2651 | a(F1500.0 2652 | F0.45759999999999995 2653 | tp884 2654 | a(F1500.0 2655 | F0.45759999999999995 2656 | tp885 2657 | a(F1500.0 2658 | F0.45759999999999995 2659 | tp886 2660 | a(F1500.0 2661 | F0.45759999999999995 2662 | tp887 2663 | a(F1500.0 2664 | F0.45759999999999995 2665 | tp888 2666 | a(F1500.0 2667 | F0.45759999999999995 2668 | tp889 2669 | a(F1500.0 2670 | F0.45759999999999995 2671 | tp890 2672 | a(F1500.0 2673 | F0.45759999999999995 2674 | tp891 2675 | a(F1500.0 2676 | F0.45759999999999995 2677 | tp892 2678 | a(F1500.0 2679 | F0.45759999999999995 2680 | tp893 2681 | a(F1500.0 2682 | F0.45759999999999995 2683 | tp894 2684 | a(F1500.0 2685 | F0.45759999999999995 2686 | tp895 2687 | a(F1500.0 2688 | F0.45759999999999995 2689 | tp896 2690 | a(F1500.0 2691 | F0.45759999999999995 2692 | tp897 2693 | a(F1500.0 2694 | F0.45759999999999995 2695 | tp898 2696 | a(F1500.0 2697 | F0.45759999999999995 2698 | tp899 2699 | a(F1500.0 2700 | F0.45759999999999995 2701 | tp900 2702 | a(F1500.0 2703 | F0.45759999999999995 2704 | tp901 2705 | a(F1500.0 2706 | F0.45759999999999995 2707 | tp902 2708 | a(F1500.0 2709 | F0.45759999999999995 2710 | tp903 2711 | a(F1500.0 2712 | F0.45759999999999995 2713 | tp904 2714 | a(F1500.0 2715 | F0.45759999999999995 2716 | tp905 2717 | a(F1500.0 2718 | F0.45759999999999995 2719 | tp906 2720 | a(F1500.0 2721 | F0.45759999999999995 2722 | tp907 2723 | a(F1500.0 2724 | F0.45759999999999995 2725 | tp908 2726 | a(F1500.0 2727 | F0.45759999999999995 2728 | tp909 2729 | a(F1500.0 2730 | F0.45759999999999995 2731 | tp910 2732 | a(F1500.0 2733 | F0.45759999999999995 2734 | tp911 2735 | a(F1500.0 2736 | F0.45759999999999995 2737 | tp912 2738 | a(F1500.0 2739 | F0.45759999999999995 2740 | tp913 2741 | a(F1500.0 2742 | F0.45759999999999995 2743 | tp914 2744 | a(F1500.0 2745 | F0.45759999999999995 2746 | tp915 2747 | a(F1500.0 2748 | F0.45759999999999995 2749 | tp916 2750 | a(F1500.0 2751 | F0.45759999999999995 2752 | tp917 2753 | a(F1500.0 2754 | F0.45759999999999995 2755 | tp918 2756 | a(F1500.0 2757 | F0.45759999999999995 2758 | tp919 2759 | a(F1500.0 2760 | F0.45759999999999995 2761 | tp920 2762 | a(F1500.0 2763 | F0.45759999999999995 2764 | tp921 2765 | a(F1500.0 2766 | F0.45759999999999995 2767 | tp922 2768 | a(F1500.0 2769 | F0.45759999999999995 2770 | tp923 2771 | a(F1500.0 2772 | F0.45759999999999995 2773 | tp924 2774 | a(F1500.0 2775 | F0.45759999999999995 2776 | tp925 2777 | a(F1500.0 2778 | F0.45759999999999995 2779 | tp926 2780 | a(F1500.0 2781 | F0.45759999999999995 2782 | tp927 2783 | a(F1500.0 2784 | F0.45759999999999995 2785 | tp928 2786 | a(F1500.0 2787 | F0.45759999999999995 2788 | tp929 2789 | a(F1500.0 2790 | F0.45759999999999995 2791 | tp930 2792 | a(F1500.0 2793 | F0.45759999999999995 2794 | tp931 2795 | a(F1500.0 2796 | F0.45759999999999995 2797 | tp932 2798 | a(F1500.0 2799 | F0.45759999999999995 2800 | tp933 2801 | a(F1500.0 2802 | F0.45759999999999995 2803 | tp934 2804 | a(F1500.0 2805 | F0.45759999999999995 2806 | tp935 2807 | a(F1500.0 2808 | F0.45759999999999995 2809 | tp936 2810 | a(F1500.0 2811 | F0.45759999999999995 2812 | tp937 2813 | a(F1500.0 2814 | F0.45759999999999995 2815 | tp938 2816 | a(F1500.0 2817 | F0.45759999999999995 2818 | tp939 2819 | a(F1500.0 2820 | F0.45759999999999995 2821 | tp940 2822 | a(F1500.0 2823 | F0.45759999999999995 2824 | tp941 2825 | a(F1500.0 2826 | F0.45759999999999995 2827 | tp942 2828 | a(F1500.0 2829 | F0.45759999999999995 2830 | tp943 2831 | a(F1500.0 2832 | F0.45759999999999995 2833 | tp944 2834 | a(F1500.0 2835 | F0.45759999999999995 2836 | tp945 2837 | a(F1500.0 2838 | F0.45759999999999995 2839 | tp946 2840 | a(F1500.0 2841 | F0.45759999999999995 2842 | tp947 2843 | a(F1500.0 2844 | F0.45759999999999995 2845 | tp948 2846 | a(F1500.0 2847 | F0.45759999999999995 2848 | tp949 2849 | a(F1500.0 2850 | F0.45759999999999995 2851 | tp950 2852 | a(F1500.0 2853 | F0.45759999999999995 2854 | tp951 2855 | a(F1500.0 2856 | F0.45759999999999995 2857 | tp952 2858 | a(F1500.0 2859 | F0.45759999999999995 2860 | tp953 2861 | a(F1500.0 2862 | F0.45759999999999995 2863 | tp954 2864 | a(F1500.0 2865 | F0.45759999999999995 2866 | tp955 2867 | a(F1500.0 2868 | F0.45759999999999995 2869 | tp956 2870 | a(F1500.0 2871 | F0.45759999999999995 2872 | tp957 2873 | a(F1500.0 2874 | F0.45759999999999995 2875 | tp958 2876 | a(F1500.0 2877 | F0.45759999999999995 2878 | tp959 2879 | a(F1500.0 2880 | F0.45759999999999995 2881 | tp960 2882 | a(F1500.0 2883 | F0.45759999999999995 2884 | tp961 2885 | a(F1500.0 2886 | F0.45759999999999995 2887 | tp962 2888 | a(F1500.0 2889 | F0.45759999999999995 2890 | tp963 2891 | a(F1500.0 2892 | F0.45759999999999995 2893 | tp964 2894 | a(F1500.0 2895 | F0.45759999999999995 2896 | tp965 2897 | a(F1500.0 2898 | F0.45759999999999995 2899 | tp966 2900 | a(F1500.0 2901 | F0.45759999999999995 2902 | tp967 2903 | a(F1500.0 2904 | F0.45759999999999995 2905 | tp968 2906 | a(F1500.0 2907 | F0.45759999999999995 2908 | tp969 2909 | a(F1500.0 2910 | F0.45759999999999995 2911 | tp970 2912 | a(F1500.0 2913 | F0.45759999999999995 2914 | tp971 2915 | a(F1500.0 2916 | F0.45759999999999995 2917 | tp972 2918 | a(F1500.0 2919 | F0.45759999999999995 2920 | tp973 2921 | a(F1500.0 2922 | F0.45759999999999995 2923 | tp974 2924 | a(F1500.0 2925 | F0.45759999999999995 2926 | tp975 2927 | a(F1500.0 2928 | F0.45759999999999995 2929 | tp976 2930 | a(F1500.0 2931 | F0.45759999999999995 2932 | tp977 2933 | a(I1500 2934 | F0.572 2935 | tp978 2936 | a(I1200 2937 | F4.862 2938 | tp979 2939 | a(I1500 2940 | F0.572 2941 | tp980 2942 | a(F1500.0 2943 | F0.45759999999999995 2944 | tp981 2945 | a(F1500.0 2946 | F0.45759999999999995 2947 | tp982 2948 | a(F1500.0 2949 | F0.45759999999999995 2950 | tp983 2951 | a(F1500.0 2952 | F0.45759999999999995 2953 | tp984 2954 | a(F1500.0 2955 | F0.45759999999999995 2956 | tp985 2957 | a(F1500.0 2958 | F0.45759999999999995 2959 | tp986 2960 | a(F1500.0 2961 | F0.45759999999999995 2962 | tp987 2963 | a(F1500.0 2964 | F0.45759999999999995 2965 | tp988 2966 | a(F1500.0 2967 | F0.45759999999999995 2968 | tp989 2969 | a(F1500.0 2970 | F0.45759999999999995 2971 | tp990 2972 | a(F1500.0 2973 | F0.45759999999999995 2974 | tp991 2975 | a(F1500.0 2976 | F0.45759999999999995 2977 | tp992 2978 | a(F1500.0 2979 | F0.45759999999999995 2980 | tp993 2981 | a(F1500.0 2982 | F0.45759999999999995 2983 | tp994 2984 | a(F1500.0 2985 | F0.45759999999999995 2986 | tp995 2987 | a(F1500.0 2988 | F0.45759999999999995 2989 | tp996 2990 | a(F1500.0 2991 | F0.45759999999999995 2992 | tp997 2993 | a(F1500.0 2994 | F0.45759999999999995 2995 | tp998 2996 | a(F1500.0 2997 | F0.45759999999999995 2998 | tp999 2999 | a(F1500.0 3000 | F0.45759999999999995 3001 | tp1000 3002 | a. -------------------------------------------------------------------------------- /pysstv/tests/assets/MartinM1_values.p: -------------------------------------------------------------------------------- 1 | (lp0 2 | F0.0 3 | aF0.24615329302899303 4 | aF0.4771587602596084 5 | aF0.6788007455329417 6 | aF0.8386705679454239 7 | aF0.9469301294951057 8 | aF0.996917333733128 9 | aF0.9855560590580777 10 | aF0.913545457642601 11 | aF0.7853169308807448 12 | aF0.6087614290087204 13 | aF0.3947438563842674 14 | aF0.15643446504023098 15 | aF-0.0915016186634019 16 | aF-0.33380685923377096 17 | aF-0.555570233019602 18 | aF-0.743144825477394 19 | aF-0.8849876374630418 20 | aF-0.9723699203976767 21 | aF-0.999914327574007 22 | aF-0.9659258262890682 23 | aF-0.8724960070727972 24 | aF-0.725374371012288 25 | aF-0.5336145159156122 26 | aF-0.3090169943749476 27 | aF-0.0654031292301428 28 | aF0.18223552549214647 29 | aF0.41865973753742686 30 | aF0.6293203910498375 31 | aF0.8012538126910604 32 | aF0.9238795325112865 33 | aF0.9896513868196701 34 | aF0.9945218953682734 35 | aF0.9381913359224842 36 | aF0.8241261886220159 37 | aF0.6593458151000682 38 | aF0.4539904997395463 39 | aF0.22069743502150094 40 | aF-0.02617694830787293 41 | aF-0.27144044986507365 42 | aF-0.5000000000000007 43 | aF-0.6977904598416804 44 | aF-0.8526401643540923 45 | aF-0.9550199444571865 46 | aF-0.9986295347545738 47 | aF-0.9807852804032307 48 | aF-0.9025852843498613 49 | aF-0.7688418320734596 50 | aF-0.5877852522924735 51 | aF-0.370557437509837 52 | aF-0.13052619222005105 53 | aF0.11753739745783959 54 | aF0.35836794954529844 55 | aF0.5771451900372346 56 | aF0.7604059656000292 57 | aF0.8968727415326885 58 | aF0.9781476007338057 59 | aF0.9992290362407229 60 | aF0.9588197348681933 61 | aF0.8594064115014532 62 | aF0.7071067811865486 63 | aF0.5112930860770522 64 | aF0.28401534470392303 65 | aF0.039259815759067666 66 | aF-0.20791169081775815 67 | aF-0.44228869021900147 68 | aF-0.6494480483301834 69 | aF-0.8166415551616786 70 | aF-0.9335804264972014 71 | aF-0.9930684569549262 72 | aF-0.9914448613738102 73 | aF-0.928809552871925 74 | aF-0.8090169943749468 75 | aF-0.639439001980587 76 | aF-0.43051109680829486 77 | aF-0.1950903220161283 78 | aF0.05233595624294339 79 | aF0.29654157497557015 80 | aF0.5224985647159478 81 | aF0.7163019434246531 82 | aF0.8660254037844395 83 | aF0.9624552364536466 84 | aF0.9996573249755573 85 | aF0.9753423205085134 86 | aF0.8910065241883678 87 | aF0.7518398074789799 88 | aF0.5664062369248334 89 | aF0.34611705707749396 90 | aF0.10452846326765491 91 | aF-0.1434926219911775 92 | aF-0.3826834323650878 93 | aF-0.598324600570657 94 | aF-0.777145961456969 95 | aF-0.9081431738250814 96 | aF-0.9832549075639545 97 | aF-0.9978589232386036 98 | aF-0.9510565162951539 99 | aF-0.8457278217039739 100 | aF-0.6883545756937552 101 | aF-0.4886212414969537 102 | aF-0.25881904510251974 103 | aF-0.01308959557134727 104 | aF0.23344536385590922 105 | aF0.46561452032511136 106 | aF0.6691306063588552 107 | aF0.8314696123025448 108 | aF0.9426414910921792 109 | aF0.9958049275746615 110 | aF0.9876883405951385 111 | aF0.9187912101488992 112 | aF0.7933533402912346 113 | aF0.6190939493098364 114 | aF0.40673664307580015 115 | aF0.16934950384902842 116 | aF-0.07845909572784429 117 | aF-0.3214394653031572 118 | aF-0.5446390350150259 119 | aF-0.7343225094356843 120 | aF-0.8788171126619644 121 | aF-0.9692309097067546 122 | aF-1.0 123 | aF-0.9692309097067552 124 | aF-0.8788171126619655 125 | aF-0.7343225094356859 126 | aF-0.5446390350150279 127 | aF-0.32143946530316614 128 | aF-0.07845909572784306 129 | aF0.1693495038490261 130 | aF0.406736643075798 131 | aF0.619093949309829 132 | aF0.7933533402912354 133 | aF0.9187912101488983 134 | aF0.9876883405951377 135 | aF0.9958049275746618 136 | aF0.9426414910921788 137 | aF0.8314696123025461 138 | aF0.6691306063588597 139 | aF0.4656145203251134 140 | aF0.23344536385590803 141 | aF-0.01308959557134139 142 | aF-0.25881904510252435 143 | aF-0.48862124149695163 144 | aF-0.6883545756937509 145 | aF-0.8457278217039745 146 | aF-0.9510565162951543 147 | aF-0.9978589232386031 148 | aF-0.9832549075639556 149 | aF-0.9081431738250809 150 | aF-0.7771459614569705 151 | aF-0.5983246005706645 152 | aF-0.38268343236508984 153 | aF-0.1434926219911798 154 | aF0.1045284632676526 155 | aF0.34611705707748514 156 | aF0.5664062369248315 157 | aF0.751839807478976 158 | aF0.8910065241883668 159 | aF0.9753423205085121 160 | aF0.9996573249755574 161 | aF0.9624552364536483 162 | aF0.866025403784437 163 | aF0.7163019434246573 164 | aF0.5224985647159528 165 | aF0.296541574975569 166 | aF0.05233595624294216 167 | aF-0.19509032201612955 168 | aF-0.43051109680828953 169 | aF-0.6394390019805852 170 | aF-0.8090169943749475 171 | aF-0.9288095528719241 172 | aF-0.9914448613738094 173 | aF-0.9930684569549264 174 | aF-0.9335804264972023 175 | aF-0.8166415551616799 176 | aF-0.6494480483301852 177 | aF-0.4422886902190035 178 | aF-0.20791169081776217 179 | aF0.03925981575906534 180 | aF0.2840153447039191 181 | aF0.5112930860770487 182 | aF0.7071067811865445 183 | aF0.8594064115014539 184 | aF0.9588197348681916 185 | aF0.9992290362407227 186 | aF0.9781476007338069 187 | aF0.8968727415326879 188 | aF0.7604059656000306 189 | aF0.5771451900372394 190 | aF0.3583679495453006 191 | aF0.11753739745783835 192 | aF-0.1305261922200505 193 | aF-0.3705574375098283 194 | aF-0.5877852522924716 195 | aF-0.7688418320734627 196 | aF-0.9025852843498595 197 | aF-0.9807852804032299 198 | aF-0.998629534754574 199 | aF-0.9550199444571877 200 | aF-0.8526401643540906 201 | aF-0.6977904598416885 202 | aF-0.4999999999999981 203 | aF-0.2714404498650725 204 | aF-0.02617694830787881 205 | aF0.2206974350214952 206 | aF0.45399049973955374 207 | aF0.6593458151000637 208 | aF0.8241261886220157 209 | aF0.9381913359224865 210 | aF0.9945218953682725 211 | aF0.9896513868196704 212 | aF0.9238795325112874 213 | aF0.8012538126910618 214 | aF0.6293203910498337 215 | aF0.41865973753743707 216 | aF0.18223552549215052 217 | aF-0.06540312923014667 218 | aF-0.30901699437493696 219 | aF-0.5336145159156139 220 | aF-0.7253743710122844 221 | aF-0.8724960070727947 222 | aF-0.9659258262890688 223 | aF-0.999914327574007 224 | aF-0.972369920397678 225 | aF-0.8849876374630417 226 | aF-0.743144825477394 227 | aF-0.5555702330196024 228 | aF-0.3338068592337782 229 | aF-0.0915016186634104 230 | aF0.15643446504022956 231 | aF0.3947438563842657 232 | aF0.6087614290087133 233 | aF0.7853169308807478 234 | aF0.9135454576425998 235 | aF0.9855560590580772 236 | aF0.9969173337331283 237 | aF0.9469301294951047 238 | aF0.8386705679454264 239 | aF0.6788007455329452 240 | aF0.4771587602596067 241 | aF0.2461532930289915 242 | aF5.879542597180472e-15 243 | aF-0.24615329302900074 244 | aF-0.4771587602596026 245 | aF-0.6788007455329418 246 | aF-0.8386705679454238 247 | aF-0.9469301294951031 248 | aF-0.9969173337331279 249 | aF-0.9855560590580792 250 | aF-0.9135454576426016 251 | aF-0.785316930880742 252 | aF-0.6087614290087283 253 | aF-0.39474385638426995 254 | aF-0.15643446504022712 255 | aF0.09150161866339163 256 | aF0.3338068592337738 257 | aF0.5555702330195985 258 | aF0.7431448254773909 259 | aF0.8849876374630428 260 | aF0.9723699203976737 261 | aF0.999914327574007 262 | aF0.9659258262890681 263 | aF0.8724960070728038 264 | aF0.7253743710122877 265 | aF0.5336145159156118 266 | aF0.3090169943749482 267 | aF0.06540312923014423 268 | aF-0.18223552549214594 269 | aF-0.41865973753742636 270 | aF-0.6293203910498357 271 | aF-0.801253812691059 272 | aF-0.9238795325112856 273 | aF-0.9896513868196697 274 | aF-0.9945218953682737 275 | aF-0.9381913359224856 276 | aF-0.8241261886220183 277 | aF-0.6593458151000726 278 | aF-0.4539904997395516 279 | aF-0.22069743502150668 280 | aF0.026176948307867053 281 | aF0.271440449865068 282 | aF0.5000000000000064 283 | aF0.697790459841675 284 | aF0.8526401643540882 285 | aF0.9550199444571885 286 | aF0.9986295347545734 287 | aF0.9807852804032322 288 | aF0.9025852843498584 289 | aF0.7688418320734656 290 | aF0.5877852522924696 291 | aF0.3705574375098326 292 | aF0.13052619222006215 293 | aF-0.1175373974578408 294 | aF-0.3583679495452896 295 | aF-0.5771451900372356 296 | aF-0.7604059656000323 297 | aF-0.8968727415326827 298 | aF-0.9781476007338059 299 | aF-0.9992290362407229 300 | aF-0.9588197348681969 301 | aF-0.8594064115014526 302 | aF-0.7071067811865477 303 | aF-0.5112930860770526 304 | aF-0.2840153447039236 305 | aF-0.03925981575906999 306 | aF0.20791169081775762 307 | aF0.44228869021899936 308 | aF0.649448048330171 309 | aF0.8166415551616772 310 | aF0.9335804264972005 311 | aF0.9930684569549258 312 | aF0.9914448613738109 313 | aF0.9288095528719259 314 | aF0.8090169943749502 315 | aF0.6394390019805888 316 | aF0.43051109680830013 317 | aF0.19509032201613408 318 | aF-0.05233595624293752 319 | aF-0.29654157497557815 320 | aF-0.5224985647159428 321 | aF-0.7163019434246491 322 | aF-0.8660254037844418 323 | aF-0.9624552364536451 324 | aF-0.999657324975557 325 | aF-0.9753423205085147 326 | aF-0.8910065241883721 327 | aF-0.7518398074789744 328 | aF-0.5664062369248295 329 | aF-0.3461170570775028 330 | aF-0.10452846326765015 331 | aF0.14349262199116816 332 | aF0.38268343236509217 333 | aF0.5983246005706608 334 | aF0.7771459614569631 335 | aF0.9081431738250819 336 | aF0.9832549075639547 337 | aF0.9978589232386044 338 | aF0.9510565162951534 339 | aF0.8457278217039809 340 | aF0.6883545756937544 341 | aF0.4886212414969557 342 | aF0.25881904510253567 343 | aF0.013089595571346044 344 | aF-0.23344536385590348 345 | aF-0.4656145203251093 346 | aF-0.6691306063588561 347 | aF-0.8314696123025436 348 | aF-0.9426414910921772 349 | aF-0.9958049275746613 350 | aF-0.9876883405951384 351 | aF-0.9187912101489002 352 | aF-0.7933533402912382 353 | aF-0.6190939493098382 354 | aF-0.4067366430758055 355 | aF-0.1693495038490307 356 | aF0.07845909572783842 357 | aF0.32143946530316847 358 | aF0.544639035015021 359 | aF0.7343225094356803 360 | aF0.8788171126619615 361 | aF0.9692309097067558 362 | aF1.0 363 | aF0.9692309097067566 364 | aF0.8788171126619632 365 | aF0.7343225094356827 366 | aF0.5446390350150357 367 | aF0.32143946530315826 368 | aF0.078459095727856 369 | aF-0.1693495038490273 370 | aF-0.4067366430757894 371 | aF-0.6190939493098244 372 | aF-0.793353340291236 373 | aF-0.9187912101488988 374 | aF-0.9876883405951379 375 | aF-0.9958049275746617 376 | aF-0.9426414910921831 377 | aF-0.8314696123025455 378 | aF-0.6691306063588587 379 | aF-0.46561452032511236 380 | aF-0.2334453638559068 381 | aF0.013089595571342616 382 | aF0.25881904510251863 383 | aF0.4886212414969527 384 | aF0.6883545756937415 385 | aF0.845727821703979 386 | aF0.9510565162951524 387 | aF0.9978589232386033 388 | aF0.9832549075639528 389 | aF0.9081431738250834 390 | aF0.7771459614569742 391 | aF0.5983246005706522 392 | aF0.3826834323650953 393 | aF0.14349262199118562 394 | aF-0.10452846326764674 395 | aF-0.3461170570774863 396 | aF-0.5664062369248266 397 | aF-0.7518398074789628 398 | aF-0.8910065241883706 399 | aF-0.9753423205085108 400 | aF-0.9996573249755579 401 | aF-0.962455236453646 402 | aF-0.8660254037844364 403 | aF-0.7163019434246614 404 | aF-0.5224985647159457 405 | aF-0.2965415749755814 406 | aF-0.05233595624295514 407 | aF0.19509032201613075 408 | aF0.4305110968082842 409 | aF0.6394390019805752 410 | aF0.8090169943749566 411 | aF0.9288095528719246 412 | aF0.9914448613738086 413 | aF0.9930684569549263 414 | aF0.9335804264972019 415 | aF0.8166415551616792 416 | aF0.6494480483301736 417 | aF0.4422886902190152 418 | aF0.20791169081777489 419 | aF-0.03925981575906657 420 | aF-0.28401534470392026 421 | aF-0.5112930860770497 422 | aF-0.7071067811865454 423 | aF-0.8594064115014508 424 | aF-0.9588197348681919 425 | aF-0.9992290362407222 426 | aF-0.9781476007338037 427 | aF-0.8968727415326843 428 | aF-0.7604059656000437 429 | aF-0.5771451900372384 430 | aF-0.3583679495453061 431 | aF-0.1175373974578442 432 | aF0.13052619222005876 433 | aF0.3705574375098162 434 | aF0.5877852522924554 435 | aF0.7688418320734635 436 | aF0.9025852843498631 437 | aF0.9807852804032288 438 | aF0.9986295347545744 439 | aF0.9550199444571895 440 | aF0.8526401643540975 441 | aF0.6977904598416774 442 | aF0.49999999999999706 443 | aF0.2714404498650713 444 | aF0.02617694830787048 445 | aF-0.22069743502148947 446 | aF-0.45399049973953587 447 | aF-0.6593458151000807 448 | aF-0.8241261886220164 449 | aF-0.9381913359224795 450 | aF-0.9945218953682734 451 | aF-0.9896513868196702 452 | aF-0.9238795325112868 453 | aF-0.8012538126910526 454 | aF-0.6293203910498494 455 | aF-0.41865973753744234 456 | aF-0.1822355254921633 457 | aF0.0654031292301408 458 | aF0.30901699437494495 459 | aF0.5336145159156089 460 | aF0.7253743710122853 461 | aF0.8724960070727953 462 | aF0.9659258262890635 463 | aF0.9999143275740071 464 | aF0.9723699203976744 465 | aF0.884987637463051 466 | aF0.743144825477398 467 | aF0.5555702330196073 468 | aF0.333806859233777 469 | aF0.09150161866339504 470 | aF-0.15643446504022376 471 | aF-0.3947438563842472 472 | aF-0.6087614290087255 473 | aF-0.7853169308807486 474 | aF-0.9135454576425973 475 | aF-0.9855560590580762 476 | aF-0.9969173337331287 477 | aF-0.9469301294951088 478 | aF-0.8386705679454218 479 | aF-0.6788007455329391 480 | aF-0.47715876025960563 481 | aF-0.2461532930289903 482 | aF-1.1759085194360944e-14 483 | aF0.24615329302898126 484 | aF0.4771587602596224 485 | aF0.6788007455329531 486 | aF0.8386705679454168 487 | aF0.9469301294951012 488 | aF0.996917333733128 489 | aF0.9855560590580777 490 | aF0.9135454576426011 491 | aF0.7853169308807543 492 | aF0.608761429008733 493 | aF0.3947438563842819 494 | aF0.15643446504023295 495 | aF-0.09150161866339991 496 | aF-0.33380685923375486 497 | aF-0.5555702330195995 498 | aF-0.7431448254773918 499 | aF-0.88498763746304 500 | aF-0.9723699203976789 501 | aF-0.9999143275740069 502 | aF-0.9659258262890733 503 | aF-0.8724960070727998 504 | aF-0.7253743710122917 505 | aF-0.5336145159156168 506 | aF-0.30901699437494023 507 | aF-0.0654031292301501 508 | aF0.1822355254921262 509 | aF0.4186597375374339 510 | aF0.6293203910498422 511 | aF0.8012538126910556 512 | aF0.9238795325112833 513 | aF0.9896513868196689 514 | aF0.9945218953682744 515 | aF0.9381913359224827 516 | aF0.8241261886220135 517 | aF0.6593458151000663 518 | aF0.45399049973956945 519 | aF0.22069743502149855 520 | aF-0.026176948307875383 521 | aF-0.27144044986507604 522 | aF-0.5000000000000013 523 | aF-0.6977904598416605 524 | aF-0.8526401643540777 525 | aF-0.9550199444571867 526 | aF-0.9986295347545738 527 | aF-0.9807852804032305 528 | aF-0.902585284349861 529 | aF-0.7688418320734602 530 | aF-0.5877852522924744 531 | aF-0.37055743750983805 532 | aF-0.13052619222005388 533 | aF0.11753739745780672 534 | aF0.3583679495452974 535 | aF0.5771451900372309 536 | aF0.7604059656000285 537 | aF0.8968727415326865 538 | aF0.9781476007338047 539 | aF0.9992290362407231 540 | aF0.9588197348681946 541 | aF0.8594064115014556 542 | aF0.7071067811865518 543 | aF0.5112930860770332 544 | aF0.28401534470392925 545 | aF0.03925981575907587 546 | aF-0.20791169081775185 547 | aF-0.4422886902189941 548 | aF-0.6494480483301773 549 | aF-0.8166415551616575 550 | aF-0.9335804264971985 551 | aF-0.9930684569549252 552 | aF-0.9914448613738117 553 | aF-0.9288095528719176 554 | aF-0.8090169943749537 555 | aF-0.6394390019805933 556 | aF-0.43051109680830546 557 | aF-0.19509032201613985 558 | aF0.05233595624293165 559 | aF0.2965415749755861 560 | aF0.5224985647159378 561 | aF0.7163019434246449 562 | aF0.866025403784446 563 | aF0.9624552364536435 564 | aF0.9996573249755569 565 | aF0.975342320508516 566 | aF0.8910065241883748 567 | aF0.7518398074789877 568 | aF0.5664062369248226 569 | aF0.34611705707748164 570 | aF0.10452846326767014 571 | aF-0.14349262199119045 572 | aF-0.38268343236507363 573 | aF-0.5983246005706446 574 | aF-0.7771459614569773 575 | aF-0.9081431738250854 576 | aF-0.9832549075639511 577 | aF-0.9978589232386029 578 | aF-0.9510565162951509 579 | aF-0.8457278217039688 580 | aF-0.6883545756937482 581 | aF-0.4886212414969732 582 | aF-0.25881904510254133 583 | aF-0.013089595571366132 584 | aF0.23344536385591158 585 | aF0.46561452032511674 586 | aF0.6691306063588413 587 | aF0.8314696123025481 588 | aF0.94264149109218 589 | aF0.9958049275746595 590 | aF0.9876883405951371 591 | aF0.9187912101489081 592 | aF0.7933533402912505 593 | aF0.6190939493098317 594 | aF0.4067366430757979 595 | aF0.16934950384902248 596 | aF-0.07845909572784672 597 | aF-0.321439465303136 598 | aF-0.5446390350150041 599 | aF-0.734322509435686 600 | aF-0.8788171126619655 601 | aF-0.9692309097067544 602 | aF-1.0 603 | aF-0.9692309097067546 604 | aF-0.8788171126619659 605 | aF-0.7343225094356867 606 | aF-0.5446390350150287 607 | aF-0.3214394653031908 608 | aF-0.0784590957278477 609 | aF0.1693495038490215 610 | aF0.406736643075797 611 | aF0.6190939493098533 612 | aF0.7933533402912326 613 | aF0.9187912101488964 614 | aF0.9876883405951324 615 | aF0.9958049275746622 616 | aF0.9426414910921803 617 | aF0.8314696123025487 618 | aF0.6691306063588631 619 | aF0.4656145203251176 620 | aF0.23344536385591252 621 | aF-0.013089595571336737 622 | aF-0.25881904510251297 623 | aF-0.48862124149692276 624 | aF-0.6883545756937476 625 | aF-0.8457278217039683 626 | aF-0.9510565162951506 627 | aF-0.9978589232386047 628 | aF-0.9832549075639565 629 | aF-0.9081431738250858 630 | aF-0.7771459614569779 631 | aF-0.5983246005706683 632 | aF-0.3826834323651007 633 | aF-0.14349262199116333 634 | aF0.1045284632676409 635 | aF0.34611705707748075 636 | aF0.5664062369248453 637 | aF0.751839807478987 638 | aF0.8910065241883615 639 | aF0.9753423205085094 640 | aF0.9996573249755577 641 | aF0.9624552364536514 642 | aF0.8660254037844323 643 | aF0.7163019434246456 644 | aF0.5224985647159629 645 | aF0.29654157497558703 646 | aF0.05233595624296101 647 | aF-0.19509032201611104 648 | aF-0.4305110968082789 649 | aF-0.6394390019805707 650 | aF-0.8090169943749363 651 | aF-0.9288095528719171 652 | aF-0.9914448613738116 653 | aF-0.9930684569549253 654 | aF-0.9335804264971989 655 | aF-0.8166415551616908 656 | aF-0.6494480483301996 657 | aF-0.44228869021902045 658 | aF-0.2079116908177528 659 | aF0.03925981575907489 660 | aF0.284015344703901 661 | aF0.5112930860770569 662 | aF0.7071067811865511 663 | aF0.8594064115014551 664 | aF0.9588197348681943 665 | aF0.999229036240722 666 | aF0.9781476007338108 667 | aF0.8968727415326869 668 | aF0.760405965600029 669 | aF0.5771451900372315 670 | aF0.3583679495452983 671 | aF0.11753739745783594 672 | aF-0.13052619222002473 673 | aF-0.3705574375098371 674 | aF-0.5877852522924737 675 | aF-0.7688418320734597 676 | aF-0.9025852843498483 677 | aF-0.9807852804032303 678 | aF-0.9986295347545739 679 | aF-0.955019944457187 680 | aF-0.8526401643540931 681 | aF-0.697790459841702 682 | aF-0.5000000000000268 683 | aF-0.271440449865077 684 | aF-0.02617694830787636 685 | aF0.2206974350214976 686 | aF0.45399049973954325 687 | aF0.6593458151000655 688 | aF0.824126188622013 689 | aF0.9381913359224824 690 | aF0.9945218953682727 691 | aF0.989651386819671 692 | aF0.9238795325112892 693 | aF0.8012538126910647 694 | aF0.6293203910498429 695 | aF0.4186597375374348 696 | aF0.1822355254921551 697 | aF-0.06540312923013494 698 | aF-0.30901699437493935 699 | aF-0.5336145159156039 700 | aF-0.7253743710122813 701 | aF-0.8724960070728063 702 | aF-0.9659258262890656 703 | aF-0.9999143275740069 704 | aF-0.9723699203976791 705 | aF-0.8849876374630471 706 | aF-0.743144825477402 707 | aF-0.5555702330196122 708 | aF-0.33380685923378256 709 | aF-0.09150161866341504 710 | aF0.15643446504021796 711 | aF0.394743856384281 712 | aF0.6087614290087322 713 | aF0.7853169308807362 714 | aF0.913545457642595 715 | aF0.9855560590580752 716 | aF0.9969173337331292 717 | aF0.9469301294951016 718 | aF0.8386705679454328 719 | aF0.6788007455329539 720 | aF0.4771587602595983 721 | aF0.24615329302900976 722 | aF1.7638627791541416e-14 723 | aF-0.2461532930289756 724 | aF-0.47715876025959225 725 | aF-0.6788007455329279 726 | aF-0.8386705679454292 727 | aF-0.9469301294951085 728 | aF-0.9969173337331286 729 | aF-0.9855560590580763 730 | aF-0.9135454576426093 731 | aF-0.7853169308807579 732 | aF-0.6087614290087151 733 | aF-0.3947438563842612 734 | aF-0.1564344650402528 735 | aF0.09150161866340821 736 | aF0.33380685923377607 737 | aF0.5555702330196064 738 | aF0.7431448254773783 739 | aF0.8849876374630307 740 | aF0.9723699203976709 741 | aF0.9999143275740073 742 | aF0.9659258262890674 743 | aF0.8724960070727958 744 | aF0.725374371012286 745 | aF0.5336145159156098 746 | aF0.30901699437494584 747 | aF0.06540312923017015 748 | aF-0.18223552549214836 749 | aF-0.4186597375374286 750 | aF-0.6293203910498155 751 | aF-0.8012538126910604 752 | aF-0.9238795325112865 753 | aF-0.98965138681967 754 | aF-0.9945218953682735 755 | aF-0.9381913359224946 756 | aF-0.8241261886220169 757 | aF-0.6593458151000922 758 | aF-0.45399049973954936 759 | aF-0.22069743502147657 760 | aF0.026176948307869506 761 | aF0.2714404498650704 762 | aF0.4999999999999962 763 | aF0.6977904598416768 764 | aF0.8526401643540895 765 | aF0.955019944457185 766 | aF0.9986295347545721 767 | aF0.9807852804032317 768 | aF0.9025852843498512 769 | aF0.768841832073464 770 | aF0.5877852522924791 771 | aF0.3705574375098435 772 | aF0.13052619222005973 773 | aF-0.11753739745782912 774 | aF-0.3583679495453184 775 | aF-0.5771451900372261 776 | aF-0.7604059656000246 777 | aF-0.8968727415326964 778 | aF-0.9781476007338035 779 | aF-0.9992290362407233 780 | aF-0.9588197348681882 781 | aF-0.8594064115014586 782 | aF-0.707106781186556 783 | aF-0.5112930860770383 784 | aF-0.28401534470393486 785 | aF-0.03925981575905334 786 | aF0.2079116908177461 787 | aF0.4422886902189888 788 | aF0.6494480483301728 789 | aF0.8166415551616705 790 | aF0.9335804264971963 791 | aF0.9930684569549278 792 | aF0.9914448613738162 793 | aF0.9288095528719302 794 | aF0.8090169943749405 795 | aF0.6394390019805978 796 | aF0.4305110968083108 797 | aF0.19509032201614562 798 | aF-0.05233595624289739 799 | aF-0.29654157497555333 800 | aF-0.5224985647159571 801 | aF-0.7163019434246409 802 | aF-0.866025403784443 803 | aF-0.9624552364536496 804 | aF-0.9996573249755567 805 | aF-0.9753423205085173 806 | aF-0.8910065241883646 807 | aF-0.7518398074789916 808 | aF-0.5664062369248509 809 | aF-0.3461170570774872 810 | aF-0.10452846326767598 811 | aF0.14349262199118468 812 | aF0.38268343236509444 813 | aF0.59832460057064 814 | aF0.7771459614569557 815 | aF0.9081431738250948 816 | aF0.9832549075639501 817 | aF0.9978589232386051 818 | aF0.951056516295144 819 | aF0.8457278217039872 820 | aF0.6883545756937526 821 | aF0.4886212414969536 822 | aF0.258819045102547 823 | aF0.013089595571343593 824 | aF-0.23344536385590586 825 | aF-0.4656145203251115 826 | aF-0.669130606358858 827 | aF-0.8314696123025449 828 | aF-0.942641491092178 829 | aF-0.9958049275746615 830 | aF-0.9876883405951336 831 | aF-0.9187912101489104 832 | aF-0.793353340291254 833 | aF-0.619093949309814 834 | aF-0.40673664307582924 835 | aF-0.16934950384900024 836 | aF0.07845909572784088 837 | aF0.3214394653031304 838 | aF0.544639035015023 839 | aF0.734322509435682 840 | aF0.8788171126619627 841 | aF0.969230909706753 842 | aF1.0 843 | aF0.9692309097067561 844 | aF0.8788171126619688 845 | aF0.7343225094356713 846 | aF0.5446390350150337 847 | aF0.32143946530319634 848 | aF0.0784590957278819 849 | aF-0.1693495038489877 850 | aF-0.4067366430758176 851 | aF-0.619093949309804 852 | aF-0.7933533402912463 853 | aF-0.9187912101488941 854 | aF-0.9876883405951316 855 | aF-0.9958049275746628 856 | aF-0.9426414910921823 857 | aF-0.8314696123025519 858 | aF-0.6691306063588675 859 | aF-0.46561452032512274 860 | aF-0.23344536385591824 861 | aF0.013089595571330857 862 | aF0.25881904510253473 863 | aF0.4886212414969424 864 | aF0.6883545756937227 865 | aF0.8457278217039803 866 | aF0.95105651629514 867 | aF0.9978589232386044 868 | aF0.9832549075639524 869 | aF0.9081431738251001 870 | aF0.7771459614569638 871 | aF0.5983246005706729 872 | aF0.38268343236510616 873 | aF0.14349262199119725 874 | aF-0.10452846326763506 875 | aF-0.34611705707747525 876 | aF-0.566406236924817 877 | aF-0.7518398074789832 878 | aF-0.8910065241883588 879 | aF-0.9753423205085082 880 | aF-0.999657324975557 881 | aF-0.962455236453653 882 | aF-0.8660254037844353 883 | aF-0.7163019434246497 884 | aF-0.5224985647159437 885 | aF-0.29654157497556544 886 | aF-0.05233595624293849 887 | aF0.19509032201613313 888 | aF0.43051109680827365 889 | aF0.6394390019806099 890 | aF0.8090169943749329 891 | aF0.9288095528719149 892 | aF0.9914448613738145 893 | aF0.9930684569549293 894 | aF0.933580426497201 895 | aF0.8166415551616778 896 | aF0.6494480483302041 897 | aF0.44228869021900025 898 | aF0.20791169081775857 899 | aF-0.03925981575906902 900 | aF-0.28401534470392265 901 | aF-0.5112930860770518 902 | aF-0.707106781186547 903 | aF-0.8594064115014521 904 | aF-0.9588197348682007 905 | aF-0.9992290362407218 906 | aF-0.978147600733812 907 | aF-0.8968727415326769 908 | aF-0.7604059656000514 909 | aF-0.5771451900372132 910 | aF-0.35836794954533036 911 | aF-0.11753739745786998 912 | aF0.1305261922200471 913 | aF0.37055743750980524 914 | aF0.5877852522924689 915 | aF0.7688418320734559 916 | aF0.902585284349858 917 | aF0.9807852804032292 918 | aF0.9986295347545743 919 | aF0.9550199444571887 920 | aF0.8526401643540962 921 | aF0.6977904598416859 922 | aF0.5000000000000319 923 | aF0.27144044986511 924 | aF0.026176948307853824 925 | aF-0.22069743502146413 926 | aF-0.45399049973956335 927 | aF-0.6593458151000825 928 | aF-0.8241261886219935 929 | aF-0.9381913359224804 930 | aF-0.9945218953682722 931 | aF-0.9896513868196719 932 | aF-0.9238795325112914 933 | aF-0.8012538126910681 934 | aF-0.6293203910498475 935 | aF-0.4186597375374401 936 | aF-0.18223552549213293 937 | aF0.06540312923012907 938 | aF0.30901699437493374 939 | aF0.533614515915623 940 | aF0.7253743710122577 941 | aF0.8724960070728034 942 | aF0.9659258262890715 943 | aF0.9999143275740064 944 | aF0.9723699203976739 945 | aF0.8849876374630498 946 | aF0.7431448254774059 947 | aF0.555570233019617 948 | aF0.33380685923378806 949 | aF0.0915016186634209 950 | aF-0.15643446504021213 951 | aF-0.3947438563843017 952 | aF-0.608761429008705 953 | aF-0.7853169308807325 954 | aF-0.9135454576426041 955 | aF-0.9855560590580742 956 | aF-0.9969173337331274 957 | aF-0.9469301294951035 958 | aF-0.8386705679454205 959 | aF-0.6788007455329373 960 | aF-0.47715876025960346 961 | aF-0.24615329302898792 962 | aF-2.3518170388721888e-14 963 | aF0.24615329302896988 964 | aF0.4771587602595871 965 | aF0.6788007455329236 966 | aF0.8386705679454414 967 | aF0.9469301294950975 968 | aF0.9969173337331304 969 | aF0.9855560590580773 970 | aF0.9135454576426117 971 | aF0.785316930880744 972 | aF0.6087614290087423 973 | aF0.39474385638426657 974 | aF0.15643446504023054 975 | aF-0.09150161866334576 976 | aF-0.3338068592337705 977 | aF-0.5555702330196015 978 | aF-0.7431448254773935 979 | aF-0.8849876374630411 980 | aF-0.9723699203976696 981 | aF-0.9999143275740074 982 | aF-0.9659258262890763 983 | aF-0.8724960070727847 984 | aF-0.7253743710123095 985 | aF-0.5336145159156388 986 | aF-0.30901699437495145 987 | aF-0.06540312923017601 988 | aF0.18223552549214259 989 | aF0.41865973753742325 990 | aF0.629320391049811 991 | aF0.8012538126910569 992 | aF0.9238795325112843 993 | aF0.9896513868196692 994 | aF0.9945218953682741 995 | aF0.9381913359224868 996 | aF0.8241261886220203 997 | aF0.6593458151000965 998 | aF0.45399049973952926 999 | aF0.22069743502153774 1000 | aF-0.02617694830789204 1001 | aF-0.2714404498650921 1002 | a. -------------------------------------------------------------------------------- /pysstv/tests/assets/SSTV_gen_samples.p: -------------------------------------------------------------------------------- 1 | (lp0 2 | I0 3 | aI8066 4 | aI15636 5 | aI22243 6 | aI27482 7 | aI31029 8 | aI32667 9 | aI32295 10 | aI29935 11 | aI25733 12 | aI19948 13 | aI12935 14 | aI5126 15 | aI-2998 16 | aI-10938 17 | aI-18205 18 | aI-24351 19 | aI-28999 20 | aI-31863 21 | aI-32765 22 | aI-31651 23 | aI-28590 24 | aI-23769 25 | aI-17485 26 | aI-10126 27 | aI-2143 28 | aI5971 29 | aI13719 30 | aI20622 31 | aI26255 32 | aI30274 33 | aI32429 34 | aI32588 35 | aI30743 36 | aI27005 37 | aI21605 38 | aI14876 39 | aI7232 40 | aI-858 41 | aI-8895 42 | aI-16384 43 | aI-22865 44 | aI-27939 45 | aI-31294 46 | aI-32723 47 | aI-32138 48 | aI-29576 49 | aI-25193 50 | aI-19261 51 | aI-12142 52 | aI-4277 53 | aI3851 54 | aI11743 55 | aI18912 56 | aI24917 57 | aI29389 58 | aI32052 59 | aI32743 60 | aI31419 61 | aI28161 62 | aI23170 63 | aI16754 64 | aI9307 65 | aI1286 66 | aI-6813 67 | aI-14493 68 | aI-21281 69 | aI-26760 70 | aI-30592 71 | aI-32541 72 | aI-32488 73 | aI-30435 74 | aI-26510 75 | aI-20953 76 | aI-14107 77 | aI-6393 78 | aI1715 79 | aI9717 80 | aI17121 81 | aI23472 82 | aI28378 83 | aI31538 84 | aI32757 85 | aI31960 86 | aI29197 87 | aI24636 88 | aI18560 89 | aI11342 90 | aI3425 91 | aI-4702 92 | aI-12540 93 | aI-19606 94 | aI-25466 95 | aI-29758 96 | aI-32219 97 | aI-32698 98 | aI-31164 99 | aI-27713 100 | aI-22556 101 | aI-16011 102 | aI-8481 103 | aI-429 104 | aI7650 105 | aI15257 106 | aI21926 107 | aI27246 108 | aI30888 109 | aI32631 110 | aI32365 111 | aI30107 112 | aI25997 113 | aI20286 114 | aI13328 115 | aI5549 116 | aI-2571 117 | aI-10533 118 | aI-17847 119 | aI-24062 120 | aI-28797 121 | aI-31760 122 | aI-32768 123 | aI-31760 124 | aI-28797 125 | aI-24062 126 | aI-17847 127 | aI-10533 128 | aI-2571 129 | aI5549 130 | aI13328 131 | aI20286 132 | aI25997 133 | aI30107 134 | aI32365 135 | aI32631 136 | aI30888 137 | aI27246 138 | aI21926 139 | aI15257 140 | aI7650 141 | aI-429 142 | aI-8481 143 | aI-16011 144 | aI-22556 145 | aI-27713 146 | aI-31164 147 | aI-32698 148 | aI-32219 149 | aI-29758 150 | aI-25466 151 | aI-19606 152 | aI-12540 153 | aI-4702 154 | aI3425 155 | aI11342 156 | aI18560 157 | aI24636 158 | aI29197 159 | aI31960 160 | aI32757 161 | aI31538 162 | aI28378 163 | aI23472 164 | aI17121 165 | aI9717 166 | aI1715 167 | aI-6393 168 | aI-14107 169 | aI-20953 170 | aI-26510 171 | aI-30435 172 | aI-32488 173 | aI-32541 174 | aI-30592 175 | aI-26760 176 | aI-21281 177 | aI-14493 178 | aI-6813 179 | aI1286 180 | aI9307 181 | aI16754 182 | aI23170 183 | aI28161 184 | aI31419 185 | aI32743 186 | aI32052 187 | aI29389 188 | aI24917 189 | aI18912 190 | aI11743 191 | aI3851 192 | aI-4277 193 | aI-12142 194 | aI-19261 195 | aI-25193 196 | aI-29576 197 | aI-32138 198 | aI-32723 199 | aI-31294 200 | aI-27939 201 | aI-22865 202 | aI-16384 203 | aI-8895 204 | aI-858 205 | aI7232 206 | aI14876 207 | aI21605 208 | aI27005 209 | aI30743 210 | aI32588 211 | aI32429 212 | aI30274 213 | aI26255 214 | aI20622 215 | aI13719 216 | aI5971 217 | aI-2143 218 | aI-10126 219 | aI-17485 220 | aI-23769 221 | aI-28590 222 | aI-31651 223 | aI-32765 224 | aI-31863 225 | aI-28999 226 | aI-24351 227 | aI-18205 228 | aI-10938 229 | aI-2998 230 | aI5126 231 | aI12935 232 | aI19948 233 | aI25733 234 | aI29935 235 | aI32295 236 | aI32667 237 | aI31029 238 | aI27482 239 | aI22243 240 | aI15636 241 | aI8066 242 | aI0 243 | aI-8066 244 | aI-15636 245 | aI-22243 246 | aI-27482 247 | aI-31029 248 | aI-32667 249 | aI-32295 250 | aI-29935 251 | aI-25733 252 | aI-19948 253 | aI-12935 254 | aI-5126 255 | aI2998 256 | aI10938 257 | aI18205 258 | aI24351 259 | aI28999 260 | aI31863 261 | aI32765 262 | aI31651 263 | aI28590 264 | aI23769 265 | aI17485 266 | aI10126 267 | aI2143 268 | aI-5971 269 | aI-13719 270 | aI-20622 271 | aI-26255 272 | aI-30274 273 | aI-32429 274 | aI-32588 275 | aI-30743 276 | aI-27005 277 | aI-21605 278 | aI-14876 279 | aI-7232 280 | aI858 281 | aI8895 282 | aI16384 283 | aI22865 284 | aI27939 285 | aI31294 286 | aI32723 287 | aI32138 288 | aI29576 289 | aI25193 290 | aI19261 291 | aI12142 292 | aI4277 293 | aI-3851 294 | aI-11743 295 | aI-18912 296 | aI-24917 297 | aI-29389 298 | aI-32052 299 | aI-32743 300 | aI-31419 301 | aI-28161 302 | aI-23170 303 | aI-16754 304 | aI-9307 305 | aI-1286 306 | aI6813 307 | aI14493 308 | aI21281 309 | aI26760 310 | aI30592 311 | aI32541 312 | aI32488 313 | aI30435 314 | aI26510 315 | aI20953 316 | aI14107 317 | aI6393 318 | aI-1715 319 | aI-9717 320 | aI-17121 321 | aI-23472 322 | aI-28378 323 | aI-31538 324 | aI-32757 325 | aI-31960 326 | aI-29197 327 | aI-24636 328 | aI-18560 329 | aI-11342 330 | aI-3425 331 | aI4702 332 | aI12540 333 | aI19606 334 | aI25466 335 | aI29758 336 | aI32219 337 | aI32698 338 | aI31164 339 | aI27713 340 | aI22556 341 | aI16011 342 | aI8481 343 | aI429 344 | aI-7650 345 | aI-15257 346 | aI-21926 347 | aI-27246 348 | aI-30888 349 | aI-32631 350 | aI-32365 351 | aI-30107 352 | aI-25997 353 | aI-20286 354 | aI-13328 355 | aI-5549 356 | aI2571 357 | aI10533 358 | aI17847 359 | aI24062 360 | aI28797 361 | aI31760 362 | aF32767.0 363 | aI31760 364 | aI28797 365 | aI24062 366 | aI17847 367 | aI10533 368 | aI2571 369 | aI-5549 370 | aI-13328 371 | aI-20286 372 | aI-25997 373 | aI-30107 374 | aI-32365 375 | aI-32631 376 | aI-30888 377 | aI-27246 378 | aI-21926 379 | aI-15257 380 | aI-7650 381 | aI429 382 | aI8481 383 | aI16011 384 | aI22556 385 | aI27713 386 | aI31164 387 | aI32698 388 | aI32219 389 | aI29758 390 | aI25466 391 | aI19606 392 | aI12540 393 | aI4702 394 | aI-3425 395 | aI-11342 396 | aI-18560 397 | aI-24636 398 | aI-29197 399 | aI-31960 400 | aI-32757 401 | aI-31538 402 | aI-28378 403 | aI-23472 404 | aI-17121 405 | aI-9717 406 | aI-1715 407 | aI6393 408 | aI14107 409 | aI20953 410 | aI26510 411 | aI30435 412 | aI32488 413 | aI32541 414 | aI30592 415 | aI26760 416 | aI21281 417 | aI14493 418 | aI6813 419 | aI-1286 420 | aI-9307 421 | aI-16754 422 | aI-23170 423 | aI-28161 424 | aI-31419 425 | aI-32743 426 | aI-32052 427 | aI-29389 428 | aI-24917 429 | aI-18912 430 | aI-11743 431 | aI-3851 432 | aI4277 433 | aI12142 434 | aI19261 435 | aI25193 436 | aI29576 437 | aI32138 438 | aI32723 439 | aI31294 440 | aI27939 441 | aI22865 442 | aI16384 443 | aI8895 444 | aI858 445 | aI-7232 446 | aI-14876 447 | aI-21605 448 | aI-27005 449 | aI-30743 450 | aI-32588 451 | aI-32429 452 | aI-30274 453 | aI-26255 454 | aI-20622 455 | aI-13719 456 | aI-5971 457 | aI2143 458 | aI10126 459 | aI17485 460 | aI23769 461 | aI28590 462 | aI31651 463 | aI32765 464 | aI31863 465 | aI28999 466 | aI24351 467 | aI18205 468 | aI10938 469 | aI2998 470 | aI-5126 471 | aI-12935 472 | aI-19948 473 | aI-25733 474 | aI-29935 475 | aI-32295 476 | aI-32667 477 | aI-31029 478 | aI-27482 479 | aI-22243 480 | aI-15636 481 | aI-8066 482 | aI0 483 | aI8066 484 | aI15636 485 | aI22243 486 | aI27482 487 | aI31029 488 | aI32667 489 | aI32295 490 | aI29935 491 | aI25733 492 | aI19948 493 | aI12935 494 | aI5126 495 | aI-2998 496 | aI-10938 497 | aI-18205 498 | aI-24351 499 | aI-28999 500 | aI-31863 501 | aI-32765 502 | aI-31651 503 | aI-28590 504 | aI-23769 505 | aI-17485 506 | aI-10126 507 | aI-2143 508 | aI5971 509 | aI13719 510 | aI20622 511 | aI26255 512 | aI30274 513 | aI32429 514 | aI32588 515 | aI30743 516 | aI27005 517 | aI21605 518 | aI14876 519 | aI7232 520 | aI-858 521 | aI-8895 522 | aI-16384 523 | aI-22865 524 | aI-27939 525 | aI-31294 526 | aI-32723 527 | aI-32138 528 | aI-29576 529 | aI-25193 530 | aI-19261 531 | aI-12142 532 | aI-4277 533 | aI3851 534 | aI11743 535 | aI18912 536 | aI24917 537 | aI29389 538 | aI32052 539 | aI32743 540 | aI31419 541 | aI28161 542 | aI23170 543 | aI16754 544 | aI9307 545 | aI1286 546 | aI-6813 547 | aI-14493 548 | aI-21281 549 | aI-26760 550 | aI-30592 551 | aI-32541 552 | aI-32488 553 | aI-30435 554 | aI-26510 555 | aI-20953 556 | aI-14107 557 | aI-6393 558 | aI1715 559 | aI9717 560 | aI17121 561 | aI23472 562 | aI28378 563 | aI31538 564 | aI32757 565 | aI31960 566 | aI29197 567 | aI24636 568 | aI18560 569 | aI11342 570 | aI3425 571 | aI-4702 572 | aI-12540 573 | aI-19606 574 | aI-25466 575 | aI-29758 576 | aI-32219 577 | aI-32698 578 | aI-31164 579 | aI-27713 580 | aI-22556 581 | aI-16011 582 | aI-8481 583 | aI-429 584 | aI7650 585 | aI15257 586 | aI21926 587 | aI27246 588 | aI30888 589 | aI32631 590 | aI32365 591 | aI30107 592 | aI25997 593 | aI20286 594 | aI13328 595 | aI5549 596 | aI-2571 597 | aI-10533 598 | aI-17847 599 | aI-24062 600 | aI-28797 601 | aI-31760 602 | aI-32768 603 | aI-31760 604 | aI-28797 605 | aI-24062 606 | aI-17847 607 | aI-10533 608 | aI-2571 609 | aI5549 610 | aI13328 611 | aI20286 612 | aI25997 613 | aI30107 614 | aI32365 615 | aI32631 616 | aI30888 617 | aI27246 618 | aI21926 619 | aI15257 620 | aI7650 621 | aI-429 622 | aI-8481 623 | aI-16011 624 | aI-22556 625 | aI-27713 626 | aI-31164 627 | aI-32698 628 | aI-32219 629 | aI-29758 630 | aI-25466 631 | aI-19606 632 | aI-12540 633 | aI-4702 634 | aI3425 635 | aI11342 636 | aI18560 637 | aI24636 638 | aI29197 639 | aI31960 640 | aI32757 641 | aI31538 642 | aI28378 643 | aI23472 644 | aI17121 645 | aI9717 646 | aI1715 647 | aI-6393 648 | aI-14107 649 | aI-20953 650 | aI-26510 651 | aI-30435 652 | aI-32488 653 | aI-32541 654 | aI-30592 655 | aI-26760 656 | aI-21281 657 | aI-14493 658 | aI-6813 659 | aI1286 660 | aI9307 661 | aI16754 662 | aI23170 663 | aI28161 664 | aI31419 665 | aI32743 666 | aI32052 667 | aI29389 668 | aI24917 669 | aI18912 670 | aI11743 671 | aI3851 672 | aI-4277 673 | aI-12142 674 | aI-19261 675 | aI-25193 676 | aI-29576 677 | aI-32138 678 | aI-32723 679 | aI-31294 680 | aI-27939 681 | aI-22865 682 | aI-16384 683 | aI-8895 684 | aI-858 685 | aI7232 686 | aI14876 687 | aI21605 688 | aI27005 689 | aI30743 690 | aI32588 691 | aI32429 692 | aI30274 693 | aI26255 694 | aI20622 695 | aI13719 696 | aI5971 697 | aI-2143 698 | aI-10126 699 | aI-17485 700 | aI-23769 701 | aI-28590 702 | aI-31651 703 | aI-32765 704 | aI-31863 705 | aI-28999 706 | aI-24351 707 | aI-18205 708 | aI-10938 709 | aI-2998 710 | aI5126 711 | aI12935 712 | aI19948 713 | aI25733 714 | aI29935 715 | aI32295 716 | aI32667 717 | aI31029 718 | aI27482 719 | aI22243 720 | aI15636 721 | aI8066 722 | aI0 723 | aI-8066 724 | aI-15636 725 | aI-22243 726 | aI-27482 727 | aI-31029 728 | aI-32667 729 | aI-32295 730 | aI-29935 731 | aI-25733 732 | aI-19948 733 | aI-12935 734 | aI-5126 735 | aI2998 736 | aI10938 737 | aI18205 738 | aI24351 739 | aI28999 740 | aI31863 741 | aI32765 742 | aI31651 743 | aI28590 744 | aI23769 745 | aI17485 746 | aI10126 747 | aI2143 748 | aI-5971 749 | aI-13719 750 | aI-20622 751 | aI-26255 752 | aI-30274 753 | aI-32429 754 | aI-32588 755 | aI-30743 756 | aI-27005 757 | aI-21605 758 | aI-14876 759 | aI-7232 760 | aI858 761 | aI8895 762 | aI16384 763 | aI22865 764 | aI27939 765 | aI31294 766 | aI32723 767 | aI32138 768 | aI29576 769 | aI25193 770 | aI19261 771 | aI12142 772 | aI4277 773 | aI-3851 774 | aI-11743 775 | aI-18912 776 | aI-24917 777 | aI-29389 778 | aI-32052 779 | aI-32743 780 | aI-31419 781 | aI-28161 782 | aI-23170 783 | aI-16754 784 | aI-9307 785 | aI-1286 786 | aI6813 787 | aI14493 788 | aI21281 789 | aI26760 790 | aI30592 791 | aI32541 792 | aI32488 793 | aI30435 794 | aI26510 795 | aI20953 796 | aI14107 797 | aI6393 798 | aI-1715 799 | aI-9717 800 | aI-17121 801 | aI-23472 802 | aI-28378 803 | aI-31538 804 | aI-32757 805 | aI-31960 806 | aI-29197 807 | aI-24636 808 | aI-18560 809 | aI-11342 810 | aI-3425 811 | aI4702 812 | aI12540 813 | aI19606 814 | aI25466 815 | aI29758 816 | aI32219 817 | aI32698 818 | aI31164 819 | aI27713 820 | aI22556 821 | aI16011 822 | aI8481 823 | aI429 824 | aI-7650 825 | aI-15257 826 | aI-21926 827 | aI-27246 828 | aI-30888 829 | aI-32631 830 | aI-32365 831 | aI-30107 832 | aI-25997 833 | aI-20286 834 | aI-13328 835 | aI-5549 836 | aI2571 837 | aI10533 838 | aI17847 839 | aI24062 840 | aI28797 841 | aI31760 842 | aF32767.0 843 | aI31760 844 | aI28797 845 | aI24062 846 | aI17847 847 | aI10533 848 | aI2571 849 | aI-5549 850 | aI-13328 851 | aI-20286 852 | aI-25997 853 | aI-30107 854 | aI-32365 855 | aI-32631 856 | aI-30888 857 | aI-27246 858 | aI-21926 859 | aI-15257 860 | aI-7650 861 | aI429 862 | aI8481 863 | aI16011 864 | aI22556 865 | aI27713 866 | aI31164 867 | aI32698 868 | aI32219 869 | aI29758 870 | aI25466 871 | aI19606 872 | aI12540 873 | aI4702 874 | aI-3425 875 | aI-11342 876 | aI-18560 877 | aI-24636 878 | aI-29197 879 | aI-31960 880 | aI-32757 881 | aI-31538 882 | aI-28378 883 | aI-23472 884 | aI-17121 885 | aI-9717 886 | aI-1715 887 | aI6393 888 | aI14107 889 | aI20953 890 | aI26510 891 | aI30435 892 | aI32488 893 | aI32541 894 | aI30592 895 | aI26760 896 | aI21281 897 | aI14493 898 | aI6813 899 | aI-1286 900 | aI-9307 901 | aI-16754 902 | aI-23170 903 | aI-28161 904 | aI-31419 905 | aI-32743 906 | aI-32052 907 | aI-29389 908 | aI-24917 909 | aI-18912 910 | aI-11743 911 | aI-3851 912 | aI4277 913 | aI12142 914 | aI19261 915 | aI25193 916 | aI29576 917 | aI32138 918 | aI32723 919 | aI31294 920 | aI27939 921 | aI22865 922 | aI16384 923 | aI8895 924 | aI858 925 | aI-7232 926 | aI-14876 927 | aI-21605 928 | aI-27005 929 | aI-30743 930 | aI-32588 931 | aI-32429 932 | aI-30274 933 | aI-26255 934 | aI-20622 935 | aI-13719 936 | aI-5971 937 | aI2143 938 | aI10126 939 | aI17485 940 | aI23769 941 | aI28590 942 | aI31651 943 | aI32765 944 | aI31863 945 | aI28999 946 | aI24351 947 | aI18205 948 | aI10938 949 | aI2998 950 | aI-5126 951 | aI-12935 952 | aI-19948 953 | aI-25733 954 | aI-29935 955 | aI-32295 956 | aI-32667 957 | aI-31029 958 | aI-27482 959 | aI-22243 960 | aI-15636 961 | aI-8066 962 | aI0 963 | aI8066 964 | aI15636 965 | aI22243 966 | aI27482 967 | aI31029 968 | aI32667 969 | aI32295 970 | aI29935 971 | aI25733 972 | aI19948 973 | aI12935 974 | aI5126 975 | aI-2998 976 | aI-10938 977 | aI-18205 978 | aI-24351 979 | aI-28999 980 | aI-31863 981 | aI-32765 982 | aI-31651 983 | aI-28590 984 | aI-23769 985 | aI-17485 986 | aI-10126 987 | aI-2143 988 | aI5971 989 | aI13719 990 | aI20622 991 | aI26255 992 | aI30274 993 | aI32429 994 | aI32588 995 | aI30743 996 | aI27005 997 | aI21605 998 | aI14876 999 | aI7232 1000 | aI-858 1001 | aI-8895 1002 | a. -------------------------------------------------------------------------------- /pysstv/tests/assets/SSTV_gen_values.p: -------------------------------------------------------------------------------- 1 | (lp0 2 | F0.0 3 | aF0.24615329302899303 4 | aF0.4771587602596084 5 | aF0.6788007455329417 6 | aF0.8386705679454239 7 | aF0.9469301294951057 8 | aF0.996917333733128 9 | aF0.9855560590580777 10 | aF0.913545457642601 11 | aF0.7853169308807448 12 | aF0.6087614290087204 13 | aF0.3947438563842674 14 | aF0.15643446504023098 15 | aF-0.0915016186634019 16 | aF-0.33380685923377096 17 | aF-0.555570233019602 18 | aF-0.743144825477394 19 | aF-0.8849876374630418 20 | aF-0.9723699203976767 21 | aF-0.999914327574007 22 | aF-0.9659258262890682 23 | aF-0.8724960070727972 24 | aF-0.725374371012288 25 | aF-0.5336145159156122 26 | aF-0.3090169943749476 27 | aF-0.0654031292301428 28 | aF0.18223552549214647 29 | aF0.41865973753742686 30 | aF0.6293203910498375 31 | aF0.8012538126910604 32 | aF0.9238795325112865 33 | aF0.9896513868196701 34 | aF0.9945218953682734 35 | aF0.9381913359224842 36 | aF0.8241261886220159 37 | aF0.6593458151000682 38 | aF0.4539904997395463 39 | aF0.22069743502150094 40 | aF-0.02617694830787293 41 | aF-0.27144044986507365 42 | aF-0.5000000000000007 43 | aF-0.6977904598416804 44 | aF-0.8526401643540923 45 | aF-0.9550199444571865 46 | aF-0.9986295347545738 47 | aF-0.9807852804032307 48 | aF-0.9025852843498613 49 | aF-0.7688418320734596 50 | aF-0.5877852522924735 51 | aF-0.370557437509837 52 | aF-0.13052619222005105 53 | aF0.11753739745783959 54 | aF0.35836794954529844 55 | aF0.5771451900372346 56 | aF0.7604059656000292 57 | aF0.8968727415326885 58 | aF0.9781476007338057 59 | aF0.9992290362407229 60 | aF0.9588197348681933 61 | aF0.8594064115014532 62 | aF0.7071067811865486 63 | aF0.5112930860770522 64 | aF0.28401534470392303 65 | aF0.039259815759067666 66 | aF-0.20791169081775815 67 | aF-0.44228869021900147 68 | aF-0.6494480483301834 69 | aF-0.8166415551616786 70 | aF-0.9335804264972014 71 | aF-0.9930684569549262 72 | aF-0.9914448613738102 73 | aF-0.928809552871925 74 | aF-0.8090169943749468 75 | aF-0.639439001980587 76 | aF-0.43051109680829486 77 | aF-0.1950903220161283 78 | aF0.05233595624294339 79 | aF0.29654157497557015 80 | aF0.5224985647159478 81 | aF0.7163019434246531 82 | aF0.8660254037844395 83 | aF0.9624552364536466 84 | aF0.9996573249755573 85 | aF0.9753423205085134 86 | aF0.8910065241883678 87 | aF0.7518398074789799 88 | aF0.5664062369248334 89 | aF0.34611705707749396 90 | aF0.10452846326765491 91 | aF-0.1434926219911775 92 | aF-0.3826834323650878 93 | aF-0.598324600570657 94 | aF-0.777145961456969 95 | aF-0.9081431738250814 96 | aF-0.9832549075639545 97 | aF-0.9978589232386036 98 | aF-0.9510565162951539 99 | aF-0.8457278217039739 100 | aF-0.6883545756937552 101 | aF-0.4886212414969537 102 | aF-0.25881904510251974 103 | aF-0.01308959557134727 104 | aF0.23344536385590922 105 | aF0.46561452032511136 106 | aF0.6691306063588552 107 | aF0.8314696123025448 108 | aF0.9426414910921792 109 | aF0.9958049275746615 110 | aF0.9876883405951385 111 | aF0.9187912101488992 112 | aF0.7933533402912346 113 | aF0.6190939493098364 114 | aF0.40673664307580015 115 | aF0.16934950384902842 116 | aF-0.07845909572784429 117 | aF-0.3214394653031572 118 | aF-0.5446390350150259 119 | aF-0.7343225094356843 120 | aF-0.8788171126619644 121 | aF-0.9692309097067546 122 | aF-1.0 123 | aF-0.9692309097067552 124 | aF-0.8788171126619655 125 | aF-0.7343225094356859 126 | aF-0.5446390350150279 127 | aF-0.32143946530316614 128 | aF-0.07845909572784306 129 | aF0.1693495038490261 130 | aF0.406736643075798 131 | aF0.619093949309829 132 | aF0.7933533402912354 133 | aF0.9187912101488983 134 | aF0.9876883405951377 135 | aF0.9958049275746618 136 | aF0.9426414910921788 137 | aF0.8314696123025461 138 | aF0.6691306063588597 139 | aF0.4656145203251134 140 | aF0.23344536385590803 141 | aF-0.01308959557134139 142 | aF-0.25881904510252435 143 | aF-0.48862124149695163 144 | aF-0.6883545756937509 145 | aF-0.8457278217039745 146 | aF-0.9510565162951543 147 | aF-0.9978589232386031 148 | aF-0.9832549075639556 149 | aF-0.9081431738250809 150 | aF-0.7771459614569705 151 | aF-0.5983246005706645 152 | aF-0.38268343236508984 153 | aF-0.1434926219911798 154 | aF0.1045284632676526 155 | aF0.34611705707748514 156 | aF0.5664062369248315 157 | aF0.751839807478976 158 | aF0.8910065241883668 159 | aF0.9753423205085121 160 | aF0.9996573249755574 161 | aF0.9624552364536483 162 | aF0.866025403784437 163 | aF0.7163019434246573 164 | aF0.5224985647159528 165 | aF0.296541574975569 166 | aF0.05233595624294216 167 | aF-0.19509032201612955 168 | aF-0.43051109680828953 169 | aF-0.6394390019805852 170 | aF-0.8090169943749475 171 | aF-0.9288095528719241 172 | aF-0.9914448613738094 173 | aF-0.9930684569549264 174 | aF-0.9335804264972023 175 | aF-0.8166415551616799 176 | aF-0.6494480483301852 177 | aF-0.4422886902190035 178 | aF-0.20791169081776217 179 | aF0.03925981575906534 180 | aF0.2840153447039191 181 | aF0.5112930860770487 182 | aF0.7071067811865445 183 | aF0.8594064115014539 184 | aF0.9588197348681916 185 | aF0.9992290362407227 186 | aF0.9781476007338069 187 | aF0.8968727415326879 188 | aF0.7604059656000306 189 | aF0.5771451900372394 190 | aF0.3583679495453006 191 | aF0.11753739745783835 192 | aF-0.1305261922200505 193 | aF-0.3705574375098283 194 | aF-0.5877852522924716 195 | aF-0.7688418320734627 196 | aF-0.9025852843498595 197 | aF-0.9807852804032299 198 | aF-0.998629534754574 199 | aF-0.9550199444571877 200 | aF-0.8526401643540906 201 | aF-0.6977904598416885 202 | aF-0.4999999999999981 203 | aF-0.2714404498650725 204 | aF-0.02617694830787881 205 | aF0.2206974350214952 206 | aF0.45399049973955374 207 | aF0.6593458151000637 208 | aF0.8241261886220157 209 | aF0.9381913359224865 210 | aF0.9945218953682725 211 | aF0.9896513868196704 212 | aF0.9238795325112874 213 | aF0.8012538126910618 214 | aF0.6293203910498337 215 | aF0.41865973753743707 216 | aF0.18223552549215052 217 | aF-0.06540312923014667 218 | aF-0.30901699437493696 219 | aF-0.5336145159156139 220 | aF-0.7253743710122844 221 | aF-0.8724960070727947 222 | aF-0.9659258262890688 223 | aF-0.999914327574007 224 | aF-0.972369920397678 225 | aF-0.8849876374630417 226 | aF-0.743144825477394 227 | aF-0.5555702330196024 228 | aF-0.3338068592337782 229 | aF-0.0915016186634104 230 | aF0.15643446504022956 231 | aF0.3947438563842657 232 | aF0.6087614290087133 233 | aF0.7853169308807478 234 | aF0.9135454576425998 235 | aF0.9855560590580772 236 | aF0.9969173337331283 237 | aF0.9469301294951047 238 | aF0.8386705679454264 239 | aF0.6788007455329452 240 | aF0.4771587602596067 241 | aF0.2461532930289915 242 | aF5.879542597180472e-15 243 | aF-0.24615329302900074 244 | aF-0.4771587602596026 245 | aF-0.6788007455329418 246 | aF-0.8386705679454238 247 | aF-0.9469301294951031 248 | aF-0.9969173337331279 249 | aF-0.9855560590580792 250 | aF-0.9135454576426016 251 | aF-0.785316930880742 252 | aF-0.6087614290087283 253 | aF-0.39474385638426995 254 | aF-0.15643446504022712 255 | aF0.09150161866339163 256 | aF0.3338068592337738 257 | aF0.5555702330195985 258 | aF0.7431448254773909 259 | aF0.8849876374630428 260 | aF0.9723699203976737 261 | aF0.999914327574007 262 | aF0.9659258262890681 263 | aF0.8724960070728038 264 | aF0.7253743710122877 265 | aF0.5336145159156118 266 | aF0.3090169943749482 267 | aF0.06540312923014423 268 | aF-0.18223552549214594 269 | aF-0.41865973753742636 270 | aF-0.6293203910498357 271 | aF-0.801253812691059 272 | aF-0.9238795325112856 273 | aF-0.9896513868196697 274 | aF-0.9945218953682737 275 | aF-0.9381913359224856 276 | aF-0.8241261886220183 277 | aF-0.6593458151000726 278 | aF-0.4539904997395516 279 | aF-0.22069743502150668 280 | aF0.026176948307867053 281 | aF0.271440449865068 282 | aF0.5000000000000064 283 | aF0.697790459841675 284 | aF0.8526401643540882 285 | aF0.9550199444571885 286 | aF0.9986295347545734 287 | aF0.9807852804032322 288 | aF0.9025852843498584 289 | aF0.7688418320734656 290 | aF0.5877852522924696 291 | aF0.3705574375098326 292 | aF0.13052619222006215 293 | aF-0.1175373974578408 294 | aF-0.3583679495452896 295 | aF-0.5771451900372356 296 | aF-0.7604059656000323 297 | aF-0.8968727415326827 298 | aF-0.9781476007338059 299 | aF-0.9992290362407229 300 | aF-0.9588197348681969 301 | aF-0.8594064115014526 302 | aF-0.7071067811865477 303 | aF-0.5112930860770526 304 | aF-0.2840153447039236 305 | aF-0.03925981575906999 306 | aF0.20791169081775762 307 | aF0.44228869021899936 308 | aF0.649448048330171 309 | aF0.8166415551616772 310 | aF0.9335804264972005 311 | aF0.9930684569549258 312 | aF0.9914448613738109 313 | aF0.9288095528719259 314 | aF0.8090169943749502 315 | aF0.6394390019805888 316 | aF0.43051109680830013 317 | aF0.19509032201613408 318 | aF-0.05233595624293752 319 | aF-0.29654157497557815 320 | aF-0.5224985647159428 321 | aF-0.7163019434246491 322 | aF-0.8660254037844418 323 | aF-0.9624552364536451 324 | aF-0.999657324975557 325 | aF-0.9753423205085147 326 | aF-0.8910065241883721 327 | aF-0.7518398074789744 328 | aF-0.5664062369248295 329 | aF-0.3461170570775028 330 | aF-0.10452846326765015 331 | aF0.14349262199116816 332 | aF0.38268343236509217 333 | aF0.5983246005706608 334 | aF0.7771459614569631 335 | aF0.9081431738250819 336 | aF0.9832549075639547 337 | aF0.9978589232386044 338 | aF0.9510565162951534 339 | aF0.8457278217039809 340 | aF0.6883545756937544 341 | aF0.4886212414969557 342 | aF0.25881904510253567 343 | aF0.013089595571346044 344 | aF-0.23344536385590348 345 | aF-0.4656145203251093 346 | aF-0.6691306063588561 347 | aF-0.8314696123025436 348 | aF-0.9426414910921772 349 | aF-0.9958049275746613 350 | aF-0.9876883405951384 351 | aF-0.9187912101489002 352 | aF-0.7933533402912382 353 | aF-0.6190939493098382 354 | aF-0.4067366430758055 355 | aF-0.1693495038490307 356 | aF0.07845909572783842 357 | aF0.32143946530316847 358 | aF0.544639035015021 359 | aF0.7343225094356803 360 | aF0.8788171126619615 361 | aF0.9692309097067558 362 | aF1.0 363 | aF0.9692309097067566 364 | aF0.8788171126619632 365 | aF0.7343225094356827 366 | aF0.5446390350150357 367 | aF0.32143946530315826 368 | aF0.078459095727856 369 | aF-0.1693495038490273 370 | aF-0.4067366430757894 371 | aF-0.6190939493098244 372 | aF-0.793353340291236 373 | aF-0.9187912101488988 374 | aF-0.9876883405951379 375 | aF-0.9958049275746617 376 | aF-0.9426414910921831 377 | aF-0.8314696123025455 378 | aF-0.6691306063588587 379 | aF-0.46561452032511236 380 | aF-0.2334453638559068 381 | aF0.013089595571342616 382 | aF0.25881904510251863 383 | aF0.4886212414969527 384 | aF0.6883545756937415 385 | aF0.845727821703979 386 | aF0.9510565162951524 387 | aF0.9978589232386033 388 | aF0.9832549075639528 389 | aF0.9081431738250834 390 | aF0.7771459614569742 391 | aF0.5983246005706522 392 | aF0.3826834323650953 393 | aF0.14349262199118562 394 | aF-0.10452846326764674 395 | aF-0.3461170570774863 396 | aF-0.5664062369248266 397 | aF-0.7518398074789628 398 | aF-0.8910065241883706 399 | aF-0.9753423205085108 400 | aF-0.9996573249755579 401 | aF-0.962455236453646 402 | aF-0.8660254037844364 403 | aF-0.7163019434246614 404 | aF-0.5224985647159457 405 | aF-0.2965415749755814 406 | aF-0.05233595624295514 407 | aF0.19509032201613075 408 | aF0.4305110968082842 409 | aF0.6394390019805752 410 | aF0.8090169943749566 411 | aF0.9288095528719246 412 | aF0.9914448613738086 413 | aF0.9930684569549263 414 | aF0.9335804264972019 415 | aF0.8166415551616792 416 | aF0.6494480483301736 417 | aF0.4422886902190152 418 | aF0.20791169081777489 419 | aF-0.03925981575906657 420 | aF-0.28401534470392026 421 | aF-0.5112930860770497 422 | aF-0.7071067811865454 423 | aF-0.8594064115014508 424 | aF-0.9588197348681919 425 | aF-0.9992290362407222 426 | aF-0.9781476007338037 427 | aF-0.8968727415326843 428 | aF-0.7604059656000437 429 | aF-0.5771451900372384 430 | aF-0.3583679495453061 431 | aF-0.1175373974578442 432 | aF0.13052619222005876 433 | aF0.3705574375098162 434 | aF0.5877852522924554 435 | aF0.7688418320734635 436 | aF0.9025852843498631 437 | aF0.9807852804032288 438 | aF0.9986295347545744 439 | aF0.9550199444571895 440 | aF0.8526401643540975 441 | aF0.6977904598416774 442 | aF0.49999999999999706 443 | aF0.2714404498650713 444 | aF0.02617694830787048 445 | aF-0.22069743502148947 446 | aF-0.45399049973953587 447 | aF-0.6593458151000807 448 | aF-0.8241261886220164 449 | aF-0.9381913359224795 450 | aF-0.9945218953682734 451 | aF-0.9896513868196702 452 | aF-0.9238795325112868 453 | aF-0.8012538126910526 454 | aF-0.6293203910498494 455 | aF-0.41865973753744234 456 | aF-0.1822355254921633 457 | aF0.0654031292301408 458 | aF0.30901699437494495 459 | aF0.5336145159156089 460 | aF0.7253743710122853 461 | aF0.8724960070727953 462 | aF0.9659258262890635 463 | aF0.9999143275740071 464 | aF0.9723699203976744 465 | aF0.884987637463051 466 | aF0.743144825477398 467 | aF0.5555702330196073 468 | aF0.333806859233777 469 | aF0.09150161866339504 470 | aF-0.15643446504022376 471 | aF-0.3947438563842472 472 | aF-0.6087614290087255 473 | aF-0.7853169308807486 474 | aF-0.9135454576425973 475 | aF-0.9855560590580762 476 | aF-0.9969173337331287 477 | aF-0.9469301294951088 478 | aF-0.8386705679454218 479 | aF-0.6788007455329391 480 | aF-0.47715876025960563 481 | aF-0.2461532930289903 482 | aF-1.1759085194360944e-14 483 | aF0.24615329302898126 484 | aF0.4771587602596224 485 | aF0.6788007455329531 486 | aF0.8386705679454168 487 | aF0.9469301294951012 488 | aF0.996917333733128 489 | aF0.9855560590580777 490 | aF0.9135454576426011 491 | aF0.7853169308807543 492 | aF0.608761429008733 493 | aF0.3947438563842819 494 | aF0.15643446504023295 495 | aF-0.09150161866339991 496 | aF-0.33380685923375486 497 | aF-0.5555702330195995 498 | aF-0.7431448254773918 499 | aF-0.88498763746304 500 | aF-0.9723699203976789 501 | aF-0.9999143275740069 502 | aF-0.9659258262890733 503 | aF-0.8724960070727998 504 | aF-0.7253743710122917 505 | aF-0.5336145159156168 506 | aF-0.30901699437494023 507 | aF-0.0654031292301501 508 | aF0.1822355254921262 509 | aF0.4186597375374339 510 | aF0.6293203910498422 511 | aF0.8012538126910556 512 | aF0.9238795325112833 513 | aF0.9896513868196689 514 | aF0.9945218953682744 515 | aF0.9381913359224827 516 | aF0.8241261886220135 517 | aF0.6593458151000663 518 | aF0.45399049973956945 519 | aF0.22069743502149855 520 | aF-0.026176948307875383 521 | aF-0.27144044986507604 522 | aF-0.5000000000000013 523 | aF-0.6977904598416605 524 | aF-0.8526401643540777 525 | aF-0.9550199444571867 526 | aF-0.9986295347545738 527 | aF-0.9807852804032305 528 | aF-0.902585284349861 529 | aF-0.7688418320734602 530 | aF-0.5877852522924744 531 | aF-0.37055743750983805 532 | aF-0.13052619222005388 533 | aF0.11753739745780672 534 | aF0.3583679495452974 535 | aF0.5771451900372309 536 | aF0.7604059656000285 537 | aF0.8968727415326865 538 | aF0.9781476007338047 539 | aF0.9992290362407231 540 | aF0.9588197348681946 541 | aF0.8594064115014556 542 | aF0.7071067811865518 543 | aF0.5112930860770332 544 | aF0.28401534470392925 545 | aF0.03925981575907587 546 | aF-0.20791169081775185 547 | aF-0.4422886902189941 548 | aF-0.6494480483301773 549 | aF-0.8166415551616575 550 | aF-0.9335804264971985 551 | aF-0.9930684569549252 552 | aF-0.9914448613738117 553 | aF-0.9288095528719176 554 | aF-0.8090169943749537 555 | aF-0.6394390019805933 556 | aF-0.43051109680830546 557 | aF-0.19509032201613985 558 | aF0.05233595624293165 559 | aF0.2965415749755861 560 | aF0.5224985647159378 561 | aF0.7163019434246449 562 | aF0.866025403784446 563 | aF0.9624552364536435 564 | aF0.9996573249755569 565 | aF0.975342320508516 566 | aF0.8910065241883748 567 | aF0.7518398074789877 568 | aF0.5664062369248226 569 | aF0.34611705707748164 570 | aF0.10452846326767014 571 | aF-0.14349262199119045 572 | aF-0.38268343236507363 573 | aF-0.5983246005706446 574 | aF-0.7771459614569773 575 | aF-0.9081431738250854 576 | aF-0.9832549075639511 577 | aF-0.9978589232386029 578 | aF-0.9510565162951509 579 | aF-0.8457278217039688 580 | aF-0.6883545756937482 581 | aF-0.4886212414969732 582 | aF-0.25881904510254133 583 | aF-0.013089595571366132 584 | aF0.23344536385591158 585 | aF0.46561452032511674 586 | aF0.6691306063588413 587 | aF0.8314696123025481 588 | aF0.94264149109218 589 | aF0.9958049275746595 590 | aF0.9876883405951371 591 | aF0.9187912101489081 592 | aF0.7933533402912505 593 | aF0.6190939493098317 594 | aF0.4067366430757979 595 | aF0.16934950384902248 596 | aF-0.07845909572784672 597 | aF-0.321439465303136 598 | aF-0.5446390350150041 599 | aF-0.734322509435686 600 | aF-0.8788171126619655 601 | aF-0.9692309097067544 602 | aF-1.0 603 | aF-0.9692309097067546 604 | aF-0.8788171126619659 605 | aF-0.7343225094356867 606 | aF-0.5446390350150287 607 | aF-0.3214394653031908 608 | aF-0.0784590957278477 609 | aF0.1693495038490215 610 | aF0.406736643075797 611 | aF0.6190939493098533 612 | aF0.7933533402912326 613 | aF0.9187912101488964 614 | aF0.9876883405951324 615 | aF0.9958049275746622 616 | aF0.9426414910921803 617 | aF0.8314696123025487 618 | aF0.6691306063588631 619 | aF0.4656145203251176 620 | aF0.23344536385591252 621 | aF-0.013089595571336737 622 | aF-0.25881904510251297 623 | aF-0.48862124149692276 624 | aF-0.6883545756937476 625 | aF-0.8457278217039683 626 | aF-0.9510565162951506 627 | aF-0.9978589232386047 628 | aF-0.9832549075639565 629 | aF-0.9081431738250858 630 | aF-0.7771459614569779 631 | aF-0.5983246005706683 632 | aF-0.3826834323651007 633 | aF-0.14349262199116333 634 | aF0.1045284632676409 635 | aF0.34611705707748075 636 | aF0.5664062369248453 637 | aF0.751839807478987 638 | aF0.8910065241883615 639 | aF0.9753423205085094 640 | aF0.9996573249755577 641 | aF0.9624552364536514 642 | aF0.8660254037844323 643 | aF0.7163019434246456 644 | aF0.5224985647159629 645 | aF0.29654157497558703 646 | aF0.05233595624296101 647 | aF-0.19509032201611104 648 | aF-0.4305110968082789 649 | aF-0.6394390019805707 650 | aF-0.8090169943749363 651 | aF-0.9288095528719171 652 | aF-0.9914448613738116 653 | aF-0.9930684569549253 654 | aF-0.9335804264971989 655 | aF-0.8166415551616908 656 | aF-0.6494480483301996 657 | aF-0.44228869021902045 658 | aF-0.2079116908177528 659 | aF0.03925981575907489 660 | aF0.284015344703901 661 | aF0.5112930860770569 662 | aF0.7071067811865511 663 | aF0.8594064115014551 664 | aF0.9588197348681943 665 | aF0.999229036240722 666 | aF0.9781476007338108 667 | aF0.8968727415326869 668 | aF0.760405965600029 669 | aF0.5771451900372315 670 | aF0.3583679495452983 671 | aF0.11753739745783594 672 | aF-0.13052619222002473 673 | aF-0.3705574375098371 674 | aF-0.5877852522924737 675 | aF-0.7688418320734597 676 | aF-0.9025852843498483 677 | aF-0.9807852804032303 678 | aF-0.9986295347545739 679 | aF-0.955019944457187 680 | aF-0.8526401643540931 681 | aF-0.697790459841702 682 | aF-0.5000000000000268 683 | aF-0.271440449865077 684 | aF-0.02617694830787636 685 | aF0.2206974350214976 686 | aF0.45399049973954325 687 | aF0.6593458151000655 688 | aF0.824126188622013 689 | aF0.9381913359224824 690 | aF0.9945218953682727 691 | aF0.989651386819671 692 | aF0.9238795325112892 693 | aF0.8012538126910647 694 | aF0.6293203910498429 695 | aF0.4186597375374348 696 | aF0.1822355254921551 697 | aF-0.06540312923013494 698 | aF-0.30901699437493935 699 | aF-0.5336145159156039 700 | aF-0.7253743710122813 701 | aF-0.8724960070728063 702 | aF-0.9659258262890656 703 | aF-0.9999143275740069 704 | aF-0.9723699203976791 705 | aF-0.8849876374630471 706 | aF-0.743144825477402 707 | aF-0.5555702330196122 708 | aF-0.33380685923378256 709 | aF-0.09150161866341504 710 | aF0.15643446504021796 711 | aF0.394743856384281 712 | aF0.6087614290087322 713 | aF0.7853169308807362 714 | aF0.913545457642595 715 | aF0.9855560590580752 716 | aF0.9969173337331292 717 | aF0.9469301294951016 718 | aF0.8386705679454328 719 | aF0.6788007455329539 720 | aF0.4771587602595983 721 | aF0.24615329302900976 722 | aF1.7638627791541416e-14 723 | aF-0.2461532930289756 724 | aF-0.47715876025959225 725 | aF-0.6788007455329279 726 | aF-0.8386705679454292 727 | aF-0.9469301294951085 728 | aF-0.9969173337331286 729 | aF-0.9855560590580763 730 | aF-0.9135454576426093 731 | aF-0.7853169308807579 732 | aF-0.6087614290087151 733 | aF-0.3947438563842612 734 | aF-0.1564344650402528 735 | aF0.09150161866340821 736 | aF0.33380685923377607 737 | aF0.5555702330196064 738 | aF0.7431448254773783 739 | aF0.8849876374630307 740 | aF0.9723699203976709 741 | aF0.9999143275740073 742 | aF0.9659258262890674 743 | aF0.8724960070727958 744 | aF0.725374371012286 745 | aF0.5336145159156098 746 | aF0.30901699437494584 747 | aF0.06540312923017015 748 | aF-0.18223552549214836 749 | aF-0.4186597375374286 750 | aF-0.6293203910498155 751 | aF-0.8012538126910604 752 | aF-0.9238795325112865 753 | aF-0.98965138681967 754 | aF-0.9945218953682735 755 | aF-0.9381913359224946 756 | aF-0.8241261886220169 757 | aF-0.6593458151000922 758 | aF-0.45399049973954936 759 | aF-0.22069743502147657 760 | aF0.026176948307869506 761 | aF0.2714404498650704 762 | aF0.4999999999999962 763 | aF0.6977904598416768 764 | aF0.8526401643540895 765 | aF0.955019944457185 766 | aF0.9986295347545721 767 | aF0.9807852804032317 768 | aF0.9025852843498512 769 | aF0.768841832073464 770 | aF0.5877852522924791 771 | aF0.3705574375098435 772 | aF0.13052619222005973 773 | aF-0.11753739745782912 774 | aF-0.3583679495453184 775 | aF-0.5771451900372261 776 | aF-0.7604059656000246 777 | aF-0.8968727415326964 778 | aF-0.9781476007338035 779 | aF-0.9992290362407233 780 | aF-0.9588197348681882 781 | aF-0.8594064115014586 782 | aF-0.707106781186556 783 | aF-0.5112930860770383 784 | aF-0.28401534470393486 785 | aF-0.03925981575905334 786 | aF0.2079116908177461 787 | aF0.4422886902189888 788 | aF0.6494480483301728 789 | aF0.8166415551616705 790 | aF0.9335804264971963 791 | aF0.9930684569549278 792 | aF0.9914448613738162 793 | aF0.9288095528719302 794 | aF0.8090169943749405 795 | aF0.6394390019805978 796 | aF0.4305110968083108 797 | aF0.19509032201614562 798 | aF-0.05233595624289739 799 | aF-0.29654157497555333 800 | aF-0.5224985647159571 801 | aF-0.7163019434246409 802 | aF-0.866025403784443 803 | aF-0.9624552364536496 804 | aF-0.9996573249755567 805 | aF-0.9753423205085173 806 | aF-0.8910065241883646 807 | aF-0.7518398074789916 808 | aF-0.5664062369248509 809 | aF-0.3461170570774872 810 | aF-0.10452846326767598 811 | aF0.14349262199118468 812 | aF0.38268343236509444 813 | aF0.59832460057064 814 | aF0.7771459614569557 815 | aF0.9081431738250948 816 | aF0.9832549075639501 817 | aF0.9978589232386051 818 | aF0.951056516295144 819 | aF0.8457278217039872 820 | aF0.6883545756937526 821 | aF0.4886212414969536 822 | aF0.258819045102547 823 | aF0.013089595571343593 824 | aF-0.23344536385590586 825 | aF-0.4656145203251115 826 | aF-0.669130606358858 827 | aF-0.8314696123025449 828 | aF-0.942641491092178 829 | aF-0.9958049275746615 830 | aF-0.9876883405951336 831 | aF-0.9187912101489104 832 | aF-0.793353340291254 833 | aF-0.619093949309814 834 | aF-0.40673664307582924 835 | aF-0.16934950384900024 836 | aF0.07845909572784088 837 | aF0.3214394653031304 838 | aF0.544639035015023 839 | aF0.734322509435682 840 | aF0.8788171126619627 841 | aF0.969230909706753 842 | aF1.0 843 | aF0.9692309097067561 844 | aF0.8788171126619688 845 | aF0.7343225094356713 846 | aF0.5446390350150337 847 | aF0.32143946530319634 848 | aF0.0784590957278819 849 | aF-0.1693495038489877 850 | aF-0.4067366430758176 851 | aF-0.619093949309804 852 | aF-0.7933533402912463 853 | aF-0.9187912101488941 854 | aF-0.9876883405951316 855 | aF-0.9958049275746628 856 | aF-0.9426414910921823 857 | aF-0.8314696123025519 858 | aF-0.6691306063588675 859 | aF-0.46561452032512274 860 | aF-0.23344536385591824 861 | aF0.013089595571330857 862 | aF0.25881904510253473 863 | aF0.4886212414969424 864 | aF0.6883545756937227 865 | aF0.8457278217039803 866 | aF0.95105651629514 867 | aF0.9978589232386044 868 | aF0.9832549075639524 869 | aF0.9081431738251001 870 | aF0.7771459614569638 871 | aF0.5983246005706729 872 | aF0.38268343236510616 873 | aF0.14349262199119725 874 | aF-0.10452846326763506 875 | aF-0.34611705707747525 876 | aF-0.566406236924817 877 | aF-0.7518398074789832 878 | aF-0.8910065241883588 879 | aF-0.9753423205085082 880 | aF-0.999657324975557 881 | aF-0.962455236453653 882 | aF-0.8660254037844353 883 | aF-0.7163019434246497 884 | aF-0.5224985647159437 885 | aF-0.29654157497556544 886 | aF-0.05233595624293849 887 | aF0.19509032201613313 888 | aF0.43051109680827365 889 | aF0.6394390019806099 890 | aF0.8090169943749329 891 | aF0.9288095528719149 892 | aF0.9914448613738145 893 | aF0.9930684569549293 894 | aF0.933580426497201 895 | aF0.8166415551616778 896 | aF0.6494480483302041 897 | aF0.44228869021900025 898 | aF0.20791169081775857 899 | aF-0.03925981575906902 900 | aF-0.28401534470392265 901 | aF-0.5112930860770518 902 | aF-0.707106781186547 903 | aF-0.8594064115014521 904 | aF-0.9588197348682007 905 | aF-0.9992290362407218 906 | aF-0.978147600733812 907 | aF-0.8968727415326769 908 | aF-0.7604059656000514 909 | aF-0.5771451900372132 910 | aF-0.35836794954533036 911 | aF-0.11753739745786998 912 | aF0.1305261922200471 913 | aF0.37055743750980524 914 | aF0.5877852522924689 915 | aF0.7688418320734559 916 | aF0.902585284349858 917 | aF0.9807852804032292 918 | aF0.9986295347545743 919 | aF0.9550199444571887 920 | aF0.8526401643540962 921 | aF0.6977904598416859 922 | aF0.5000000000000319 923 | aF0.27144044986511 924 | aF0.026176948307853824 925 | aF-0.22069743502146413 926 | aF-0.45399049973956335 927 | aF-0.6593458151000825 928 | aF-0.8241261886219935 929 | aF-0.9381913359224804 930 | aF-0.9945218953682722 931 | aF-0.9896513868196719 932 | aF-0.9238795325112914 933 | aF-0.8012538126910681 934 | aF-0.6293203910498475 935 | aF-0.4186597375374401 936 | aF-0.18223552549213293 937 | aF0.06540312923012907 938 | aF0.30901699437493374 939 | aF0.533614515915623 940 | aF0.7253743710122577 941 | aF0.8724960070728034 942 | aF0.9659258262890715 943 | aF0.9999143275740064 944 | aF0.9723699203976739 945 | aF0.8849876374630498 946 | aF0.7431448254774059 947 | aF0.555570233019617 948 | aF0.33380685923378806 949 | aF0.0915016186634209 950 | aF-0.15643446504021213 951 | aF-0.3947438563843017 952 | aF-0.608761429008705 953 | aF-0.7853169308807325 954 | aF-0.9135454576426041 955 | aF-0.9855560590580742 956 | aF-0.9969173337331274 957 | aF-0.9469301294951035 958 | aF-0.8386705679454205 959 | aF-0.6788007455329373 960 | aF-0.47715876025960346 961 | aF-0.24615329302898792 962 | aF-2.3518170388721888e-14 963 | aF0.24615329302896988 964 | aF0.4771587602595871 965 | aF0.6788007455329236 966 | aF0.8386705679454414 967 | aF0.9469301294950975 968 | aF0.9969173337331304 969 | aF0.9855560590580773 970 | aF0.9135454576426117 971 | aF0.785316930880744 972 | aF0.6087614290087423 973 | aF0.39474385638426657 974 | aF0.15643446504023054 975 | aF-0.09150161866334576 976 | aF-0.3338068592337705 977 | aF-0.5555702330196015 978 | aF-0.7431448254773935 979 | aF-0.8849876374630411 980 | aF-0.9723699203976696 981 | aF-0.9999143275740074 982 | aF-0.9659258262890763 983 | aF-0.8724960070727847 984 | aF-0.7253743710123095 985 | aF-0.5336145159156388 986 | aF-0.30901699437495145 987 | aF-0.06540312923017601 988 | aF0.18223552549214259 989 | aF0.41865973753742325 990 | aF0.629320391049811 991 | aF0.8012538126910569 992 | aF0.9238795325112843 993 | aF0.9896513868196692 994 | aF0.9945218953682741 995 | aF0.9381913359224868 996 | aF0.8241261886220203 997 | aF0.6593458151000965 998 | aF0.45399049973952926 999 | aF0.22069743502153774 1000 | aF-0.02617694830789204 1001 | aF-0.2714404498650921 1002 | a. -------------------------------------------------------------------------------- /pysstv/tests/common.py: -------------------------------------------------------------------------------- 1 | from os import path 2 | import pickle 3 | 4 | def get_asset_filename(filename): 5 | return path.join(path.dirname(__file__), 'assets', filename) 6 | 7 | def load_pickled_asset(filename): 8 | with open(get_asset_filename(filename + '.p'), 'rb') as f: 9 | return pickle.load(f) 10 | -------------------------------------------------------------------------------- /pysstv/tests/test_color.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from itertools import islice 3 | 4 | from PIL import Image 5 | 6 | from pysstv import color 7 | from pysstv.tests.common import get_asset_filename, load_pickled_asset 8 | 9 | 10 | class TestMartinM1(unittest.TestCase): 11 | 12 | def setUp(self): 13 | self.image = Image.new('RGB', (320, 256)) 14 | self.s = color.MartinM1(self.image, 48000, 16) 15 | lena = Image.open(get_asset_filename('320x256.png')) 16 | self.lena = color.MartinM1(lena, 48000, 16) 17 | 18 | def test_gen_freq_bits(self): 19 | expected = load_pickled_asset("MartinM1_freq_bits") 20 | actual = list(islice(self.s.gen_freq_bits(), 0, 1000)) 21 | self.assertEqual(expected, actual) 22 | 23 | def test_gen_freq_bits_lena(self): 24 | expected = load_pickled_asset("MartinM1_freq_bits_lena") 25 | actual = list(islice(self.lena.gen_freq_bits(), 0, 1000)) 26 | self.assertEqual(expected, actual) 27 | 28 | def test_encode_line(self): 29 | zeroth = list(self.s.encode_line(0)) 30 | first = list(self.s.encode_line(1)) 31 | tenth = list(self.s.encode_line(10)) 32 | eleventh = list(self.s.encode_line(11)) 33 | 34 | self.assertEqual(zeroth, first) 35 | self.assertEqual(tenth, eleventh) 36 | self.assertEqual(zeroth, eleventh) 37 | 38 | def test_encode_line_lena(self): 39 | self.maxDiff = None 40 | line_numbers = [1, 10, 100] 41 | for line in line_numbers: 42 | expected = load_pickled_asset("MartinM1_encode_line_lena{0}".format(line)) 43 | actual = list(self.lena.encode_line(line)) 44 | self.assertEqual(expected, actual) 45 | -------------------------------------------------------------------------------- /pysstv/tests/test_sstv.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from io import BytesIO 3 | from itertools import islice 4 | import mock 5 | from mock import MagicMock 6 | import hashlib 7 | 8 | from pysstv import sstv 9 | from pysstv.sstv import SSTV 10 | from pysstv.tests.common import load_pickled_asset 11 | 12 | 13 | class TestSSTV(unittest.TestCase): 14 | 15 | def setUp(self): 16 | self.s = SSTV(False, 48000, 16) 17 | self.s.VIS_CODE = 0x00 18 | self.s.SYNC = 7 19 | 20 | def test_horizontal_sync(self): 21 | horizontal_sync = self.s.horizontal_sync() 22 | expected = (1200, self.s.SYNC) 23 | actual = next(iter(horizontal_sync)) 24 | self.assertEqual(expected, actual) 25 | 26 | def test_gen_freq_bits(self): 27 | gen_freq_bits = self.s.gen_freq_bits() 28 | expected = [(1900, 300), 29 | (1200, 10), 30 | (1900, 300), 31 | (1200, 30), 32 | (1300, 30), 33 | (1300, 30), 34 | (1300, 30), 35 | (1300, 30), 36 | (1300, 30), 37 | (1300, 30), 38 | (1300, 30), 39 | (1300, 30), 40 | (1200, 30)] 41 | actual = list(islice(gen_freq_bits, 0, 1000)) 42 | self.assertEqual(expected, actual) 43 | 44 | # FIXME: Instead of using a test fixture, 'expected' should be synthesized? 45 | def test_gen_values(self): 46 | gen_values = self.s.gen_values() 47 | expected = load_pickled_asset("SSTV_gen_values") 48 | for e, g in zip(expected, gen_values): 49 | self.assertAlmostEqual(e, g, delta=0.000000001) 50 | 51 | def test_gen_samples(self): 52 | gen_values = self.s.gen_samples() 53 | # gen_samples uses random to avoid quantization noise 54 | # by using additive noise, so there's always a chance 55 | # of running the code two consecutive times on the same machine 56 | # and having different results. 57 | # https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 58 | sstv.random = MagicMock(return_value=0.4) # xkcd:221 59 | expected = load_pickled_asset("SSTV_gen_samples") 60 | actual = list(islice(gen_values, 0, 1000)) 61 | for e, a in zip(expected, actual): 62 | self.assertAlmostEqual(e, a, delta=1) 63 | 64 | def test_write_wav(self): 65 | self.maxDiff = None 66 | bio = BytesIO() 67 | bio.close = MagicMock() # ignore close() so we can .getvalue() 68 | mock_open = MagicMock(return_value=bio) 69 | with mock.patch('builtins.open', mock_open): 70 | self.s.write_wav('unittest.wav') 71 | expected = 'dd7eed880ab3360fb79ce09c469deee2' 72 | data = bio.getvalue() 73 | actual = hashlib.md5(data).hexdigest() 74 | self.assertEqual(expected, actual) 75 | 76 | def test_init(self): 77 | self.assertEqual(self.s.image, False) 78 | self.assertEqual(self.s.samples_per_sec, 48000) 79 | self.assertEqual(self.s.bits, 16) 80 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Pillow==10.3.0 2 | mock==1.0.1 3 | nose==1.3.0 4 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | 3 | from setuptools import setup 4 | 5 | setup( 6 | name='PySSTV', 7 | version='0.5.7', 8 | description='Python classes for generating Slow-scan Television transmissions', 9 | author=u'András Veres-Szentkirályi', 10 | author_email='vsza@vsza.hu', 11 | url='https://github.com/dnet/pySSTV', 12 | packages=['pysstv', 'pysstv.tests', 'pysstv.examples'], 13 | entry_points={ 14 | 'console_scripts': [ 15 | 'pysstv = pysstv.__main__:main', 16 | ], 17 | }, 18 | keywords='HAM SSTV slow-scan television Scottie Martin Robot Pasokon', 19 | install_requires = ['Pillow'], 20 | license='MIT', 21 | classifiers=[ 22 | 'Development Status :: 4 - Beta', 23 | 'Topic :: Communications :: Ham Radio', 24 | 'Topic :: Multimedia :: Video :: Conversion', 25 | 'License :: OSI Approved :: MIT License', 26 | 'Operating System :: OS Independent', 27 | ], 28 | long_description=open('README.md').read(), 29 | long_description_content_type="text/markdown", 30 | ) 31 | --------------------------------------------------------------------------------