endolith / waveform-analysis

Functions and scripts for analyzing waveforms, primarily audio. This is currently somewhat disorganized and unfinished.
MIT License
255 stars 82 forks source link

THD calculation seems off by a lot #27

Open ftab opened 2 months ago

ftab commented 2 months ago

I'm having trouble getting a good THD / THD+N calculation from either THD() or THDN().

If you have a moment, could you take a look at this sample code/data and tell me why?

I'm trying to get a distortion figure on a 1khz sine wave on a device where an HP 8920b told me the THD was about 0.056%

However I am fresh out of 8920s to share and need to concoct as good a result as I can using...an 8 bit USB scope and a Raspberry Pi with Python!

Output:

Frequency: 1000.729392 Hz
fundamental amplitude: 300737.188
36118.519 117.290 24.098 128.721 52.875 156.427 66.371 25.883 140.883 73.748 129.345 87.715 131.846 
THD: 12.387467%
0.9079618095454111
import matplotlib.pyplot as plt
import numpy as np
from waveform_analysis import thd

t = np.arange(0.0, 0.005, 1/1000000)
s = [1, 1, 2, 3, 3, 4, 4, 6, 7, 7, 9, 9, 10, 11, 12, 11, 12, 13, 14, 15, 16, 16, 17, 18, 18, 19, 20, 20, 22, 23, 24, 24, 25, 25, 25, 27, 28, 29, 29, 29, 30, 32, 31, 33, 33, 34, 35, 35, 36, 37, 38, 40, 39, 40, 41, 41, 42, 43, 43, 44, 45, 45, 46, 46, 48, 49, 49, 49, 50, 51, 52, 52, 53, 54, 55, 56, 56, 56, 57, 57, 59, 58, 58, 60, 61, 62, 62, 63, 64, 65, 65, 65, 66, 67, 68, 69, 68, 69, 71, 71, 72, 71, 72, 73, 73, 74, 74, 75, 77, 77, 78, 78, 79, 80, 80, 80, 80, 81, 82, 83, 83, 82, 83, 84, 86, 85, 85, 86, 87, 88, 88, 89, 89, 90, 91, 91, 91, 92, 94, 94, 93, 92, 94, 96, 94, 95, 95, 96, 97, 97, 98, 97, 99, 100, 100, 100, 101, 102, 103, 102, 101, 102, 103, 104, 104, 103, 104, 105, 106, 105, 105, 105, 106, 108, 107, 106, 108, 109, 110, 109, 110, 110, 111, 112, 111, 110, 111, 111, 112, 111, 112, 112, 112, 113, 112, 112, 113, 114, 115, 114, 114, 116, 116, 117, 116, 116, 117, 116, 117, 116, 116, 117, 117, 118, 115, 116, 118, 118, 118, 117, 117, 119, 120, 120, 119, 119, 119, 120, 120, 118, 119, 120, 120, 119, 119, 119, 120, 119, 120, 119, 120, 120, 121, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 121, 119, 119, 119, 119, 120, 120, 119, 120, 120, 121, 120, 120, 120, 120, 121, 120, 119, 119, 119, 120, 118, 118, 118, 118, 118, 118, 116, 116, 118, 118, 116, 116, 117, 117, 117, 116, 115, 116, 116, 117, 114, 114, 115, 115, 114, 112, 112, 113, 113, 113, 111, 111, 112, 112, 112, 110, 110, 111, 112, 111, 109, 110, 110, 110, 109, 108, 108, 107, 108, 106, 105, 105, 106, 106, 105, 103, 104, 105, 104, 104, 103, 103, 103, 102, 101, 101, 101, 101, 100, 99, 97, 98, 97, 96, 96, 95, 94, 95, 96, 93, 94, 94, 94, 93, 92, 92, 92, 92, 90, 89, 89, 89, 88, 87, 86, 86, 85, 86, 84, 83, 84, 84, 84, 82, 81, 81, 82, 82, 80, 79, 79, 78, 78, 76, 76, 76, 75, 74, 72, 71, 72, 72, 71, 70, 70, 70, 69, 69, 68, 67, 68, 67, 65, 65, 64, 63, 62, 62, 60, 60, 59, 60, 57, 57, 57, 57, 56, 55, 54, 54, 54, 53, 52, 51, 51, 50, 49, 48, 47, 47, 46, 46, 44, 43, 43, 42, 42, 41, 40, 40, 39, 39, 37, 37, 37, 36, 35, 34, 33, 33, 32, 31, 30, 29, 29, 28, 27, 26, 26, 26, 24, 24, 22, 22, 22, 21, 20, 20, 19, 18, 17, 16, 14, 14, 15, 13, 12, 12, 11, 10, 10, 9, 8, 7, 7, 5, 5, 5, 3, 3, 1, 0, 0, -1, -2, -2, -2, -3, -3, -4, -5, -6, -6, -8, -8, -9, -10, -11, -12, -13, -13, -14, -15, -16, -17, -18, -18, -19, -20, -20, -22, -20, -23, -23, -24, -23, -25, -26, -26, -28, -29, -28, -29, -31, -31, -31, -32, -34, -35, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -42, -43, -42, -44, -46, -46, -47, -47, -48, -49, -49, -50, -50, -51, -52, -52, -52, -53, -55, -55, -56, -56, -56, -56, -59, -59, -59, -59, -61, -62, -62, -62, -64, -65, -65, -66, -66, -67, -67, -69, -68, -68, -69, -70, -72, -71, -72, -73, -73, -74, -75, -74, -76, -77, -78, -77, -78, -79, -80, -81, -80, -80, -82, -82, -83, -82, -83, -84, -85, -86, -84, -86, -87, -87, -89, -88, -88, -90, -90, -91, -91, -92, -92, -94, -94, -93, -94, -95, -95, -96, -95, -96, -97, -97, -98, -97, -98, -100, -100, -99, -100, -101, -102, -103, -103, -101, -103, -105, -104, -104, -103, -104, -105, -105, -105, -105, -106, -108, -107, -107, -108, -108, -110, -110, -110, -109, -111, -111, -110, -110, -110, -111, -112, -111, -111, -112, -112, -113, -112, -112, -113, -114, -115, -114, -114, -115, -117, -117, -116, -115, -116, -117, -118, -115, -115, -116, -116, -118, -116, -116, -117, -118, -119, -118, -118, -119, -120, -120, -119, -119, -120, -120, -121, -119, -119, -120, -120, -119, -118, -118, -119, -120, -119, -118, -119, -121, -120, -121, -120, -120, -122, -121, -121, -119, -121, -121, -120, -121, -120, -119, -121, -120, -119, -119, -119, -120, -120, -120, -119, -119, -120, -120, -120, -119, -120, -120, -120, -119, -119, -119, -119, -119, -118, -116, -118, -118, -118, -116, -116, -117, -118, -116, -117, -116, -117, -118, -116, -116, -116, -116, -117, -115, -114, -114, -114, -115, -114, -112, -113, -113, -113, -112, -111, -112, -112, -113, -111, -110, -112, -111, -111, -110, -110, -110, -110, -109, -108, -108, -108, -107, -108, -105, -105, -106, -105, -106, -104, -104, -105, -104, -104, -103, -103, -103, -103, -102, -100, -100, -101, -100, -99, -97, -98, -98, -98, -96, -95, -95, -96, -95, -94, -94, -95, -94, -94, -93, -91, -92, -92, -91, -89, -88, -88, -89, -88, -87, -87, -86, -86, -84, -84, -83, -83, -84, -82, -82, -81, -81, -81, -79, -78, -78, -79, -78, -76, -75, -75, -74, -75, -73, -72, -72, -72, -72, -70, -69, -69, -70, -69, -67, -66, -66, -66, -65, -64, -63, -64, -63, -63, -60, -60, -59, -58, -58, -57, -56, -56, -55, -56, -55, -53, -54, -53, -52, -51, -51, -50, -49, -49, -47, -47, -46, -45, -45, -43, -42, -42, -42, -42, -40, -40, -39, -39, -38, -36, -36, -36, -35, -34, -33, -33, -32, -31, -31, -29, -28, -28, -28, -26, -26, -25, -24, -24, -23, -22, -21, -22, -20, -19, -18, -17, -17, -16, -15, -15, -14, -13, -12, -12, -11, -11, -10, -9, -9, -7, -7, -6, -4, -5, -3, -3, -2, -1, 1, 1, 1, 3, 2, 2, 4, 5, 6, 6, 7, 7, 7, 8, 10, 10, 11, 12, 14, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 22, 22, 22, 23, 24, 25, 25, 26, 27, 27, 28, 29, 30, 32, 32, 32, 33, 35, 36, 36, 36, 36, 37, 38, 39, 39, 40, 41, 41, 43, 42, 44, 45, 45, 46, 46, 48, 49, 50, 51, 50, 51, 52, 53, 54, 53, 54, 55, 55, 56, 56, 57, 58, 59, 60, 60, 62, 63, 63, 64, 63, 65, 65, 66, 66, 67, 67, 69, 69, 69, 69, 70, 71, 71, 72, 72, 73, 75, 76, 75, 75, 77, 79, 78, 78, 78, 80, 80, 80, 80, 81, 82, 83, 82, 82, 83, 85, 86, 86, 86, 87, 88, 90, 89, 89, 90, 89, 92, 91, 91, 92, 93, 93, 93, 93, 94, 94, 96, 95, 95, 97, 97, 98, 99, 98, 99, 100, 100, 100, 100, 102, 102, 102, 102, 102, 103, 104, 104, 103, 104, 105, 106, 105, 105, 106, 107, 108, 108, 108, 108, 109, 110, 110, 109, 110, 111, 111, 111, 110, 110, 112, 112, 112, 112, 112, 113, 113, 113, 113, 114, 116, 116, 115, 115, 116, 117, 117, 116, 116, 116, 117, 117, 116, 116, 117, 118, 116, 116, 117, 117, 119, 118, 118, 118, 119, 121, 120, 120, 119, 120, 120, 120, 119, 118, 119, 120, 119, 119, 119, 120, 120, 119, 119, 120, 121, 122, 120, 120, 121, 121, 122, 120, 119, 120, 121, 121, 119, 119, 120, 120, 120, 120, 119, 120, 121, 120, 120, 120, 121, 121, 120, 120, 119, 120, 120, 119, 118, 118, 119, 119, 118, 117, 118, 118, 118, 118, 118, 117, 117, 118, 117, 117, 118, 117, 117, 116, 115, 116, 116, 115, 115, 113, 115, 114, 114, 113, 113, 113, 114, 112, 113, 111, 112, 113, 112, 111, 110, 111, 111, 110, 109, 109, 109, 109, 108, 107, 108, 107, 108, 106, 105, 105, 105, 105, 104, 104, 104, 104, 104, 102, 102, 103, 102, 103, 100, 99, 100, 100, 99, 97, 97, 98, 97, 96, 96, 95, 96, 95, 96, 93, 93, 94, 94, 94, 92, 90, 92, 91, 90, 88, 88, 88, 88, 86, 85, 86, 86, 86, 84, 83, 83, 84, 83, 82, 81, 81, 81, 80, 78, 78, 78, 77, 77, 76, 74, 75, 75, 75, 72, 72, 72, 72, 71, 70, 70, 70, 69, 68, 67, 67, 66, 65, 65, 63, 63, 63, 62, 60, 59, 60, 60, 59, 57, 57, 57, 56, 56, 55, 53, 54, 53, 52, 52, 50, 50, 49, 48, 47, 46, 46, 46, 45, 43, 43, 43, 42, 42, 40, 40, 40, 39, 39, 37, 36, 36, 35, 35, 33, 32, 31, 31, 30, 29, 29, 28, 28, 27, 26, 25, 25, 24, 22, 22, 22, 22, 20, 20, 18, 17, 17, 17, 16, 15, 14, 13, 13, 12, 11, 11, 9, 9, 8, 8, 7, 6, 6, 5, 3, 2, 1, 1, 0, -1, -1, -2, -3, -4, -5, -6, -6, -6, -7, -7, -9, -10, -10, -10, -11, -13, -14, -14, -15, -15, -17, -18, -18, -18, -19, -20, -21, -22, -22, -23, -23, -24, -24, -25, -26, -28, -29, -28, -29, -30, -31, -32, -33, -33, -34, -35, -36, -36, -36, -38, -38, -39, -39, -39, -41, -41, -43, -43, -43, -44, -45, -46, -47, -47, -48, -50, -50, -50, -50, -51, -53, -53, -53, -53, -55, -55, -56, -56, -56, -58, -59, -60, -60, -61, -62, -62, -64, -63, -64, -65, -66, -66, -66, -67, -68, -70, -69, -68, -69, -71, -72, -72, -72, -73, -74, -75, -76, -76, -77, -78, -78, -79, -79, -79, -80, -81, -81, -80, -82, -82, -83, -83, -83, -84, -86, -86, -86, -87, -88, -88, -88, -89, -89, -91, -91, -90, -91, -91, -92, -94, -94, -93, -93, -94, -95, -95, -96, -97, -97, -98, -98, -97, -100, -100, -101, -100, -100, -102, -102, -103, -101, -102, -103, -104, -104, -103, -103, -105, -105, -106, -105, -105, -106, -107, -108, -107, -108, -110, -110, -110, -109, -109, -111, -111, -111, -109, -110, -111, -111, -111, -110, -112, -114, -113, -113, -113, -114, -115, -116, -116, -115, -115, -116, -116, -116, -115, -115, -117, -116, -115, -116, -117, -117, -117, -116, -116, -118, -119, -119, -119, -119, -119, -121, -120, -120, -119, -120, -120, -119, -120, -119, -118, -120, -119, -119, -119, -119, -120, -120, -120, -120, -121, -122, -121, -120, -121, -121, -121, -120, -120, -120, -120, -120, -119, -119, -119, -119, -121, -120, -119, -120, -120, -122, -120, -119, -121, -121, -121, -119, -119, -119, -119, -120, -119, -119, -118, -119, -119, -117, -117, -119, -118, -118, -117, -117, -119, -118, -117, -116, -116, -117, -118, -116, -115, -115, -115, -115, -114, -114, -114, -114, -114, -113, -113, -113, -114, -113, -112, -111, -111, -112, -112, -111, -109, -111, -111, -110, -109, -108, -109, -110, -108, -107, -107, -107, -107, -106, -106, -105, -106, -106, -105, -104, -104, -104, -105, -103, -102, -102, -103, -102, -100, -100, -100, -99, -99, -98, -97, -97, -97, -97, -95, -95, -95, -95, -96, -94, -93, -94, -94, -94, -92, -90, -91, -90, -90, -88, -87, -88, -87, -87, -85, -84, -85, -84, -85, -84, -82, -84, -84, -82, -81, -80, -81, -80, -80, -78, -77, -77, -76, -76, -74, -74, -74, -74, -74, -72, -71, -72, -71, -71, -69, -69, -69, -68, -67, -66, -66, -66, -65, -63, -61, -61, -61, -60, -59, -58, -59, -60, -58, -56, -56, -56, -56, -55, -54, -53, -53, -53, -52, -50, -50, -50, -48, -47, -46, -45, -45, -45, -44, -42, -42, -42, -42, -41, -40, -39, -39, -39, -36, -36, -36, -35, -34, -33, -32, -32, -31, -31, -29, -28, -28, -27, -26, -26, -25, -25, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -16, -15, -14, -13, -12, -11, -11, -10, -10, -9, -9, -7, -7, -6, -5, -4, -4, -2, -2, -1, 0, 1, 1, 1, 3, 3, 4, 6, 6, 6, 7, 8, 8, 9, 10, 10, 12, 12, 12, 14, 15, 16, 16, 17, 18, 18, 19, 21, 21, 22, 22, 22, 23, 25, 24, 25, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 34, 35, 36, 36, 36, 37, 38, 39, 40, 40, 40, 41, 42, 42, 44, 45, 45, 47, 48, 47, 48, 49, 50, 50, 50, 51, 52, 53, 53, 54, 54, 55, 56, 56, 56, 58, 59, 61, 60, 61, 62, 63, 63, 64, 64, 65, 65, 66, 66, 66, 67, 69, 70, 70, 70, 72, 72, 73, 72, 74, 75, 75, 76, 75, 77, 78, 78, 78, 78, 79, 80, 80, 81, 80, 81, 82, 83, 84, 83, 84, 86, 86, 87, 86, 87, 89, 90, 89, 89, 90, 91, 92, 91, 91, 92, 94, 93, 93, 93, 95, 95, 96, 96, 96, 97, 98, 100, 98, 99, 100, 101, 101, 101, 101, 102, 102, 101, 102, 102, 103, 104, 103, 104, 104, 105, 106, 106, 106, 107, 107, 109, 108, 108, 109, 109, 111, 109, 109, 110, 111, 111, 110, 110, 110, 111, 112, 112, 112, 113, 113, 115, 114, 114, 115, 116, 116, 115, 115, 116, 116, 117, 115, 115, 116, 116, 116, 116, 116, 117, 117, 118, 117, 118, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 120, 118, 118, 118, 119, 119, 119, 118, 119, 121, 121, 120, 119, 120, 122, 121, 121, 120, 121, 121, 121, 119, 118, 120, 121, 120, 120, 119, 120, 121, 120, 120, 119, 120, 122, 121, 120, 119, 120, 121, 119, 118, 119, 120, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 119, 117, 119, 117, 117, 117, 117, 117, 117, 115, 116, 115, 115, 114, 114, 115, 114, 114, 112, 112, 113, 113, 112, 112, 112, 112, 113, 112, 111, 110, 111, 111, 110, 109, 109, 110, 109, 107, 106, 107, 108, 107, 105, 105, 105, 106, 105, 103, 103, 104, 105, 104, 102, 101, 102, 102, 102, 100, 99, 100, 100, 98, 97, 97, 97, 97, 97, 95, 95, 96, 96, 95, 94, 94, 94, 94, 93, 92, 92, 91, 90, 89, 87, 87, 86, 88, 86, 85, 85, 85, 85, 84, 84, 84, 83, 83, 81, 81, 82, 80, 79, 78, 77, 77, 77, 76, 74, 74, 74, 73, 73, 72, 72, 72, 72, 71, 69, 69, 70, 68, 67, 65, 66, 65, 64, 64, 62, 62, 62, 60, 61, 59, 58, 59, 58, 57, 57, 57, 56, 56, 53, 54, 53, 53, 51, 50, 49, 48, 48, 48, 46, 46, 46, 45, 45, 43, 43, 43, 41, 41, 40, 39, 40, 39, 38, 36, 35, 35, 35, 34, 33, 32, 31, 31, 30, 28, 28, 28, 27, 26, 24, 25, 24, 23, 22, 21, 21, 20, 20, 20, 18, 18, 17, 16, 15, 14, 14, 13, 12, 11, 10, 10, 9, 9, 8, 6, 6, 5, 5, 4, 3, 2, 1, 0, -1, -1, -2, -2, -3, -3, -4, -6, -6, -6, -7, -7, -9, -9, -10, -11, -11, -13, -14, -15, -15, -16, -18, -18, -18, -20, -20, -20, -22, -22, -22, -24, -24, -24, -26, -25, -26, -28, -28, -30, -30, -32, -33, -32, -33, -34, -34, -36, -36, -36, -38, -39, -39, -39, -40, -40, -40, -42, -43, -44, -44, -45, -46, -47, -47, -47, -48, -50, -50, -51, -51, -52, -53, -53, -52, -54, -55, -56, -56, -56, -57, -59, -60, -60, -60, -62, -63, -64, -64, -64, -64, -66, -67, -66, -66, -67, -68, -69, -68, -69, -70, -71, -73, -72, -72, -74, -74, -77, -75, -76, -77, -79, -79, -79, -78, -80, -80, -80, -80, -79, -81, -83, -83, -83, -84, -86, -87, -87, -86, -87, -89, -90, -90, -89, -90, -91, -91, -91, -91, -92, -93, -93, -94, -93, -94, -96, -96, -96, -96, -97, -99, -99, -98, -98, -99, -100, -100, -101, -100, -101, -103, -102, -101, -102, -102, -104, -104, -104, -103, -105, -106, -106, -106, -107, -108, -108, -107, -107, -108, -109, -110, -108, -108, -110, -110, -111, -109, -110, -110, -111, -112, -111, -111, -114, -114, -114, -114, -113, -115, -115, -115, -114, -114, -116, -116, -117, -114, -114, -116, -116, -117, -115, -116, -118, -117, -117, -117, -117, -118, -119, -119, -118, -118, -119, -119, -119, -118, -118, -119, -119, -119, -119, -118, -120, -119, -120, -119, -119, -121, -120, -120, -120, -120, -121, -121, -121, -119, -119, -121, -120, -120, -120, -120, -121, -120, -119, -119, -119, -120, -120, -119, -119, -119, -121, -120, -119, -119, -120, -121, -120, -119, -119, -120, -119, -119, -118, -118, -118, -119, -118, -118, -117, -117, -118, -117, -116, -117, -118, -118, -117, -116, -116, -116, -117, -115, -114, -116, -115, -115, -113, -114, -114, -114, -114, -113, -112, -114, -112, -113, -111, -111, -113, -112, -112, -111, -110, -111, -110, -110, -108, -108, -109, -108, -108, -106, -106, -107, -107, -106, -105, -106, -107, -106, -105, -104, -104, -104, -103, -102, -102, -102, -103, -100, -99, -98, -99, -100, -98, -97, -96, -98, -98, -96, -96, -95, -95, -96, -94, -94, -93, -94, -93, -91, -90, -89, -89, -90, -89, -87, -88, -87, -88, -87, -86, -84, -85, -85, -84, -83, -83, -82, -83, -81, -80, -79, -79, -79, -78, -76, -77, -76, -77, -74, -74, -75, -74, -74, -73, -72, -73, -72, -71, -70, -68, -68, -68, -67, -65, -64, -65, -65, -64, -62, -62, -62, -61, -60, -58, -59, -59, -58, -58, -56, -56, -56, -55, -54, -53, -53, -53, -51, -50, -49, -49, -49, -47, -46, -45, -46, -45, -45, -44, -42, -42, -42, -41, -40, -39, -38, -38, -38, -37, -35, -35, -35, -32, -32, -31, -31, -31, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -20, -18, -18, -16, -16, -16, -15, -14, -14, -12, -12, -11, -10, -10, -9, -9, -8, -7, -7, -6, -4, -3, -3, -1, -1, 0, 1, 1, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 22, 23, 24, 25, 25, 26, 27, 27, 29, 29, 30, 31, 32, 34, 33, 33, 35, 36, 36, 37, 37, 38, 39, 39, 40, 41, 41, 42, 44, 44, 44, 46, 46, 47, 48, 48, 49, 49, 50, 52, 51, 53, 53, 54, 54, 54, 55, 56, 56, 57, 57, 60, 60, 60, 61, 62, 62, 65, 65, 64, 65, 65, 66, 66, 66, 67, 68, 69, 69, 70, 71, 72, 73, 73, 73, 75, 76, 76, 76, 76, 78, 79, 78, 78, 79, 79, 80, 81, 80, 81, 82, 83, 84, 83, 84, 86, 86, 87, 86, 87, 89, 90, 90, 89, 88, 91, 91, 91, 91, 92, 94, 94, 93, 93, 94, 96, 95, 97, 97, 97, 98, 99, 99, 98, 99, 100, 101, 100, 100, 101, 102, 101, 102, 101, 103, 104, 104, 104, 104, 106, 107, 106, 107, 106, 107, 109, 109, 108, 108, 109, 110, 110, 108, 110, 110, 111, 110, 111, 110, 112, 113, 112, 112, 113, 115, 114, 114, 114, 114, 116, 116, 115, 115, 114, 115, 116, 115, 116, 115, 116, 117, 115, 115, 118, 118, 118, 118, 118, 120, 119, 120, 118, 119, 118, 120, 119, 118, 119, 119, 119, 118, 118, 118, 120, 121, 120, 119, 119, 121, 121, 121, 120, 120, 122, 121, 121, 120, 120, 121, 120, 120, 119, 120, 121, 119, 120, 120, 120, 121, 121, 120, 120, 121, 121, 120, 119, 120, 121, 121, 120, 118, 119, 119, 120, 118, 118, 118, 118, 119, 118, 118, 118, 119, 119, 118, 118, 118, 118, 118, 116, 117, 116, 117, 117, 115, 114, 115, 115, 115, 113, 113, 114, 114, 114, 113, 113, 113, 114, 114, 112, 113, 113, 113, 113, 110, 110, 111, 110, 109, 109, 108, 108, 108, 108, 107, 106, 108, 107, 106, 105, 106, 107, 106, 105, 105, 104, 104, 103, 103, 102, 102, 102, 101, 99, 99, 100, 100, 98, 97, 97, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 94, 94, 92, 90, 89, 90, 90, 88, 88, 88, 87, 89, 86, 86, 87, 86, 86, 84, 84, 84, 84, 83, 81, 81, 81, 80, 79, 77, 77, 78, 77, 76, 74, 75, 75, 74, 74, 72, 73, 72, 72, 71, 69, 69, 69, 69, 68, 66, 66, 65, 65, 63, 63, 62, 62, 61, 61, 60, 59, 59, 59, 57, 56, 57, 56, 55, 54, 54, 53, 53, 52, 50, 50, 48, 49, 48, 47, 46, 46, 46, 45, 44, 43, 43, 42, 42, 40, 40, 40, 38, 38, 37, 36, 35, 35, 33, 32, 32, 32, 31, 31, 29, 28, 28, 26, 26, 25, 25, 24, 24, 23, 22, 22, 21, 20, 20, 17, 17, 17, 16, 15, 14, 14, 13, 12, 12, 10, 10, 10, 9, 8, 8, 6, 6, 4, 4, 2, 2, 1, 0, -1, -2, -2, -2, -4, -4, -4, -5, -6, -7, -7, -8, -9, -10, -10, -10, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -19, -21, -20, -23, -22, -23, -24, -24, -25, -26, -27, -28, -28, -30, -30, -30, -32, -33, -33, -33, -34, -36, -36, -36, -36, -38, -39, -40, -40, -40, -42, -43, -43, -44, -44, -45, -46, -46, -47, -47, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -55, -56, -56, -57, -58, -59, -60, -61, -60, -61, -61, -64, -63, -63, -64, -65, -67, -66, -66, -68, -68, -69, -69, -70, -70, -72, -72, -72, -73, -74, -75, -75, -76, -76, -78, -78, -78, -78, -78, -80, -80, -80, -81, -81, -83, -83, -84, -83, -83, -86, -86, -87, -86, -88, -88, -88, -90, -88, -89, -91, -91, -91, -91, -91, -93, -93, -92, -92, -93, -96, -96, -97, -97, -96, -98, -98, -98, -98, -100, -100, -100, -100, -100, -101, -103, -102, -102, -102, -102, -104, -104, -103, -104, -105, -107, -107, -107, -106, -108, -109, -108, -108, -108, -109, -110, -109, -108, -108, -109, -110, -109, -110, -110, -111, -113, -111, -113, -113, -114, -115, -114, -113, -115, -114, -115, -114, -114, -114, -115, -115, -114, -114, -115, -115, -117, -115, -116, -117, -118, -119, -117, -117, -119, -119, -119, -117, -118, -119, -119, -119, -118, -118, -118, -119, -119, -118, -119, -119, -120, -120, -119, -120, -120, -121, -121, -120, -120, -121, -121, -120, -119, -119, -120, -120, -119, -119, -119, -120, -120, -119, -119, -120, -120, -120, -120, -120, -120, -122, -120, -120, -119, -120, -121, -119, -119, -119, -118, -119, -119, -118, -118, -118, -120, -118, -118, -118, -117, -118, -118, -118, -118, -117, -118, -116, -116, -117, -116, -116, -115, -114, -115, -114, -115, -113, -114, -114, -114, -114, -112, -113, -114, -113, -113, -112, -111, -112, -112, -112, -110, -109, -111, -110, -109, -108, -108, -108, -108, -108, -107, -106, -108, -107, -107, -106, -106, -106, -106, -106, -103, -103, -104, -103, -103, -101, -101, -101, -101, -100, -99, -98, -100, -99, -98, -98, -98, -98, -97, -95, -95, -95, -96, -95, -94, -93, -93, -93, -92, -90, -90, -89, -91, -89, -88, -87, -88, -88, -87, -85, -85, -84, -86, -84, -83, -82, -83, -82, -80, -80, -80, -80, -80, -78, -78, -78, -77, -77, -74, -74, -74, -74, -74, -73, -72, -73, -71, -71, -68, -69, -68, -68, -68, -66, -65, -65, -64, -64, -63, -62, -63, -61, -61, -59, -60, -59, -60, -58, -56, -56, -56, -55, -55, -52, -52, -52, -50, -51, -50, -48, -48, -47, -47, -46, -46, -45, -45, -44, -42, -43, -42, -41, -40, -39, -38, -38, -36, -36, -35, -34, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -28, -26, -25, -25, -24, -24, -23, -22, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -12, -12, -11, -10, -10, -8, -8, -7, -6, -5, -5, -3, -2, -2, -2, 0, 0, 2, 2, 2, 3, 5, 4, 5, 6, 6, 7, 8, 9, 10, 10, 11, 12, 14, 14, 14, 15, 16, 17, 18, 18, 18, 19, 21, 21, 22, 22, 23, 23, 25, 25, 26, 28, 28, 29, 29, 30, 30, 32, 32, 33, 33, 34, 35, 36, 37, 36, 38, 38, 40, 40, 40, 42, 43, 44, 44, 44, 46, 46, 47, 47, 48, 48, 49, 50, 50, 50, 52, 52, 54, 53, 54, 56, 56, 57, 57, 57, 59, 61, 61, 61, 62, 61, 64, 64, 63, 64, 65, 66, 67, 67, 67, 69, 69, 70, 69, 70, 72, 73, 73, 73, 74, 75, 76, 76, 76, 77, 78, 78, 78, 78, 79, 80, 81, 81, 81, 83, 84, 84, 84, 84, 86, 86, 87, 87, 87, 88, 89, 89, 89, 88, 90, 91, 92, 91, 92, 94, 94, 94, 94, 94, 96, 97, 97, 96, 97, 98, 99, 98, 98, 99, 100, 101, 101, 100, 100, 102, 103, 102, 102, 103, 104, 105, 104, 105, 106, 107, 107, 106, 107, 107, 109, 108, 108, 107, 109, 109, 109, 108, 109, 110, 110, 111, 111, 110, 111, 113, 113, 112, 113, 114, 115, 114, 113, 114, 116, 115, 114, 114, 114, 115, 116, 114, 114, 116, 117, 118, 117, 117, 118, 118, 118, 118, 118, 120, 120, 120, 118, 118, 118, 119, 119, 118, 117, 119, 119, 118, 118, 118, 120, 120, 121, 120, 120, 121, 121, 121, 120, 120, 121, 120, 120, 120, 118, 120, 119, 119, 119, 120, 121, 121, 121, 120, 121, 122, 122, 121, 120, 121, 121, 120, 120, 119, 119, 120, 119, 118, 119, 118, 120, 119, 118, 118, 119, 120, 120, 118, 118, 119, 120, 118, 118, 117, 118, 118, 116, 116, 116, 116, 117, 116, 115, 116, 116, 115, 115, 113, 115, 116, 115, 113, 114, 114, 114, 114, 112, 111, 112, 113, 111, 110, 109, 110, 110, 110, 109, 108, 109, 109, 108, 107, 107, 108, 107, 106, 106, 105, 106, 106, 105, 105, 104, 105, 104, 103, 102, 101, 101, 101, 100, 99, 99, 100, 100, 98, 97, 98, 98, 97, 97, 96, 96, 96, 96, 94, 93, 93, 93, 92, 91, 91, 90, 91, 89, 88, 88, 87, 88, 87, 86, 87, 86, 86, 84, 84, 84, 83, 83, 81, 80, 80, 80, 80, 78, 77, 77, 78, 77, 76, 75, 75, 74, 74, 73, 72, 73, 73, 71, 69, 68, 69, 68, 66, 65, 65, 65, 64, 64, 62, 62, 62, 62, 62, 60, 60, 60, 58, 59, 57, 57, 56, 55, 55, 53, 52, 52, 51, 50, 49, 48, 48, 48, 47, 46, 46, 46, 46, 44, 44, 42, 41, 42, 40, 39, 39, 38, 37, 36, 35, 35, 35, 33, 33, 33, 32, 31, 30, 30, 29, 29, 27, 26, 26, 25, 25, 24, 22, 22, 21, 20, 20, 19, 17, 17, 17, 16, 15, 14, 14, 14, 12, 12, 11, 10, 10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 1, 0, 0, -1, -1, -2, -3, -4, -4, -5, -6, -6, -7, -8, -9, -9, -10, -11, -12, -13, -13, -14, -15, -16, -17, -17, -18, -19, -20, -21, -20, -22, -22, -23, -25, -25, -25, -26, -26, -27, -28, -29, -29, -30, -32, -32, -33, -33, -34, -35, -35, -37, -36, -38, -39, -39, -40, -40, -42, -43, -43, -44, -44, -44, -46, -47, -47, -47, -48, -50, -49, -51, -50, -51, -53, -53, -53, -54, -55, -56, -56, -57, -58, -58, -60, -60, -60, -60, -61, -62, -63, -63, -63, -65, -66, -66, -66, -66, -68, -70, -69, -70, -71, -71, -73, -72, -73, -73, -74, -76, -74, -76, -76, -78, -78, -78, -78, -79, -80, -81, -81, -80, -82, -83, -84, -84, -84, -86, -86, -87, -86, -86, -88, -88, -89, -88, -88, -90, -90, -92, -90, -91, -92, -93, -94, -94, -94, -95, -96, -96, -96, -97, -98, -99, -98, -98, -99, -100, -100, -100, -99, -100, -102, -101, -101, -102, -102, -104, -104, -104, -104, -105, -106, -107, -107, -107, -108, -108, -107, -107, -107, -109, -109, -109, -109, -109, -110, -111, -110, -111, -111, -112, -112, -113, -112, -113, -113, -115, -114, -114, -114, -114, -114, -115, -114, -114, -114, -116, -115, -114, -116, -116, -118, -116, -117, -118, -118, -119, -118, -118, -118, -118, -119, -118, -118, -118, -118, -119, -118, -117, -118, -119, -120, -118, -118, -120, -120, -121, -120, -120, -120, -122, -122, -120, -121, -121, -120, -120, -119, -119, -120, -120, -120, -119, -119, -120, -120, -121, -120, -120, -122, -121, -121, -120, -120, -121, -121, -120, -119, -120, -120, -118, -119, -118, -118, -120, -118, -119, -118, -118, -120, -118, -119, -118, -118, -119, -119, -117, -117, -117, -118, -118, -116, -115, -116, -116, -114, -115, -114, -114, -115, -115, -114, -114, -114, -114, -114, -114, -113, -114, -114, -112, -111, -112, -112, -112, -111, -109, -110, -109, -110, -109, -108, -108, -109, -110, -108, -107, -106, -108, -108, -106, -106, -106, -106, -106, -104, -103, -104, -103, -102, -101, -100, -101, -101, -100, -99, -99, -100, -100, -99, -97, -98, -98, -96, -97, -95, -95, -96, -95, -94, -92, -92, -93, -92, -91, -90, -90, -90, -89, -89, -88, -88, -89, -87, -87, -86, -85, -86, -84, -84, -82, -83, -83, -82, -81, -79, -80, -80, -78, -77, -76, -76, -77, -76, -74, -75, -74, -75, -73, -72, -71, -72, -70, -69, -69, -68, -67, -68, -66, -65, -65, -63, -64, -63, -62, -62, -62, -60, -60, -59, -58, -58, -58, -56, -55, -56, -55, -54, -54, -52, -51, -51, -50, -50, -49, -49, -48, -48, -46, -45, -45, -45, -45, -42, -42, -42, -41, -41, -39, -38, -38, -38, -37, -35, -34, -34, -33, -33, -31, -31, -30, -30, -30, -28, -28, -27, -26, -26, -24, -24, -24, -23, -22, -20, -20, -20, -19, -17, -17, -17, -15, -15, -14, -14, -13, -13, -12, -11, -10, -10, -10, -8, -8, -6, -5, -5, -4, -2, -2, -2, 0]
thd.THD(s, 1000000)
thdn = thd.THDN(s, 1000000)
print(thdn)
fig, ax = plt.subplots()
ax.plot(t, s)
ax.set(xlabel='time (s)', ylabel='counts', title='Channel 1')
ax.grid()
plt.show()
endolith commented 2 months ago

The problem is likely in these hardcoded lines:

    lowermin = int(true_i * 0.9)
    uppermin = int(true_i * 1.1)

They are not eliminating the entire fundamental when used with the flattop window:

Figure_1

Changing them to

    lowermin = int(true_i * 0.3)
    uppermin = int(true_i * 2.6)

removes the fundamental entirely, and then it produces:

THD function output:
----
Frequency: 1000.729392 Hz
fundamental amplitude: 300737.188
36118.519 117.290 24.098 128.721 52.875 156.427 66.371 25.883 140.883 73.748 129.345 87.715 131.846 
THD: 12.387467%
----
THD+N: 0.0094%

The THD function isn't right at all, as mentioned in the other issue.

import matplotlib.pyplot as plt
import numpy as np
from waveform_analysis import thd

t = np.arange(0.0, 0.005, 1/1000000)
s = [1, 1, 2, 3, 3, 4, 4, 6, 7, 7, 9, 9, 10, 11, 12, 11, 12, 13, 14, 15, 16, 16, 17, 18, 18, 19, 20, 20, 22, 23, 24, 24, 25, 25, 25, 27, 28, 29, 29, 29, 30, 32, 31, 33, 33, 34, 35, 35, 36, 37, 38, 40, 39, 40, 41, 41, 42, 43, 43, 44, 45, 45, 46, 46, 48, 49, 49, 49, 50, 51, 52, 52, 53, 54, 55, 56, 56, 56, 57, 57, 59, 58, 58, 60, 61, 62, 62, 63, 64, 65, 65, 65, 66, 67, 68, 69, 68, 69, 71, 71, 72, 71, 72, 73, 73, 74, 74, 75, 77, 77, 78, 78, 79, 80, 80, 80, 80, 81, 82, 83, 83, 82, 83, 84, 86, 85, 85, 86, 87, 88, 88, 89, 89, 90, 91, 91, 91, 92, 94, 94, 93, 92, 94, 96, 94, 95, 95, 96, 97, 97, 98, 97, 99, 100, 100, 100, 101, 102, 103, 102, 101, 102, 103, 104, 104, 103, 104, 105, 106, 105, 105, 105, 106, 108, 107, 106, 108, 109, 110, 109, 110, 110, 111, 112, 111, 110, 111, 111, 112, 111, 112, 112, 112, 113, 112, 112, 113, 114, 115, 114, 114, 116, 116, 117, 116, 116, 117, 116, 117, 116, 116, 117, 117, 118, 115, 116, 118, 118, 118, 117, 117, 119, 120, 120, 119, 119, 119, 120, 120, 118, 119, 120, 120, 119, 119, 119, 120, 119, 120, 119, 120, 120, 121, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 121, 119, 119, 119, 119, 120, 120, 119, 120, 120, 121, 120, 120, 120, 120, 121, 120, 119, 119, 119, 120, 118, 118, 118, 118, 118, 118, 116, 116, 118, 118, 116, 116, 117, 117, 117, 116, 115, 116, 116, 117, 114, 114, 115, 115, 114, 112, 112, 113, 113, 113, 111, 111, 112, 112, 112, 110, 110, 111, 112, 111, 109, 110, 110, 110, 109, 108, 108, 107, 108, 106, 105, 105, 106, 106, 105, 103, 104, 105, 104, 104, 103, 103, 103, 102, 101, 101, 101, 101, 100, 99, 97, 98, 97, 96, 96, 95, 94, 95, 96, 93, 94, 94, 94, 93, 92, 92, 92, 92, 90, 89, 89, 89, 88, 87, 86, 86, 85, 86, 84, 83, 84, 84, 84, 82, 81, 81, 82, 82, 80, 79, 79, 78, 78, 76, 76, 76, 75, 74, 72, 71, 72, 72, 71, 70, 70, 70, 69, 69, 68, 67, 68, 67, 65, 65, 64, 63, 62, 62, 60, 60, 59, 60, 57, 57, 57, 57, 56, 55, 54, 54, 54, 53, 52, 51, 51, 50, 49, 48, 47, 47, 46, 46, 44, 43, 43, 42, 42, 41, 40, 40, 39, 39, 37, 37, 37, 36, 35, 34, 33, 33, 32, 31, 30, 29, 29, 28, 27, 26, 26, 26, 24, 24, 22, 22, 22, 21, 20, 20, 19, 18, 17, 16, 14, 14, 15, 13, 12, 12, 11, 10, 10, 9, 8, 7, 7, 5, 5, 5, 3, 3, 1, 0, 0, -1, -2, -2, -2, -3, -3, -4, -5, -6, -6, -8, -8, -9, -10, -11, -12, -13, -13, -14, -15, -16, -17, -18, -18, -19, -20, -20, -22, -20, -23, -23, -24, -23, -25, -26, -26, -28, -29, -28, -29, -31, -31, -31, -32, -34, -35, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -42, -43, -42, -44, -46, -46, -47, -47, -48, -49, -49, -50, -50, -51, -52, -52, -52, -53, -55, -55, -56, -56, -56, -56, -59, -59, -59, -59, -61, -62, -62, -62, -64, -65, -65, -66, -66, -67, -67, -69, -68, -68, -69, -70, -72, -71, -72, -73, -73, -74, -75, -74, -76, -77, -78, -77, -78, -79, -80, -81, -80, -80, -82, -82, -83, -82, -83, -84, -85, -86, -84, -86, -87, -87, -89, -88, -88, -90, -90, -91, -91, -92, -92, -94, -94, -93, -94, -95, -95, -96, -95, -96, -97, -97, -98, -97, -98, -100, -100, -99, -100, -101, -102, -103, -103, -101, -103, -105, -104, -104, -103, -104, -105, -105, -105, -105, -106, -108, -107, -107, -108, -108, -110, -110, -110, -109, -111, -111, -110, -110, -110, -111, -112, -111, -111, -112, -112, -113, -112, -112, -113, -114, -115, -114, -114, -115, -117, -117, -116, -115, -116, -117, -118, -115, -115, -116, -116, -118, -116, -116, -117, -118, -119, -118, -118, -119, -120, -120, -119, -119, -120, -120, -121, -119, -119, -120, -120, -119, -118, -118, -119, -120, -119, -118, -119, -121, -120, -121, -120, -120, -122, -121, -121, -119, -121, -121, -120, -121, -120, -119, -121, -120, -119, -119, -119, -120, -120, -120, -119, -119, -120, -120, -120, -119, -120, -120, -120, -119, -119, -119, -119, -119, -118, -116, -118, -118, -118, -116, -116, -117, -118, -116, -117, -116, -117, -118, -116, -116, -116, -116, -117, -115, -114, -114, -114, -115, -114, -112, -113, -113, -113, -112, -111, -112, -112, -113, -111, -110, -112, -111, -111, -110, -110, -110, -110, -109, -108, -108, -108, -107, -108, -105, -105, -106, -105, -106, -104, -104, -105, -104, -104, -103, -103, -103, -103, -102, -100, -100, -101, -100, -99, -97, -98, -98, -98, -96, -95, -95, -96, -95, -94, -94, -95, -94, -94, -93, -91, -92, -92, -91, -89, -88, -88, -89, -88, -87, -87, -86, -86, -84, -84, -83, -83, -84, -82, -82, -81, -81, -81, -79, -78, -78, -79, -78, -76, -75, -75, -74, -75, -73, -72, -72, -72, -72, -70, -69, -69, -70, -69, -67, -66, -66, -66, -65, -64, -63, -64, -63, -63, -60, -60, -59, -58, -58, -57, -56, -56, -55, -56, -55, -53, -54, -53, -52, -51, -51, -50, -49, -49, -47, -47, -46, -45, -45, -43, -42, -42, -42, -42, -40, -40, -39, -39, -38, -36, -36, -36, -35, -34, -33, -33, -32, -31, -31, -29, -28, -28, -28, -26, -26, -25, -24, -24, -23, -22, -21, -22, -20, -19, -18, -17, -17, -16, -15, -15, -14, -13, -12, -12, -11, -11, -10, -9, -9, -7, -7, -6, -4, -5, -3, -3, -2, -1, 1, 1, 1, 3, 2, 2, 4, 5, 6, 6, 7, 7, 7, 8, 10, 10, 11, 12, 14, 15, 15, 16, 17, 17, 18, 19, 20, 21, 22, 22, 22, 22, 23, 24, 25, 25, 26, 27, 27, 28, 29, 30, 32, 32, 32, 33, 35, 36, 36, 36, 36, 37, 38, 39, 39, 40, 41, 41, 43, 42, 44, 45, 45, 46, 46, 48, 49, 50, 51, 50, 51, 52, 53, 54, 53, 54, 55, 55, 56, 56, 57, 58, 59, 60, 60, 62, 63, 63, 64, 63, 65, 65, 66, 66, 67, 67, 69, 69, 69, 69, 70, 71, 71, 72, 72, 73, 75, 76, 75, 75, 77, 79, 78, 78, 78, 80, 80, 80, 80, 81, 82, 83, 82, 82, 83, 85, 86, 86, 86, 87, 88, 90, 89, 89, 90, 89, 92, 91, 91, 92, 93, 93, 93, 93, 94, 94, 96, 95, 95, 97, 97, 98, 99, 98, 99, 100, 100, 100, 100, 102, 102, 102, 102, 102, 103, 104, 104, 103, 104, 105, 106, 105, 105, 106, 107, 108, 108, 108, 108, 109, 110, 110, 109, 110, 111, 111, 111, 110, 110, 112, 112, 112, 112, 112, 113, 113, 113, 113, 114, 116, 116, 115, 115, 116, 117, 117, 116, 116, 116, 117, 117, 116, 116, 117, 118, 116, 116, 117, 117, 119, 118, 118, 118, 119, 121, 120, 120, 119, 120, 120, 120, 119, 118, 119, 120, 119, 119, 119, 120, 120, 119, 119, 120, 121, 122, 120, 120, 121, 121, 122, 120, 119, 120, 121, 121, 119, 119, 120, 120, 120, 120, 119, 120, 121, 120, 120, 120, 121, 121, 120, 120, 119, 120, 120, 119, 118, 118, 119, 119, 118, 117, 118, 118, 118, 118, 118, 117, 117, 118, 117, 117, 118, 117, 117, 116, 115, 116, 116, 115, 115, 113, 115, 114, 114, 113, 113, 113, 114, 112, 113, 111, 112, 113, 112, 111, 110, 111, 111, 110, 109, 109, 109, 109, 108, 107, 108, 107, 108, 106, 105, 105, 105, 105, 104, 104, 104, 104, 104, 102, 102, 103, 102, 103, 100, 99, 100, 100, 99, 97, 97, 98, 97, 96, 96, 95, 96, 95, 96, 93, 93, 94, 94, 94, 92, 90, 92, 91, 90, 88, 88, 88, 88, 86, 85, 86, 86, 86, 84, 83, 83, 84, 83, 82, 81, 81, 81, 80, 78, 78, 78, 77, 77, 76, 74, 75, 75, 75, 72, 72, 72, 72, 71, 70, 70, 70, 69, 68, 67, 67, 66, 65, 65, 63, 63, 63, 62, 60, 59, 60, 60, 59, 57, 57, 57, 56, 56, 55, 53, 54, 53, 52, 52, 50, 50, 49, 48, 47, 46, 46, 46, 45, 43, 43, 43, 42, 42, 40, 40, 40, 39, 39, 37, 36, 36, 35, 35, 33, 32, 31, 31, 30, 29, 29, 28, 28, 27, 26, 25, 25, 24, 22, 22, 22, 22, 20, 20, 18, 17, 17, 17, 16, 15, 14, 13, 13, 12, 11, 11, 9, 9, 8, 8, 7, 6, 6, 5, 3, 2, 1, 1, 0, -1, -1, -2, -3, -4, -5, -6, -6, -6, -7, -7, -9, -10, -10, -10, -11, -13, -14, -14, -15, -15, -17, -18, -18, -18, -19, -20, -21, -22, -22, -23, -23, -24, -24, -25, -26, -28, -29, -28, -29, -30, -31, -32, -33, -33, -34, -35, -36, -36, -36, -38, -38, -39, -39, -39, -41, -41, -43, -43, -43, -44, -45, -46, -47, -47, -48, -50, -50, -50, -50, -51, -53, -53, -53, -53, -55, -55, -56, -56, -56, -58, -59, -60, -60, -61, -62, -62, -64, -63, -64, -65, -66, -66, -66, -67, -68, -70, -69, -68, -69, -71, -72, -72, -72, -73, -74, -75, -76, -76, -77, -78, -78, -79, -79, -79, -80, -81, -81, -80, -82, -82, -83, -83, -83, -84, -86, -86, -86, -87, -88, -88, -88, -89, -89, -91, -91, -90, -91, -91, -92, -94, -94, -93, -93, -94, -95, -95, -96, -97, -97, -98, -98, -97, -100, -100, -101, -100, -100, -102, -102, -103, -101, -102, -103, -104, -104, -103, -103, -105, -105, -106, -105, -105, -106, -107, -108, -107, -108, -110, -110, -110, -109, -109, -111, -111, -111, -109, -110, -111, -111, -111, -110, -112, -114, -113, -113, -113, -114, -115, -116, -116, -115, -115, -116, -116, -116, -115, -115, -117, -116, -115, -116, -117, -117, -117, -116, -116, -118, -119, -119, -119, -119, -119, -121, -120, -120, -119, -120, -120, -119, -120, -119, -118, -120, -119, -119, -119, -119, -120, -120, -120, -120, -121, -122, -121, -120, -121, -121, -121, -120, -120, -120, -120, -120, -119, -119, -119, -119, -121, -120, -119, -120, -120, -122, -120, -119, -121, -121, -121, -119, -119, -119, -119, -120, -119, -119, -118, -119, -119, -117, -117, -119, -118, -118, -117, -117, -119, -118, -117, -116, -116, -117, -118, -116, -115, -115, -115, -115, -114, -114, -114, -114, -114, -113, -113, -113, -114, -113, -112, -111, -111, -112, -112, -111, -109, -111, -111, -110, -109, -108, -109, -110, -108, -107, -107, -107, -107, -106, -106, -105, -106, -106, -105, -104, -104, -104, -105, -103, -102, -102, -103, -102, -100, -100, -100, -99, -99, -98, -97, -97, -97, -97, -95, -95, -95, -95, -96, -94, -93, -94, -94, -94, -92, -90, -91, -90, -90, -88, -87, -88, -87, -87, -85, -84, -85, -84, -85, -84, -82, -84, -84, -82, -81, -80, -81, -80, -80, -78, -77, -77, -76, -76, -74, -74, -74, -74, -74, -72, -71, -72, -71, -71, -69, -69, -69, -68, -67, -66, -66, -66, -65, -63, -61, -61, -61, -60, -59, -58, -59, -60, -58, -56, -56, -56, -56, -55, -54, -53, -53, -53, -52, -50, -50, -50, -48, -47, -46, -45, -45, -45, -44, -42, -42, -42, -42, -41, -40, -39, -39, -39, -36, -36, -36, -35, -34, -33, -32, -32, -31, -31, -29, -28, -28, -27, -26, -26, -25, -25, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -16, -15, -14, -13, -12, -11, -11, -10, -10, -9, -9, -7, -7, -6, -5, -4, -4, -2, -2, -1, 0, 1, 1, 1, 3, 3, 4, 6, 6, 6, 7, 8, 8, 9, 10, 10, 12, 12, 12, 14, 15, 16, 16, 17, 18, 18, 19, 21, 21, 22, 22, 22, 23, 25, 24, 25, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 34, 35, 36, 36, 36, 37, 38, 39, 40, 40, 40, 41, 42, 42, 44, 45, 45, 47, 48, 47, 48, 49, 50, 50, 50, 51, 52, 53, 53, 54, 54, 55, 56, 56, 56, 58, 59, 61, 60, 61, 62, 63, 63, 64, 64, 65, 65, 66, 66, 66, 67, 69, 70, 70, 70, 72, 72, 73, 72, 74, 75, 75, 76, 75, 77, 78, 78, 78, 78, 79, 80, 80, 81, 80, 81, 82, 83, 84, 83, 84, 86, 86, 87, 86, 87, 89, 90, 89, 89, 90, 91, 92, 91, 91, 92, 94, 93, 93, 93, 95, 95, 96, 96, 96, 97, 98, 100, 98, 99, 100, 101, 101, 101, 101, 102, 102, 101, 102, 102, 103, 104, 103, 104, 104, 105, 106, 106, 106, 107, 107, 109, 108, 108, 109, 109, 111, 109, 109, 110, 111, 111, 110, 110, 110, 111, 112, 112, 112, 113, 113, 115, 114, 114, 115, 116, 116, 115, 115, 116, 116, 117, 115, 115, 116, 116, 116, 116, 116, 117, 117, 118, 117, 118, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 120, 118, 118, 118, 119, 119, 119, 118, 119, 121, 121, 120, 119, 120, 122, 121, 121, 120, 121, 121, 121, 119, 118, 120, 121, 120, 120, 119, 120, 121, 120, 120, 119, 120, 122, 121, 120, 119, 120, 121, 119, 118, 119, 120, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 119, 117, 119, 117, 117, 117, 117, 117, 117, 115, 116, 115, 115, 114, 114, 115, 114, 114, 112, 112, 113, 113, 112, 112, 112, 112, 113, 112, 111, 110, 111, 111, 110, 109, 109, 110, 109, 107, 106, 107, 108, 107, 105, 105, 105, 106, 105, 103, 103, 104, 105, 104, 102, 101, 102, 102, 102, 100, 99, 100, 100, 98, 97, 97, 97, 97, 97, 95, 95, 96, 96, 95, 94, 94, 94, 94, 93, 92, 92, 91, 90, 89, 87, 87, 86, 88, 86, 85, 85, 85, 85, 84, 84, 84, 83, 83, 81, 81, 82, 80, 79, 78, 77, 77, 77, 76, 74, 74, 74, 73, 73, 72, 72, 72, 72, 71, 69, 69, 70, 68, 67, 65, 66, 65, 64, 64, 62, 62, 62, 60, 61, 59, 58, 59, 58, 57, 57, 57, 56, 56, 53, 54, 53, 53, 51, 50, 49, 48, 48, 48, 46, 46, 46, 45, 45, 43, 43, 43, 41, 41, 40, 39, 40, 39, 38, 36, 35, 35, 35, 34, 33, 32, 31, 31, 30, 28, 28, 28, 27, 26, 24, 25, 24, 23, 22, 21, 21, 20, 20, 20, 18, 18, 17, 16, 15, 14, 14, 13, 12, 11, 10, 10, 9, 9, 8, 6, 6, 5, 5, 4, 3, 2, 1, 0, -1, -1, -2, -2, -3, -3, -4, -6, -6, -6, -7, -7, -9, -9, -10, -11, -11, -13, -14, -15, -15, -16, -18, -18, -18, -20, -20, -20, -22, -22, -22, -24, -24, -24, -26, -25, -26, -28, -28, -30, -30, -32, -33, -32, -33, -34, -34, -36, -36, -36, -38, -39, -39, -39, -40, -40, -40, -42, -43, -44, -44, -45, -46, -47, -47, -47, -48, -50, -50, -51, -51, -52, -53, -53, -52, -54, -55, -56, -56, -56, -57, -59, -60, -60, -60, -62, -63, -64, -64, -64, -64, -66, -67, -66, -66, -67, -68, -69, -68, -69, -70, -71, -73, -72, -72, -74, -74, -77, -75, -76, -77, -79, -79, -79, -78, -80, -80, -80, -80, -79, -81, -83, -83, -83, -84, -86, -87, -87, -86, -87, -89, -90, -90, -89, -90, -91, -91, -91, -91, -92, -93, -93, -94, -93, -94, -96, -96, -96, -96, -97, -99, -99, -98, -98, -99, -100, -100, -101, -100, -101, -103, -102, -101, -102, -102, -104, -104, -104, -103, -105, -106, -106, -106, -107, -108, -108, -107, -107, -108, -109, -110, -108, -108, -110, -110, -111, -109, -110, -110, -111, -112, -111, -111, -114, -114, -114, -114, -113, -115, -115, -115, -114, -114, -116, -116, -117, -114, -114, -116, -116, -117, -115, -116, -118, -117, -117, -117, -117, -118, -119, -119, -118, -118, -119, -119, -119, -118, -118, -119, -119, -119, -119, -118, -120, -119, -120, -119, -119, -121, -120, -120, -120, -120, -121, -121, -121, -119, -119, -121, -120, -120, -120, -120, -121, -120, -119, -119, -119, -120, -120, -119, -119, -119, -121, -120, -119, -119, -120, -121, -120, -119, -119, -120, -119, -119, -118, -118, -118, -119, -118, -118, -117, -117, -118, -117, -116, -117, -118, -118, -117, -116, -116, -116, -117, -115, -114, -116, -115, -115, -113, -114, -114, -114, -114, -113, -112, -114, -112, -113, -111, -111, -113, -112, -112, -111, -110, -111, -110, -110, -108, -108, -109, -108, -108, -106, -106, -107, -107, -106, -105, -106, -107, -106, -105, -104, -104, -104, -103, -102, -102, -102, -103, -100, -99, -98, -99, -100, -98, -97, -96, -98, -98, -96, -96, -95, -95, -96, -94, -94, -93, -94, -93, -91, -90, -89, -89, -90, -89, -87, -88, -87, -88, -87, -86, -84, -85, -85, -84, -83, -83, -82, -83, -81, -80, -79, -79, -79, -78, -76, -77, -76, -77, -74, -74, -75, -74, -74, -73, -72, -73, -72, -71, -70, -68, -68, -68, -67, -65, -64, -65, -65, -64, -62, -62, -62, -61, -60, -58, -59, -59, -58, -58, -56, -56, -56, -55, -54, -53, -53, -53, -51, -50, -49, -49, -49, -47, -46, -45, -46, -45, -45, -44, -42, -42, -42, -41, -40, -39, -38, -38, -38, -37, -35, -35, -35, -32, -32, -31, -31, -31, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -20, -18, -18, -16, -16, -16, -15, -14, -14, -12, -12, -11, -10, -10, -9, -9, -8, -7, -7, -6, -4, -3, -3, -1, -1, 0, 1, 1, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 22, 23, 24, 25, 25, 26, 27, 27, 29, 29, 30, 31, 32, 34, 33, 33, 35, 36, 36, 37, 37, 38, 39, 39, 40, 41, 41, 42, 44, 44, 44, 46, 46, 47, 48, 48, 49, 49, 50, 52, 51, 53, 53, 54, 54, 54, 55, 56, 56, 57, 57, 60, 60, 60, 61, 62, 62, 65, 65, 64, 65, 65, 66, 66, 66, 67, 68, 69, 69, 70, 71, 72, 73, 73, 73, 75, 76, 76, 76, 76, 78, 79, 78, 78, 79, 79, 80, 81, 80, 81, 82, 83, 84, 83, 84, 86, 86, 87, 86, 87, 89, 90, 90, 89, 88, 91, 91, 91, 91, 92, 94, 94, 93, 93, 94, 96, 95, 97, 97, 97, 98, 99, 99, 98, 99, 100, 101, 100, 100, 101, 102, 101, 102, 101, 103, 104, 104, 104, 104, 106, 107, 106, 107, 106, 107, 109, 109, 108, 108, 109, 110, 110, 108, 110, 110, 111, 110, 111, 110, 112, 113, 112, 112, 113, 115, 114, 114, 114, 114, 116, 116, 115, 115, 114, 115, 116, 115, 116, 115, 116, 117, 115, 115, 118, 118, 118, 118, 118, 120, 119, 120, 118, 119, 118, 120, 119, 118, 119, 119, 119, 118, 118, 118, 120, 121, 120, 119, 119, 121, 121, 121, 120, 120, 122, 121, 121, 120, 120, 121, 120, 120, 119, 120, 121, 119, 120, 120, 120, 121, 121, 120, 120, 121, 121, 120, 119, 120, 121, 121, 120, 118, 119, 119, 120, 118, 118, 118, 118, 119, 118, 118, 118, 119, 119, 118, 118, 118, 118, 118, 116, 117, 116, 117, 117, 115, 114, 115, 115, 115, 113, 113, 114, 114, 114, 113, 113, 113, 114, 114, 112, 113, 113, 113, 113, 110, 110, 111, 110, 109, 109, 108, 108, 108, 108, 107, 106, 108, 107, 106, 105, 106, 107, 106, 105, 105, 104, 104, 103, 103, 102, 102, 102, 101, 99, 99, 100, 100, 98, 97, 97, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 94, 94, 92, 90, 89, 90, 90, 88, 88, 88, 87, 89, 86, 86, 87, 86, 86, 84, 84, 84, 84, 83, 81, 81, 81, 80, 79, 77, 77, 78, 77, 76, 74, 75, 75, 74, 74, 72, 73, 72, 72, 71, 69, 69, 69, 69, 68, 66, 66, 65, 65, 63, 63, 62, 62, 61, 61, 60, 59, 59, 59, 57, 56, 57, 56, 55, 54, 54, 53, 53, 52, 50, 50, 48, 49, 48, 47, 46, 46, 46, 45, 44, 43, 43, 42, 42, 40, 40, 40, 38, 38, 37, 36, 35, 35, 33, 32, 32, 32, 31, 31, 29, 28, 28, 26, 26, 25, 25, 24, 24, 23, 22, 22, 21, 20, 20, 17, 17, 17, 16, 15, 14, 14, 13, 12, 12, 10, 10, 10, 9, 8, 8, 6, 6, 4, 4, 2, 2, 1, 0, -1, -2, -2, -2, -4, -4, -4, -5, -6, -7, -7, -8, -9, -10, -10, -10, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -19, -21, -20, -23, -22, -23, -24, -24, -25, -26, -27, -28, -28, -30, -30, -30, -32, -33, -33, -33, -34, -36, -36, -36, -36, -38, -39, -40, -40, -40, -42, -43, -43, -44, -44, -45, -46, -46, -47, -47, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -55, -56, -56, -57, -58, -59, -60, -61, -60, -61, -61, -64, -63, -63, -64, -65, -67, -66, -66, -68, -68, -69, -69, -70, -70, -72, -72, -72, -73, -74, -75, -75, -76, -76, -78, -78, -78, -78, -78, -80, -80, -80, -81, -81, -83, -83, -84, -83, -83, -86, -86, -87, -86, -88, -88, -88, -90, -88, -89, -91, -91, -91, -91, -91, -93, -93, -92, -92, -93, -96, -96, -97, -97, -96, -98, -98, -98, -98, -100, -100, -100, -100, -100, -101, -103, -102, -102, -102, -102, -104, -104, -103, -104, -105, -107, -107, -107, -106, -108, -109, -108, -108, -108, -109, -110, -109, -108, -108, -109, -110, -109, -110, -110, -111, -113, -111, -113, -113, -114, -115, -114, -113, -115, -114, -115, -114, -114, -114, -115, -115, -114, -114, -115, -115, -117, -115, -116, -117, -118, -119, -117, -117, -119, -119, -119, -117, -118, -119, -119, -119, -118, -118, -118, -119, -119, -118, -119, -119, -120, -120, -119, -120, -120, -121, -121, -120, -120, -121, -121, -120, -119, -119, -120, -120, -119, -119, -119, -120, -120, -119, -119, -120, -120, -120, -120, -120, -120, -122, -120, -120, -119, -120, -121, -119, -119, -119, -118, -119, -119, -118, -118, -118, -120, -118, -118, -118, -117, -118, -118, -118, -118, -117, -118, -116, -116, -117, -116, -116, -115, -114, -115, -114, -115, -113, -114, -114, -114, -114, -112, -113, -114, -113, -113, -112, -111, -112, -112, -112, -110, -109, -111, -110, -109, -108, -108, -108, -108, -108, -107, -106, -108, -107, -107, -106, -106, -106, -106, -106, -103, -103, -104, -103, -103, -101, -101, -101, -101, -100, -99, -98, -100, -99, -98, -98, -98, -98, -97, -95, -95, -95, -96, -95, -94, -93, -93, -93, -92, -90, -90, -89, -91, -89, -88, -87, -88, -88, -87, -85, -85, -84, -86, -84, -83, -82, -83, -82, -80, -80, -80, -80, -80, -78, -78, -78, -77, -77, -74, -74, -74, -74, -74, -73, -72, -73, -71, -71, -68, -69, -68, -68, -68, -66, -65, -65, -64, -64, -63, -62, -63, -61, -61, -59, -60, -59, -60, -58, -56, -56, -56, -55, -55, -52, -52, -52, -50, -51, -50, -48, -48, -47, -47, -46, -46, -45, -45, -44, -42, -43, -42, -41, -40, -39, -38, -38, -36, -36, -35, -34, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -28, -26, -25, -25, -24, -24, -23, -22, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -12, -12, -11, -10, -10, -8, -8, -7, -6, -5, -5, -3, -2, -2, -2, 0, 0, 2, 2, 2, 3, 5, 4, 5, 6, 6, 7, 8, 9, 10, 10, 11, 12, 14, 14, 14, 15, 16, 17, 18, 18, 18, 19, 21, 21, 22, 22, 23, 23, 25, 25, 26, 28, 28, 29, 29, 30, 30, 32, 32, 33, 33, 34, 35, 36, 37, 36, 38, 38, 40, 40, 40, 42, 43, 44, 44, 44, 46, 46, 47, 47, 48, 48, 49, 50, 50, 50, 52, 52, 54, 53, 54, 56, 56, 57, 57, 57, 59, 61, 61, 61, 62, 61, 64, 64, 63, 64, 65, 66, 67, 67, 67, 69, 69, 70, 69, 70, 72, 73, 73, 73, 74, 75, 76, 76, 76, 77, 78, 78, 78, 78, 79, 80, 81, 81, 81, 83, 84, 84, 84, 84, 86, 86, 87, 87, 87, 88, 89, 89, 89, 88, 90, 91, 92, 91, 92, 94, 94, 94, 94, 94, 96, 97, 97, 96, 97, 98, 99, 98, 98, 99, 100, 101, 101, 100, 100, 102, 103, 102, 102, 103, 104, 105, 104, 105, 106, 107, 107, 106, 107, 107, 109, 108, 108, 107, 109, 109, 109, 108, 109, 110, 110, 111, 111, 110, 111, 113, 113, 112, 113, 114, 115, 114, 113, 114, 116, 115, 114, 114, 114, 115, 116, 114, 114, 116, 117, 118, 117, 117, 118, 118, 118, 118, 118, 120, 120, 120, 118, 118, 118, 119, 119, 118, 117, 119, 119, 118, 118, 118, 120, 120, 121, 120, 120, 121, 121, 121, 120, 120, 121, 120, 120, 120, 118, 120, 119, 119, 119, 120, 121, 121, 121, 120, 121, 122, 122, 121, 120, 121, 121, 120, 120, 119, 119, 120, 119, 118, 119, 118, 120, 119, 118, 118, 119, 120, 120, 118, 118, 119, 120, 118, 118, 117, 118, 118, 116, 116, 116, 116, 117, 116, 115, 116, 116, 115, 115, 113, 115, 116, 115, 113, 114, 114, 114, 114, 112, 111, 112, 113, 111, 110, 109, 110, 110, 110, 109, 108, 109, 109, 108, 107, 107, 108, 107, 106, 106, 105, 106, 106, 105, 105, 104, 105, 104, 103, 102, 101, 101, 101, 100, 99, 99, 100, 100, 98, 97, 98, 98, 97, 97, 96, 96, 96, 96, 94, 93, 93, 93, 92, 91, 91, 90, 91, 89, 88, 88, 87, 88, 87, 86, 87, 86, 86, 84, 84, 84, 83, 83, 81, 80, 80, 80, 80, 78, 77, 77, 78, 77, 76, 75, 75, 74, 74, 73, 72, 73, 73, 71, 69, 68, 69, 68, 66, 65, 65, 65, 64, 64, 62, 62, 62, 62, 62, 60, 60, 60, 58, 59, 57, 57, 56, 55, 55, 53, 52, 52, 51, 50, 49, 48, 48, 48, 47, 46, 46, 46, 46, 44, 44, 42, 41, 42, 40, 39, 39, 38, 37, 36, 35, 35, 35, 33, 33, 33, 32, 31, 30, 30, 29, 29, 27, 26, 26, 25, 25, 24, 22, 22, 21, 20, 20, 19, 17, 17, 17, 16, 15, 14, 14, 14, 12, 12, 11, 10, 10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 1, 0, 0, -1, -1, -2, -3, -4, -4, -5, -6, -6, -7, -8, -9, -9, -10, -11, -12, -13, -13, -14, -15, -16, -17, -17, -18, -19, -20, -21, -20, -22, -22, -23, -25, -25, -25, -26, -26, -27, -28, -29, -29, -30, -32, -32, -33, -33, -34, -35, -35, -37, -36, -38, -39, -39, -40, -40, -42, -43, -43, -44, -44, -44, -46, -47, -47, -47, -48, -50, -49, -51, -50, -51, -53, -53, -53, -54, -55, -56, -56, -57, -58, -58, -60, -60, -60, -60, -61, -62, -63, -63, -63, -65, -66, -66, -66, -66, -68, -70, -69, -70, -71, -71, -73, -72, -73, -73, -74, -76, -74, -76, -76, -78, -78, -78, -78, -79, -80, -81, -81, -80, -82, -83, -84, -84, -84, -86, -86, -87, -86, -86, -88, -88, -89, -88, -88, -90, -90, -92, -90, -91, -92, -93, -94, -94, -94, -95, -96, -96, -96, -97, -98, -99, -98, -98, -99, -100, -100, -100, -99, -100, -102, -101, -101, -102, -102, -104, -104, -104, -104, -105, -106, -107, -107, -107, -108, -108, -107, -107, -107, -109, -109, -109, -109, -109, -110, -111, -110, -111, -111, -112, -112, -113, -112, -113, -113, -115, -114, -114, -114, -114, -114, -115, -114, -114, -114, -116, -115, -114, -116, -116, -118, -116, -117, -118, -118, -119, -118, -118, -118, -118, -119, -118, -118, -118, -118, -119, -118, -117, -118, -119, -120, -118, -118, -120, -120, -121, -120, -120, -120, -122, -122, -120, -121, -121, -120, -120, -119, -119, -120, -120, -120, -119, -119, -120, -120, -121, -120, -120, -122, -121, -121, -120, -120, -121, -121, -120, -119, -120, -120, -118, -119, -118, -118, -120, -118, -119, -118, -118, -120, -118, -119, -118, -118, -119, -119, -117, -117, -117, -118, -118, -116, -115, -116, -116, -114, -115, -114, -114, -115, -115, -114, -114, -114, -114, -114, -114, -113, -114, -114, -112, -111, -112, -112, -112, -111, -109, -110, -109, -110, -109, -108, -108, -109, -110, -108, -107, -106, -108, -108, -106, -106, -106, -106, -106, -104, -103, -104, -103, -102, -101, -100, -101, -101, -100, -99, -99, -100, -100, -99, -97, -98, -98, -96, -97, -95, -95, -96, -95, -94, -92, -92, -93, -92, -91, -90, -90, -90, -89, -89, -88, -88, -89, -87, -87, -86, -85, -86, -84, -84, -82, -83, -83, -82, -81, -79, -80, -80, -78, -77, -76, -76, -77, -76, -74, -75, -74, -75, -73, -72, -71, -72, -70, -69, -69, -68, -67, -68, -66, -65, -65, -63, -64, -63, -62, -62, -62, -60, -60, -59, -58, -58, -58, -56, -55, -56, -55, -54, -54, -52, -51, -51, -50, -50, -49, -49, -48, -48, -46, -45, -45, -45, -45, -42, -42, -42, -41, -41, -39, -38, -38, -38, -37, -35, -34, -34, -33, -33, -31, -31, -30, -30, -30, -28, -28, -27, -26, -26, -24, -24, -24, -23, -22, -20, -20, -20, -19, -17, -17, -17, -15, -15, -14, -14, -13, -13, -12, -11, -10, -10, -10, -8, -8, -6, -5, -5, -4, -2, -2, -2, 0]
print('THD function output:\n----')
thd.THD(s, 1000000)
print('----')
thdn = thd.THDN(s, 1000000)
print(f'THD+N: {thdn:.4f}%')
fig, ax = plt.subplots()
ax.plot(t, s)
ax.set(xlabel='time (s)', ylabel='counts', title='Channel 1')
ax.grid()
plt.show()
endolith commented 2 months ago

REW's method, for reference:

If the Use AES17-2015 standard notch option is selected in the Distortion settings the fundamental figure will be the power within a one octave span around the fundamental frequency. If that option is not selected it will be the power in the main lobe of the fundamental.

AES17-1998 says:

4.3.6 All total harmonic distortion plus noise (THD + N) type distortion analyzers used for measurements in this standard shall utilize a notch filter having an electrical Q of at least 1 and not more than 5.

8.5 Total harmonic distortion and noise (THD + N) Harmonic distortion and noise is the ratio of the output noise and distortion level to the output signal level. Both levels shall include all harmonic, inharmonic and noise components.

(Implying that AES spec is THDR.)

endolith commented 2 months ago

This is your actual spectrum, which doesn't have very clearly defined harmonics (green) and has noise at higher frequencies with a peak around -48 dB:

Figure_2

-48 dB should be 0.41% THD, so I'm confused.

ftab commented 2 months ago

We got some power supply switching noise at the higher frequencies that I was trying to clear out of the data with a 20khz LPF before running it through THDN, but this scope only gives 8 bits of resolution and the LPF can't seem to clean it up 😞

I was previously using a scope with 16 bit resolution (an old Picoscope), and I was able to clear the switching noise out from the waveform, and then THDN was giving reasonable-sounding results... but the age of the scope and Picoscope's lack of arm64 support made it painful to try to use and we decided to switch.

We're now using a VDS-1022 which has a library that is much more Python-friendly, but the data is noisier as a result of the resolution.

What's the drawback to changing those two lines?

    lowermin = int(true_i * 0.3)
    uppermin = int(true_i * 2.6)

If I plug those in so that the THDN measurement seems better, would I then mistake some slightly distorted waveforms as good?

edit:

from scipy.signal import butter, lfilter

def butter_lowpass_filter(data, cutoff, fs, order=5):
    b, a = butter(order, cutoff, fs=fs, btype='low', analog=False)
    y = lfilter(b, a, data)
    return y

...

# after s = [1, 1, 2...
s = butter_lowpass_filter(s, 20000, 1000000, 2)
endolith commented 2 months ago

What's the drawback to changing those two lines?

There isn't one; they shouldn't be hardcoded like that in the first place. It should ideally use a width that eliminates the main lobe regardless of signal length, window function, FFT size, etc.

If I plug those in so that the THDN measurement seems better, would I then mistake some slightly distorted waveforms as good?

Actually... the window function main lobe overlaps the 2nd and 3rd harmonics in the graph above, doesn't it? So it isn't able to measure meaningfully in this case, regardless of whether you change those lines.

I think it needs a longer recording with more cycles? A different window function with narrower main lobe would also help, as it retains more of the signal in the middle of the window.

So ideally it would notice when the window bandwidth is too wide like this and produce a useful error message? 🤔

ftab commented 2 months ago

I should probably try to play around with my capture settings a bit, then. I can only get 5000 samples at a time from this scope. At 1mhz sample rate, that's only .005 s...and then the low pass filter screws up the beginning and end, so I have to chop off the first .0005 and last .0005 to end up with 4000 usable samples (4 periods of sine wave) to try to pass to THDN()

It has a range of sample rates from 2.5/s to 100,000,000/s, I'll see if I can get some useful data at lower sample rates.

Here's one I took at 500khz sample rate (now including lpf and fft), from which I can get 9 sine wave periods:

import matplotlib.pyplot as plt
import numpy as np
from waveform_analysis import thd

from scipy.signal import butter, lfilter

def butter_lowpass_filter(data, cutoff, fs, order=5):
    b, a = butter(order, cutoff, fs=fs, btype='low', analog=False)
    y = lfilter(b, a, data)
    return y

# Borrowing FFT plot function from https://stackoverflow.com/a/53925342
def fftPlot(sig, dt=None, plot=True):
    # Here it's assumes analytic signal (real signal...) - so only half of the axis is required

    if dt is None:
        dt = 1
        t = np.arange(0, sig.shape[-1])
        xLabel = 'samples'
    else:
        t = np.arange(0, sig.shape[-1]) * dt
        xLabel = 'freq [Hz]'

    if sig.shape[0] % 2 != 0:
        warnings.warn("signal preferred to be even in size, autoFixing it...")
        t = t[0:-1]
        sig = sig[0:-1]

    sigFFT = np.fft.fft(sig) / t.shape[0]  # Divided by size t for coherent magnitude

    freq = np.fft.fftfreq(t.shape[0], d=dt)

    # Plot analytic signal - right half of frequence axis needed only...
    firstNegInd = np.argmax(freq < 0)
    freqAxisPos = freq[0:firstNegInd]
    sigFFTPos = 2 * sigFFT[0:firstNegInd]  # *2 because of magnitude of analytic signal

    if plot:
        plt.figure()
        plt.plot(freqAxisPos, np.abs(sigFFTPos))
        plt.xlabel(xLabel)
        plt.ylabel('mag')
        plt.title('Analytic FFT plot')
        plt.show()

    return sigFFTPos, freqAxisPos

t = np.arange(0.0, 0.009, 1/500000)
# Actual data capture from scope at 500khz
s = [112, 113, 113, 114, 116, 116, 116, 117, 116, 117, 116, 117, 116, 116, 119, 117, 119, 119, 119, 120, 118, 119, 117, 118, 119, 118, 119, 119, 120, 120, 119, 119, 117, 118, 118, 117, 118, 117, 118, 118, 118, 118, 115, 117, 115, 115, 115, 113, 115, 114, 114, 113, 113, 112, 110, 111, 110, 109, 109, 108, 108, 107, 106, 107, 106, 105, 104, 103, 103, 100, 100, 99, 99, 100, 97, 98, 96, 95, 94, 92, 92, 90, 90, 89, 88, 88, 86, 86, 83, 83, 82, 79, 79, 76, 77, 76, 76, 76, 72, 72, 71, 68, 67, 65, 65, 64, 63, 63, 61, 59, 58, 56, 55, 52, 52, 50, 50, 48, 47, 47, 44, 44, 41, 40, 39, 36, 35, 34, 33, 31, 30, 28, 26, 25, 24, 21, 21, 19, 19, 18, 15, 14, 12, 11, 10, 7, 7, 4, 3, 2, 0, -2, -3, -5, -6, -7, -9, -10, -12, -13, -16, -17, -18, -19, -21, -23, -24, -24, -26, -27, -29, -31, -32, -34, -34, -37, -38, -40, -41, -42, -44, -45, -46, -47, -49, -51, -53, -53, -54, -55, -57, -57, -59, -61, -61, -64, -65, -66, -68, -69, -70, -71, -72, -72, -73, -77, -77, -78, -79, -80, -82, -82, -83, -84, -85, -87, -87, -88, -90, -90, -92, -92, -94, -94, -95, -96, -95, -98, -98, -100, -101, -101, -101, -101, -104, -105, -103, -106, -105, -107, -108, -107, -109, -108, -110, -111, -111, -112, -111, -113, -112, -112, -113, -113, -116, -115, -116, -116, -115, -117, -116, -116, -116, -116, -118, -117, -118, -118, -118, -120, -118, -118, -117, -118, -119, -117, -119, -118, -119, -120, -118, -118, -118, -117, -118, -117, -117, -115, -118, -116, -117, -117, -114, -116, -114, -114, -113, -113, -114, -112, -113, -113, -111, -113, -111, -110, -109, -109, -109, -107, -107, -106, -106, -106, -105, -104, -103, -101, -102, -99, -100, -98, -99, -98, -96, -97, -95, -94, -93, -91, -92, -89, -89, -88, -87, -88, -84, -85, -83, -82, -81, -79, -79, -77, -76, -76, -74, -74, -73, -71, -70, -68, -67, -65, -64, -63, -63, -62, -59, -58, -58, -55, -55, -52, -52, -49, -49, -48, -46, -45, -43, -43, -41, -38, -37, -36, -36, -34, -32, -31, -29, -28, -27, -25, -24, -21, -20, -20, -17, -16, -14, -13, -12, -10, -9, -7, -6, -4, -2, -1, 0, 2, 4, 5, 7, 8, 8, 10, 12, 14, 15, 18, 18, 20, 21, 22, 24, 25, 27, 28, 29, 31, 32, 35, 36, 37, 39, 39, 41, 43, 44, 46, 47, 48, 49, 51, 52, 53, 56, 56, 58, 59, 60, 62, 62, 64, 65, 66, 69, 68, 71, 71, 72, 75, 74, 76, 76, 79, 79, 80, 82, 83, 84, 85, 85, 87, 87, 89, 90, 90, 93, 93, 96, 95, 95, 97, 96, 97, 98, 99, 100, 101, 103, 103, 104, 106, 105, 106, 105, 107, 107, 108, 109, 109, 112, 111, 112, 112, 111, 112, 112, 113, 114, 114, 116, 116, 117, 117, 116, 117, 116, 116, 116, 116, 119, 117, 119, 119, 118, 119, 118, 118, 118, 118, 119, 119, 120, 120, 119, 120, 118, 119, 117, 118, 118, 118, 119, 117, 118, 118, 117, 117, 115, 115, 115, 114, 115, 114, 115, 114, 112, 113, 111, 112, 111, 110, 110, 108, 110, 108, 108, 108, 107, 106, 105, 104, 103, 102, 102, 100, 101, 100, 98, 99, 97, 97, 95, 95, 94, 92, 92, 90, 90, 89, 87, 89, 85, 85, 83, 82, 82, 79, 79, 78, 76, 77, 74, 74, 72, 71, 71, 68, 67, 66, 66, 64, 63, 62, 60, 59, 57, 55, 55, 52, 52, 51, 50, 48, 46, 45, 44, 42, 42, 39, 38, 36, 35, 34, 32, 31, 30, 28, 26, 25, 24, 22, 21, 20, 18, 17, 15, 14, 12, 11, 9, 7, 5, 4, 3, 2, 0, -2, -3, -4, -5, -7, -9, -11, -12, -14, -15, -17, -18, -20, -21, -23, -24, -25, -26, -28, -29, -32, -32, -34, -36, -36, -39, -38, -41, -43, -44, -45, -46, -48, -49, -52, -52, -53, -54, -56, -57, -59, -59, -60, -61, -64, -66, -66, -68, -68, -70, -72, -72, -73, -74, -76, -77, -78, -80, -79, -83, -82, -83, -85, -84, -87, -86, -88, -90, -90, -93, -92, -93, -94, -94, -96, -96, -98, -97, -100, -101, -100, -101, -102, -104, -105, -104, -106, -105, -107, -108, -106, -109, -109, -110, -111, -110, -112, -111, -113, -112, -113, -113, -113, -116, -115, -115, -117, -115, -116, -116, -116, -117, -116, -118, -117, -118, -118, -117, -119, -118, -117, -117, -118, -120, -117, -119, -119, -119, -119, -118, -118, -117, -118, -118, -116, -118, -117, -118, -118, -116, -117, -114, -116, -115, -113, -115, -112, -113, -114, -112, -113, -111, -112, -110, -110, -109, -108, -110, -108, -108, -108, -106, -107, -104, -103, -102, -101, -102, -99, -100, -99, -99, -99, -96, -96, -94, -93, -93, -90, -90, -90, -90, -89, -87, -88, -84, -85, -82, -80, -80, -79, -79, -78, -76, -76, -74, -74, -72, -70, -68, -67, -66, -65, -64, -63, -62, -62, -59, -58, -56, -55, -54, -52, -51, -50, -49, -48, -46, -45, -44, -41, -41, -38, -37, -36, -35, -34, -32, -30, -28, -28, -26, -24, -23, -21, -20, -19, -17, -16, -13, -13, -12, -10, -8, -7, -6, -3, -2, 0, 1, 2, 4, 5, 7, 7, 9, 11, 12, 15, 16, 17, 18, 20, 22, 22, 24, 25, 27, 29, 30, 32, 33, 34, 36, 37, 39, 40, 43, 43, 44, 46, 46, 48, 49, 52, 53, 54, 56, 56, 58, 60, 60, 62, 63, 64, 67, 66, 69, 68, 71, 72, 72, 74, 73, 76, 77, 79, 80, 80, 83, 82, 84, 85, 85, 87, 87, 90, 91, 91, 93, 93, 94, 95, 95, 96, 96, 98, 99, 100, 102, 101, 103, 104, 104, 104, 104, 106, 106, 106, 108, 107, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 115, 115, 116, 115, 116, 116, 115, 116, 116, 116, 118, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 120, 119, 120, 120, 119, 119, 117, 118, 118, 117, 118, 118, 118, 118, 118, 117, 116, 117, 115, 115, 116, 114, 115, 113, 115, 114, 113, 114, 112, 112, 110, 110, 110, 108, 110, 108, 108, 107, 106, 107, 104, 104, 104, 102, 103, 100, 100, 100, 99, 99, 97, 96, 95, 93, 93, 91, 92, 89, 90, 90, 88, 87, 85, 85, 83, 81, 80, 79, 80, 78, 78, 77, 74, 74, 72, 71, 69, 68, 67, 65, 65, 65, 64, 62, 60, 59, 57, 55, 54, 51, 52, 51, 50, 48, 46, 45, 44, 42, 40, 39, 38, 36, 36, 34, 33, 32, 29, 27, 27, 24, 23, 21, 20, 19, 17, 16, 14, 14, 11, 10, 8, 7, 6, 4, 2, 0, -1, -2, -2, -4, -6, -7, -9, -11, -12, -13, -15, -18, -18, -20, -22, -23, -24, -25, -26, -28, -30, -32, -32, -34, -36, -37, -39, -39, -41, -42, -44, -45, -47, -48, -49, -51, -53, -53, -55, -55, -58, -59, -59, -61, -62, -65, -65, -67, -68, -68, -71, -71, -71, -73, -73, -77, -78, -78, -80, -81, -82, -83, -83, -85, -85, -87, -88, -88, -90, -91, -92, -92, -94, -94, -94, -97, -96, -97, -98, -100, -102, -100, -103, -101, -103, -105, -104, -105, -105, -107, -108, -108, -110, -109, -111, -111, -110, -112, -110, -112, -112, -113, -113, -114, -117, -115, -116, -116, -115, -116, -116, -116, -117, -117, -119, -118, -119, -118, -118, -119, -117, -118, -117, -119, -120, -118, -119, -119, -119, -119, -117, -118, -116, -117, -118, -117, -118, -117, -118, -117, -116, -116, -114, -115, -114, -113, -114, -114, -116, -113, -113, -112, -110, -112, -110, -109, -109, -108, -109, -107, -108, -106, -106, -105, -104, -104, -102, -102, -102, -100, -101, -99, -99, -98, -96, -96, -94, -93, -92, -91, -91, -89, -91, -88, -87, -86, -85, -84, -82, -81, -81, -78, -80, -78, -77, -76, -74, -74, -71, -69, -69, -67, -67, -65, -65, -64, -62, -61, -58, -57, -56, -55, -54, -52, -52, -49, -49, -48, -45, -44, -42, -42, -40, -38, -37, -35, -35, -33, -31, -30, -28, -28, -25, -24, -22, -21, -20, -18, -17, -15, -14, -13, -12, -10, -8, -7, -6, -4, -1, 0, 1, 3, 3, 5, 7, 8, 9, 10, 13, 14, 16, 17, 19, 21, 22, 23, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 40, 40, 42, 42, 44, 46, 47, 49, 50, 51, 53, 54, 56, 56, 57, 60, 60, 62, 62, 64, 66, 68, 68, 70, 71, 72, 73, 74, 74, 77, 77, 80, 80, 81, 83, 83, 84, 85, 86, 86, 88, 90, 91, 92, 94, 93, 95, 94, 96, 96, 96, 99, 99, 100, 102, 102, 104, 103, 104, 104, 105, 106, 106, 108, 108, 109, 110, 111, 111, 110, 111, 112, 111, 114, 113, 115, 115, 115, 116, 114, 117, 116, 115, 116, 116, 118, 117, 118, 119, 118, 119, 116, 119, 119, 118, 119, 118, 120, 120, 119, 120, 118, 119, 118, 117, 118, 117, 118, 118, 118, 119, 116, 118, 116, 116, 116, 115, 116, 115, 115, 114, 114, 115, 113, 114, 112, 111, 111, 110, 111, 110, 110, 110, 107, 109, 107, 107, 106, 104, 104, 102, 102, 102, 102, 102, 99, 99, 98, 97, 96, 94, 95, 92, 92, 93, 91, 91, 88, 87, 87, 85, 84, 82, 83, 80, 80, 80, 78, 78, 75, 74, 73, 71, 71, 68, 68, 67, 66, 66, 63, 63, 61, 60, 58, 56, 56, 54, 52, 52, 49, 50, 48, 46, 45, 42, 42, 40, 40, 39, 36, 34, 33, 32, 30, 29, 27, 26, 24, 23, 22, 20, 19, 18, 15, 14, 13, 11, 11, 8, 6, 5, 4, 2, 0, 0, -3, -3, -4, -6, -9, -10, -11, -13, -14, -16, -18, -19, -20, -21, -23, -25, -25, -26, -28, -31, -31, -33, -35, -36, -38, -38, -40, -41, -42, -45, -45, -47, -49, -50, -52, -52, -54, -56, -55, -58, -58, -60, -62, -63, -65, -65, -67, -68, -69, -71, -70, -72, -73, -75, -78, -77, -79, -80, -81, -82, -81, -84, -83, -86, -87, -88, -89, -90, -92, -93, -92, -93, -93, -96, -96, -96, -98, -99, -100, -100, -102, -102, -102, -104, -103, -105, -105, -106, -109, -108, -109, -109, -108, -111, -110, -110, -111, -112, -113, -113, -113, -113, -116, -116, -115, -116, -115, -116, -116, -116, -117, -116, -119, -118, -117, -119, -118, -119, -118, -117, -118, -117, -120, -118, -120, -119, -118, -120, -117, -117, -117, -117, -119, -117, -118, -119, -116, -118, -117, -117, -115, -115, -116, -113, -115, -115, -115, -115, -113, -113, -111, -112, -110, -109, -110, -109, -109, -110, -108, -108, -106, -106, -104, -103, -104, -102, -102, -101, -101, -100, -98, -98, -96, -96, -95, -93, -93, -92, -92, -92, -90, -90, -88, -87, -85, -85, -84, -81, -81, -80, -80, -79, -77, -76, -74, -74, -73, -70, -69, -69, -68, -67, -65, -64, -63, -62, -61, -58, -57, -55, -55, -53, -52, -51, -50, -48, -47, -45, -44, -42, -41, -39, -38, -36, -35, -35, -33, -31, -30, -29, -28, -25, -24, -22, -21, -20, -19, -17, -15, -14, -12, -11, -9, -7, -7, -5, -3, -1, 0, 2, 3, 5, 7, 7, 8, 9, 11, 13, 15, 16, 18, 20, 22, 22, 24, 24, 25, 28, 28, 30, 33, 35, 36, 37, 38, 40, 40, 42, 43, 45, 46, 48, 50, 50, 52, 52, 54, 55, 56, 58, 59, 61, 62, 63, 66, 66, 68, 69, 69, 71, 72, 73, 74, 76, 77, 77, 80, 81, 81, 82, 83, 84, 84, 87, 88, 88, 91, 91, 92, 93, 92, 94, 95, 96, 97, 97, 100, 99, 101, 102, 103, 104, 102, 104, 105, 106, 107, 107, 109, 108, 109, 110, 110, 111, 110, 111, 111, 111, 114, 113, 114, 115, 115, 116, 115, 116, 116, 115, 116, 116, 118, 118, 119, 120, 118, 120, 117, 119, 118, 118, 120, 119, 120, 119, 120, 120, 118, 119, 118, 117, 118, 117, 119, 118, 118, 119, 117, 118, 117, 116, 116, 114, 116, 115, 116, 115, 114, 115, 113, 113, 112, 111, 112, 110, 111, 110, 110, 111, 108, 108, 105, 106, 105, 104, 104, 103, 103, 103, 102, 102, 99, 99, 97, 96, 96, 94, 94, 93, 92, 92, 90, 90, 88, 88, 87, 84, 84, 82, 82, 81, 80, 80, 77, 77, 75, 73, 72, 71, 71, 69, 68, 67, 65, 65, 63, 63, 61, 59, 58, 56, 55, 54, 52, 52, 50, 49, 48, 46, 45, 43, 42, 40, 39, 38, 35, 35, 33, 32, 30, 28, 28, 26, 24, 23, 21, 20, 19, 18, 16, 14, 12, 11, 9, 8, 7, 5, 3, 2, 0, -2, -3, -4, -5, -7, -8, -9, -12, -13, -14, -16, -18, -20, -20, -22, -23, -24, -25, -27, -28, -31, -33, -33, -34, -36, -38, -40, -39, -41, -42, -44, -46, -48, -49, -49, -52, -54, -54, -55, -55, -58, -59, -60, -62, -63, -66, -66, -67, -68, -68, -70, -71, -73, -74, -75, -78, -77, -80, -80, -81, -82, -82, -83, -84, -86, -88, -88, -90, -90, -92, -93, -92, -93, -94, -95, -97, -96, -99, -100, -100, -102, -101, -102, -101, -103, -104, -104, -106, -105, -109, -109, -108, -110, -109, -111, -111, -110, -112, -111, -114, -113, -114, -115, -114, -116, -115, -115, -114, -114, -117, -116, -117, -116, -117, -119, -118, -118, -117, -117, -118, -117, -118, -118, -119, -120, -118, -118, -118, -118, -117, -116, -117, -117, -119, -118, -116, -119, -117, -118, -117, -116, -115, -114, -116, -115, -114, -115, -114, -115, -113, -112, -111, -110, -110, -109, -109, -110, -108, -109, -107, -108, -106, -104, -105, -102, -103, -102, -102, -102, -101, -100, -98, -98, -97, -95, -95, -92, -93, -93, -92, -91, -90, -89, -88, -86, -85, -83, -84, -82, -82, -81, -79, -79, -77, -76, -75, -72, -72, -70, -70, -68, -67, -67, -65, -65, -62, -61, -60, -57, -57, -55, -54, -54, -52, -51, -49, -48, -47, -45, -43, -41, -40, -41, -37, -37, -35, -34, -33, -30, -29, -27, -26, -25, -24, -22, -21, -20, -18, -16, -16, -13, -12, -11, -9, -8, -6, -5, -4, -1, 0, 2, 3, 6, 6, 7, 8, 10, 11, 13, 15, 16, 19, 20, 22, 23, 23, 24, 26, 28, 30, 31, 32, 35, 36, 36, 38, 39, 40, 42, 44, 45, 47, 48, 51, 51, 52, 53, 53, 55, 57, 58, 60, 61, 64, 64, 65, 66, 66, 68, 69, 71, 72, 74, 76, 75, 77, 79, 79, 81, 81, 82, 83, 84, 86, 86, 89, 88, 90, 91, 91, 93, 93, 94, 95, 95, 97, 97, 99, 99, 100, 103, 102, 104, 103, 104, 105, 104, 107, 107, 108, 109, 109, 110, 109, 111, 111, 110, 112, 112, 113, 114, 114, 115, 115, 116, 115, 115, 116, 115, 116, 117, 118, 119, 117, 120, 117, 119, 118, 118, 119, 118, 119, 119, 119, 121, 118, 120, 119, 117, 118, 117, 118, 118, 119, 119, 118, 119, 116, 117, 116, 115, 116, 116, 116, 116, 116, 115, 114, 115, 112, 113, 112, 111, 112, 110, 111, 111, 109, 110, 108, 108, 107, 105, 105, 103, 104, 103, 103, 103, 100, 101, 99, 99, 97, 96, 96, 94, 94, 95, 92, 92, 90, 90, 88, 86, 86, 84, 84, 82, 82, 81, 79, 79, 78, 76, 76, 73, 72, 71, 71, 70, 67, 67, 65, 64, 64, 62, 60, 58, 58, 56, 54, 54, 52, 52, 50, 48, 47, 45, 44, 42, 41, 40, 39, 38, 35, 35, 33, 31, 31, 28, 27, 26, 24, 23, 21, 20, 18, 17, 16, 14, 12, 11, 10, 8, 7, 5, 3, 2, 0, -1, -3, -4, -5, -7, -8, -10, -12, -13, -15, -16, -18, -20, -20, -22, -24, -24, -26, -27, -29, -30, -33, -33, -36, -36, -39, -40, -40, -42, -43, -45, -47, -47, -49, -50, -52, -54, -54, -56, -57, -58, -60, -60, -62, -62, -65, -66, -67, -68, -69, -71, -72, -73, -74, -76, -78, -78, -79, -81, -80, -82, -83, -84, -85, -86, -88, -88, -89, -90, -90, -93, -92, -94, -95, -95, -98, -97, -99, -100, -100, -102, -100, -102, -101, -104, -105, -104, -106, -106, -108, -109, -109, -109, -109, -110, -111, -110, -112, -112, -114, -113, -113, -114, -114, -115, -114, -114, -115, -115, -118, -117, -116, -118, -118, -118, -116, -117, -117, -117, -119, -118, -119, -119, -119, -120, -118, -118, -117, -117, -118, -117, -118, -117, -118, -119, -117, -118, -117, -117, -116, -115, -116, -114, -117, -116, -114, -115, -113, -114, -113, -111, -111, -110, -111, -111, -110, -110, -109, -109, -107, -106, -105, -105, -105, -104, -103, -102, -102, -102, -99, -100, -97, -98, -97, -95, -94, -94, -93, -94, -91, -92, -88, -88, -88, -85, -85, -84, -84, -83, -81, -80, -78, -80, -77, -75, -74, -72, -72, -71, -70, -68, -67, -68, -65, -64, -62, -60, -60, -58, -56, -55, -54, -54, -52, -50, -49, -48, -47, -44, -43, -43, -40, -40, -37, -36, -36, -34, -33, -30, -29, -27, -26, -25, -22, -22, -20, -20, -18, -16, -14, -13, -11, -11, -9, -7, -6, -4, -3, 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 14, 16, 17, 18, 20, 21, 23, 24, 25, 27, 28, 30, 31, 33, 34, 37, 36, 38, 40, 40, 43, 44, 45, 48, 48, 51, 51, 51, 54, 54, 56, 58, 59, 61, 61, 64, 65, 66, 67, 67, 68, 69, 71, 73, 75, 76, 76, 79, 79, 79, 80, 80, 82, 84, 84, 86, 87, 89, 88, 90, 92, 91, 93, 93, 95, 96, 95, 99, 98, 100, 100, 100, 102, 101, 102, 103, 103, 106, 106, 107, 108, 108, 110, 109, 110, 110, 110, 111, 111, 112, 112, 114, 114, 114, 115, 114, 115, 115, 114, 116, 115, 117, 117, 118, 119, 117, 119, 117, 118, 118, 118, 119, 119, 120, 120, 119, 120, 119, 119, 118, 118, 119, 118, 120, 119, 118, 120, 118, 118, 117, 116, 116, 115, 117, 116, 116, 116, 115, 116, 113, 114, 113, 112, 112, 111, 112, 111, 110, 110, 109, 109, 107, 107, 107, 105, 106, 104, 104, 104, 102, 103, 100, 100, 99, 97, 97, 96, 96, 95, 94, 94, 92, 92, 90, 88, 88, 85, 86, 83, 84, 83, 81, 81, 79, 78, 78, 76, 74, 72, 72, 71, 70, 71, 68, 67, 65, 64, 63, 61, 60, 58, 57, 57, 55, 54, 52, 51, 50, 48, 46, 44, 44, 43, 41, 41, 39, 39, 36, 34, 32, 31, 29, 28, 27, 25, 24, 23, 21, 19, 18, 16, 15, 13, 12, 11, 10, 8, 7, 5, 3, 1, -1, -2, -3, -4, -5, -6, -8, -10, -12, -14, -16, -17, -19, -20, -21, -22, -24, -24, -27, -28, -29, -31, -33, -34, -35, -36, -37, -40, -40, -42, -44, -45, -47, -48, -50, -51, -51, -54, -53, -57, -57, -58, -61, -61, -63, -64, -65, -66, -66, -68, -68, -70, -74, -73, -75, -75, -77, -80, -79, -80, -80, -82, -84, -84, -85, -86, -88, -90, -89, -91, -90, -94, -92, -93, -94, -95, -97, -98, -99, -100, -100, -101, -101, -101, -103, -103, -105, -105, -107, -108, -108, -109, -108, -109, -108, -109, -112, -112, -112, -112, -113, -115, -112, -114, -114, -115, -115, -114, -115, -116, -117, -118, -117, -118, -117, -118, -117, -116, -117, -117, -119, -119, -118, -119, -118, -120, -118, -117, -117, -117, -118, -117, -117, -118, -119, -120, -116, -117, -116, -116, -117, -115, -116, -115, -116, -117, -115, -116, -113, -113, -113, -111, -112, -110, -112, -112, -109, -111, -108, -108, -108, -106, -106, -104, -105, -104, -103, -102, -101, -102, -100, -99, -98, -97, -97, -95, -95, -94, -92, -94, -92, -90, -89, -88, -88, -85, -84, -84, -82, -83, -81, -80, -79, -78, -78, -75, -75, -72, -72, -71, -68, -68, -66, -67, -66, -64, -62, -59, -60, -58, -56, -56, -53, -54, -51, -50, -48, -48, -46, -45, -43, -41, -40, -40, -38, -36, -34, -34, -33, -31, -28, -27, -26, -25, -24, -21, -20, -20, -17, -16, -14, -13, -11, -10, -8, -8, -5, -5, -3, 0, 1, 3, 4, 5, 6, 8, 8, 11, 12, 14, 16, 18, 19, 21, 21, 23, 24, 26, 27, 28, 30, 32, 33, 35, 36, 38, 38, 39, 42, 43, 45, 45, 48, 48, 51, 52, 52, 53, 54, 56, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 71, 71, 74, 74, 76, 76, 78, 78, 79, 80, 81, 82, 84, 84, 87, 88, 88, 90, 90, 91, 91, 93, 94, 94, 96, 96, 98, 99, 99, 100, 100, 102, 102, 102, 104, 104, 106, 107, 107, 108, 107, 110, 108, 109, 110, 110, 112, 111, 113, 114, 114, 115, 113, 115, 114, 115, 116, 115, 116, 118, 117, 118, 118, 118, 117, 117, 118, 117, 119, 118, 119, 120, 119, 120, 119, 119, 118, 118, 119, 117, 119, 119, 119, 119, 118, 119, 118, 117, 117, 116, 117, 116, 117, 117, 115, 116, 115, 116, 114, 112, 113, 111, 112, 112, 112, 112, 109, 110, 108, 108, 108, 106, 107, 105, 105, 105, 103, 103, 102, 102, 102, 99, 100, 96, 97, 96, 95, 95, 93, 94, 92, 91, 91, 88, 88, 85, 85, 85, 83, 84, 81, 81, 80, 78, 77, 74, 75, 74, 71, 72, 71, 70, 68, 66, 65, 63, 63, 60, 59, 59, 56, 57, 55, 54, 52, 51, 49, 47, 46, 45, 43, 42, 41, 40, 40, 38, 36, 33, 32, 31, 28, 28, 27, 25, 24, 23, 21, 19, 17, 16, 14, 13, 11, 10, 9, 9, 6, 4, 3, 1, 0, -3, -4, -4, -5, -6, -9, -11, -12, -13, -16, -17, -18, -21, -21, -21, -23, -25, -27, -29, -29, -32, -34, -35, -34, -37, -38, -40, -41, -42, -44, -45, -48, -48, -49, -51, -52, -54, -55, -55, -57, -57, -60, -61, -62, -64, -65, -67, -67, -68, -70, -70, -72, -73, -76, -77, -77, -80, -80, -80, -80, -81, -84, -84, -85, -88, -87, -90, -90, -91, -91, -91, -94, -93, -96, -96, -98, -99, -99, -100, -100, -101, -101, -101, -103, -103, -105, -107, -106, -107, -106, -109, -109, -108, -110, -109, -112, -113, -112, -112, -113, -115, -114, -113, -114, -113, -116, -115, -117, -116, -117, -118, -117, -117, -118, -116, -118, -116, -118, -118, -118, -120, -119, -118, -118, -117, -119, -117, -117, -116, -118, -120, -118, -119, -118, -117, -118, -116, -116, -116, -116, -116, -115, -116, -114, -116, -115, -112, -113, -112, -113, -111, -111, -111, -110, -112, -110, -108, -108, -107, -108, -105, -105, -104, -104, -105, -103, -103, -102, -101, -100, -98, -97, -96, -96, -96, -95, -95, -93, -92, -92, -89, -88, -87, -86, -86, -84, -84, -82, -83, -82, -80, -79, -76, -77, -76, -73, -73, -70, -71, -70, -69, -67, -65, -65, -62, -61, -60, -58, -58, -57, -56, -54, -53, -52, -50, -48, -47, -45, -44, -42, -41, -41, -39, -38, -36, -34, -33, -32, -30, -28, -26, -26, -25, -24, -22, -20, -18, -17, -16, -13, -12, -11, -10, -9, -8, -6, -3, -2, 0, 2, 4, 4, 4, 6, 7, 9, 11, 13, 14, 16, 19, 19, 21, 22, 23, 25, 25, 28, 29, 31, 33, 33, 35, 36, 36, 39, 40, 42, 43, 44, 46, 48, 48, 50, 51, 52, 53, 55, 56, 59, 59, 61, 63, 63, 65, 65, 66, 67, 68, 70, 72, 73, 75, 76, 77, 78, 78, 80, 80, 82, 82, 84, 86, 86, 89, 87, 90, 91, 91, 92, 92, 94, 95, 96, 98, 97, 99, 99, 99, 100, 99, 102, 102, 104, 106, 106, 108, 107, 108, 108, 108, 109, 108, 111, 111, 111, 114, 112, 114, 114, 113, 115, 113, 115, 114, 115, 117, 116, 118, 117, 118, 119, 117, 117, 117, 118, 118, 118, 120, 119, 120, 120, 119, 120, 118, 119, 118, 118, 119, 119, 120, 118, 119, 119, 117, 118, 116, 116, 116, 116, 117, 116, 117, 116, 115, 115, 113, 113, 112, 112, 112, 111, 112, 111, 111, 111, 109, 109, 107, 107, 106, 106, 106, 105, 106, 104, 103, 103, 100, 100, 99, 98, 97, 95, 97, 95, 95, 95, 93, 92, 89, 89, 88, 86, 87, 84, 85, 85, 82, 83, 80, 79, 77, 76, 76, 74, 73, 72, 72, 71, 68, 68, 66, 65, 64, 61, 61, 59, 59, 57, 56, 55, 52, 52, 50, 49, 48, 46, 45, 44, 42, 42, 39, 39, 36, 35, 34, 31, 30, 28, 28, 27, 25, 23, 22, 21, 19, 17, 15, 14, 13, 12, 10, 8, 7, 6, 5, 1, 1, -1, -2, -3, -5, -6, -8, -8, -10, -12, -15, -16, -17, -18, -19, -22, -22, -23, -24, -27, -28, -30, -31, -33, -35, -36, -36, -38, -40, -42, -44, -44, -46, -46, -49, -50, -51, -52, -53, -54, -56, -57, -59, -61, -63, -62, -64, -65, -66, -68, -68, -70, -72, -72, -75, -74, -76, -77, -78, -80, -79, -81, -82, -83, -85, -86, -88, -88, -89, -90, -89, -92, -91, -93, -95, -95, -97, -97, -99, -99, -99, -100, -100, -102, -103, -103, -106, -105, -108, -107, -107, -108, -107, -109, -108, -108, -110, -111, -113, -113, -113, -113, -113, -113, -112, -114, -114, -114, -116, -116, -117, -117, -117, -118, -116, -117, -116, -117, -118, -116, -118, -118, -119, -119, -118, -118, -117, -118, -119, -118, -119, -117, -120, -119, -118, -118, -117, -118, -117, -116, -116, -116, -117, -116, -116, -116, -114, -116, -112, -113, -112, -112, -113, -111, -111, -111, -111, -111, -109, -108, -107, -106, -106, -104, -105, -104, -104, -104, -101, -102, -99, -100, -99, -97, -97, -96, -96, -96, -94, -93, -90, -92, -89, -87, -87, -85, -86, -85, -84, -83, -81, -81, -80, -78, -77, -76, -75, -73, -73, -71, -70, -70, -67, -67, -65, -64, -62, -60, -60, -58, -58, -58, -55, -54, -52, -52, -50, -48, -46, -45, -45, -43, -42, -41, -38, -37, -37, -34, -33, -31, -31, -29, -27, -25, -23, -23, -21, -19, -18, -17, -16, -14, -13, -12, -9, -8, -7, -5, -3, -3, 0, 2, 2, 4, 6, 6, 8, 10, 11, 13, 15, 16, 17, 20, 21, 21, 23, 24, 25, 28, 29, 30, 33, 33, 35, 36, 38, 39, 39, 42, 44, 45, 47, 47, 49, 51, 51, 52, 53, 56, 57, 58, 61, 60, 63, 64, 64, 66, 67, 68, 69, 71, 73, 73, 76, 76, 77, 78, 78, 80, 80, 82, 83, 84, 87, 87, 88, 88, 89, 90, 90, 92, 93, 94, 96, 96, 98, 98, 99, 99, 100, 102, 100, 103, 104, 104, 106, 106, 108, 107, 107, 108, 107, 109, 109, 110, 112, 113, 113, 113, 113, 114, 112, 114, 114, 115, 116, 115, 117, 117, 117, 117, 116, 119, 117, 117, 118, 119, 120, 118, 120, 119, 118, 120, 118, 119, 118, 118, 120, 119, 120, 119, 119, 120, 118, 119, 116, 117, 116, 116, 118, 115, 117, 117, 116, 116, 114, 115, 114, 113, 114, 112, 113, 112, 112, 112, 110, 111, 108, 108, 108, 107, 107, 106, 106, 105, 104, 105, 103, 102, 100, 100, 99, 97, 97, 96, 97, 96, 95, 94, 92, 91, 90, 88, 89, 87, 87, 86, 84, 84, 81, 81, 79, 79, 78, 76, 76, 74, 73, 72, 71, 71, 67, 67, 65, 64, 64, 62, 61, 60, 58, 58, 55, 55, 52, 52, 50, 48, 48, 45, 44, 44, 42, 41, 40, 38, 36, 34, 33, 31, 30, 29, 28, 27, 25, 23, 21, 20, 18, 17, 15, 15, 13, 12, 10, 8, 7, 5, 3, 2, -1, -1, -3, -4, -4, -6, -7, -9, -11, -12, -15, -16, -18, -19, -20, -22, -22, -24, -25, -26, -29, -29, -32, -33, -35, -36, -37, -38, -40, -42, -44, -44, -46, -48, -48, -51, -50, -53, -53, -55, -57, -57, -59, -60, -63, -64, -64, -65, -65, -69, -70, -70, -72, -73, -74, -76, -76, -77, -77, -80, -80, -81, -82, -84, -87, -86, -88, -88, -89, -90, -89, -91, -93, -93, -96, -96, -97, -97, -98, -100, -98, -100, -100, -102, -104, -103, -105, -105, -107, -108, -106, -108, -107, -109, -110, -109, -111, -112, -114, -112, -112, -113, -112, -113, -114, -114, -116, -116, -117, -117, -117, -117, -116, -118, -116, -116, -117, -116, -120, -118, -118, -119, -119, -120, -117, -118, -117, -118, -120, -118, -119, -118, -119, -119, -117, -119, -116, -117, -117, -116, -116, -116, -117, -117, -115, -116, -114, -115, -113, -112, -113, -112, -113, -112, -111, -112, -110, -111, -108, -107, -107, -106, -107, -105, -105, -105, -104, -104, -101, -100, -99, -98, -100, -97, -97, -96, -95, -96, -93, -93, -92, -90, -89, -87, -88, -85, -86, -86, -84, -83, -81, -80, -79, -77, -76, -74, -75, -74, -73, -72, -69, -70, -68, -66, -65, -63, -63, -61, -60, -59, -57, -57, -55, -54, -52, -50, -50, -48, -46, -45, -44, -44, -41, -40, -38, -37, -36, -33, -33, -31, -29, -29, -27, -26, -24, -23, -22, -20, -18, -16, -15, -14, -11, -10, -9, -8, -6, -4, -3, -1, 0, 1, 3, 5, 6, 7, 8, 9, 11, 13, 14, 18, 18, 20, 21, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 36, 38, 40, 40, 41, 45, 45, 47, 47, 48, 50, 51, 53, 55, 56, 58, 59, 61, 61, 63, 64, 64, 66, 66, 68, 70, 72, 73, 74, 76, 77, 76, 78, 78, 80, 81, 82, 84, 85, 87, 88, 88, 88, 89, 90, 92, 91, 94, 94, 96, 97, 97, 99, 97, 99, 99, 100, 102, 102, 104, 104, 107, 107, 106, 107, 106, 108, 108, 109, 110, 110, 111, 112, 113, 113, 112, 114]
# Low pass filter to get rid of power supply switching noise; remove half of first period and half of last period which the lpf glitches out at
s = butter_lowpass_filter(s, 20000, 500000, 2)[250:-250]

#print('THD function output:\n----')
#thd.THD(s, 500000)
print('----')
thdn = thd.THDN(s, 500000) * 100.0
print(f'THD+N: {thdn:.4f}%')
fig, ax = plt.subplots()
ax.plot(t, s)
ax.set(xlabel='time (s)', ylabel='counts', title='Channel 1')
ax.grid()
plt.show()

fftPlot(s, 1/500000)

after-lpf

after-lpf-fft

I don't know what I was doing wrong with the LPF initially that it didn't seem to do anything...this looks like a much cleaner signal

How many periods of the sine wave should I aim for?

Do I need to catch it on the rising edge of a 0-crossing, or will any window work as long as it's an integer number of sine periods?

edit: note: to get percentage from THDN(), I multiplied by 100, stop me if I was wrong about that one

edit edit:

So ideally it would notice when the window bandwidth is too wide like this and produce a useful error message? 🤔

Yes, that would be fantastic

possibly final edit: python snippet with the raw data after LPF

s = [-1.09977277e+02, -1.10507087e+02, -1.10971565e+02, -1.11392150e+02, -1.11812933e+02, -1.12278165e+02, -1.12776409e+02, -1.13284526e+02, -1.13772410e+02, -1.14220043e+02, -1.14642262e+02, -1.15024106e+02, -1.15343888e+02, -1.15603083e+02, -1.15832680e+02, -1.16069341e+02, -1.16311665e+02, -1.16558370e+02, -1.16808321e+02, -1.17073908e+02, -1.17362982e+02, -1.17626351e+02, -1.17817553e+02, -1.17934597e+02, -1.18020128e+02, -1.18092360e+02, -1.18138051e+02, -1.18176059e+02, -1.18220008e+02, -1.18292493e+02, -1.18394463e+02, -1.18471573e+02, -1.18500420e+02, -1.18480538e+02, -1.18414207e+02, -1.18318863e+02, -1.18194920e+02, -1.18017478e+02, -1.17798661e+02, -1.17589256e+02, -1.17397637e+02, -1.17228724e+02, -1.17058034e+02, -1.16841783e+02, -1.16591793e+02, -1.16304798e+02, -1.15967124e+02, -1.15585255e+02, -1.15192815e+02, -1.14813938e+02, -1.14438094e+02, -1.14084459e+02, -1.13751930e+02, -1.13425243e+02, -1.13120109e+02, -1.12806309e+02, -1.12436408e+02, -1.12006873e+02, -1.11545137e+02, -1.11058784e+02, -1.10527732e+02, -1.09953648e+02, -1.09353364e+02, -1.08753434e+02, -1.08172451e+02, -1.07595716e+02, -1.06999341e+02, -1.06354272e+02, -1.05656108e+02, -1.04917960e+02, -1.04137794e+02, -1.03329790e+02, -1.02518733e+02, -1.01735518e+02, -1.00973592e+02, -1.00213865e+02, -9.94695584e+01, -9.87223967e+01, -9.79463637e+01, -9.71247676e+01, -9.62617032e+01, -9.53756155e+01, -9.44539447e+01, -9.35031480e+01, -9.25426670e+01, -9.16000050e+01, -9.06801275e+01, -8.97452196e+01, -8.87962988e+01, -8.78348268e+01, -8.68491397e+01, -8.58323562e+01, -8.47813151e+01, -8.37089904e+01, -8.26122537e+01, -8.15035760e+01, -8.04056955e+01, -7.93206131e+01, -7.82624066e+01, -7.72261477e+01, -7.61804910e+01, -7.51039687e+01, -7.39831835e+01, -7.28111106e+01, -7.15855669e+01, -7.03212389e+01, -6.90572110e+01, -6.78342208e+01, -6.66385504e+01, -6.54190476e+01, -6.41812110e+01, -6.29432336e+01, -6.16911559e+01, -6.04159470e+01, -5.91125136e+01, -5.77787937e+01, -5.64149607e+01, -5.50494636e+01, -5.37023310e+01, -5.23599015e+01, -5.10123481e+01, -4.96664165e+01, -4.83401069e+01, -4.70049098e+01, -4.56145993e+01, -4.41797985e+01, -4.27504082e+01, -4.13611145e+01, -3.99940086e+01, -3.86219935e+01, -3.72396984e+01, -3.58439082e+01, -3.44464501e+01, -3.30557025e+01, -3.16638202e+01, -3.02520060e+01, -2.87947907e+01, -2.73168270e+01, -2.58498615e+01, -2.43754803e+01, -2.28811731e+01, -2.13725958e+01, -1.98678341e+01, -1.83793603e+01, -1.69016869e+01, -1.54303903e+01, -1.39620293e+01, -1.24940353e+01, -1.10112289e+01, -9.50376269e+00, -7.99277059e+00, -6.49325380e+00, -4.98839500e+00, -3.46669245e+00, -1.93434388e+00, -3.96262148e-01, 1.11708457e+00, 2.57230379e+00, 3.98917457e+00, 5.41032762e+00, 6.85205462e+00, 8.32467497e+00, 9.83377064e+00, 1.13545865e+01, 1.28691455e+01, 1.43651818e+01, 1.58350884e+01, 1.72882887e+01, 1.87322804e+01, 2.01728109e+01, 2.16007340e+01, 2.30103130e+01, 2.44118665e+01, 2.58264148e+01, 2.72813558e+01, 2.87670157e+01, 3.02616135e+01, 3.17494053e+01, 3.32063607e+01, 3.46440033e+01, 3.60848008e+01, 3.75309733e+01, 3.89837894e+01, 4.04304242e+01, 4.18488598e+01, 4.32385300e+01, 4.46139342e+01, 4.59726384e+01, 4.73271879e+01, 4.86999570e+01, 5.00789358e+01, 5.14553747e+01, 5.28232769e+01, 5.41788955e+01, 5.55202606e+01, 5.68333940e+01, 5.81233663e+01, 5.93949690e+01, 6.06659014e+01, 6.19486046e+01, 6.32244511e+01, 6.44941107e+01, 6.57450241e+01, 6.69827496e+01, 6.82252468e+01, 6.94447710e+01, 7.06231037e+01, 7.17763950e+01, 7.29306619e+01, 7.40773691e+01, 7.52109381e+01, 7.63548795e+01, 7.75117583e+01, 7.86693218e+01, 7.98055864e+01, 8.09062818e+01, 8.19766660e+01, 8.30220442e+01, 8.40608300e+01, 8.50929227e+01, 8.61186093e+01, 8.71651516e+01, 8.82505429e+01, 8.93719596e+01, 9.04720606e+01, 9.15117949e+01, 9.24937358e+01, 9.33960570e+01, 9.42210742e+01, 9.50012598e+01, 9.57617692e+01, 9.65212853e+01, 9.73063151e+01, 9.81340739e+01, 9.89876260e+01, 9.98670824e+01, 1.00771136e+02, 1.01657480e+02, 1.02484048e+02, 1.03237908e+02, 1.03940603e+02, 1.04609962e+02, 1.05260267e+02, 1.05902544e+02, 1.06558309e+02, 1.07255283e+02, 1.07970614e+02, 1.08673945e+02, 1.09331282e+02, 1.09907897e+02, 1.10410480e+02, 1.10861038e+02, 1.11291131e+02, 1.11723976e+02, 1.12175698e+02, 1.12669948e+02, 1.13207673e+02, 1.13773853e+02, 1.14329723e+02, 1.14835303e+02, 1.15278619e+02, 1.15641244e+02, 1.15914578e+02, 1.16110722e+02, 1.16282359e+02, 1.16481086e+02, 1.16701538e+02, 1.16952156e+02, 1.17223885e+02, 1.17482530e+02, 1.17718184e+02, 1.17911772e+02, 1.18052171e+02, 1.18147789e+02, 1.18220269e+02, 1.18299377e+02, 1.18405622e+02, 1.18551928e+02, 1.18718495e+02, 1.18877002e+02, 1.19008031e+02, 1.19086080e+02, 1.19096107e+02, 1.19031203e+02, 1.18917249e+02, 1.18788364e+02, 1.18669261e+02, 1.18563378e+02, 1.18445700e+02, 1.18326044e+02, 1.18211396e+02, 1.18079665e+02, 1.17902924e+02, 1.17650641e+02, 1.17332176e+02, 1.16970981e+02, 1.16585779e+02, 1.16204335e+02, 1.15845908e+02, 1.15522767e+02, 1.15201547e+02, 1.14845403e+02, 1.14457092e+02, 1.14040268e+02, 1.13612373e+02, 1.13172867e+02, 1.12708629e+02, 1.12211788e+02, 1.11691926e+02, 1.11183708e+02, 1.10684091e+02, 1.10190482e+02, 1.09714101e+02, 1.09235175e+02, 1.08726619e+02, 1.08171036e+02, 1.07558742e+02, 1.06885983e+02, 1.06166716e+02, 1.05413210e+02, 1.04635893e+02, 1.03870065e+02, 1.03113136e+02, 1.02349454e+02, 1.01595131e+02, 1.00847597e+02, 1.00091331e+02, 9.93159213e+01, 9.85284506e+01, 9.77211698e+01, 9.68763466e+01, 9.59969181e+01, 9.50867917e+01, 9.41637060e+01, 9.32274271e+01, 9.22918552e+01, 9.13800545e+01, 9.04534834e+01, 8.94859176e+01, 8.84745264e+01, 8.74330267e+01, 8.63726418e+01, 8.52755287e+01, 8.41578622e+01, 8.30320778e+01, 8.19073249e+01, 8.08033207e+01, 7.97060577e+01, 7.86053576e+01, 7.74942706e+01, 7.63818394e+01, 7.52744741e+01, 7.41363191e+01, 7.29572478e+01, 7.17724267e+01, 7.06068110e+01, 6.94501471e+01, 6.82947698e+01, 6.71352381e+01, 6.59546009e+01, 6.47421053e+01, 6.34785577e+01, 6.21665927e+01, 6.08240032e+01, 5.94515377e+01, 5.80780355e+01, 5.67371247e+01, 5.54239150e+01, 5.41067803e+01, 5.27637636e+01, 5.14075769e+01, 5.00478336e+01, 4.86914618e+01, 4.73431372e+01, 4.59789888e+01, 4.45831306e+01, 4.31594824e+01, 4.17256352e+01, 4.02944640e+01, 3.88614902e+01, 3.74370306e+01, 3.60278612e+01, 3.46111957e+01, 3.31714638e+01, 3.17257035e+01, 3.02861787e+01, 2.88477927e+01, 2.74202717e+01, 2.60098520e+01, 2.46066317e+01, 2.32032859e+01, 2.17946872e+01, 2.03775225e+01, 1.89499276e+01, 1.75111530e+01, 1.60479117e+01, 1.45388392e+01, 1.29847693e+01, 1.14154093e+01, 9.86575747e+00, 8.34593135e+00, 6.83471025e+00, 5.31676080e+00, 3.80841383e+00, 2.33396165e+00, 8.95260217e-01, -5.35018428e-01, -1.98983765e+00, -3.47763081e+00, -4.98918759e+00, -6.51678264e+00, -8.05414430e+00, -9.59635483e+00, -1.11397083e+01, -1.26815463e+01, -1.42200863e+01, -1.57542553e+01, -1.72701756e+01, -1.87457364e+01, -2.01809560e+01, -2.15913623e+01, -2.30025239e+01, -2.44323212e+01, -2.58655725e+01, -2.73048114e+01, -2.87514941e+01, -3.01928838e+01, -3.16203366e+01, -3.30151792e+01, -3.44061440e+01, -3.58269357e+01, -3.72595064e+01, -3.86772179e+01, -4.00755525e+01, -4.14657386e+01, -4.28694409e+01, -4.43011215e+01, -4.57293445e+01, -4.71189019e+01, -4.84739013e+01, -4.98124275e+01, -5.11480362e+01, -5.24770255e+01, -5.37704359e+01, -5.50098711e+01, -5.62253989e+01, -5.74794491e+01, -5.87870014e+01, -6.01156185e+01, -6.14414397e+01, -6.27478904e+01, -6.40511070e+01, -6.53625724e+01, -6.66498163e+01, -6.78913749e+01, -6.91013639e+01, -7.03047232e+01, -7.15059280e+01, -7.27082302e+01, -7.39004912e+01, -7.50754405e+01, -7.62556258e+01, -7.74164932e+01, -7.85418654e+01, -7.96356596e+01, -8.06889497e+01, -8.17110028e+01, -8.26966244e+01, -8.36708388e+01, -8.46651543e+01, -8.56872215e+01, -8.67409198e+01, -8.77872004e+01, -8.87990904e+01, -8.97728816e+01, -9.07080108e+01, -9.16195085e+01, -9.25191720e+01, -9.34025437e+01, -9.42673694e+01, -9.51531379e+01, -9.60596895e+01, -9.69323645e+01, -9.77613811e+01, -9.85822935e+01, -9.94338141e+01, -1.00301363e+02, -1.01147146e+02, -1.01959196e+02, -1.02730928e+02, -1.03486598e+02, -1.04217350e+02, -1.04891586e+02, -1.05543619e+02, -1.06198684e+02, -1.06860947e+02, -1.07519584e+02, -1.08153844e+02, -1.08763844e+02, -1.09350961e+02, -1.09917385e+02, -1.10452396e+02, -1.10950161e+02, -1.11408579e+02, -1.11855001e+02, -1.12335955e+02, -1.12828772e+02, -1.13316927e+02, -1.13802449e+02, -1.14246820e+02, -1.14638604e+02, -1.14985952e+02, -1.15296954e+02, -1.15579222e+02, -1.15839624e+02, -1.16097506e+02, -1.16353199e+02, -1.16607054e+02, -1.16846056e+02, -1.17061875e+02, -1.17276632e+02, -1.17465808e+02, -1.17586870e+02, -1.17653720e+02, -1.17732438e+02, -1.17841987e+02, -1.17940572e+02, -1.18039564e+02, -1.18160270e+02, -1.18289745e+02, -1.18405088e+02, -1.18477644e+02, -1.18489616e+02, -1.18445124e+02, -1.18376795e+02, -1.18282051e+02, -1.18147136e+02, -1.18004634e+02, -1.17877789e+02, -1.17782056e+02, -1.17699884e+02, -1.17591531e+02, -1.17430541e+02, -1.17201182e+02, -1.16936160e+02, -1.16633586e+02, -1.16280782e+02, -1.15898266e+02, -1.15475288e+02, -1.15046553e+02, -1.14650051e+02, -1.14270612e+02, -1.13896689e+02, -1.13519896e+02, -1.13134506e+02, -1.12723609e+02, -1.12276712e+02, -1.11788386e+02, -1.11283759e+02, -1.10808030e+02, -1.10351260e+02, -1.09905467e+02, -1.09464472e+02, -1.09010327e+02, -1.08531156e+02, -1.07979895e+02, -1.07327408e+02, -1.06585402e+02, -1.05793585e+02, -1.04982449e+02, -1.04147681e+02, -1.03314237e+02, -1.02512899e+02, -1.01763526e+02, -1.01050541e+02, -1.00321005e+02, -9.95520564e+01, -9.87297780e+01, -9.78606239e+01, -9.69516228e+01, -9.59831120e+01, -9.49845675e+01, -9.40183315e+01, -9.31130139e+01, -9.22453342e+01, -9.13969640e+01, -9.05540251e+01, -8.96797819e+01, -8.87635183e+01, -8.77732504e+01, -8.66905157e+01, -8.55607514e+01, -8.44316769e+01, -8.33367016e+01, -8.22707015e+01, -8.12151776e+01, -8.01699635e+01, -7.91343916e+01, -7.81074788e+01, -7.70613547e+01, -7.59507935e+01, -7.47608990e+01, -7.35121882e+01, -7.22355434e+01, -7.09541030e+01, -6.96843405e+01, -6.84371783e+01, -6.72324233e+01, -6.60683328e+01, -6.49014349e+01, -6.37014101e+01, -6.24621370e+01, -6.11947818e+01, -5.99086713e+01, -5.85979857e+01, -5.72733184e+01, -5.59562004e+01, -5.46613196e+01, -5.33844230e+01, -5.21082095e+01, -5.08338757e+01, -4.95488003e+01, -4.82313522e+01, -4.68814591e+01, -4.54874451e+01, -4.40568432e+01, -4.26236070e+01, -4.12116752e+01, -3.98233288e+01, -3.84321875e+01, -3.70065520e+01, -3.55527657e+01, -3.41034975e+01, -3.26546852e+01, -3.11900978e+01, -2.97125614e+01, -2.82247487e+01, -2.67424413e+01, -2.52764063e+01, -2.38199616e+01, -2.23545521e+01, -2.08676516e+01, -1.93917065e+01, -1.79488729e+01, -1.65128332e+01, -1.50647783e+01, -1.36188852e+01, -1.21716162e+01, -1.06938466e+01, -9.18015211e+00, -7.64200975e+00, -6.10212937e+00, -4.57652110e+00, -3.06228453e+00, -1.55677911e+00, -7.10467081e-02, 1.37487086e+00, 2.79577233e+00, 4.21672607e+00, 5.65529963e+00, 7.13622369e+00, 8.64785044e+00, 1.01536569e+01, 1.16417145e+01, 1.31313293e+01, 1.46225905e+01, 1.60887542e+01, 1.75257761e+01, 1.89457379e+01, 2.03713786e+01, 2.18183323e+01, 2.32830588e+01, 2.47621271e+01, 2.62390070e+01, 2.77022291e+01, 2.91578439e+01, 3.06104986e+01, 3.20636085e+01, 3.35329023e+01, 3.50285394e+01, 3.65161552e+01, 3.79720922e+01, 3.93948211e+01, 4.07716852e+01, 4.21096237e+01, 4.34422985e+01, 4.48069437e+01, 4.62012299e+01, 4.76085811e+01, 4.90166813e+01, 5.04034987e+01, 5.17814473e+01, 5.31597018e+01, 5.45179580e+01, 5.58564126e+01, 5.71762615e+01, 5.84926966e+01, 5.98165479e+01, 6.11282918e+01, 6.24148909e+01, 6.36685512e+01, 6.49122885e+01, 6.61494054e+01, 6.73558521e+01, 6.85164111e+01, 6.96228686e+01, 7.07124362e+01, 7.18254571e+01, 7.29755953e+01, 7.41437260e+01, 7.53154831e+01, 7.64939632e+01, 7.76542586e+01, 7.87932429e+01, 7.99098633e+01, 8.09912180e+01, 8.20435077e+01, 8.30859908e+01, 8.41594081e+01, 8.52639429e+01, 8.63713427e+01, 8.74750115e+01, 8.85571663e+01, 8.96064928e+01, 9.06168149e+01, 9.15725290e+01, 9.24656166e+01, 9.33071634e+01, 9.41344118e+01, 9.49742290e+01, 9.58447745e+01, 9.67437750e+01, 9.76413982e+01, 9.85435267e+01, 9.94540430e+01, 1.00335142e+02, 1.01148540e+02, 1.01897740e+02, 1.02615344e+02, 1.03299176e+02, 1.03949514e+02, 1.04581700e+02, 1.05207461e+02, 1.05862075e+02, 1.06542009e+02, 1.07216716e+02, 1.07878424e+02, 1.08509019e+02, 1.09084112e+02, 1.09602930e+02, 1.10081301e+02, 1.10519119e+02, 1.10945195e+02, 1.11420429e+02, 1.11958158e+02, 1.12524316e+02, 1.13080145e+02, 1.13612393e+02, 1.14099670e+02, 1.14516030e+02, 1.14873795e+02, 1.15184732e+02, 1.15472951e+02, 1.15769922e+02, 1.16083877e+02, 1.16433037e+02, 1.16814933e+02, 1.17199365e+02, 1.17565033e+02, 1.17898008e+02, 1.18176917e+02, 1.18376309e+02, 1.18495953e+02, 1.18553309e+02, 1.18590661e+02, 1.18652074e+02, 1.18740429e+02, 1.18856304e+02, 1.18985278e+02, 1.19089820e+02, 1.19131576e+02, 1.19087015e+02, 1.18984337e+02, 1.18846411e+02, 1.18677791e+02, 1.18510028e+02, 1.18365189e+02, 1.18244158e+02, 1.18146280e+02, 1.18056502e+02, 1.17937120e+02, 1.17776651e+02, 1.17582600e+02, 1.17335302e+02, 1.17050540e+02, 1.16754736e+02, 1.16440282e+02, 1.16102840e+02, 1.15753959e+02, 1.15429062e+02, 1.15124979e+02, 1.14825014e+02, 1.14530606e+02, 1.14215748e+02, 1.13849943e+02, 1.13414542e+02, 1.12926908e+02, 1.12402005e+02, 1.11852309e+02, 1.11314611e+02, 1.10787336e+02, 1.10255465e+02, 1.09708717e+02, 1.09154040e+02, 1.08596726e+02, 1.08000550e+02, 1.07368916e+02, 1.06719463e+02, 1.06052148e+02, 1.05367895e+02, 1.04641539e+02, 1.03884409e+02, 1.03132810e+02, 1.02398532e+02, 1.01675553e+02, 1.00932332e+02, 1.00147843e+02, 9.93095541e+01, 9.84115558e+01, 9.74662571e+01, 9.64982418e+01, 9.55259545e+01, 9.45491921e+01, 9.36081291e+01, 9.27290157e+01, 9.18735038e+01, 9.10000945e+01, 9.00940174e+01, 8.91600244e+01, 8.81762197e+01, 8.71165592e+01, 8.59935604e+01, 8.48594591e+01, 8.37648195e+01, 8.27162551e+01, 8.17159389e+01, 8.07360974e+01, 7.97294518e+01, 7.86910151e+01, 7.76189909e+01, 7.65005558e+01, 7.53292017e+01, 7.41165543e+01, 7.28729685e+01, 7.16073554e+01, 7.03672153e+01, 6.91978391e+01, 6.80871120e+01, 6.69833312e+01, 6.58498871e+01, 6.46760645e+01, 6.34431517e+01, 6.21411913e+01, 6.07668938e+01, 5.93351784e+01, 5.79130068e+01, 5.65468023e+01, 5.52260347e+01, 5.39141767e+01, 5.25851506e+01, 5.12483143e+01, 4.99106441e+01, 4.85503559e+01, 4.71533898e+01, 4.57385697e+01, 4.43200432e+01, 4.29079245e+01, 4.15223193e+01, 4.01625435e+01, 3.88267377e+01, 3.74989583e+01, 3.61275240e+01, 3.47052629e+01, 3.32565824e+01, 3.17732832e+01, 3.02514682e+01, 2.87038233e+01, 2.71539795e+01, 2.56186172e+01, 2.40952946e+01, 2.25816568e+01, 2.10888951e+01, 1.96237378e+01, 1.81627071e+01, 1.66891273e+01, 1.52053400e+01, 1.37268912e+01, 1.22643916e+01, 1.07977077e+01, 9.29959231e+00, 7.76598682e+00, 6.22266138e+00, 4.71491603e+00, 3.27260015e+00, 1.87306111e+00, 4.84776705e-01, -9.01589080e-01, -2.30604156e+00, -3.74163591e+00, -5.18913991e+00, -6.63443738e+00, -8.10782982e+00, -9.62905416e+00, -1.11693104e+01, -1.27207548e+01, -1.42906511e+01, -1.58563862e+01, -1.73889735e+01, -1.88698679e+01, -2.03021927e+01, -2.17174507e+01, -2.31519934e+01, -2.46035506e+01, -2.60429033e+01, -2.74769427e+01, -2.89241421e+01, -3.03833867e+01, -3.18398923e+01, -3.32700841e+01, -3.46722037e+01, -3.60598780e+01, -3.74434299e+01, -3.88303152e+01, -4.02255812e+01, -4.16189587e+01, -4.30033510e+01, -4.44009824e+01, -4.58133633e+01, -4.72140458e+01, -4.85851178e+01, -4.99289661e+01, -5.12754368e+01, -5.26185906e+01, -5.39277233e+01, -5.52098508e+01, -5.64980520e+01, -5.78151875e+01, -5.91490152e+01, -6.04900631e+01, -6.18179471e+01, -6.31190834e+01, -6.44120990e+01, -6.56704058e+01, -6.68638639e+01, -6.80015319e+01, -6.91194587e+01, -7.02840433e+01, -7.14992537e+01, -7.27250883e+01, -7.39596606e+01, -7.52011815e+01, -7.64346667e+01, -7.76366836e+01, -7.87924903e+01, -7.99075826e+01, -8.09879880e+01, -8.20531442e+01, -8.31041305e+01, -8.41291014e+01, -8.51478631e+01, -8.61746293e+01, -8.71922164e+01, -8.81890709e+01, -8.91715621e+01, -9.01182032e+01, -9.10292094e+01, -9.19333538e+01, -9.28110927e+01, -9.36501388e+01, -9.44840254e+01, -9.53632499e+01, -9.62807054e+01, -9.71892902e+01, -9.80698241e+01, -9.88970035e+01, -9.96960219e+01, -1.00499401e+02, -1.01276267e+02, -1.02006394e+02, -1.02704825e+02, -1.03410515e+02, -1.04137018e+02, -1.04879366e+02, -1.05633228e+02, -1.06381594e+02, -1.07126197e+02, -1.07841730e+02, -1.08498654e+02, -1.09092754e+02, -1.09611074e+02, -1.10075300e+02, -1.10516884e+02, -1.10945720e+02, -1.11369423e+02, -1.11833682e+02, -1.12368356e+02, -1.12923812e+02, -1.13464151e+02, -1.13965021e+02, -1.14398104e+02, -1.14773892e+02, -1.15102799e+02, -1.15394632e+02, -1.15671603e+02, -1.15963435e+02, -1.16290166e+02, -1.16637257e+02, -1.16980071e+02, -1.17288209e+02, -1.17555577e+02, -1.17780082e+02, -1.17935830e+02, -1.18021703e+02, -1.18067373e+02, -1.18135860e+02, -1.18243398e+02, -1.18345843e+02, -1.18439243e+02, -1.18534671e+02, -1.18626423e+02, -1.18683975e+02, -1.18674405e+02, -1.18591582e+02, -1.18435123e+02, -1.18248773e+02, -1.18078149e+02, -1.17927665e+02, -1.17799338e+02, -1.17693398e+02, -1.17608811e+02, -1.17516991e+02, -1.17384931e+02, -1.17191645e+02, -1.16925699e+02, -1.16609676e+02, -1.16248724e+02, -1.15848851e+02, -1.15456425e+02, -1.15130267e+02, -1.14881343e+02, -1.14646418e+02, -1.14380422e+02, -1.14053424e+02, -1.13661067e+02, -1.13243867e+02, -1.12791470e+02, -1.12285141e+02, -1.11741350e+02, -1.11187002e+02, -1.10641517e+02, -1.10104675e+02, -1.09575859e+02, -1.09040850e+02, -1.08490011e+02, -1.07917435e+02, -1.07320142e+02, -1.06697366e+02, -1.06036570e+02, -1.05357718e+02, -1.04675770e+02, -1.03988013e+02, -1.03306220e+02, -1.02624961e+02, -1.01940403e+02, -1.01236677e+02, -1.00490325e+02, -9.97005417e+01, -9.88557259e+01, -9.79506860e+01, -9.69983609e+01, -9.60237052e+01, -9.50454031e+01, -9.40901040e+01, -9.31886168e+01, -9.23062225e+01, -9.14042077e+01, -9.04832049e+01, -8.95446720e+01, -8.85772086e+01, -8.75610109e+01, -8.65115209e+01, -8.54413411e+01, -8.43604101e+01, -8.33163459e+01, -8.23138353e+01, -8.13272245e+01, -8.03376832e+01, -7.93321697e+01, -7.83023969e+01, -7.72037749e+01, -7.60220892e+01, -7.47918931e+01, -7.35399972e+01, -7.22863525e+01, -7.10450360e+01, -6.98386146e+01, -6.86676817e+01, -6.75040382e+01, -6.63141709e+01, -6.50626324e+01, -6.37545918e+01, -6.24234098e+01, -6.10937054e+01, -5.97692957e+01, -5.84525733e+01, -5.71448043e+01, -5.58330386e+01, -5.45351313e+01, -5.32494974e+01, -5.19342923e+01, -5.05751270e+01, -4.91909834e+01, -4.78098601e+01, -4.64245012e+01, -4.50166885e+01, -4.35882117e+01, -4.21547888e+01, -4.07410598e+01, -3.93365243e+01, -3.79199719e+01, -3.64905377e+01, -3.50616631e+01, -3.36427392e+01, -3.22130981e+01, -3.07588264e+01, -2.92848476e+01, -2.78090248e+01, -2.63439769e+01, -2.48846133e+01, -2.34270623e+01, -2.19685135e+01, -2.05204095e+01, -1.91035714e+01, -1.77175628e+01, -1.63337120e+01, -1.49318077e+01, -1.35253671e+01, -1.21241067e+01, -1.06944823e+01, -9.20113943e+00, -7.66278078e+00, -6.10827967e+00, -4.55873593e+00, -3.04203264e+00, -1.54923970e+00, -5.94611249e-02, 1.41539170e+00, 2.85440849e+00, 4.27156668e+00, 5.70454944e+00, 7.16556397e+00, 8.64830915e+00, 1.01472073e+01, 1.16708451e+01, 1.32239189e+01, 1.47814291e+01, 1.63256162e+01, 1.78581042e+01, 1.93806561e+01, 2.08950388e+01, 2.23895679e+01, 2.38571149e+01, 2.53208436e+01, 2.68105527e+01, 2.83323805e+01, 2.98621945e+01, 3.13826537e+01, 3.28821037e+01, 3.43401393e+01, 3.57446719e+01, 3.70900874e+01, 3.84023283e+01, 3.97147099e+01, 4.10372157e+01, 4.23763022e+01, 4.37222497e+01, 4.50678789e+01, 4.64215340e+01, 4.77886347e+01, 4.91589018e+01, 5.04982432e+01, 5.18111348e+01, 5.31288455e+01, 5.44463155e+01, 5.57466524e+01, 5.70189316e+01, 5.82837139e+01, 5.95825294e+01, 6.09159493e+01, 6.22558065e+01, 6.35953737e+01, 6.49299516e+01, 6.62431538e+01, 6.75246372e+01, 6.87554882e+01, 6.99385153e+01, 7.11049607e+01, 7.22776082e+01, 7.34720953e+01, 7.46714970e+01, 7.58636880e+01, 7.70539141e+01, 7.82192387e+01, 7.93449164e+01, 8.04360898e+01, 8.14848481e+01, 8.24879131e+01, 8.34855064e+01, 8.45194708e+01, 8.55904719e+01, 8.66969970e+01, 8.78227284e+01, 8.89284843e+01, 8.99878699e+01, 9.09848628e+01, 9.19249264e+01, 9.28015728e+01, 9.36270028e+01, 9.44525822e+01, 9.52875868e+01, 9.61380143e+01, 9.70206036e+01, 9.79320090e+01, 9.88549865e+01, 9.97501131e+01, 1.00591246e+02, 1.01376305e+02, 1.02120189e+02, 1.02835541e+02, 1.03532745e+02, 1.04233411e+02, 1.04939139e+02, 1.05650781e+02, 1.06381977e+02, 1.07127883e+02, 1.07844240e+02, 1.08488248e+02, 1.09073851e+02, 1.09613944e+02, 1.10119997e+02, 1.10628586e+02, 1.11151852e+02, 1.11697523e+02, 1.12256455e+02, 1.12808174e+02, 1.13325356e+02, 1.13790694e+02, 1.14234906e+02, 1.14640573e+02, 1.14970830e+02, 1.15243942e+02, 1.15502485e+02, 1.15777078e+02, 1.16061607e+02, 1.16364614e+02, 1.16691099e+02, 1.17016593e+02, 1.17297281e+02, 1.17504847e+02, 1.17690148e+02, 1.17876660e+02, 1.18040695e+02, 1.18180210e+02, 1.18308444e+02, 1.18461995e+02, 1.18638446e+02, 1.18808158e+02, 1.18950719e+02, 1.19039915e+02, 1.19073580e+02, 1.19039807e+02, 1.18933853e+02, 1.18782970e+02, 1.18608659e+02, 1.18440601e+02, 1.18299265e+02, 1.18197571e+02, 1.18115736e+02, 1.18012116e+02, 1.17885405e+02, 1.17722562e+02, 1.17516378e+02, 1.17277474e+02, 1.17015045e+02, 1.16750150e+02, 1.16484323e+02, 1.16205329e+02, 1.15905296e+02, 1.15606550e+02, 1.15324671e+02, 1.15042957e+02, 1.14749695e+02, 1.14410573e+02, 1.14003992e+02, 1.13545138e+02, 1.13060806e+02, 1.12584499e+02, 1.12125908e+02, 1.11690881e+02, 1.11255540e+02, 1.10789804e+02, 1.10314293e+02, 1.09830622e+02, 1.09327000e+02, 1.08782869e+02, 1.08172627e+02, 1.07495220e+02, 1.06753499e+02, 1.05979618e+02, 1.05224549e+02, 1.04523013e+02, 1.03856410e+02, 1.03169757e+02, 1.02452306e+02, 1.01711530e+02, 1.00940554e+02, 1.00122812e+02, 9.92625537e+01, 9.83783874e+01, 9.74579151e+01, 9.65344646e+01, 9.56582731e+01, 9.48219485e+01, 9.39914610e+01, 9.31159288e+01, 9.21888147e+01, 9.12350114e+01, 9.02466738e+01, 8.92067897e+01, 8.81329081e+01, 8.70525050e+01, 8.59584682e+01, 8.48732599e+01, 8.38255111e+01, 8.28065690e+01, 8.17954705e+01, 8.07503851e+01, 7.96571690e+01, 7.85218404e+01, 7.73508676e+01, 7.61506889e+01, 7.49140183e+01, 7.36644177e+01, 7.24324515e+01, 7.12385999e+01, 7.00818216e+01, 6.89326871e+01, 6.77835202e+01, 6.66289424e+01, 6.54521139e+01, 6.42290614e+01, 6.29588116e+01, 6.16699226e+01, 6.03566883e+01, 5.90164103e+01, 5.76620017e+01, 5.63032682e+01, 5.49740321e+01, 5.36697049e+01, 5.23590209e+01, 5.10204058e+01, 4.96402307e+01, 4.82378825e+01, 4.68414936e+01, 4.54838223e+01, 4.41590418e+01, 4.28078735e+01, 4.14035386e+01, 3.99701866e+01, 3.85262943e+01, 3.70720162e+01, 3.56080154e+01, 3.41352764e+01, 3.26549560e+01, 3.11682702e+01, 2.96897708e+01, 2.82292193e+01, 2.67791395e+01, 2.53470910e+01, 2.39240493e+01, 2.24764897e+01, 2.10089434e+01, 1.95390134e+01, 1.80791651e+01, 1.66375965e+01, 1.51789994e+01, 1.36795363e+01, 1.21647607e+01, 1.06534016e+01, 9.13168468e+00, 7.60386861e+00, 6.08662323e+00, 4.57770836e+00, 3.10182710e+00, 1.67452856e+00, 2.50678160e-01, -1.21490224e+00, -2.71157034e+00, -4.21684656e+00, -5.72787422e+00, -7.24234378e+00, -8.77181175e+00, -1.03235766e+01, -1.18748438e+01, -1.33963044e+01, -1.48823676e+01, -1.63577248e+01, -1.78268951e+01, -1.92532987e+01, -2.06269418e+01, -2.19970756e+01, -2.33984079e+01, -2.48135204e+01, -2.62428274e+01, -2.76992202e+01, -2.91769275e+01, -3.06574061e+01, -3.21141520e+01, -3.35432158e+01, -3.49433086e+01, -3.63284346e+01, -3.77225681e+01, -3.91153128e+01, -4.05128156e+01, -4.19324895e+01, -4.33719956e+01, -4.48152753e+01, -4.62375125e+01, -4.76491565e+01, -4.90447379e+01, -5.03945634e+01, -5.17069844e+01, -5.29898530e+01, -5.42636113e+01, -5.55564331e+01, -5.68736873e+01, -5.82044723e+01, -5.95270649e+01, -6.08400363e+01, -6.21428993e+01, -6.34358525e+01, -6.47062054e+01, -6.59195528e+01, -6.70815445e+01, -6.82256032e+01, -6.94028316e+01, -7.06339156e+01, -7.18770392e+01, -7.31156095e+01, -7.43515993e+01, -7.55731698e+01, -7.67460754e+01, -7.78489142e+01, -7.88971478e+01, -7.99045315e+01, -8.09096074e+01, -8.19395130e+01, -8.29852235e+01, -8.40395691e+01, -8.51104220e+01, -8.62157772e+01, -8.73263259e+01, -8.83811704e+01, -8.93539639e+01, -9.02707018e+01, -9.11793182e+01, -9.20737663e+01, -9.29372059e+01, -9.37995682e+01, -9.46818896e+01, -9.55711295e+01, -9.64577779e+01, -9.73486671e+01, -9.82216409e+01, -9.90621272e+01, -9.98750078e+01, -1.00651820e+02, -1.01401920e+02, -1.02133292e+02, -1.02879251e+02, -1.03675728e+02, -1.04491769e+02, -1.05291276e+02, -1.06036471e+02, -1.06717138e+02, -1.07369640e+02, -1.07980894e+02, -1.08530574e+02, -1.09047801e+02, -1.09568080e+02, -1.10102773e+02, -1.10632357e+02, -1.11130059e+02, -1.11618899e+02, -1.12155559e+02, -1.12723778e+02, -1.13270393e+02, -1.13772657e+02, -1.14216996e+02, -1.14610351e+02, -1.14960310e+02, -1.15274512e+02, -1.15560222e+02, -1.15837412e+02, -1.16147255e+02, -1.16463428e+02, -1.16753783e+02, -1.17037245e+02, -1.17314087e+02, -1.17571497e+02, -1.17774812e+02, -1.17902630e+02, -1.17970702e+02, -1.18019979e+02, -1.18093527e+02, -1.18193516e+02, -1.18320052e+02, -1.18445076e+02, -1.18548999e+02, -1.18632579e+02, -1.18643997e+02, -1.18564151e+02, -1.18424603e+02, -1.18277387e+02, -1.18159381e+02, -1.18054795e+02, -1.17978563e+02, -1.17926278e+02, -1.17853493e+02, -1.17770230e+02, -1.17684071e+02, -1.17560410e+02, -1.17363635e+02, -1.17112770e+02, -1.16824039e+02, -1.16484121e+02, -1.16139848e+02, -1.15837638e+02, -1.15581060e+02, -1.15343457e+02, -1.15078413e+02, -1.14754862e+02, -1.14367517e+02, -1.13929437e+02, -1.13425771e+02, -1.12862973e+02, -1.12288803e+02, -1.11723985e+02, -1.11195904e+02, -1.10721791e+02, -1.10270761e+02, -1.09806575e+02, -1.09304536e+02, -1.08749356e+02, -1.08119801e+02, -1.07431681e+02, -1.06725924e+02, -1.06005441e+02, -1.05273060e+02, -1.04544757e+02, -1.03831512e+02, -1.03113498e+02, -1.02363714e+02, -1.01578291e+02, -1.00756423e+02, -9.99128514e+01, -9.90457084e+01, -9.81415857e+01, -9.72197800e+01, -9.63081202e+01, -9.54389286e+01, -9.46192313e+01, -9.38245895e+01, -9.30365354e+01, -9.22284137e+01, -9.13692549e+01, -9.04534391e+01, -8.95067732e+01, -8.85222754e+01, -8.74703553e+01, -8.63739536e+01, -8.52782447e+01, -8.42148542e+01, -8.31775028e+01, -8.21336798e+01, -8.10609442e+01, -7.99584714e+01, -7.88539910e+01, -7.77403272e+01, -7.65728639e+01, -7.53632823e+01, -7.41620978e+01, -7.29909086e+01, -7.18365317e+01, -7.06754695e+01, -6.95049690e+01, -6.83369642e+01, -6.71796863e+01, -6.60116129e+01, -6.47915175e+01, -6.35066436e+01, -6.21782301e+01, -6.08368494e+01, -5.94912630e+01, -5.81478367e+01, -5.68242760e+01, -5.55185699e+01, -5.42149956e+01, -5.29024191e+01, -5.15735176e+01, -5.02240311e+01, -4.88520737e+01, -4.74575242e+01, -4.60415052e+01, -4.46059505e+01, -4.31532596e+01, -4.17127483e+01, -4.03176723e+01, -3.89488351e+01, -3.75780204e+01, -3.62122756e+01, -3.48696286e+01, -3.35347622e+01, -3.21698067e+01, -3.07631862e+01, -2.93223731e+01, -2.78677907e+01, -2.64278491e+01, -2.50083190e+01, -2.35854359e+01, -2.21427228e+01, -2.06830495e+01, -1.92093340e+01, -1.77243719e+01, -1.62173641e+01, -1.46952792e+01, -1.31905253e+01, -1.16981727e+01, -1.01873850e+01, -8.65089353e+00, -7.09833634e+00, -5.53732721e+00, -3.97365430e+00, -2.39815761e+00, -8.18407987e-01, 7.19983345e-01, 2.18725767e+00, 3.59307588e+00, 4.97421165e+00, 6.37111772e+00, 7.79794535e+00, 9.24965499e+00, 1.07347440e+01, 1.22707438e+01, 1.38405030e+01, 1.54034780e+01, 1.69316144e+01, 1.83937513e+01, 1.97982936e+01, 2.11809281e+01, 2.25411200e+01, 2.39064120e+01, 2.53359138e+01, 2.68409056e+01, 2.83851823e+01, 2.99279091e+01, 3.14539073e+01, 3.29534319e+01, 3.44077084e+01, 3.58193546e+01, 3.72058429e+01, 3.85807636e+01, 3.99542606e+01, 4.13468788e+01, 4.27586371e+01, 4.41618076e+01, 4.55374148e+01, 4.68736318e+01, 4.81776330e+01, 4.94561688e+01, 5.07153310e+01, 5.19737839e+01, 5.32446472e+01, 5.45364533e+01, 5.58407040e+01, 5.71641374e+01, 5.85238103e+01, 5.99030227e+01, 6.12890255e+01, 6.26591611e+01, 6.39850372e+01, 6.52758375e+01, 6.65398730e+01, 6.77710399e+01, 6.89801758e+01, 7.01894129e+01, 7.13875401e+01, 7.25672931e+01, 7.37646399e+01, 7.49771317e+01, 7.61621652e+01, 7.73047067e+01, 7.84098486e+01, 7.94697995e+01, 8.04948728e+01, 8.15342381e+01, 8.25948764e+01, 8.36671844e+01, 8.47705262e+01, 8.58900973e+01, 8.70012948e+01, 8.80739627e+01, 8.90756646e+01, 9.00275358e+01, 9.09604119e+01, 9.18835611e+01, 9.27906404e+01, 9.36914217e+01, 9.46064498e+01, 9.55226449e+01, 9.64441363e+01, 9.73868942e+01, 9.83476165e+01, 9.92829515e+01, 1.00137152e+02, 1.00928917e+02, 1.01701409e+02, 1.02472548e+02, 1.03241611e+02, 1.04008199e+02, 1.04772167e+02, 1.05506833e+02, 1.06208421e+02, 1.06889413e+02, 1.07546297e+02, 1.08164541e+02, 1.08722666e+02, 1.09222188e+02, 1.09667302e+02, 1.10090574e+02, 1.10542714e+02, 1.11017646e+02, 1.11509891e+02, 1.12028045e+02, 1.12563389e+02, 1.13095533e+02, 1.13596998e+02, 1.14063522e+02, 1.14480628e+02, 1.14827448e+02, 1.15119831e+02, 1.15398513e+02, 1.15706138e+02, 1.16057686e+02, 1.16461313e+02, 1.16893233e+02, 1.17308543e+02, 1.17676659e+02, 1.17965308e+02, 1.18182834e+02, 1.18338887e+02, 1.18456873e+02, 1.18581951e+02, 1.18718676e+02, 1.18856257e+02, 1.18987087e+02, 1.19119553e+02, 1.19232727e+02, 1.19286256e+02, 1.19281759e+02, 1.19210114e+02, 1.19068515e+02, 1.18885452e+02, 1.18696469e+02, 1.18540154e+02, 1.18415088e+02, 1.18318608e+02, 1.18247319e+02, 1.18170778e+02, 1.18081286e+02, 1.17960781e+02, 1.17784901e+02, 1.17539530e+02, 1.17231845e+02, 1.16910286e+02, 1.16609546e+02, 1.16339467e+02, 1.16078593e+02, 1.15811392e+02, 1.15540676e+02, 1.15241885e+02, 1.14899305e+02, 1.14504262e+02, 1.14066840e+02, 1.13609729e+02, 1.13136526e+02, 1.12663973e+02, 1.12203767e+02, 1.11776807e+02, 1.11382605e+02, 1.10965632e+02, 1.10474826e+02, 1.09891701e+02, 1.09248312e+02, 1.08570347e+02, 1.07864297e+02, 1.07149575e+02, 1.06440247e+02, 1.05759246e+02, 1.05121130e+02, 1.04520453e+02, 1.03924677e+02, 1.03284019e+02, 1.02579341e+02, 1.01800651e+02, 1.00958261e+02, 1.00076161e+02, 9.91599271e+01, 9.82286527e+01, 9.72965231e+01, 9.63735263e+01, 9.54661753e+01, 9.45648393e+01, 9.36624470e+01, 9.27540985e+01, 9.18500370e+01, 9.09304943e+01, 8.99557239e+01, 8.89275373e+01, 8.78634176e+01, 8.67908980e+01, 8.57297255e+01, 8.46931340e+01, 8.36757268e+01, 8.26459774e+01, 8.15958080e+01, 8.05072888e+01, 7.93565429e+01, 7.81568787e+01, 7.69469564e+01, 7.57544211e+01, 7.45710014e+01, 7.33904131e+01, 7.22081002e+01, 7.10209614e+01, 6.98404403e+01, 6.86742041e+01, 6.75268632e+01, 6.63739209e+01, 6.51851478e+01, 6.39546301e+01, 6.26804534e+01, 6.13769683e+01, 6.00557989e+01, 5.87260378e+01, 5.74078762e+01, 5.61014870e+01, 5.48063623e+01, 5.35215441e+01, 5.22324511e+01, 5.09290918e+01, 4.96052253e+01, 4.82575734e+01, 4.68851095e+01, 4.55017989e+01, 4.41046504e+01, 4.26789478e+01, 4.12426206e+01, 3.98088034e+01, 3.83732089e+01, 3.69195678e+01, 3.54508007e+01, 3.39964813e+01, 3.25498470e+01, 3.10923885e+01, 2.96250700e+01, 2.81490942e+01, 2.66791260e+01, 2.52384821e+01, 2.38285789e+01, 2.24220481e+01, 2.09861679e+01, 1.95129312e+01, 1.80120813e+01, 1.64919229e+01, 1.49726676e+01, 1.34684334e+01, 1.19615945e+01, 1.04399362e+01, 8.90904844e+00, 7.35998309e+00, 5.78743983e+00, 4.21567665e+00, 2.67501343e+00, 1.17168018e+00, -3.05310498e-01, -1.75170809e+00, -3.17952744e+00, -4.62490085e+00, -6.08549692e+00, -7.54550893e+00, -9.02060759e+00, -1.05343295e+01, -1.20743890e+01, -1.36040495e+01, -1.51114771e+01, -1.65895657e+01, -1.80215432e+01, -1.94114771e+01, -2.07778246e+01, -2.21481414e+01, -2.35682479e+01, -2.50408802e+01, -2.65117125e+01, -2.79561235e+01, -2.93983455e+01, -3.08688392e+01, -3.23473659e+01, -3.37792336e+01, -3.51553205e+01, -3.64989323e+01, -3.78414986e+01, -3.92184632e+01, -4.06394713e+01, -4.20688519e+01, -4.34811562e+01, -4.49128963e+01, -4.63752657e+01, -4.78210363e+01, -4.92046339e+01, -5.05241564e+01, -5.18217722e+01, -5.31148485e+01, -5.44024412e+01, -5.56975408e+01, -5.70222104e+01, -5.83903338e+01, -5.97692425e+01, -6.11221037e+01, -6.24244933e+01, -6.36619897e+01, -6.48546707e+01, -6.60323629e+01, -6.72167726e+01, -6.84093955e+01, -6.96242003e+01, -7.08697922e+01, -7.21238390e+01, -7.33835957e+01, -7.46334737e+01, -7.58497160e+01, -7.70174686e+01, -7.81155524e+01, -7.91462050e+01, -8.01413166e+01, -8.11518564e+01, -8.21993650e+01, -8.32702461e+01, -8.43537214e+01, -8.54415632e+01, -8.65411307e+01, -8.76302369e+01, -8.86538125e+01, -8.96034797e+01, -9.05040344e+01, -9.13888394e+01, -9.22687613e+01, -9.31383180e+01, -9.40342986e+01, -9.49677173e+01, -9.59175750e+01, -9.68682749e+01, -9.77821220e+01, -9.86213059e+01, -9.93766747e+01, -1.00086370e+02, -1.00779566e+02, -1.01464232e+02, -1.02146413e+02, -1.02843833e+02, -1.03608182e+02, -1.04418674e+02, -1.05218197e+02, -1.05994027e+02, -1.06738511e+02, -1.07461319e+02, -1.08143670e+02, -1.08761201e+02, -1.09327020e+02, -1.09866437e+02, -1.10411959e+02, -1.10959330e+02, -1.11505463e+02, -1.12048265e+02, -1.12573085e+02, -1.13083976e+02, -1.13557802e+02, -1.13953613e+02, -1.14246874e+02, -1.14479305e+02, -1.14723476e+02, -1.14989547e+02, -1.15256748e+02, -1.15510465e+02, -1.15781249e+02, -1.16102963e+02, -1.16443182e+02, -1.16751472e+02, -1.16994192e+02, -1.17177983e+02, -1.17324009e+02, -1.17435762e+02, -1.17530882e+02, -1.17635978e+02, -1.17782529e+02, -1.17963663e+02, -1.18119279e+02, -1.18221976e+02, -1.18282095e+02, -1.18295798e+02, -1.18236159e+02, -1.18101584e+02, -1.17935036e+02, -1.17795056e+02, -1.17721256e+02, -1.17671065e+02, -1.17613386e+02, -1.17580260e+02, -1.17566112e+02, -1.17552663e+02, -1.17513704e+02, -1.17405510e+02, -1.17201135e+02, -1.16926908e+02, -1.16645094e+02, -1.16359664e+02, -1.16060232e+02, -1.15766987e+02, -1.15493749e+02, -1.15235776e+02, -1.14948849e+02, -1.14590167e+02, -1.14146920e+02, -1.13628011e+02, -1.13057081e+02, -1.12453479e+02, -1.11859233e+02, -1.11303299e+02, -1.10777207e+02, -1.10273424e+02, -1.09785481e+02, -1.09307995e+02, -1.08796558e+02, -1.08221859e+02, -1.07593451e+02, -1.06907543e+02, -1.06191267e+02, -1.05478623e+02, -1.04793246e+02, -1.04150247e+02, -1.03531231e+02, -1.02895309e+02, -1.02214721e+02, -1.01499119e+02, -1.00743778e+02, -9.99341516e+01, -9.90629440e+01, -9.81283330e+01, -9.71858663e+01, -9.62882559e+01, -9.54299730e+01, -9.45916817e+01, -9.37587613e+01, -9.29206770e+01, -9.20569620e+01, -9.11412815e+01, -9.01579544e+01, -8.91263229e+01, -8.80892439e+01, -8.70636872e+01, -8.60609314e+01, -8.50743039e+01, -8.40849069e+01, -8.30930022e+01, -8.20855480e+01, -8.10542344e+01, -7.99811527e+01, -7.88426236e+01, -7.76522658e+01, -7.64357537e+01, -7.52124798e+01, -7.39830384e+01, -7.27615349e+01, -7.15707906e+01, -7.04117981e+01, -6.92701973e+01, -6.81082752e+01, -6.69140443e+01, -6.56808289e+01, -6.43926741e+01, -6.30680513e+01, -6.17218558e+01, -6.03790396e+01, -5.90702702e+01, -5.77885045e+01, -5.65140039e+01, -5.52325455e+01, -5.39478912e+01, -5.26628490e+01, -5.13526888e+01, -4.99880609e+01, -4.85646635e+01, -4.71360590e+01, -4.57400674e+01, -4.43480170e+01, -4.29529604e+01, -4.15635481e+01, -4.01855417e+01, -3.88090108e+01, -3.74001977e+01, -3.59505262e+01, -3.44695279e+01, -3.29789165e+01, -3.15077839e+01, -3.00621208e+01, -2.86314053e+01, -2.72208236e+01, -2.58329345e+01, -2.44416006e+01, -2.30420454e+01, -2.16447197e+01, -2.02301108e+01, -1.87988252e+01, -1.73655383e+01, -1.59272837e+01, -1.44822478e+01, -1.30295219e+01, -1.15822389e+01, -1.01359540e+01, -8.66077981e+00, -7.15067140e+00, -5.61661788e+00, -4.05424182e+00, -2.46198856e+00, -8.80442581e-01, 6.49163540e-01, 2.12742392e+00, 3.57085794e+00, 4.99290498e+00, 6.41748671e+00, 7.86123430e+00, 9.33478034e+00, 1.08573440e+01, 1.24264175e+01, 1.40243984e+01, 1.56106864e+01, 1.71307310e+01, 1.85765563e+01, 1.99866157e+01, 2.14031314e+01, 2.28419926e+01, 2.42864236e+01, 2.57377279e+01, 2.72231702e+01, 2.87199584e+01, 3.01847930e+01, 3.16157513e+01, 3.30132960e+01, 3.43795369e+01, 3.57443439e+01, 3.71287293e+01, 3.85330154e+01, 3.99563643e+01, 4.14105295e+01, 4.29021023e+01, 4.43936258e+01, 4.58454901e+01, 4.72320520e+01, 4.85388279e+01, 4.98000073e+01, 5.10553492e+01, 5.23196734e+01, 5.36028871e+01, 5.49242839e+01, 5.62953462e+01, 5.76813907e+01, 5.90439478e+01, 6.03573097e+01, 6.16060866e+01, 6.28096613e+01, 6.39973941e+01, 6.51907098e+01, 6.64043268e+01, 6.76608355e+01, 6.89470591e+01, 7.02120965e+01, 7.14614810e+01, 7.27132864e+01, 7.39533331e+01, 7.51723108e+01, 7.63514606e+01, 7.74797627e+01, 7.85655699e+01, 7.96303664e+01, 8.06903333e+01, 8.17570699e+01, 8.28383443e+01, 8.39121060e+01, 8.49766606e+01, 8.60313122e+01, 8.70627433e+01, 8.80762196e+01, 8.90630322e+01, 9.00185017e+01, 9.09410234e+01, 9.18312329e+01, 9.27046619e+01, 9.35730930e+01, 9.44450517e+01, 9.53129658e+01, 9.61984625e+01, 9.71291199e+01, 9.80817765e+01, 9.90256638e+01, 9.99263256e+01, 1.00775281e+02, 1.01569348e+02, 1.02309230e+02, 1.03038393e+02, 1.03774516e+02, 1.04516258e+02, 1.05262381e+02, 1.05998421e+02, 1.06701423e+02, 1.07357061e+02, 1.07984544e+02, 1.08572122e+02, 1.09100332e+02, 1.09598783e+02, 1.10089819e+02, 1.10589495e+02, 1.11108604e+02, 1.11640311e+02, 1.12179155e+02, 1.12720926e+02, 1.13249155e+02, 1.13726309e+02, 1.14142165e+02, 1.14506196e+02, 1.14814450e+02, 1.15093856e+02, 1.15391549e+02, 1.15739588e+02, 1.16117676e+02, 1.16496621e+02, 1.16869277e+02, 1.17204252e+02, 1.17494916e+02, 1.17738990e+02, 1.17937368e+02, 1.18106476e+02, 1.18246032e+02, 1.18370776e+02, 1.18491833e+02, 1.18630555e+02, 1.18787604e+02, 1.18922388e+02, 1.19034364e+02, 1.19097653e+02, 1.19069997e+02, 1.18966717e+02, 1.18815953e+02, 1.18653321e+02, 1.18517781e+02, 1.18435190e+02, 1.18394125e+02, 1.18371000e+02, 1.18334967e+02, 1.18238375e+02, 1.18077781e+02, 1.17854191e+02, 1.17571677e+02, 1.17276320e+02, 1.17001102e+02, 1.16754707e+02, 1.16541681e+02, 1.16350066e+02, 1.16143621e+02, 1.15911094e+02, 1.15645994e+02, 1.15318793e+02, 1.14938832e+02, 1.14515476e+02, 1.14057610e+02, 1.13586664e+02, 1.13104997e+02, 1.12641554e+02, 1.12202291e+02, 1.11763370e+02, 1.11321426e+02, 1.10860900e+02, 1.10371883e+02, 1.09835590e+02, 1.09228025e+02, 1.08549533e+02, 1.07817509e+02, 1.07073722e+02, 1.06348076e+02, 1.05660563e+02, 1.04996438e+02, 1.04317398e+02, 1.03624112e+02, 1.02917811e+02, 1.02186693e+02, 1.01410454e+02, 1.00590632e+02, 9.97439946e+01, 9.88703668e+01, 9.80111463e+01, 9.71945786e+01, 9.63847448e+01, 9.55561098e+01, 9.47051399e+01, 9.38305518e+01, 9.29059898e+01, 9.19156516e+01, 9.08786949e+01, 8.98110383e+01, 8.87254795e+01, 8.76319451e+01, 8.65511780e+01, 8.54836755e+01, 8.44157179e+01, 8.33644321e+01, 8.23275719e+01, 8.12894332e+01, 8.02390771e+01, 7.91427712e+01, 7.79926871e+01, 7.68262892e+01, 7.56840672e+01, 7.45530307e+01, 7.33967587e+01, 7.22177907e+01, 7.10191193e+01, 6.98172544e+01, 6.86372972e+01, 6.74555931e+01, 6.62289375e+01, 6.49561688e+01, 6.36656556e+01, 6.23515109e+01, 6.10108714e+01, 5.96698647e+01, 5.83468227e+01, 5.70536346e+01, 5.57703195e+01, 5.44689863e+01, 5.31444081e+01, 5.17941636e+01, 5.04179272e+01, 4.90168597e+01, 4.76064606e+01, 4.62114515e+01, 4.48483373e+01, 4.35002632e+01, 4.21412532e+01, 4.07804034e+01, 3.94108282e+01, 3.80281680e+01, 3.66434256e+01, 3.52377054e+01, 3.38122441e+01, 3.23823223e+01, 3.09455294e+01, 2.95005431e+01, 2.80468742e+01, 2.65846439e+01, 2.51143947e+01, 2.36502945e+01, 2.22019449e+01, 2.07485157e+01, 1.92756783e+01, 1.78011456e+01, 1.63374229e+01, 1.48793383e+01, 1.34229657e+01, 1.19521026e+01, 1.04561668e+01, 8.94244049e+00, 7.41697841e+00, 5.88465136e+00, 4.34924012e+00, 2.82691865e+00, 1.32832374e+00, -1.53716373e-01, -1.62511301e+00, -3.10393734e+00, -4.60245847e+00, -6.11486406e+00, -7.63633830e+00, -9.16302122e+00, -1.07052882e+01, -1.22562195e+01, -1.37837834e+01, -1.52934964e+01, -1.67901787e+01, -1.82511867e+01, -1.96759150e+01, -2.10792374e+01, -2.24727226e+01, -2.38783638e+01, -2.53109267e+01, -2.67659625e+01, -2.82391523e+01, -2.97264987e+01, -3.12378028e+01, -3.27519356e+01, -3.42272182e+01, -3.56632323e+01, -3.70751427e+01, -3.84882251e+01, -3.99067736e+01, -4.13067874e+01, -4.26857941e+01, -4.40565423e+01, -4.54417684e+01, -4.68432749e+01, -4.82347373e+01, -4.96116003e+01, -5.09714516e+01, -5.23135094e+01, -5.36381764e+01, -5.49333052e+01, -5.61919599e+01, -5.74245876e+01, -5.86666198e+01, -5.99290286e+01, -6.11916969e+01, -6.24405110e+01, -6.36796780e+01, -6.49260216e+01, -6.61775906e+01, -6.74193790e+01, -6.86547510e+01, -6.99131259e+01, -7.12005351e+01, -7.24795769e+01, -7.37378429e+01, -7.49677463e+01, -7.61387668e+01, -7.72593777e+01, -7.83515707e+01, -7.94189193e+01, -8.04652555e+01, -8.15077475e+01, -8.25586335e+01, -8.35993246e+01, -8.46173364e+01, -8.56051308e+01, -8.65723980e+01, -8.75403861e+01, -8.84972310e+01, -8.94485717e+01, -9.03986547e+01, -9.13505235e+01, -9.23195753e+01, -9.32889651e+01, -9.42602275e+01, -9.52343381e+01, -9.61984692e+01, -9.71308040e+01, -9.79910319e+01, -9.87681117e+01, -9.94854662e+01, -1.00202782e+02, -1.00935175e+02, -1.01652359e+02, -1.02360637e+02, -1.03078261e+02, -1.03830884e+02, -1.04621257e+02, -1.05409213e+02, -1.06153369e+02, -1.06840419e+02, -1.07490809e+02, -1.08107466e+02, -1.08680888e+02, -1.09233442e+02, -1.09795279e+02, -1.10373679e+02, -1.10932778e+02, -1.11448474e+02, -1.11932910e+02, -1.12396268e+02, -1.12833450e+02, -1.13215566e+02, -1.13538666e+02, -1.13829856e+02, -1.14136557e+02, -1.14504535e+02, -1.14895800e+02, -1.15269118e+02, -1.15649987e+02, -1.16042515e+02, -1.16395519e+02, -1.16661881e+02, -1.16853282e+02, -1.16995274e+02, -1.17121767e+02, -1.17270715e+02, -1.17440801e+02, -1.17629973e+02, -1.17835773e+02, -1.18055589e+02, -1.18273483e+02, -1.18438309e+02, -1.18517054e+02, -1.18504538e+02, -1.18428728e+02, -1.18325964e+02, -1.18209801e+02, -1.18090452e+02, -1.17975250e+02, -1.17895827e+02, -1.17859086e+02, -1.17827505e+02, -1.17787869e+02, -1.17731347e+02, -1.17639290e+02, -1.17487170e+02, -1.17274361e+02, -1.17017028e+02, -1.16742241e+02, -1.16509980e+02, -1.16306578e+02, -1.16080836e+02, -1.15824780e+02, -1.15534441e+02, -1.15222230e+02, -1.14871294e+02, -1.14445173e+02, -1.13949048e+02, -1.13417009e+02, -1.12901589e+02, -1.12425358e+02, -1.11975326e+02, -1.11540985e+02, -1.11114134e+02, -1.10675264e+02, -1.10184627e+02, -1.09617128e+02, -1.08986004e+02, -1.08330652e+02, -1.07679980e+02, -1.07027279e+02, -1.06354598e+02, -1.05663782e+02, -1.04983810e+02, -1.04307697e+02, -1.03603622e+02, -1.02864136e+02, -1.02085908e+02, -1.01295395e+02, -1.00498435e+02, -9.96593887e+01, -9.87822436e+01, -9.78985484e+01, -9.70441250e+01, -9.62291572e+01, -9.54319563e+01, -9.46230120e+01, -9.37555498e+01, -9.28399901e+01, -9.18995661e+01, -9.09118128e+01, -8.98902322e+01, -8.88728136e+01, -8.78859615e+01, -8.69198306e+01, -8.59396950e+01, -8.49219636e+01, -8.38921882e+01, -8.28956398e+01, -8.18954773e+01, -8.08393536e+01, -7.97202876e+01, -7.85501087e+01, -7.73665580e+01, -7.61968027e+01, -7.50324284e+01, -7.38538910e+01, -7.26883263e+01, -7.15674198e+01, -7.04575565e+01, -6.93212266e+01, -6.81335537e+01, -6.68932049e+01, -6.56287792e+01, -6.43348897e+01, -6.29959761e+01, -6.16302565e+01, -6.02786508e+01, -5.89690852e+01, -5.76788093e+01, -5.63774873e+01, -5.50711656e+01, -5.37777084e+01, -5.24822310e+01, -5.11476902e+01, -4.97902875e+01, -4.84359595e+01, -4.70760023e+01, -4.57046162e+01, -4.43049876e+01, -4.28935597e+01, -4.15092062e+01, -4.01510086e+01, -3.87902068e+01, -3.73934231e+01, -3.59525450e+01, -3.44776021e+01, -3.29908034e+01, -3.14949896e+01, -2.99792742e+01, -2.84638090e+01, -2.69760638e+01, -2.55338110e+01, -2.41203580e+01, -2.26957473e+01, -2.12459286e+01, -1.97757601e+01, -1.83030935e+01, -1.68539340e+01, -1.54185336e+01, -1.39759658e+01, -1.25253054e+01, -1.10663363e+01, -9.58599200e+00, -8.06289709e+00, -6.51107256e+00, -4.95524005e+00, -3.39958188e+00, -1.86037930e+00, -3.48164449e-01, 1.14448207e+00, 2.61044695e+00, 4.04617028e+00, 5.47749136e+00, 6.93611528e+00, 8.42944589e+00, 9.93409949e+00, 1.14330815e+01, 1.29281426e+01, 1.44207196e+01, 1.59119521e+01, 1.73893516e+01, 1.88449040e+01, 2.02875190e+01, 2.17241328e+01, 2.31599274e+01, 2.45985788e+01, 2.60425108e+01, 2.75064993e+01, 2.89864696e+01, 3.04386342e+01, 3.18605069e+01, 3.32653230e+01, 3.46499113e+01, 3.60398483e+01, 3.74394158e+01, 3.88510999e+01, 4.02893552e+01, 4.17495334e+01, 4.32272054e+01, 4.46782542e+01, 4.60731811e+01, 4.74343871e+01, 4.87660157e+01, 5.00859109e+01, 5.14205656e+01, 5.27744007e+01, 5.41361307e+01, 5.54974237e+01, 5.68791816e+01, 5.82816018e+01, 5.96770002e+01, 6.10329888e+01, 6.23156141e+01, 6.35183574e+01, 6.46676370e+01, 6.58115446e+01, 6.69974337e+01, 6.82428920e+01, 6.95169855e+01, 7.07965027e+01, 7.20916032e+01, 7.33684976e+01, 7.45777575e+01, 7.57017119e+01, 7.67458931e+01, 7.77585190e+01, 7.87750716e+01, 7.97934919e+01, 8.08255962e+01, 8.18922943e+01, 8.29796750e+01, 8.40501644e+01, 8.51184071e+01, 8.61947877e+01, 8.72460722e+01, 8.82636671e+01, 8.92567091e+01, 9.02462728e+01, 9.12205973e+01, 9.21722533e+01, 9.31373229e+01, 9.41136606e+01, 9.50858013e+01, 9.60297706e+01, 9.69302704e+01, 9.77922604e+01, 9.85945561e+01, 9.93388586e+01, 1.00042818e+02, 1.00734321e+02, 1.01460297e+02, 1.02225077e+02, 1.03016266e+02, 1.03823763e+02, 1.04639619e+02, 1.05457813e+02, 1.06247284e+02, 1.06987796e+02, 1.07667781e+02, 1.08282366e+02, 1.08844989e+02, 1.09367846e+02, 1.09861609e+02, 1.10348673e+02, 1.10858452e+02, 1.11383628e+02, 1.11904892e+02, 1.12408919e+02, 1.12873930e+02, 1.13300107e+02, 1.13676290e+02, 1.13997331e+02, 1.14289286e+02, 1.14571973e+02, 1.14873134e+02, 1.15211230e+02, 1.15597223e+02, 1.16009520e+02, 1.16404862e+02, 1.16767196e+02, 1.17073672e+02, 1.17324621e+02, 1.17536600e+02, 1.17723298e+02, 1.17909017e+02, 1.18110845e+02, 1.18339897e+02, 1.18575790e+02, 1.18790513e+02, 1.18978925e+02, 1.19125468e+02, 1.19208115e+02, 1.19214844e+02, 1.19168002e+02, 1.19099474e+02, 1.19032769e+02, 1.18997624e+02, 1.18973117e+02, 1.18944018e+02, 1.18926614e+02, 1.18891619e+02, 1.18806086e+02, 1.18649625e+02, 1.18411734e+02, 1.18102762e+02, 1.17760481e+02, 1.17439862e+02, 1.17151558e+02, 1.16887952e+02, 1.16642382e+02, 1.16409218e+02, 1.16170490e+02, 1.15887182e+02, 1.15561049e+02, 1.15195610e+02, 1.14782070e+02, 1.14330198e+02, 1.13862245e+02, 1.13408027e+02, 1.12960991e+02, 1.12502797e+02, 1.12034550e+02, 1.11557560e+02, 1.11059853e+02, 1.10520785e+02, 1.09954814e+02, 1.09373512e+02, 1.08772451e+02, 1.08162941e+02, 1.07540001e+02, 1.06914219e+02, 1.06293164e+02, 1.05668534e+02, 1.05034698e+02, 1.04361484e+02, 1.03643208e+02, 1.02878292e+02, 1.02054767e+02, 1.01194091e+02, 1.00326650e+02, 9.94741013e+01, 9.86374712e+01, 9.78166274e+01, 9.70106339e+01, 9.62046818e+01, 9.53883894e+01, 9.45283144e+01, 9.36033568e+01, 9.26155539e+01, 9.15696920e+01, 9.04855875e+01, 8.93791731e+01, 8.82895265e+01, 8.72297822e+01, 8.61808296e+01, 8.51420568e+01, 8.40991316e+01, 8.30555898e+01, 8.20273017e+01, 8.09844983e+01, 7.98803714e+01, 7.87121090e+01, 7.75212449e+01, 7.63380975e+01, 7.51968641e+01, 7.41192735e+01, 7.30637177e+01, 7.19864972e+01, 7.08715000e+01, 6.97228110e+01, 6.85450939e+01, 6.73298093e+01, 6.60729795e+01, 6.47740365e+01, 6.34615511e+01, 6.21696313e+01, 6.08943660e+01, 5.96187645e+01, 5.83309364e+01, 5.70365600e+01, 5.57399653e+01, 5.44175873e+01, 5.30409278e+01, 5.16196318e+01, 5.02029221e+01, 4.88116945e+01, 4.74458740e+01, 4.61174095e+01, 4.48326798e+01, 4.35804596e+01, 4.23110662e+01, 4.09772356e+01, 3.95760025e+01, 3.81222494e+01, 3.66292139e+01, 3.51216326e+01, 3.36176204e+01, 3.21163243e+01, 3.06303602e+01, 2.91677516e+01, 2.77061554e+01, 2.62298574e+01, 2.47419885e+01, 2.32453613e+01, 2.17424151e+01, 2.02351975e+01, 1.87387310e+01, 1.72763293e+01, 1.58491538e+01, 1.44427766e+01, 1.30459740e+01, 1.16370084e+01, 1.01879349e+01, 8.68131007e+00, 7.12134257e+00, 5.54055100e+00, 3.97619956e+00, 2.45352810e+00, 9.87999875e-01, -4.25959691e-01, -1.82173188e+00, -3.23704459e+00, -4.69729701e+00, -6.21788991e+00, -7.79303404e+00, -9.40239749e+00, -1.10299011e+01, -1.26499466e+01, -1.42316313e+01, -1.57687051e+01, -1.72591707e+01, -1.87041193e+01, -2.01334660e+01, -2.15556529e+01, -2.29636204e+01, -2.43798987e+01, -2.58198351e+01, -2.72662037e+01, -2.86932281e+01, -3.00838754e+01, -3.14548696e+01, -3.28323418e+01, -3.42075428e+01, -3.55878207e+01, -3.69914138e+01, -3.84165001e+01, -3.98606541e+01, -4.13211568e+01, -4.27952288e+01, -4.42534787e+01, -4.56761514e+01, -4.70646612e+01, -4.84218247e+01, -4.97780097e+01, -5.11278347e+01, -5.24678676e+01, -5.38229446e+01, -5.51829509e+01, -5.65405339e+01, -5.78906695e+01, -5.92168750e+01, -6.04955175e+01, -6.17125742e+01, -6.28748669e+01, -6.39901032e+01, -6.51196368e+01, -6.63190654e+01, -6.75568265e+01, -6.87953902e+01, -7.00217684e+01, -7.12675865e+01, -7.25539718e+01, -7.38267687e+01, -7.50353864e+01, -7.61745142e+01, -7.72842205e+01, -7.83941614e+01, -7.94850327e+01, -8.05443231e+01, -8.15916695e+01, -8.26681918e+01, -8.37744336e+01, -8.48691101e+01, -8.59239029e+01, -8.69478133e+01, -8.79621599e+01, -8.89289591e+01, -8.98241289e+01, -9.06746957e+01, -9.15153449e+01, -9.23842764e+01, -9.32933940e+01, -9.42355343e+01, -9.51905529e+01, -9.61302830e+01, -9.70357997e+01, -9.78823076e+01, -9.86689402e+01, -9.94250080e+01, -1.00172688e+02, -1.00927972e+02, -1.01701663e+02, -1.02513707e+02, -1.03362677e+02, -1.04218881e+02, -1.05047760e+02, -1.05813196e+02, -1.06493261e+02, -1.07077151e+02, -1.07615866e+02, -1.08187647e+02, -1.08792126e+02, -1.09387222e+02, -1.09957300e+02, -1.10532818e+02, -1.11108112e+02, -1.11625790e+02, -1.12088780e+02, -1.12528777e+02, -1.12955865e+02, -1.13351082e+02, -1.13689483e+02, -1.13996697e+02, -1.14319072e+02, -1.14688284e+02, -1.15097313e+02, -1.15512392e+02, -1.15909531e+02, -1.16272873e+02, -1.16593113e+02, -1.16839311e+02, -1.16993738e+02, -1.17088951e+02, -1.17177651e+02, -1.17310482e+02, -1.17480507e+02, -1.17654155e+02, -1.17821063e+02, -1.17987688e+02, -1.18158570e+02, -1.18283226e+02, -1.18315385e+02, -1.18267635e+02, -1.18179788e+02, -1.18081891e+02, -1.17968821e+02, -1.17851160e+02, -1.17776645e+02, -1.17789789e+02, -1.17850313e+02, -1.17860655e+02, -1.17795195e+02, -1.17666744e+02, -1.17501006e+02, -1.17317992e+02, -1.17105929e+02, -1.16871479e+02, -1.16633867e+02, -1.16433453e+02, -1.16283181e+02, -1.16149364e+02, -1.15994153e+02, -1.15765447e+02, -1.15457370e+02, -1.15083408e+02, -1.14643173e+02, -1.14153293e+02, -1.13641435e+02, -1.13168245e+02, -1.12734082e+02, -1.12297038e+02, -1.11854609e+02, -1.11378612e+02, -1.10864445e+02, -1.10324282e+02, -1.09741326e+02, -1.09106091e+02, -1.08428081e+02, -1.07742962e+02, -1.07062753e+02, -1.06368895e+02, -1.05649113e+02, -1.04922905e+02, -1.04217640e+02, -1.03511304e+02, -1.02775165e+02, -1.02004039e+02, -1.01209518e+02, -1.00400979e+02, -9.95723846e+01, -9.87339324e+01, -9.78799385e+01, -9.70206087e+01, -9.62034587e+01, -9.54061015e+01, -9.45717109e+01, -9.36891548e+01, -9.27799230e+01, -9.18471440e+01, -9.08541911e+01, -8.98053268e+01, -8.87332447e+01, -8.76621004e+01, -8.66221334e+01, -8.56061543e+01, -8.45944829e+01, -8.35864543e+01, -8.25947674e+01, -8.16140899e+01, -8.06133780e+01, -7.95719437e+01, -7.84774629e+01, -7.73508508e+01, -7.61951244e+01, -7.49872359e+01, -7.37405368e+01, -7.24931775e+01, -7.12986511e+01, -7.01649093e+01, -6.90408403e+01, -6.78633847e+01, -6.66179158e+01, -6.53512528e+01, -6.40706254e+01, -6.27684877e+01, -6.14540597e+01, -6.01344602e+01, -5.88283145e+01, -5.75212395e+01, -5.61898446e+01, -5.48457536e+01, -5.35111509e+01, -5.21877195e+01, -5.08626828e+01, -4.95138122e+01, -4.81268015e+01, -4.67337391e+01, -4.53707982e+01, -4.40216455e+01, -4.26473776e+01, -4.12487879e+01, -3.98678097e+01, -3.85195335e+01, -3.71593520e+01, -3.57432772e+01, -3.42835421e+01, -3.28177725e+01, -3.13726626e+01, -2.99390998e+01, -2.84833617e+01, -2.70230751e+01, -2.55841967e+01, -2.41436978e+01, -2.26855244e+01, -2.12127280e+01, -1.97282286e+01, -1.82346983e+01, -1.67344926e+01, -1.52429784e+01, -1.37704616e+01, -1.23097916e+01, -1.08686824e+01, -9.42477717e+00, -7.93583712e+00, -6.40138209e+00, -4.83686693e+00, -3.26808939e+00, -1.72671802e+00, -2.20125509e-01, 1.24837914e+00, 2.67851193e+00, 4.09884270e+00, 5.52991973e+00, 6.98557100e+00, 8.48753452e+00, 1.00352124e+01, 1.16123837e+01, 1.31927437e+01, 1.47443261e+01, 1.62596229e+01, 1.77486697e+01, 1.92199033e+01, 2.06668296e+01, 2.20861960e+01, 2.35039137e+01, 2.49382319e+01, 2.63876953e+01, 2.78504742e+01, 2.93245751e+01, 3.07946362e+01, 3.22233881e+01, 3.36136345e+01, 3.50094759e+01, 3.64281639e+01, 3.78538508e+01, 3.92750552e+01, 4.06973282e+01, 4.21245039e+01, 4.35723664e+01, 4.50241551e+01, 4.64278352e+01, 4.77628655e+01, 4.90452357e+01, 5.03156852e+01, 5.16034051e+01, 5.29145734e+01, 5.42522672e+01, 5.56038665e+01, 5.69464238e+01, 5.82643385e+01, 5.95479928e+01, 6.07924766e+01, 6.19964415e+01, 6.31878260e+01, 6.44002435e+01, 6.56427705e+01, 6.69201597e+01, 6.82205200e+01, 6.95209306e+01, 7.08053233e+01, 7.20632921e+01, 7.32755962e+01, 7.44311901e+01, 7.55387215e+01, 7.66068200e+01, 7.76570003e+01, 7.87052994e+01, 7.97630584e+01, 8.08644389e+01, 8.20043352e+01, 8.31503925e+01, 8.42929630e+01, 8.54121120e+01, 8.64817596e+01, 8.74996309e+01, 8.84936165e+01, 8.94711821e+01, 9.04250787e+01, 9.13648492e+01, 9.22979374e+01, 9.32432767e+01, 9.42001237e+01, 9.51406238e+01, 9.60461277e+01, 9.69187931e+01, 9.77752465e+01, 9.86012893e+01, 9.93885946e+01, 1.00160115e+02, 1.00932780e+02, 1.01731756e+02, 1.02559914e+02, 1.03390991e+02, 1.04193062e+02, 1.04958662e+02, 1.05697865e+02, 1.06379067e+02, 1.06996573e+02, 1.07576516e+02, 1.08139217e+02, 1.08699843e+02, 1.09255775e+02, 1.09832145e+02, 1.10445480e+02, 1.11078665e+02, 1.11691928e+02, 1.12245099e+02, 1.12739950e+02, 1.13180840e+02, 1.13587069e+02, 1.13974015e+02, 1.14326768e+02, 1.14676782e+02, 1.15059611e+02, 1.15458341e+02, 1.15860268e+02, 1.16256318e+02, 1.16613726e+02, 1.16898232e+02, 1.17116439e+02, 1.17289876e+02, 1.17436025e+02, 1.17581957e+02, 1.17733297e+02, 1.17907059e+02, 1.18113970e+02, 1.18333059e+02, 1.18548975e+02, 1.18737770e+02, 1.18870750e+02, 1.18930784e+02, 1.18936482e+02, 1.18903793e+02, 1.18832586e+02, 1.18764904e+02, 1.18730029e+02, 1.18720012e+02, 1.18714593e+02, 1.18699328e+02, 1.18677977e+02, 1.18626784e+02, 1.18517331e+02, 1.18346176e+02, 1.18127560e+02, 1.17887361e+02, 1.17644871e+02, 1.17427091e+02, 1.17224909e+02, 1.17004385e+02, 1.16769432e+02, 1.16536919e+02, 1.16305183e+02, 1.16019578e+02, 1.15644683e+02, 1.15200519e+02, 1.14704822e+02, 1.14199492e+02, 1.13727775e+02, 1.13304823e+02, 1.12898574e+02, 1.12458945e+02, 1.11979335e+02, 1.11457253e+02, 1.10906583e+02, 1.10338583e+02, 1.09748712e+02, 1.09148313e+02, 1.08532541e+02, 1.07912180e+02, 1.07295036e+02, 1.06659687e+02, 1.06005451e+02, 1.05346221e+02, 1.04705357e+02, 1.04071534e+02, 1.03409720e+02, 1.02696856e+02, 1.01906149e+02, 1.01063058e+02, 1.00201585e+02, 9.93331842e+01, 9.84662550e+01, 9.76066055e+01, 9.67712769e+01, 9.59441952e+01, 9.51136535e+01, 9.42716315e+01, 9.33864026e+01, 9.24380388e+01, 9.14159463e+01, 9.03567173e+01, 8.93013429e+01, 8.82649883e+01, 8.72572666e+01, 8.62566670e+01, 8.52610913e+01, 8.42688005e+01, 8.32516815e+01, 8.21779979e+01, 8.10418872e+01, 7.98960134e+01, 7.87510917e+01, 7.75878630e+01, 7.64472438e+01, 7.53567042e+01, 7.42927442e+01, 7.32107539e+01, 7.20804300e+01, 7.08964749e+01, 6.96714006e+01, 6.84161741e+01, 6.71133749e+01, 6.57800535e+01, 6.44431508e+01, 6.31083819e+01, 6.18063567e+01, 6.05434207e+01, 5.92952143e+01, 5.80438767e+01, 5.67770568e+01, 5.54735657e+01, 5.41205120e+01, 5.27382269e+01, 5.13425224e+01, 4.99318391e+01, 4.85192436e+01, 4.71273556e+01, 4.57842820e+01, 4.45071141e+01, 4.32642318e+01, 4.19915632e+01, 4.06457918e+01, 3.92405416e+01, 3.77885396e+01, 3.62878455e+01, 3.47797787e+01, 3.32936938e+01, 3.18222725e+01, 3.03729608e+01, 2.89497962e+01, 2.75274931e+01, 2.60749235e+01, 2.45852464e+01, 2.30690093e+01, 2.15350239e+01, 1.99904150e+01, 1.84407437e+01, 1.69035378e+01, 1.54171345e+01, 1.39923305e+01, 1.25799646e+01, 1.11449152e+01, 9.69049634e+00, 8.22006571e+00, 6.72347320e+00, 5.18164344e+00, 3.62370148e+00, 2.11099956e+00, 6.70762587e-01, -7.21877475e-01, -2.12697159e+00, -3.57258458e+00, -5.03614418e+00, -6.51422977e+00, -8.03038601e+00, -9.57236250e+00, -1.11301932e+01, -1.27094051e+01, -1.42592925e+01, -1.57325238e+01, -1.71534575e+01, -1.85686795e+01, -2.00111469e+01, -2.14757847e+01, -2.29444923e+01, -2.44444428e+01, -2.59930126e+01, -2.75329863e+01, -2.90113622e+01, -3.04477200e+01, -3.18713874e+01, -3.32902392e+01, -3.46966927e+01, -3.60860961e+01, -3.74694589e+01, -3.88681799e+01, -4.02964366e+01, -4.17225101e+01, -4.31242854e+01, -4.45142790e+01, -4.59018932e+01, -4.72938452e+01, -4.86678930e+01, -4.99960446e+01, -5.12744923e+01, -5.25165826e+01, -5.37603312e+01, -5.50189353e+01, -5.62874918e+01, -5.75753916e+01, -5.88881829e+01, -6.02150652e+01, -6.15209972e+01, -6.27958971e+01, -6.40477161e+01, -6.52699015e+01, -6.64728030e+01, -6.76914237e+01, -6.89628163e+01, -7.02700535e+01, -7.15859963e+01, -7.29178762e+01, -7.42298325e+01, -7.54577178e+01, -7.65744229e+01, -7.76203249e+01, -7.86542261e+01, -7.96779044e+01, -8.07065114e+01, -8.17637626e+01, -8.28380311e+01, -8.39336176e+01, -8.50390379e+01, -8.61189989e+01, -8.71367653e+01, -8.80966309e+01, -8.90314180e+01, -8.99521124e+01, -9.08805263e+01, -9.18315353e+01, -9.28143582e+01, -9.38203974e+01, -9.48156676e+01, -9.57769242e+01, -9.66896927e+01, -9.75464191e+01, -9.83314441e+01, -9.90509831e+01, -9.97396101e+01, -1.00423210e+02, -1.01146912e+02, -1.01926845e+02, -1.02717872e+02, -1.03474405e+02, -1.04193054e+02, -1.04913542e+02, -1.05623538e+02, -1.06288240e+02, -1.06912395e+02, -1.07514854e+02, -1.08150070e+02, -1.08827737e+02, -1.09485586e+02, -1.10094392e+02, -1.10689728e+02, -1.11297246e+02, -1.11867480e+02, -1.12354392e+02, -1.12756885e+02, -1.13105419e+02, -1.13450945e+02, -1.13815978e+02, -1.14201895e+02, -1.14595186e+02, -1.14999348e+02, -1.15416250e+02, -1.15806446e+02, -1.16157072e+02, -1.16461227e+02, -1.16703198e+02, -1.16888655e+02, -1.17024592e+02, -1.17145273e+02, -1.17275533e+02, -1.17432262e+02, -1.17639248e+02, -1.17857038e+02, -1.18030684e+02, -1.18137394e+02, -1.18191485e+02, -1.18219165e+02, -1.18200136e+02, -1.18109308e+02, -1.17973010e+02, -1.17878921e+02, -1.17872882e+02, -1.17915519e+02, -1.17976636e+02, -1.18020721e+02, -1.18023795e+02, -1.17984600e+02, -1.17877796e+02, -1.17702594e+02, -1.17488815e+02, -1.17259420e+02, -1.17017979e+02, -1.16767638e+02, -1.16511077e+02, -1.16250507e+02, -1.16014411e+02, -1.15768006e+02, -1.15447389e+02, -1.15065170e+02, -1.14660200e+02, -1.14247564e+02, -1.13811528e+02, -1.13355672e+02, -1.12896926e+02, -1.12460667e+02, -1.12076842e+02, -1.11696840e+02, -1.11259669e+02, -1.10765711e+02, -1.10244989e+02, -1.09706615e+02, -1.09117841e+02, -1.08471768e+02, -1.07793340e+02, -1.07128487e+02, -1.06508676e+02, -1.05913479e+02, -1.05327261e+02, -1.04738585e+02, -1.04126205e+02, -1.03463140e+02, -1.02719826e+02, -1.01893191e+02, -1.01012251e+02, -1.00126964e+02, -9.92725783e+01, -9.84587884e+01, -9.76768608e+01, -9.68922529e+01, -9.60942567e+01, -9.52760821e+01, -9.43939708e+01, -9.34340285e+01, -9.24173941e+01, -9.13752726e+01, -9.03308972e+01, -8.92873133e+01, -8.82466133e+01, -8.72234685e+01, -8.62539426e+01, -8.53337287e+01, -8.44170956e+01, -8.34584397e+01, -8.24414026e+01, -8.14110749e+01, -8.03730527e+01, -7.92915915e+01, -7.81573187e+01, -7.69798464e+01, -7.58082975e+01, -7.46767859e+01, -7.35670045e+01, -7.24382427e+01, -7.12763396e+01, -7.00865004e+01, -6.88471476e+01, -6.75591628e+01, -6.62391217e+01, -6.49003552e+01, -6.35799260e+01, -6.23028313e+01, -6.10575573e+01, -5.98209747e+01, -5.85897669e+01, -5.73613221e+01, -5.61069435e+01, -5.48079037e+01, -5.34668223e+01, -5.20877820e+01, -5.06756727e+01, -4.92356888e+01, -4.77996791e+01, -4.64031130e+01, -4.50420249e+01, -4.36983801e+01, -4.23452470e+01, -4.09642563e+01, -3.95707400e+01, -3.81761135e+01, -3.67617190e+01, -3.53021762e+01, -3.38088272e+01, -3.23315058e+01, -3.09042838e+01, -2.95216464e+01, -2.81506276e+01, -2.67541415e+01, -2.53209147e+01, -2.38717277e+01, -2.24086388e+01, -2.09071154e+01, -1.93787347e+01, -1.78597648e+01, -1.63751230e+01, -1.49404394e+01, -1.35506402e+01, -1.21596932e+01, -1.07220366e+01, -9.23495076e+00, -7.69917089e+00, -6.10445506e+00, -4.47349253e+00, -2.87755981e+00, -1.36474252e+00, 7.57753238e-02, 1.46879725e+00, 2.84760522e+00, 4.24964517e+00, 5.68656222e+00, 7.15129547e+00, 8.66412795e+00, 1.02367057e+01, 1.18339212e+01, 1.34298511e+01, 1.50063946e+01, 1.65519007e+01, 1.80598620e+01, 1.95277235e+01, 2.09825559e+01, 2.24440290e+01, 2.39255745e+01, 2.54221749e+01, 2.69027904e+01, 2.83598788e+01, 2.97760518e+01, 3.11413083e+01, 3.24914372e+01, 3.38523310e+01, 3.52282032e+01, 3.66078475e+01, 3.79832080e+01, 3.93755854e+01, 4.07856410e+01, 4.21861751e+01, 4.35719915e+01, 4.49402348e+01, 4.62764834e+01, 4.75856981e+01, 4.88861599e+01, 5.02045086e+01, 5.15584603e+01, 5.29318111e+01, 5.43255265e+01, 5.57391948e+01, 5.71447430e+01, 5.85229286e+01, 5.98483676e+01, 6.11060871e+01, 6.23025705e+01, 6.34589935e+01, 6.46190570e+01, 6.58131967e+01, 6.70475642e+01, 6.83243220e+01, 6.96293611e+01, 7.09379222e+01, 7.22191040e+01, 7.34527113e+01, 7.46404904e+01, 7.57861144e+01, 7.68944103e+01, 7.79707561e+01, 7.90473469e+01, 8.01467351e+01, 8.12701501e+01, 8.24038105e+01, 8.35107911e+01, 8.46067144e+01, 8.57031210e+01, 8.67679963e+01, 8.77805864e+01, 8.87424978e+01, 8.96842834e+01, 9.06284327e+01, 9.15905825e+01, 9.25673714e+01, 9.35289426e+01, 9.44685422e+01, 9.53692512e+01, 9.62079300e+01, 9.69716749e+01, 9.76688053e+01, 9.83487893e+01, 9.90472154e+01, 9.98014009e+01, 1.00634522e+02, 1.01531886e+02, 1.02466404e+02, 1.03390383e+02, 1.04270961e+02, 1.05087424e+02, 1.05828678e+02, 1.06490967e+02, 1.07089238e+02, 1.07677465e+02, 1.08267298e+02, 1.08866814e+02, 1.09494518e+02, 1.10121795e+02, 1.10741972e+02, 1.11337392e+02, 1.11883641e+02, 1.12379598e+02, 1.12813801e+02, 1.13194878e+02, 1.13531716e+02, 1.13859624e+02, 1.14217187e+02, 1.14603148e+02, 1.15015106e+02, 1.15436631e+02, 1.15869054e+02, 1.16299369e+02, 1.16665133e+02, 1.16939390e+02, 1.17148213e+02, 1.17326735e+02, 1.17487837e+02, 1.17654840e+02, 1.17857132e+02, 1.18086707e+02, 1.18336497e+02, 1.18587107e+02, 1.18811541e+02, 1.18992275e+02, 1.19106005e+02, 1.19153335e+02, 1.19138237e+02, 1.19080191e+02, 1.19021862e+02, 1.18993170e+02, 1.18986784e+02, 1.18969656e+02, 1.18945912e+02, 1.18905443e+02, 1.18815335e+02, 1.18668532e+02, 1.18449758e+02, 1.18165514e+02, 1.17850569e+02, 1.17544297e+02, 1.17273827e+02, 1.17042905e+02, 1.16852042e+02, 1.16672736e+02, 1.16471034e+02, 1.16224336e+02, 1.15905847e+02, 1.15513980e+02, 1.15064906e+02, 1.14586372e+02, 1.14099403e+02, 1.13619183e+02, 1.13169357e+02, 1.12751511e+02, 1.12365049e+02, 1.11994516e+02, 1.11601513e+02, 1.11160322e+02, 1.10655498e+02, 1.10092971e+02, 1.09493341e+02, 1.08886390e+02, 1.08293381e+02, 1.07728473e+02, 1.07200090e+02, 1.06672104e+02, 1.06119175e+02, 1.05524872e+02, 1.04853173e+02, 1.04109684e+02, 1.03315530e+02, 1.02474865e+02, 1.01579727e+02, 1.00654165e+02, 9.97567380e+01, 9.89002678e+01, 9.80915527e+01, 9.73328059e+01, 9.65828306e+01, 9.57855651e+01, 9.49042430e+01, 9.39576641e+01, 9.29624923e+01, 9.19330039e+01, 9.08943980e+01, 8.98514648e+01, 8.88478702e+01, 8.78987586e+01, 8.69717553e+01, 8.60563470e+01, 8.51178269e+01, 8.41197448e+01, 8.30530952e+01, 8.19419482e+01, 8.08189118e+01, 7.96807575e+01, 7.85260306e+01, 7.73813152e+01, 7.62780684e+01, 7.51960448e+01, 7.40932019e+01, 7.29679033e+01, 7.18202018e+01, 7.06513318e+01, 6.94499303e+01, 6.81964122e+01, 6.69065538e+01, 6.56067136e+01, 6.43158998e+01, 6.30335935e+01, 6.17589764e+01, 6.04777049e+01, 5.91667220e+01, 5.78381732e+01, 5.65015100e+01, 5.51637903e+01, 5.38300177e+01, 5.24901288e+01, 5.11507565e+01, 4.98165221e+01, 4.84903899e+01, 4.71740048e+01, 4.58546397e+01, 4.45235334e+01, 4.31618133e+01, 4.17712468e+01, 4.03546143e+01, 3.88885389e+01, 3.73726371e+01, 3.58360211e+01, 3.43269207e+01, 3.28643108e+01, 3.14189286e+01, 2.99693434e+01, 2.85274776e+01, 2.71012750e+01, 2.56687480e+01, 2.42014643e+01, 2.26947122e+01, 2.11740170e+01, 1.96713732e+01, 1.81948822e+01, 1.67221062e+01, 1.52371199e+01, 1.37561325e+01, 1.23036503e+01, 1.08552489e+01, 9.36687284e+00, 7.84985755e+00, 6.32703754e+00, 4.81472766e+00, 3.32380129e+00, 1.84737769e+00, 3.79859194e-01, -1.06979426e+00, -2.48289812e+00, -3.87502794e+00, -5.29829895e+00, -6.78757448e+00, -8.32368545e+00, -9.86397517e+00, -1.13783224e+01, -1.28737200e+01, -1.43694409e+01, -1.58388988e+01, -1.72515034e+01, -1.86289299e+01, -2.00149685e+01, -2.14264922e+01, -2.28606063e+01, -2.43140745e+01, -2.57969538e+01, -2.73147213e+01, -2.88292739e+01, -3.03007181e+01, -3.17434735e+01, -3.31958985e+01, -3.46843615e+01, -3.61987000e+01, -3.77036898e+01, -3.91751422e+01, -4.06112547e+01, -4.20393705e+01, -4.34657229e+01, -4.48680564e+01, -4.62320556e+01, -4.75497356e+01, -4.88313340e+01, -5.00993135e+01, -5.13701461e+01, -5.26685835e+01, -5.40238584e+01, -5.54133448e+01, -5.67792788e+01, -5.81091506e+01, -5.94094783e+01, -6.06864095e+01, -6.19455029e+01, -6.31782488e+01, -6.44068089e+01, -6.56469402e+01, -6.68957090e+01, -6.81505977e+01, -6.93827960e+01, -7.05866829e+01, -7.17731904e+01, -7.29509097e+01, -7.41129727e+01, -7.52286835e+01, -7.63057231e+01, -7.73649007e+01, -7.84217557e+01, -7.95006631e+01, -8.06175288e+01, -8.17681136e+01, -8.29209260e+01, -8.40537748e+01, -8.51388138e+01, -8.61590803e+01, -8.71328651e+01, -8.80621126e+01, -8.89772841e+01, -8.99138411e+01, -9.08687774e+01, -9.18390037e+01, -9.28215377e+01, -9.38136314e+01, -9.47861297e+01, -9.57062856e+01, -9.65673030e+01, -9.73809381e+01, -9.81846810e+01, -9.89919779e+01, -9.98120631e+01, -1.00664085e+02, -1.01546399e+02, -1.02456232e+02, -1.03350095e+02, -1.04185000e+02, -1.04947324e+02, -1.05631401e+02, -1.06250798e+02, -1.06791762e+02, -1.07262205e+02, -1.07724877e+02, -1.08237533e+02, -1.08824625e+02, -1.09459234e+02, -1.10093237e+02, -1.10692936e+02, -1.11236545e+02, -1.11698433e+02, -1.12078361e+02, -1.12420619e+02, -1.12744904e+02, -1.13065981e+02, -1.13421089e+02, -1.13821151e+02, -1.14258061e+02, -1.14710811e+02, -1.15163828e+02, -1.15592824e+02, -1.15955342e+02, -1.16238535e+02, -1.16450995e+02, -1.16629245e+02, -1.16787351e+02, -1.16909530e+02, -1.17026718e+02, -1.17174223e+02, -1.17361813e+02, -1.17567475e+02, -1.17748094e+02, -1.17874792e+02, -1.17943566e+02, -1.17994785e+02, -1.18057682e+02, -1.18125402e+02, -1.18179525e+02, -1.18221225e+02, -1.18292068e+02, -1.18379551e+02, -1.18433945e+02, -1.18435522e+02, -1.18386636e+02, -1.18304993e+02, -1.18178035e+02, -1.17986022e+02, -1.17745314e+02, -1.17496698e+02, -1.17269184e+02, -1.17055258e+02, -1.16848928e+02, -1.16632230e+02, -1.16393126e+02, -1.16124376e+02, -1.15782412e+02, -1.15367330e+02, -1.14909819e+02, -1.14447020e+02, -1.14005243e+02, -1.13561731e+02, -1.13113984e+02, -1.12687196e+02, -1.12297902e+02, -1.11928974e+02, -1.11527237e+02, -1.11057177e+02, -1.10510911e+02, -1.09900345e+02, -1.09237261e+02, -1.08532723e+02, -1.07823419e+02, -1.07135317e+02, -1.06485488e+02, -1.05857131e+02, -1.05210604e+02, -1.04532455e+02, -1.03814942e+02, -1.03081463e+02, -1.02335911e+02, -1.01554940e+02, -1.00750799e+02, -9.99466710e+01, -9.91721629e+01, -9.84330840e+01, -9.76915353e+01, -9.68943673e+01, -9.60340178e+01, -9.51486406e+01, -9.42128781e+01, -9.31982905e+01, -9.21292340e+01, -9.10390500e+01, -8.99789544e+01, -8.89698774e+01, -8.79970442e+01, -8.70348034e+01, -8.60646096e+01, -8.51006082e+01, -8.41390234e+01, -8.31503611e+01, -8.21287553e+01, -8.10852140e+01, -8.00152656e+01, -7.89171874e+01, -7.78046339e+01, -7.66745901e+01, -7.55392365e+01, -7.44073941e+01, -7.32583396e+01, -7.20918269e+01, -7.09086166e+01, -6.96967748e+01, -6.84361077e+01, -6.71284300e+01, -6.58042440e+01, -6.44858109e+01, -6.32151444e+01, -6.20057801e+01, -6.08104925e+01, -5.95954291e+01, -5.83646381e+01, -5.71351563e+01, -5.58921366e+01, -5.45991775e+01, -5.32467934e+01, -5.18715886e+01, -5.05137979e+01, -4.91739727e+01, -4.78515393e+01, -4.65318073e+01, -4.51776173e+01, -4.38048434e+01, -4.24389639e+01, -4.10573906e+01, -3.96451299e+01, -3.82200312e+01, -3.68086504e+01, -3.54021488e+01, -3.39673525e+01, -3.24825217e+01, -3.09618114e+01, -2.94437783e+01, -2.79285853e+01, -2.64028355e+01, -2.48844218e+01, -2.33988523e+01, -2.19488912e+01, -2.05212140e+01, -1.91186500e+01, -1.77284812e+01, -1.63144126e+01, -1.48790009e+01, -1.34385377e+01, -1.19779932e+01, -1.05012654e+01, -9.02531044e+00, -7.52189385e+00, -5.98605286e+00, -4.45611935e+00, -2.93192591e+00, -1.41304850e+00, 7.43757793e-02, 1.54042667e+00, 3.00667034e+00, 4.47485298e+00, 5.95945404e+00, 7.46974479e+00, 8.98413226e+00, 1.05006223e+01, 1.20444232e+01, 1.35916665e+01, 1.50987203e+01, 1.65638694e+01, 1.79881508e+01, 1.93878341e+01, 2.08023559e+01, 2.22318455e+01, 2.36755939e+01, 2.51457013e+01, 2.66225219e+01, 2.80919271e+01, 2.95577697e+01, 3.10229407e+01, 3.24627837e+01, 3.38613705e+01, 3.52631786e+01, 3.66992100e+01, 3.81626466e+01, 3.96338861e+01, 4.10854131e+01, 4.25257139e+01, 4.39613364e+01, 4.53570425e+01, 4.66902668e+01, 4.79886097e+01, 4.92999988e+01, 5.06306106e+01, 5.19837471e+01, 5.33605190e+01, 5.47337235e+01, 5.61112030e+01, 5.74848668e+01, 5.88225297e+01, 6.01302751e+01, 6.14139658e+01, 6.26656370e+01, 6.38947767e+01, 6.51359571e+01, 6.63994073e+01, 6.76777477e+01, 6.89783693e+01, 7.02785434e+01, 7.15490044e+01, 7.27708278e+01, 7.39333485e+01, 7.50456196e+01, 7.61166715e+01, 7.71683953e+01, 7.82171674e+01, 7.92879829e+01, 8.04105420e+01, 8.15628188e+01, 8.27010690e+01, 8.37953821e+01, 8.48405007e+01, 8.58353689e+01, 8.67819318e+01, 8.77108523e+01, 8.86445649e+01, 8.95985375e+01, 9.05825291e+01, 9.15884164e+01, 9.26093357e+01, 9.36263137e+01, 9.46129038e+01, 9.55521932e+01, 9.64615738e+01, 9.73414748e+01, 9.81670536e+01, 9.89772380e+01, 9.98001347e+01, 1.00628046e+02, 1.01468668e+02, 1.02326716e+02, 1.03191203e+02, 1.04014009e+02, 1.04763631e+02, 1.05435262e+02, 1.06029699e+02, 1.06578342e+02, 1.07105649e+02, 1.07643261e+02, 1.08239523e+02, 1.08898466e+02, 1.09579490e+02, 1.10239599e+02, 1.10863133e+02, 1.11427713e+02, 1.11907443e+02, 1.12328785e+02, 1.12726766e+02, 1.13127184e+02, 1.13534632e+02, 1.13938592e+02, 1.14358601e+02, 1.14794131e+02, 1.15217267e+02, 1.15595747e+02, 1.15936060e+02, 1.16271516e+02, 1.16572282e+02, 1.16819304e+02, 1.17055533e+02, 1.17325011e+02, 1.17616752e+02, 1.17895150e+02, 1.18162676e+02, 1.18394928e+02, 1.18576687e+02, 1.18726702e+02, 1.18833092e+02, 1.18889861e+02, 1.18895458e+02, 1.18878249e+02, 1.18886052e+02, 1.18924329e+02, 1.18981919e+02, 1.19036609e+02, 1.19086344e+02, 1.19129949e+02, 1.19140207e+02, 1.19086469e+02, 1.18937309e+02, 1.18702522e+02, 1.18406905e+02, 1.18097810e+02, 1.17809143e+02, 1.17523502e+02, 1.17268604e+02, 1.17062235e+02, 1.16874188e+02, 1.16668954e+02, 1.16422564e+02, 1.16147134e+02, 1.15839350e+02, 1.15498618e+02, 1.15139641e+02, 1.14760340e+02, 1.14373704e+02, 1.13989229e+02, 1.13613453e+02, 1.13237136e+02, 1.12840473e+02, 1.12410667e+02, 1.11913803e+02, 1.11356412e+02, 1.10773023e+02, 1.10175868e+02, 1.09574257e+02, 1.08974952e+02, 1.08382570e+02, 1.07786618e+02, 1.07193290e+02, 1.06620149e+02, 1.06038346e+02, 1.05401407e+02, 1.04693063e+02, 1.03932445e+02, 1.03122397e+02, 1.02254195e+02, 1.01351548e+02, 1.00459634e+02, 9.96229044e+01, 9.88428469e+01, 9.80907577e+01, 9.73316646e+01, 9.65280708e+01, 9.56694321e+01, 9.47512995e+01, 9.37870930e+01, 9.28153993e+01, 9.18503043e+01, 9.09013285e+01, 8.99609238e+01, 8.90099829e+01, 8.80356765e+01, 8.70169018e+01, 8.59546035e+01, 8.48651287e+01, 8.37747464e+01, 8.26885578e+01, 8.15965550e+01, 8.05053933e+01, 7.94063334e+01, 7.82936719e+01, 7.71774974e+01, 7.60784277e+01, 7.49832816e+01, 7.38425330e+01, 7.26506245e+01, 7.14197540e+01, 7.01739121e+01, 6.89440730e+01, 6.77243729e+01, 6.65101601e+01, 6.52978809e+01, 6.40849413e+01, 6.28695585e+01, 6.16372541e+01, 6.03787847e+01, 5.90890698e+01, 5.77795771e+01, 5.64460422e+01, 5.50867608e+01, 5.37152734e+01, 5.23150044e+01, 5.09025923e+01, 4.95170664e+01, 4.81576270e+01, 4.68223196e+01, 4.55084848e+01, 4.41863928e+01, 4.28222882e+01, 4.14081160e+01, 3.99542652e+01, 3.84701378e+01, 3.69773006e+01, 3.55046944e+01, 3.40715226e+01, 3.26757784e+01, 3.12873367e+01, 2.98713337e+01, 2.84181652e+01, 2.69364451e+01, 2.54337364e+01, 2.39164616e+01, 2.24032598e+01, 2.09203367e+01, 1.94710823e+01, 1.80427147e+01, 1.66117995e+01, 1.51620478e+01, 1.36964086e+01, 1.22044386e+01, 1.06802250e+01, 9.12134682e+00, 7.52795930e+00, 5.92873387e+00, 4.34407814e+00, 2.80087641e+00, 1.32911580e+00, -8.07217606e-02, -1.45197566e+00, -2.81642537e+00, -4.19670862e+00, -5.60784604e+00, -7.07207596e+00, -8.58878889e+00, -1.01413939e+01, -1.17029853e+01, -1.32542248e+01, -1.47821115e+01, -1.62654216e+01, -1.77050207e+01, -1.91038515e+01, -2.04795140e+01, -2.18589413e+01, -2.32474504e+01, -2.46616418e+01, -2.61117784e+01, -2.75897734e+01, -2.90751109e+01, -3.05396599e+01, -3.19781735e+01, -3.34150838e+01, -3.48809600e+01, -3.63689619e+01, -3.78463942e+01, -3.93176244e+01, -4.07860449e+01, -4.22408244e+01, -4.36751001e+01, -4.50717986e+01, -4.64343202e+01, -4.77668745e+01, -4.90873726e+01, -5.04090126e+01, -5.17142654e+01, -5.30050801e+01, -5.43103125e+01, -5.56627764e+01, -5.70428693e+01, -5.83952980e+01, -5.96827859e+01, -6.09227537e+01, -6.21833877e+01, -6.34712976e+01, -6.47495809e+01, -6.60196055e+01, -6.72827716e+01, -6.85404271e+01, -6.97938110e+01, -7.10173019e+01, -7.21811797e+01, -7.32945179e+01, -7.43930950e+01, -7.54760584e+01, -7.65302857e+01, -7.75748334e+01, -7.86636531e+01, -7.98188343e+01, -8.09988763e+01, -8.21733632e+01, -8.33212734e+01, -8.44292929e+01, -8.54768625e+01, -8.64394435e+01, -8.73578150e+01, -8.82762805e+01, -8.92125281e+01, -9.01913642e+01, -9.12011814e+01, -9.22054701e+01, -9.31789364e+01, -9.41322171e+01, -9.50604873e+01, -9.59216238e+01, -9.67164086e+01, -9.74756538e+01, -9.82495728e+01, -9.90592170e+01, -9.98773544e+01, -1.00697804e+02, -1.01529468e+02, -1.02391347e+02, -1.03255067e+02, -1.04060562e+02, -1.04795564e+02, -1.05468601e+02, -1.06115677e+02, -1.06750059e+02, -1.07355002e+02, -1.07960422e+02, -1.08613981e+02, -1.09306433e+02, -1.09962424e+02, -1.10544447e+02]
endolith commented 2 months ago

My plots are in dB:

… 
freqs = rfftfreq(len(windowed)*5, 1/fs)
spec = 20*log10(abs(f))
plt.figure()
plt.semilogx(freqs, spec)
plt.axvline(frequency, color='red')
for h in range(2, 10):
    plt.axvline(frequency * h, color='green')
peak = max(spec)
residual = max(spec[20*5:])
print(f'Highest peak: {peak:.2f} dB')
print(f'Highest residual: {residual:.2f} dB')
plt.axhline(residual, color='gray')
print(f'Difference: {peak - residual:.2f} dB')
# Which is 0.4076149 %%
endolith commented 2 months ago

The THD function should be correct now, too, though note that THD uses THDF while THD+N uses THDR. In the future I would like both functions to support both as an option.