diff --git a/PROJECT_LOG.md b/PROJECT_LOG.md index 2c9de13..e83b742 100644 --- a/PROJECT_LOG.md +++ b/PROJECT_LOG.md @@ -2730,3 +2730,53 @@ PASS и0/16 пакетов. T2 gain равен0. Диагностические Lab062 не коммитировалась, push не выполнялся, Lab063 не создана. Следующий этап: RF TX=0 и отдельно согласовать только офлайн-локализацию underrun относительно границ пакетов. + +# Запись 058 + +## Дата + +14 сентября 2026 года + +## Тема + +Lab063: офлайн-локализация TX underrun и глобального ухудшения Lab062 + +## Выполнено + +Lab062 зафиксирована отдельным коммитом +f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5 с сообщением +`Lab062: record invalidated 500 ksymbol/s RF packet trial`; push не выполнялся. Статус +`RF_SESSION_INVALID_TX_UNDERRUN`, результаты legacy/T2 0/16 и запрет повтора сохранены. + +По сохранённым TX/RX без аппаратных команд установлено, что 16 waveform по 92 256 отсчётов +записаны вплотную: 92 256 × 16 = 1 476 096. Дополнительная межпакетная пауза равна нулю. +`prepare()` не передаёт параметр паузы и не пишет нули между packet waveform, поэтому отсутствие +обещанных 5 мс признано ошибкой реализации подготовки Lab062. Внутренние защитные участки и +хвосты RRC каждого пакета сохранены. + +Строка `longest 16672 bytes` пересчитана в 8 336 комплексных отсчётов, 1,042 мс, 521 символ и +9,035727% одного packet waveform. Это масштаб сообщения, а не доказанное число потерянных или +повторённых RF-отсчётов. Локальное сопоставление 512-символьными окнами с шагом 256 символов +дало 221 надёжное окно из 359. Задержка в них равна 0…1 отсчёту, скачков нет; место underrun по +RX не локализовано. В 22 дополнительных внутренних окнах пакетов3,4,12,13 корреляция ниже0,15, +поэтому задержка там не установлена. Края, повторяющаяся PRBS-преамбула и низкокорреляционные +окна исключены из delay-verdict, но сохранены в CSV. Корреляционные копии преамбулы имеют период +2 032 отсчёта. + +Все 16 пакетов хуже Lab056 B по SER, EVM и matched/residual. SER составляет +7,580920…16,013629%, EVM 1,063657…1,663418, matched/residual от −4,420028 до +−0,536031дБ. Пакеты 3,4,12,13 выделяются всплесками AC-мощности и остатка при стабильной +медиане локального |h| 0,004488…0,004805. Пакет14 не имеет общего с ними физического признака. +Результат классифицирован как `GLOBAL_RF_DEGRADATION`; один локальный underrun недостаточен для +объяснения качества всего сеанса. + +AC RMS по пакетам равен0,760816…2,032438 кода, max|I|/|Q| лежат в диапазонах3…6/4…7, +DC стабилен. Сильная аналоговая перегрузка по цифровым уровням менее вероятна, но без прибора не +исключена. Локального исходного файла или документации, объясняющей расхождение промежуточного и +итогового счётчиков `hackrf_transfer`, не найдено; `COUNTER SEMANTICS=NOT_ESTABLISHED`. + +Созданы постановка, отчёт, JSON, два CSV, восемь графиков, анализатор и тесты. Lab063 выполнена +полностью офлайн, RF TX=0, оборудование не опрашивалось. Lab063 не коммитировалась, push не +выполнялся. Следующий этап: STOP и отдельно согласовать исследование уровня RX, усилений, +геометрии и возможной аналоговой компрессии или слабого полезного сигнала; Lab064 автоматически +не создавать. diff --git a/data/processed/lab063/gain_vs_time.png b/data/processed/lab063/gain_vs_time.png new file mode 100644 index 0000000..7b13c97 Binary files /dev/null and b/data/processed/lab063/gain_vs_time.png differ diff --git a/data/processed/lab063/lab056_b_vs_lab062_packets.png b/data/processed/lab063/lab056_b_vs_lab062_packets.png new file mode 100644 index 0000000..05b5f97 Binary files /dev/null and b/data/processed/lab063/lab056_b_vs_lab062_packets.png differ diff --git a/data/processed/lab063/local_alignment.csv b/data/processed/lab063/local_alignment.csv new file mode 100644 index 0000000..e3bdce5 --- /dev/null +++ b/data/processed/lab063/local_alignment.csv @@ -0,0 +1,360 @@ +window_index,tx_sample,rx_sample,time_seconds,local_delay_samples,packet_index,position_inside_packet_samples,inside_reliable_region,correlation_above_threshold,reliable_for_delay,normalized_correlation,gain,gain_amplitude,phase_rad,residual_power,rx_ac_power +0,0,4256092,0.0,1,1,0,False,True,False,0.2723983005613592,(0.0014400764308659896+0.004547916824745963j),0.004770468275918322,1.264139438138503,0.5320521433901737,0.5746949911117554 +1,4096,4258156,0.000512,-2031,1,4096,False,True,False,0.2729793659247979,(-0.004663053599288344+0.00040199323732778125j),0.004680349071671177,3.0555971153877457,0.5307691750552395,0.5735055059194565 +2,8192,4258188,0.001024,-6095,1,8192,False,True,False,0.2744171645442273,(0.004046229816782595+0.0023981760914401954j),0.004703533171539868,0.5350301142527935,0.5298967126207345,0.5730501264333725 +3,12288,4258220,0.001536,-10159,1,12288,False,True,False,0.2745940021638059,(-0.001877375284743114-0.004308549206226646j),0.004699801508812957,-1.9817223367149237,0.5290641319544691,0.572209820151329 +4,16384,4272476,0.002048,1,1,16384,False,True,False,0.26655475961180447,(0.0015909658512084958+0.0043219233704984905j),0.004605452633582567,1.2180752315139343,0.5385030300563245,0.5796909034252167 +5,20480,4276572,0.00256,1,1,20480,False,True,False,0.2704674132861876,(0.0015020188131524086+0.004503663352078344j),0.004747530316271536,1.2488863714827263,0.5517759339741067,0.5953255593776703 +6,24576,4280667,0.003072,0,1,24576,True,True,True,0.2779743002913568,(0.001574055297828197+0.004628794269849324j),0.004889108965160313,1.2430064552849862,0.5566272125305693,0.6032393425703049 +7,28672,4284763,0.003584,0,1,28672,True,True,True,0.2720544529364392,(0.0016932309240155242+0.004457847887134059j),0.004768588758413548,1.2077965884614033,0.5530613403203055,0.5972672551870346 +8,32768,4288859,0.004096,0,1,32768,True,True,True,0.2649913203278537,(0.0018990710284393965+0.004188594569993716j),0.004598999374085488,1.1451260339739677,0.5459171758273589,0.5871468633413315 +9,36864,4292955,0.004608,0,1,36864,True,True,True,0.2721722386513534,(0.0018268451981139167+0.004317763275913575j),0.004688330522126165,1.1705361837258939,0.5365336736680916,0.5794586539268494 +10,40960,4297051,0.00512,0,1,40960,True,True,True,0.2721968822811185,(0.001724738414167657+0.004364487642303184j),0.004692917533594935,1.1944559420309822,0.5372551467224218,0.5802462548017502 +11,45056,4301147,0.005632,0,1,45056,True,True,True,0.27115565572908557,(0.0018536312646620433+0.0043132285698386785j),0.004694666075559072,1.1649051100363104,0.5411645818582298,0.5841116160154343 +12,49152,4305244,0.006144,1,1,49152,True,True,True,0.26695565820866574,(0.0015749959490531304+0.004372541401953098j),0.004647551027296822,1.2250623805453835,0.5459189026441111,0.5878093242645264 +13,53248,4309339,0.006656,0,1,53248,True,True,True,0.2556440262627536,(0.0016446481954502357+0.004141139532609057j),0.0044557720223700045,1.1927503782494664,0.5527965436310334,0.5914500951766968 +14,57344,4313435,0.007168,0,1,57344,True,True,True,0.2654944778350678,(0.001579553863468991+0.004353550882949614j),0.004631241269684746,1.2227468320256794,0.551303941123149,0.5931107252836227 +15,61440,4317531,0.00768,0,1,61440,True,True,True,0.2819287365366617,(0.0016676229288336369+0.0046224170689160154j),0.004914031521243816,1.2245604961967766,0.5432338343896431,0.5901404470205307 +16,65536,4321628,0.008192,1,1,65536,True,True,True,0.2849343081441107,(0.0015551300976373065+0.004760709738123959j),0.005008271840789566,1.255064382840333,0.5515766203313819,0.6003147065639496 +17,69632,4325724,0.008704,1,1,69632,True,True,True,0.2668779433455796,(0.0015400349773235437+0.0044066605083271275j),0.004668015056427071,1.234585792156039,0.5544426689160701,0.5969604849815369 +18,73728,4329819,0.009216,0,1,73728,True,True,True,0.26731850919222144,(0.0015998970853807015+0.004351612962721423j),0.004636400118748897,1.2184796304589962,0.544979127072188,0.5869199484586716 +19,77824,4333915,0.009728,0,1,77824,True,True,True,0.2757493751671597,(0.0015028961676935508+0.0045326408799782995j),0.004775304203683616,1.2506319351828965,0.5405722579331813,0.58505879342556 +20,81920,4338011,0.01024,0,1,81920,True,True,True,0.2747031051630683,(0.001434360817300166+0.004554302124498627j),0.004774835996703836,1.2656843127617807,0.5449793922392892,0.5894611924886703 +21,86016,4342106,0.010752,-1,1,86016,False,True,False,0.262832641274786,(0.0017063341695680602+0.004412668558523586j),0.004731090794480502,1.201816607513573,0.5405771973365503,0.5806919783353806 +22,90112,4346203,0.011264,0,1,90112,False,True,False,0.24463720210977444,(0.001540875532155414+0.004130615883847389j),0.004408660225679404,1.2137471203289174,0.5462349738883019,0.5810066908597946 +23,94208,4360459,0.011776,10160,2,1952,False,True,False,0.2716641040460329,(-0.0013022645358288175-0.004525075678879153j),0.00470873686043944,-1.8510125610584165,0.5428179407596163,0.5860707759857178 +24,98304,4360491,0.012288,6096,2,6048,False,True,False,0.2718898121257277,(-0.0016149804689081098+0.004431209064076905j),0.0047163307437574796,1.920291000004672,0.5434848560970025,0.5868685692548752 +25,102400,4360523,0.0128,2032,2,10144,False,True,False,0.2725240587031942,(0.00391949046182433-0.0026463739117019856j),0.004729238877543486,-0.5938754774412633,0.5434089720090052,0.5870054960250854 +26,106496,4362587,0.013312,0,2,14240,False,True,False,0.2760592697755412,(0.0013920156722528913+0.004580095816437278j),0.0047869599245809365,1.2757405072063803,0.5415059501043626,0.5861778110265732 +27,110592,4366683,0.013824,0,2,18336,False,True,False,0.2724376874597982,(0.0014133537140496781+0.0045130584690135705j),0.004729192897921709,1.2673013462261535,0.5413853024567086,0.5847897380590439 +28,114688,4370780,0.014336,1,2,22432,False,True,False,0.2719029335917029,(0.0011697644964912767+0.004560116010595991j),0.0047077602962922165,1.3196899415543735,0.5406078471906972,0.5837664008140564 +29,118784,4374876,0.014848,1,2,26528,True,True,True,0.2700707220369181,(0.0013350388080086953+0.004474286128071312j),0.004669214599345446,1.2808261632328335,0.5394193308566163,0.5818590819835663 +30,122880,4378971,0.01536,0,2,30624,True,True,True,0.2686195464655446,(0.0012246606908276484+0.0044642820496554455j),0.004629212462885483,1.3030584917227905,0.5373847039400281,0.5791759938001633 +31,126976,4383067,0.015872,0,2,34720,True,True,True,0.2633530926845802,(0.0011406041785767163+0.004404294536372791j),0.004549592097684131,1.3173881793080358,0.5396795929719889,0.5798983573913574 +32,131072,4387163,0.016384,0,2,38816,True,True,True,0.25637788480815954,(0.0012829050950408745+0.004270558977812529j),0.004459094018503873,1.278966333401463,0.5485951175865063,0.5871909558773041 +33,135168,4391260,0.016896,1,2,42912,True,True,True,0.26000719134870665,(0.001208701026115259+0.00434386307850457j),0.004508891728055496,1.2994066208398154,0.5469509736502136,0.5866078585386276 +34,139264,4395355,0.017408,0,2,47008,True,True,True,0.2539878786554866,(0.001204104650759226+0.0042140376803331j),0.004382691134593809,1.2924760702562699,0.5432254548985715,0.5806853771209717 +35,143360,4399451,0.01792,0,2,51104,True,True,True,0.26248777906333653,(0.001090192569531215+0.004413735444813682j),0.004546381024008624,1.3286431982708542,0.544464620474242,0.584754079580307 +36,147456,4403547,0.018432,0,2,55200,True,True,True,0.268908662501336,(0.0011983970061596977+0.004461156216980074j),0.0046193149033890825,1.3083625534812198,0.5334410404305294,0.5750219523906708 +37,151552,4407644,0.018944,1,2,59296,True,True,True,0.2584294308489172,(0.0009705941914629901+0.004321800607292927j),0.004429448450281277,1.3498807548369551,0.5329131149684843,0.5710512101650238 +38,155648,4411739,0.019456,0,2,63392,True,True,True,0.2589804129517903,(0.0011773086855389008+0.004351617974012928j),0.004508063301773581,1.306576549991733,0.5504235283232656,0.5899949967861176 +39,159744,4415835,0.019968,0,2,67488,True,True,True,0.26707042084269383,(0.0012836628929886265+0.004466770988566209j),0.004647562101482096,1.2909568817815837,0.5478066109478578,0.5898808091878891 +40,163840,4419932,0.02048,1,2,71584,True,True,True,0.26685819356609625,(0.0011948923329598014+0.004432616311602053j),0.004590844699316968,1.3074870108552974,0.5338153340239872,0.5747448056936264 +41,167936,4424027,0.020992,0,2,75680,True,True,True,0.2602019922356652,(0.0012135424294046583+0.004275450290739874j),0.004444340267863503,1.294230653530701,0.5290908955689677,0.5675145089626312 +42,172032,4428123,0.021504,0,2,79776,True,True,True,0.2648953034335269,(0.0010080749497805373+0.004436298157786467j),0.0045493907778025216,1.3473571568083174,0.5346305944052281,0.5749764144420624 +43,176128,4432219,0.022016,0,2,83872,True,True,True,0.27271964951391364,(0.0010679789510904913+0.004638600937917362j),0.004759957741537227,1.3445025739068763,0.5379263101079028,0.5811499208211899 +44,180224,4436316,0.022528,1,2,87968,False,True,False,0.26621296963966334,(0.0014238192462404508+0.004578690891323345j),0.004794963141073359,1.2693091820913467,0.5398449030192329,0.5810215175151825 +45,184320,4440411,0.02304,0,2,92064,False,True,False,0.2580468087430128,(0.0016982791241270806+0.004292585999959374j),0.004616323921746941,1.1940621888188008,0.5458059940350145,0.5847429484128952 +46,188416,4452635,0.023552,8128,3,3904,False,True,False,0.2649939974461844,(0.004547469531258444+0.0002454033015846323j),0.004554086287956402,0.053912509828619726,0.5349567727385085,0.5753595679998398 +47,192512,4452667,0.024064,4064,3,8000,False,True,False,0.2652695563170298,(-0.00352196396834277-0.00288831530557835j),0.004554843081681619,-2.4547232497156846,0.5348699867647786,0.5753566473722458 +48,196608,4450668,0.024576,-2031,3,12096,False,True,False,0.2655804119817936,(-0.00455017405199118-0.0005553942299958869j),0.00458394444273996,-3.0201334712223153,0.5399761574427078,0.580952450633049 +49,200704,4456795,0.025088,0,3,16192,False,True,False,0.27329487809545694,(0.0010001317651298055+0.004609230865953922j),0.004716489449080111,1.3571240999141405,0.5367884244476238,0.5801174491643906 +50,204800,4460891,0.0256,0,3,20288,False,True,False,0.2748035784048019,(0.0009020685528086647+0.004696528423964232j),0.0047823746100729364,1.3810359628033242,0.5447007004166863,0.5891949385404587 +51,208896,4464987,0.026112,0,3,24384,True,True,True,0.2733714317503713,(0.001196082844537941+0.0046138615886948545j),0.0047663752402251945,1.3171432489691388,0.5430379318122193,0.5868979543447495 +52,212992,4469084,0.026624,1,3,28480,True,True,True,0.26980098289370985,(0.000891303823734098+0.00462177943251277j),0.0047069382435932896,1.3802864468658624,0.5452336561152853,0.5880384892225266 +53,217088,4473180,0.027136,1,3,32576,True,True,True,0.2593488284007324,(0.000701164278632974+0.004429229337331668j),0.004484384446979364,1.4137952643367864,0.5418432466726182,0.5809167623519897 +54,221184,4477275,0.027648,0,3,36672,True,True,True,0.24083000237735547,(0.0010787855072950715+0.003956623747567151j),0.004101054699776901,1.3046133691002941,0.5316101788297216,0.5643414705991745 +55,225280,4481371,0.02816,0,3,40768,True,True,True,0.24884057677466154,(0.0012529409123619626+0.004099663105570891j),0.004286851817948644,1.274191159290718,0.5432383289368947,0.5790969580411911 +56,229376,4485467,0.028672,0,3,44864,True,True,True,0.26424577088305007,(0.001419557704160117+0.004367512865639938j),0.004592419047405269,1.2565404007957168,0.5470104412221599,0.5880731344223022 +57,233472,4489563,0.029184,0,3,48960,True,True,True,0.25762850178040403,(0.0013096625676030976+0.004235848862247899j),0.004433692775191755,1.2709340205678785,0.5390744902777722,0.5773977935314178 +58,237568,4493659,0.029696,0,3,53056,True,True,True,0.2679321562033791,(0.0013369756290009971+0.0043821287442785415j),0.004581545172098038,1.2746696997240843,0.5273775856410188,0.5681647956371307 +59,241664,4497755,0.030208,0,3,57152,True,True,True,0.2711470944273147,(0.001351328684164128+0.004419603802068811j),0.004621578407850054,1.2740654815604695,0.5230486505702867,0.5645551681518555 +60,245760,4501852,0.03072,1,3,61248,True,True,True,0.2672883844824355,(0.0010068247184626777+0.004467841124027755j),0.004579879946380805,1.3491494727972868,0.5312288236824456,0.5721015185117722 +61,249856,4505947,0.031232,0,3,65344,True,True,True,0.27107441392986664,(0.0013357978398945835+0.0044942838974314555j),0.004688597191034725,1.2818905523246318,0.5404706646150161,0.583334892988205 +62,253952,4510043,0.031744,0,3,69440,True,False,False,0.13153433429624267,(0.001554183671647779+0.004426566695093525j),0.004691479467217968,1.2331386492766252,2.4339817589794546,2.476834163069725 +63,258048,4514139,0.032256,0,3,73536,True,False,False,0.08888879507126439,(0.00169980331450993+0.004389042425002968j),0.004706699981568283,1.2013003657755736,5.416685224653776,5.459824487566948 +64,262144,4518235,0.032768,0,3,77632,True,False,False,0.07990273751817419,(0.001699250897969519+0.004324783344646435j),0.004646633683902942,1.1964168666678643,6.53860352546403,6.580617129802704 +65,266240,4522332,0.03328,1,3,81728,True,False,False,0.07824125225628915,(0.0013933691504081321+0.004356594463416111j),0.004573990916910198,1.2612476939877006,6.624367159902822,6.665169283747673 +66,270336,4526428,0.033792,1,3,85824,True,False,False,0.07587440188611191,(0.0013041751210003604+0.004457185452549003j),0.004644068787674313,1.286141724316014,6.655995644921719,6.694535583257675 +67,274432,4530523,0.034304,0,3,89920,False,False,False,0.0769175854864118,(0.0015678214075495489+0.004396212075719992j),0.004667413050146401,1.2282272423410476,6.554379697834005,6.593388259410858 +68,278528,4542747,0.034816,8128,4,1760,False,False,False,0.08597985441315165,(0.005066283573465239+0.00034999030444959325j),0.005078358244548373,0.0689726756303229,6.758426343340691,6.808760344982147 +69,282624,4542779,0.035328,4064,4,5856,False,False,False,0.0857009006288708,(-0.0038966589911976885-0.003238719072000978j),0.005066877985606587,-2.4481426241304436,6.759721722902659,6.80973681807518 +70,286720,4544843,0.03584,2032,4,9952,False,False,False,0.08525779282376747,(0.004325880698897092-0.0025736448588474193j),0.005033576430388451,-0.536691526326966,6.741963816067408,6.791329249739647 +71,290816,4546907,0.036352,0,4,14048,False,False,False,0.0818033690015016,(0.0011822849366477169+0.004670129356209848j),0.004817458445607716,1.3228467728695121,6.720242903354096,6.765516325831413 +72,294912,4551003,0.036864,0,4,18144,False,False,False,0.07658097028160148,(0.0008517722304822827+0.004438565003908057j),0.0045195547597676146,1.3811986992356107,6.7219641213364305,6.761618614196777 +73,299008,4555099,0.037376,0,4,22240,False,False,False,0.08613404389567611,(0.0011849698335850026+0.0049152028039830455j),0.005056023349509896,1.334227966715792,6.6581370011692105,6.707903429865837 +74,303104,4559195,0.037888,0,4,26336,True,False,False,0.08726659571551212,(0.0016595927555988928+0.004842576482874993j),0.005119061936227209,1.2406318687205053,6.6524727994418935,6.703523203730583 +75,307200,4563291,0.0384,0,4,30432,True,False,False,0.07303287114951702,(0.001432858640864123+0.004032332716192873j),0.0042793446950179625,1.229370113401519,6.647078068400921,6.682722374796867 +76,311296,4567387,0.038912,0,4,34528,True,False,False,0.07923837125521409,(0.001686126196189353+0.004315979331039012j),0.004633648577032135,1.198358325356545,6.621968636371651,6.663808822631836 +77,315392,4571483,0.039424,0,4,38624,True,False,False,0.08766369642748506,(0.0017031705964680188+0.004852024258675652j),0.0051422689046227675,1.2332107176608704,6.6245479222476575,6.675851330161095 +78,319488,4575579,0.039936,0,4,42720,True,False,False,0.08111151553103035,(0.0017214618264675924+0.004433371066833172j),0.004755860577878481,1.2004198351270303,6.642704557350704,6.686696857213974 +79,323584,4579675,0.040448,0,4,46816,True,False,False,0.10671176630261674,(0.0013274729713343197+0.004468864548466894j),0.0046618595905676295,1.2820488137155435,3.674980498404129,3.7173110097646713 +80,327680,4583771,0.04096,0,4,50912,True,True,True,0.17364185979381344,(0.0011104452242883332+0.0048122481560667054j),0.0049387064006389545,1.3440119960319097,1.5273621675226863,1.5748461335897446 +81,331776,4587867,0.041472,0,4,55008,True,False,False,0.13566484987135102,(0.0011900787687552166+0.004564289775742337j),0.004716887600185949,1.3157381520156248,2.309129150389409,2.3524254262447357 +82,335872,4591963,0.041984,0,4,59104,True,True,True,0.1663171407536924,(0.0012317423905629345+0.004361708579217488j),0.004532294236557146,1.2955643672094288,1.3985216467121702,1.4383072257041931 +83,339968,4596059,0.042496,0,4,63200,True,True,True,0.26471751311013225,(0.001558865952620833+0.00430077474184848j),0.004574573907847846,1.2230632263032186,0.5405374832466419,0.5812702029943466 +84,344064,4600155,0.043008,0,4,67296,True,True,True,0.2792268825008271,(0.0016212932750898708+0.004545583027784552j),0.004826066405089617,1.2281878779094144,0.5361519398429078,0.5814892947673798 +85,348160,4604251,0.04352,0,4,71392,True,True,True,0.2832122191263414,(0.001568572376109022+0.004689580014148107j),0.004944955005678986,1.2480138106379053,0.546382714975119,0.5940293073654175 +86,352256,4608347,0.044032,0,4,75488,True,True,True,0.2751351562277797,(0.0014124280165170157+0.004572151352605746j),0.004785344386037095,1.2711764645789363,0.5418399951586526,0.5862161815166473 +87,356352,4612443,0.044544,0,4,79584,True,True,True,0.2711253433830607,(0.0012792764994174382+0.004507944933506286j),0.0046859487711120714,1.2942834417500173,0.539963691491252,0.5828050822019577 +88,360448,4616539,0.045056,0,4,83680,True,True,True,0.2780326176311392,(0.0014125086541028251+0.004613805346804851j),0.004825181911194686,1.2737084804157615,0.5414278402357562,0.5867877900600433 +89,364544,4620635,0.045568,0,4,87776,False,True,False,0.2717667108050532,(0.0013978470154112287+0.004703990842016978j),0.004907291118353758,1.281945292248661,0.5413104739012351,0.5844783782958984 +90,368640,4626764,0.04608,2033,4,91872,False,True,False,0.2662074290976547,(0.004115316763378964-0.002495104285846531j),0.004812626877309069,-0.5450368010824937,0.5440730211399605,0.5855702757835388 +91,372736,4626795,0.046592,-2032,5,3712,False,True,False,0.282542960509231,(-0.004899029038211988-8.122809335022387e-05j),0.004899702391002294,-3.125013725308483,0.5400234934244572,0.5868739485740662 +92,376832,4626827,0.047104,-6096,5,7808,False,True,False,0.2825020973176275,(0.003908930591380348+0.002952507348220343j),0.004898677169351359,0.646899486603501,0.5395280432357176,0.5863208025693893 +93,380928,4626859,0.047616,-10160,5,11904,False,True,False,0.2807600356970303,(-0.001420950169111977-0.004657543716583497j),0.004869477677840383,-1.8669123818056594,0.5399243687694288,0.5861264914274216 +94,385024,4641116,0.048128,1,5,16000,False,True,False,0.2650614809565532,(0.0010542710537117725+0.004575124896595126j),0.004695024523273451,1.344314387574751,0.5685874798206638,0.6115537732839584 +95,389120,4645211,0.04864,0,5,20096,False,True,False,0.2667422739644077,(0.0010977299055325784+0.004457196663720133j),0.004590382668643046,1.3293194581197063,0.534952635962959,0.5759309530258179 +96,393216,4649307,0.049152,0,5,24192,True,True,True,0.26466251848509825,(0.0010486869362193254+0.004394194972639804j),0.0045175982277942785,1.336525561985254,0.5277840580651971,0.5675379633903503 +97,397312,4653403,0.049664,0,5,28288,True,True,True,0.25854313841229054,(0.001198925223421213+0.004261898495125296j),0.004427324301890123,1.2965709791550253,0.5339610295058146,0.5722101628780365 +98,401408,4657499,0.050176,0,5,32384,True,True,True,0.2537591241878097,(0.001220992856318022+0.004200952361654078j),0.004374794200881525,1.287942494915078,0.5425047534699575,0.5798429846763611 +99,405504,4661596,0.050688,1,5,36480,True,True,True,0.2590655534926447,(0.0011303389414594528+0.004347174614996451j),0.004491724975535481,1.3164124223967255,0.5442177708614893,0.5833706706762314 +100,409600,4665692,0.0512,1,5,40576,True,True,True,0.27545885714841517,(0.001241740275123457+0.004628777994975647j),0.004792442450111889,1.3087020787717447,0.5450552239659276,0.589808464050293 +101,413696,4669788,0.051712,1,5,44672,True,True,True,0.2779047219199058,(0.0013383854927980384+0.004623275702312929j),0.004813102320430073,1.289010720505806,0.5374273640261628,0.5824072808027267 +102,417792,4673883,0.052224,0,5,48768,True,True,True,0.28072829168306407,(0.0014892805370576398+0.004618240714550299j),0.004852432772907704,1.258847275319138,0.5363134186037127,0.5821952819824219 +103,421888,4677979,0.052736,0,5,52864,True,True,True,0.27647214381674806,(0.0013533142580344057+0.004639687152038339j),0.004833027658703067,1.2869878818229048,0.5499437435476484,0.5954587310552597 +104,425984,4682075,0.053248,0,5,56960,True,True,True,0.2715921696331709,(0.001087912656261071+0.004603111202176992j),0.004729924596360954,1.338712126802001,0.5463894941519993,0.5899020284414291 +105,430080,4686171,0.05376,0,5,61056,True,True,True,0.2669719744416374,(0.001055495801123365+0.004535850831207893j),0.004657039204168071,1.342164417057586,0.5496048207813974,0.5917836278676987 +106,434176,4690267,0.054272,0,5,65152,True,True,True,0.25933246973065593,(0.0011738677237808808+0.004384331485952915j),0.00453875842182117,1.3091906786672414,0.5567507899047981,0.5968938916921616 +107,438272,4694363,0.054784,0,5,69248,True,True,True,0.26592635147561616,(0.0014396359888415133+0.004449124742918487j),0.004676244514395839,1.257851704672455,0.5601043060592626,0.6027272641658783 +108,442368,4698459,0.055296,0,5,73344,True,True,True,0.27365159790299287,(0.0015497665053611947+0.004564716338565147j),0.004820623556419133,1.243497177656846,0.5584733039849059,0.6036799997091293 +109,446464,4702555,0.055808,0,5,77440,True,True,True,0.2633210162250354,(0.0013221811004029498+0.004381795354342359j),0.004576930564209931,1.2777401668138901,0.5471677345553811,0.5879338681697845 +110,450560,4706651,0.05632,0,5,81536,True,True,True,0.26824181335626013,(0.0012740111219966598+0.004465711961654281j),0.0046438871286276235,1.29289142838727,0.5420455105218226,0.5840716063976288 +111,454656,4710747,0.056832,0,5,85632,True,True,True,0.26388173742294235,(0.0014123473641952727+0.004534563825781714j),0.004749420403295272,1.2688567766150023,0.5375280882444592,0.5777595490217209 +112,458752,4714843,0.057344,0,5,89728,False,True,False,0.2522196006429852,(0.0013772325045995537+0.004293720322152726j),0.004509191011322637,1.2604086118008029,0.5350556534434683,0.5714054554700851 +113,462848,4725035,0.057856,6096,6,1568,False,True,False,0.2771232078693172,(-0.0020002876001643417+0.004297049846018963j),0.004739808842405231,2.0064671134474126,0.5274695198960893,0.5713474452495575 +114,466944,4725067,0.058368,2032,6,5664,False,True,False,0.27702128795645814,(0.00413210728460306-0.002319090529045502j),0.004738406007654707,-0.5114293343015762,0.5277817565190994,0.5716506838798523 +115,471040,4725099,0.05888,-2032,6,9760,False,True,False,0.276592565978206,(-0.004702814275236275-0.000545451646585368j),0.004734340461577387,-3.0261244877072064,0.5278071537418947,0.5715312659740448 +116,475136,4731227,0.059392,0,6,13856,False,True,False,0.261387587164352,(0.0011452191894361628+0.004324249063830631j),0.0044733272804359965,1.3119033303989793,0.5314278199197381,0.5703994929790497 +117,479232,4735323,0.059904,0,6,17952,False,True,False,0.26600518395588735,(0.0011882035152338427+0.00440899760787155j),0.004566299103194086,1.307555089993816,0.5333333931089501,0.5739450305700302 +118,483328,4739419,0.060416,0,6,22048,False,True,False,0.26354711468027764,(0.0012722185803642125+0.004339840170588295j),0.00452247198139201,1.285636904251594,0.5330185708165498,0.5728038549423218 +119,487424,4743516,0.060928,1,6,26144,True,True,True,0.2655258469985231,(0.0010413614298705306+0.004482633907505584j),0.004602003952230026,1.3425349502168569,0.5439972900983086,0.5852604806423187 +120,491520,4747612,0.06144,1,6,30240,True,True,True,0.27026658341105503,(0.0006871157719793929+0.004660496024741168j),0.0047108758507024015,1.424416812159449,0.5483031597970439,0.5915093868970871 +121,495616,4751707,0.061952,0,6,34336,True,True,True,0.27212727343914983,(0.00103874048233643+0.004593169010476414j),0.004709159516139308,1.3483885391116444,0.5392289521801527,0.5823541730642319 +122,499712,4755803,0.062464,0,6,38432,True,True,True,0.28136708133251975,(0.0015478134989297052+0.004631816125900667j),0.00488358958673049,1.248293057797807,0.5387114553079869,0.5850265026092529 +123,503808,4759899,0.062976,0,6,42528,True,True,True,0.27890087509243017,(0.0013600301944214322+0.00462867624870359j),0.004824347204031933,1.2850123849861281,0.5356196312800044,0.5807973593473434 +124,507904,4763995,0.063488,0,6,46624,True,True,True,0.26336035378327605,(0.001049261617941425+0.0043808875864818145j),0.004504789227952348,1.3357157400217448,0.5320584679757843,0.5717116296291351 +125,512000,4768091,0.064,0,6,50720,True,True,True,0.26497822213724925,(0.001099080196697002+0.00443634202713449j),0.004570460355422775,1.3279414286903835,0.5397274050774757,0.5804852843284607 +126,516096,4772188,0.064512,1,6,54816,True,True,True,0.2588557900323732,(0.0013698338171910028+0.004291962654778482j),0.004505262269472581,1.2618532123786583,0.5491224961879504,0.5885597169399261 +127,520192,4776284,0.065024,1,6,58912,True,True,True,0.26525822500006635,(0.0014099236859939925+0.004358861980797595j),0.004581218458878557,1.2579566494377912,0.5409942829315486,0.5819407552480698 +128,524288,4780379,0.065536,0,6,63008,True,True,True,0.2663899652999382,(0.0013118458205982157+0.004388013938848249j),0.004579913294435554,1.2802928513905263,0.5342598690886164,0.5750688314437866 +129,528384,4784475,0.066048,0,6,67104,True,True,True,0.25666966629660665,(0.0012463167346545275+0.004264542171658961j),0.004442929814541037,1.286463776193324,0.5445433095922607,0.5829474925994873 +130,532480,4788571,0.06656,0,6,71200,True,True,True,0.2606059923710226,(0.001271455909544945+0.004320777588694721j),0.00450396704038599,1.2846087811950069,0.54270473673413,0.5822484195232391 +131,536576,4792667,0.067072,0,6,75296,True,True,True,0.2670879834822261,(0.001595899119666262+0.004329908780645395j),0.00461465102135163,1.2176697888301709,0.5365249042267309,0.5777384489774704 +132,540672,4796763,0.067584,0,6,79392,True,True,True,0.26593394499633477,(0.001477311710559645+0.004342725822956805j),0.004587125185073165,1.2428958119988545,0.5347466339577565,0.5754424184560776 +133,544768,4800859,0.068096,0,6,83488,True,True,True,0.2652553665245194,(0.0013141328612987792+0.004389330045641679j),0.004581829702937256,1.2798968884696806,0.5400880761578909,0.5809650123119354 +134,548864,4804955,0.068608,0,6,87584,False,True,False,0.25548083595374993,(0.0015057567714245848+0.004342790980108081j),0.004596426541521042,1.2370415480903751,0.542590490303864,0.5804785937070847 +135,552960,4817180,0.06912,8129,6,91680,False,True,False,0.26036916131092225,(0.004673620949138175+0.00024960406064367444j),0.0046802815047081335,0.05335630613581867,0.5395512157685356,0.5787885040044785 +136,557056,4817212,0.069632,4065,7,3520,False,True,False,0.27341327144153854,(-0.0035304699699410433-0.003130835945304359j),0.004718723548277156,-2.416116014289601,0.5372784161036481,0.5806876122951508 +137,561152,4817244,0.070144,1,7,7616,False,True,False,0.27403920750408217,(0.001010539602555097+0.004616804647374057j),0.0047261057373218915,1.355311797069995,0.5376433134511249,0.5812972784042358 +138,565248,4817276,0.070656,-4063,7,11712,False,True,False,0.2746479667516686,(0.0018912570769004213-0.004346463071505326j),0.004740104910535782,-1.1603806139411221,0.5378884612654133,0.5817724317312241 +139,569344,4825435,0.071168,0,7,15808,False,True,False,0.25937216918957146,(0.0011938454665440122+0.004362559508218352j),0.004522962796744413,1.3036790097834017,0.5521339003347727,0.5919571816921234 +140,573440,4829531,0.07168,0,7,19904,False,True,False,0.26774346245706554,(0.0009418111768576637+0.004568398639175929j),0.004664469360953987,1.3674868432051928,0.5443368442013263,0.5863718241453171 +141,577536,4833627,0.072192,0,7,24000,True,True,True,0.26587676777880576,(0.001102610189571028+0.004463079859444132j),0.0045972634318604925,1.3285947230861475,0.5408037074042943,0.5819414108991623 +142,581632,4837724,0.072704,1,7,28096,True,True,True,0.2619208785763954,(0.0012054341276794263+0.004364128878079499j),0.004527548155532052,1.3013016855057298,0.5421426589707972,0.582074448466301 +143,585728,4841820,0.073216,1,7,32192,True,True,True,0.26004799444738186,(0.0012996243478831987+0.004280701998500875j),0.004473637563055396,1.2760393722352807,0.5373060159033105,0.5762767046689987 +144,589824,4845916,0.073728,1,7,36288,True,True,True,0.26352682248810066,(0.0013929034499800838+0.004376577528341034j),0.004592886987782971,1.2626696720599786,0.5511815324075017,0.5923157185316086 +145,593920,4850011,0.07424,0,7,40384,True,True,True,0.27321560983225973,(0.0014136076722512999+0.004603422423890218j),0.004815577292892621,1.2728590831142508,0.560267982433693,0.605463907122612 +146,598016,4854107,0.074752,0,7,44480,True,True,True,0.2697569569525196,(0.0012948903346004814+0.004510190476376705j),0.00469239375072477,1.2912130045767223,0.5456335561563538,0.5884547084569931 +147,602112,4858203,0.075264,0,7,48576,True,True,True,0.26704062643742627,(0.0014034649430516995+0.004351442985962747j),0.004572173433549901,1.258801319004848,0.5305424443764983,0.5712808817625046 +148,606208,4862299,0.075776,0,7,52672,True,True,True,0.26110270903330773,(0.001204834540491995+0.004328357525056808j),0.004492917218765382,1.299310555739649,0.5375498470396575,0.5768783092498779 +149,610304,4866396,0.076288,1,7,56768,True,True,True,0.24788848233138613,(0.000885925455637422+0.004191896025296573j),0.004284490191358078,1.3625187593746237,0.5466587176655056,0.5824494808912277 +150,614400,4870491,0.0768,0,7,60864,True,True,True,0.2601141176285434,(0.0013182434384379415+0.004314238663366558j),0.004511144090745888,1.2742497022015684,0.5462691178352976,0.5859115123748779 +151,618496,4874587,0.077312,0,7,64960,True,True,True,0.27010121357136685,(0.0014941599628287964+0.004411796556139344j),0.004657946204850752,1.2442470656108626,0.5370899949431283,0.579356774687767 +152,622592,4878683,0.077824,0,7,69056,True,True,True,0.2758319253957052,(0.0012682927921888675+0.004576544230142604j),0.004749033975154294,1.3004519486229928,0.5343123720322084,0.5783122479915619 +153,626688,4882779,0.078336,0,7,73152,True,True,True,0.27404653150617597,(0.0011890329932240313+0.004588957075942728j),0.004740498550133744,1.3172644783717473,0.5393673486206108,0.5831638276576996 +154,630784,4886875,0.078848,0,7,77248,True,True,True,0.27119602861279707,(0.001236306317670613+0.004529799008937786j),0.004695479993833008,1.3043580041913996,0.5387397575259696,0.5815081000328064 +155,634880,4890971,0.07936,0,7,81344,True,True,True,0.27342762369718,(0.0012399300344019713+0.004586782940726171j),0.004751421285841605,1.3067799874345216,0.5439590769382545,0.5879130214452744 +156,638976,4895067,0.079872,0,7,85440,True,True,True,0.25670283077288303,(0.0014843755553559303+0.004419445796424099j),0.004662067345810103,1.246761198916183,0.5523321337147029,0.5912964046001434 +157,643072,4899163,0.080384,0,7,89536,False,True,False,0.25712482738830733,(0.0016360898784780716+0.004385459434551182j),0.00468070983319329,1.213717477491946,0.5544384543875003,0.5936891287565231 +158,647168,4913419,0.080896,10160,8,1376,False,True,False,0.2738845838199934,(-0.0015876886917470013-0.004421074468700674j),0.004697515815800758,-1.9155711352157767,0.531179403244459,0.5742559283971786 +159,651264,4913451,0.081408,6096,8,5472,False,True,False,0.2747492677176624,(-0.0013158162001726363+0.004526012931705732j),0.00471340273375873,1.853720561422047,0.5310687131217184,0.5744308680295944 +160,655360,4913483,0.08192,2032,8,9568,False,True,False,0.2747634003920657,(0.003737797470948664-0.0028737000744164056j),0.004714793956423873,-0.6554386217012346,0.5309266415904615,0.5742820203304291 +161,659456,4915547,0.082432,0,8,13664,False,True,False,0.2760058670060885,(0.0016051542012133788+0.00447398890371161j),0.004753219616239878,1.2263258552386604,0.5340496829226165,0.5780879855155945 +162,663552,4919643,0.082944,0,8,17760,False,True,False,0.27497714732101164,(0.0016332720032709552+0.004516072649607772j),0.00480234209664452,1.2237740985103753,0.5476249916746951,0.5924192517995834 +163,667648,4923739,0.083456,0,8,21856,False,True,False,0.2733575276500988,(0.0016469296756453885+0.004519756643704177j),0.004810465411457552,1.221364639004181,0.556940211069477,0.6019181460142136 +164,671744,4927835,0.083968,0,8,25952,True,True,True,0.2655826518710453,(0.0013094385268856785+0.004465689287358343j),0.004653709280447115,1.2855693847150558,0.5558054338160154,0.5979837030172348 +165,675840,4931932,0.08448,1,8,30048,True,True,True,0.2620066553332512,(0.0010008056079044434+0.0044481756529488265j),0.00455937259985403,1.3494891413311099,0.5494416678685756,0.589939534664154 +166,679936,4936027,0.084992,0,8,34144,True,True,True,0.25745610810815944,(0.0012829361577189977+0.004307185143174958j),0.004494192813216837,1.281304418017169,0.5547843706430848,0.5941679924726486 +167,684032,4940123,0.085504,0,8,38240,True,True,True,0.26383925616404263,(0.0012050656839874409+0.004426963193058868j),0.004588048214156221,1.3050253747795577,0.5481423154096086,0.5891540050506592 +168,688128,4944220,0.086016,1,8,42336,True,True,True,0.2699244067190662,(0.0008380194484942735+0.004581934378772789j),0.004657939377818761,1.389899279461403,0.5367680805238122,0.578949898481369 +169,692224,4948315,0.086528,0,8,46432,True,True,True,0.2691021030184952,(0.00121419546525523+0.0044533788553063475j),0.00461593477604873,1.304620022784614,0.53117277336095,0.5726411193609238 +170,696320,4952411,0.08704,0,8,50528,True,True,True,0.26370857056758684,(0.0015938477998613623+0.004269459998787447j),0.00455726228018193,1.213504897991644,0.5379725842213715,0.5781805366277695 +171,700416,4956507,0.087552,0,8,54624,True,True,True,0.2568596341044175,(0.001446965486859506+0.004214076097215652j),0.004455574763516697,1.240044764929582,0.5458980072328209,0.5844587683677673 +172,704512,4960604,0.088064,1,8,58720,True,True,True,0.26834124851878693,(0.0008934368200219986+0.0046038240991153915j),0.0046897148833342376,1.3791148572475473,0.5527223312153192,0.5956104695796967 +173,708608,4964700,0.088576,1,8,62816,True,True,True,0.2773340662906,(0.0009627857840257513+0.004797044213699565j),0.004892707803876148,1.372723971241416,0.560669449801557,0.60738605260849 +174,712704,4968795,0.089088,0,8,66912,True,True,True,0.2678611827980943,(0.0010743244283594811+0.0045672352206597025j),0.004691887737169807,1.3397718736689235,0.5551330463819606,0.5980423539876938 +175,716800,4972891,0.0896,0,8,71008,True,True,True,0.26521123625627346,(0.0010548052056041765+0.004463329559517832j),0.004586275698062134,1.3387272036829811,0.5424371911275525,0.5834772288799286 +176,720896,4976987,0.090112,0,8,75104,True,True,True,0.25737022850050784,(0.0011324525934055022+0.004313776409934131j),0.004459945716173578,1.314069283511442,0.5453875555595226,0.5840764492750168 +177,724992,4981083,0.090624,0,8,79200,True,True,True,0.26016421509739096,(0.0013264669173897253+0.00434301814084294j),0.004541070474526934,1.2743698025520087,0.554166359432325,0.5943984687328339 +178,729088,4985180,0.091136,1,8,83296,True,True,True,0.2783413309071134,(0.0013001352711514097+0.00466852028999491j),0.004846177196655742,1.299188582266864,0.545488141480179,0.5912983268499374 +179,733184,4989275,0.091648,0,8,87392,False,True,False,0.2669927542714062,(0.0010690162338773935+0.0047141621899569105j),0.004833851555593401,1.347800703208135,0.54517560929071,0.5870215147733688 +180,737280,4999467,0.09216,6096,8,91488,False,True,False,0.24816357519383125,(-0.0014479165006434653+0.0043169281492356215j),0.004553276934088076,1.8944096410174938,0.5657326760074871,0.6028598994016647 +181,741376,5001531,0.092672,4064,9,3328,False,True,False,0.2740896007100458,(-0.0037899232005933095-0.002977920345328503j),0.004819909485614524,-2.475603261145279,0.5575766126187574,0.602867066860199 +182,745472,5001563,0.093184,0,9,7424,False,True,False,0.2743042616798551,(0.00130453694455819+0.004636674957322557j),0.004816697135961462,1.296534520595517,0.5566299001124788,0.6019200682640076 +183,749568,5001595,0.093696,-4064,9,11520,False,True,False,0.27343656950933776,(0.0016448575650682739-0.0045140736020721755j),0.00480441639476505,-1.2213648928016885,0.5571284056004779,0.6021496653556824 +184,753664,5009755,0.094208,0,9,15616,False,True,False,0.24644837794190042,(0.0014424054288444065+0.004024460919176389j),0.004275139659840118,1.226649391143599,0.5499930625137114,0.5855579823255539 +185,757760,5013851,0.09472,0,9,19712,False,True,False,0.24879306161420675,(0.0012449191670893779+0.004102749387320414j),0.0042874673488837835,1.2761908291392956,0.5429787220660903,0.5788056254386902 +186,761856,5017947,0.095232,0,9,23808,False,True,False,0.26695567150173954,(0.0011847130863471237+0.004528474155278807j),0.004680878472251788,1.3149168858210374,0.5535382083577316,0.5960132926702499 +187,765952,5022043,0.095744,0,9,27904,True,True,True,0.2637983930091585,(0.0012155635620488801+0.004491220067611713j),0.004652811243656798,1.3064756759036986,0.5633993665169301,0.605538547039032 +188,770048,5026139,0.096256,0,9,32000,True,True,True,0.2601781313069146,(0.0014610321221578382+0.004345406927177649j),0.004584449391665322,1.2464460140416111,0.5636380757930741,0.604562520980835 +189,774144,5030236,0.096768,1,9,36096,True,True,True,0.2574682516876231,(0.001298756614798111+0.004280571292086525j),0.004473260481026915,1.276216500083633,0.5491678509292242,0.5881567001342773 +190,778240,5034331,0.09728,0,9,40192,True,True,True,0.2557230534224733,(0.001108738527750533+0.004290301714831174j),0.004431251508005581,1.3179003234342883,0.5472720788091381,0.5855646580457687 +191,782336,5038427,0.097792,0,9,44288,True,True,True,0.2591844276449496,(0.0011696742442483666+0.004405803800622378j),0.004558425711496962,1.3112975975206218,0.5608249286130765,0.6012123078107834 +192,786432,5042523,0.098304,0,9,48384,True,True,True,0.26868207485726564,(0.0011177235910650781+0.004592068204744255j),0.004726139695676223,1.3320360923306238,0.5598665867529256,0.6034280955791473 +193,790528,5046619,0.098816,0,9,52480,True,True,True,0.26639007139566734,(0.0012616732316124942+0.004464204940363573j),0.004639067265403041,1.295359831326025,0.5482883426646452,0.5901688933372498 +194,794624,5050715,0.099328,0,9,56576,True,True,True,0.2536069365130275,(0.0014990938223051057+0.004108733154170838j),0.0043736678452136685,1.220949003984714,0.5422185106395125,0.579489216208458 +195,798720,5054811,0.09984,0,9,60672,True,True,True,0.26324630262348936,(0.0014473933824976843+0.004342594477702816j),0.004577452828973017,1.2490743958972919,0.5487804343548445,0.5896417945623398 +196,802816,5058907,0.100352,0,9,64768,True,True,True,0.26746161674679997,(0.0013964631045754207+0.004455196331173598j),0.00466892745196829,1.2670499289100425,0.5509006238761466,0.5933460593223572 +197,806912,5063003,0.100864,0,9,68864,True,True,True,0.25574049545490446,(0.0013486357963794198+0.004207392214630718j),0.004418253926497562,1.2606039860007627,0.5440070331470497,0.5820767134428024 +198,811008,5067100,0.101376,1,9,72960,True,True,True,0.2629884708976966,(0.001045123129219692+0.0044137623372614765j),0.004535810878449172,1.3382912235991724,0.540570451212055,0.5807358473539352 +199,815104,5071195,0.101888,0,9,77056,True,True,True,0.2873942479114494,(0.0010623899727609538+0.004878621166164128j),0.0049929567329557,1.3563794191279657,0.538916393710259,0.5874359309673309 +200,819200,5075291,0.1024,0,9,81152,True,True,True,0.2725851962025746,(0.0010468577792493766+0.0046323056860140535j),0.004749122779909261,1.3485391685098471,0.5472674857602668,0.5911948531866074 +201,823296,5079387,0.102912,0,9,85248,True,True,True,0.2513843183766455,(0.001134941201452397+0.00439649283533871j),0.004540621188993728,1.3181647689098932,0.5467931267368271,0.583678126335144 +202,827392,5083483,0.103424,0,9,89344,False,True,False,0.26256421755141157,(0.0010627634370894722+0.0046536944780845866j),0.004773503788473327,1.3462767516536025,0.5515670240928654,0.5924075841903687 +203,831488,5091643,0.103936,4064,10,1184,False,True,False,0.27258876397618037,(-0.0038680063793312966-0.00277723489387529j),0.004761775614863231,-2.5188869491625456,0.5512196226945838,0.5954654663801193 +204,835584,5091675,0.104448,0,10,5280,False,True,False,0.27240588233562446,(0.001487311386628569+0.0045247471758307605j),0.0047629226495906314,1.2532161691794101,0.55156569647999,0.5957751721143723 +205,839680,5091707,0.10496,-4064,10,9376,False,True,False,0.2721740620175623,(0.0014356126180578048-0.00453346011489686j),0.004755338495048216,-1.264116616301169,0.5513755050294287,0.5954885333776474 +206,843776,5099867,0.105472,0,10,13472,False,True,False,0.2594300166800149,(0.0014767794994913843+0.004273745334716329j),0.004521700661933252,1.2380941194824366,0.5523710983458887,0.5922305434942245 +207,847872,5103963,0.105984,0,10,17568,False,True,False,0.2635039470208177,(0.0012883266803848526+0.004463702338228557j),0.004645904023943945,1.2898096493804307,0.5612177508783607,0.6030931174755096 +208,851968,5108059,0.106496,0,10,21664,False,True,False,0.26676893350381925,(0.0011085188613918987+0.0045316800695588055j),0.00466529080753795,1.330891881128166,0.5533470249568841,0.5957435071468353 +209,856064,5112155,0.107008,0,10,25760,True,True,True,0.26769649861033307,(0.0009767804087360958+0.004581372966701971j),0.004684343948400701,1.360734656079032,0.5538200423149755,0.5965711772441864 +210,860160,5116251,0.10752,0,10,29856,True,True,True,0.256131266937885,(0.0009048122182806056+0.00439301727572447j),0.004485229752773376,1.367670860405023,0.5571939318707251,0.5963140577077866 +211,864256,5120347,0.108032,0,10,33952,True,True,True,0.25301897115559957,(0.0010068931640645764+0.004322075987329293j),0.0044378119252722345,1.341913576472646,0.5601182547167346,0.5984288305044174 +212,868352,5124443,0.108544,0,10,38048,True,True,True,0.26696855591367613,(0.0012309215601142838+0.004492112724254102j),0.004657708086018251,1.3033429265307364,0.5505673324772662,0.5928188413381577 +213,872448,5128539,0.109056,0,10,42144,True,True,True,0.26061560705088677,(0.0014043112701381327+0.004290370017869034j),0.004514351009133707,1.2544701620679264,0.5449885148501848,0.5847017467021942 +214,876544,5132635,0.109568,0,10,46240,True,True,True,0.26336949602200077,(0.0015175076975572559+0.004303237990655464j),0.004562969079049955,1.231768689979611,0.5437184754310922,0.584243655204773 +215,880640,5136731,0.11008,0,10,50336,True,True,True,0.27464480256794577,(0.0016993485450312845+0.004501897630615793j),0.004811950514504906,1.2098585843646474,0.551037136036287,0.5959927290678024 +216,884736,5140827,0.110592,0,10,54432,True,True,True,0.27500097293793924,(0.0016943086540589032+0.004499716621939183j),0.004808131809026731,1.21067905365459,0.5508883384485461,0.5959579795598984 +217,888832,5144923,0.111104,0,10,58528,True,True,True,0.27728841349715994,(0.0014592047535882462+0.004608045616475609j),0.004833566273096357,1.264121918909197,0.5470731589989841,0.5926406234502792 +218,892928,5149019,0.111616,0,10,62624,True,True,True,0.2808954442284297,(0.001321540028381485+0.004706366969990381j),0.00488839013406571,1.2970474776506113,0.5431006966767402,0.5896233022212982 +219,897024,5153115,0.112128,0,10,66720,True,True,True,0.26688871885297244,(0.0012163594036441242+0.004456810196717522j),0.004619814642212257,1.3043634891796592,0.542377872830745,0.5839741080999374 +220,901120,5157211,0.11264,0,10,70816,True,True,True,0.2584040243452016,(0.0012297490842230225+0.00434190848764283j),0.004512698984555939,1.2947970233139183,0.5552511155037323,0.594979465007782 +221,905216,5161307,0.113152,0,10,74912,True,True,True,0.26956783335469564,(0.0014425355859659845+0.004480879786438754j),0.004707355157335554,1.2593424341663264,0.549948134696654,0.5930426567792892 +222,909312,5165403,0.113664,0,10,79008,True,True,True,0.2860522821392337,(0.0014710913905272292+0.004750496996945799j),0.004973060586527616,1.2704907946331834,0.5395488067357961,0.5876323580741882 +223,913408,5169500,0.114176,1,10,83104,True,True,True,0.28140672063874517,(0.0010721642674111451+0.00477187328708063j),0.0048908394866594195,1.3497825405392807,0.5418614433934189,0.5884615629911423 +224,917504,5173596,0.114688,1,10,87200,False,True,False,0.25867954021012346,(0.0009839169384996689+0.00453073974476785j),0.004636345023473296,1.3569519895502433,0.5357271852248144,0.5741462409496307 +225,921600,5177692,0.1152,1,10,91296,False,True,False,0.26237223676573584,(0.0011429895995709038+0.00454483339878272j),0.004686356350878383,1.3244138479151768,0.5322185693016872,0.5715646147727966 +226,925696,5181787,0.115712,0,11,3136,False,True,False,0.2701034954758276,(0.0013597724802481925+0.0044589495582259085j),0.004661674845036207,1.2748012130593906,0.5383609316350877,0.5807285010814667 +227,929792,5181819,0.116224,-4064,11,7232,False,True,False,0.26852876195676684,(0.0015255994291846465-0.00438126032616622j),0.004639277493744758,-1.235716894414013,0.5394909994438597,0.5814155340194702 +228,933888,5181851,0.116736,-8128,11,11328,False,True,False,0.26892700058895613,(-0.003820842233905499+0.0026459066180629393j),0.004647543136744965,2.535922712155432,0.5400452058880975,0.582147091627121 +229,937984,5194076,0.117248,1,11,15424,False,True,False,0.2691833879073944,(0.0010258072970440611+0.0047867337971681965j),0.004895416331183805,1.3596872888997011,0.5980976072263786,0.6448211520910263 +230,942080,5198171,0.11776,0,11,19520,False,True,False,0.27073871499175883,(0.0013708190441480024+0.004736808820083946j),0.0049311765989288915,1.289095063901871,0.5949415767398565,0.6419998109340668 +231,946176,5202267,0.118272,0,11,23616,False,True,False,0.25498334889723284,(0.0013814387836797268+0.004397449823860593j),0.0046093316290353945,1.2664131183099794,0.5954814634201167,0.6368898153305054 +232,950272,5206364,0.118784,1,11,27712,True,True,True,0.2520701625705865,(0.0009223825889995769+0.004332380078972095j),0.004429481548574711,1.3610240803390832,0.5634445223882787,0.6016745418310165 +233,954368,5210460,0.119296,1,11,31808,True,True,True,0.26164867311179046,(0.0008087107334952197+0.004453052814775219j),0.004525891340017774,1.391146134456171,0.5444633618706969,0.5844766497612 +234,958464,5214555,0.119808,0,11,35904,True,True,True,0.26854883778171956,(0.0012413561194861147+0.004505624623853556j),0.004673501713539979,1.3019536667625724,0.5487865994516878,0.5914403796195984 +235,962560,5218651,0.12032,0,11,40000,True,True,True,0.2726733173974843,(0.001378589420936903+0.004526878296162865j),0.004732138617981256,1.2751848920096938,0.5424629878076264,0.5860351324081421 +236,966656,5222747,0.120832,0,11,44096,True,True,True,0.26774424452520174,(0.0013053061679331418+0.0044299709635238094j),0.004618275319825397,1.2842518255973607,0.5379742199872226,0.579518124461174 +237,970752,5226844,0.121344,1,11,48192,True,True,True,0.2529277516354949,(0.0009143590480539627+0.004254492347760584j),0.0043516384966942635,1.359100328612116,0.5398657003944332,0.5767626166343689 +238,974848,5230940,0.121856,1,11,52288,True,True,True,0.2678507653416655,(0.0010920771787949514+0.004531790102875468j),0.0046615184329749015,1.3343235913479703,0.5483664187313746,0.5907491445541382 +239,978944,5235035,0.122368,0,11,56384,True,True,True,0.27166443355630754,(0.0013576998340728897+0.004544220909553324j),0.004742709406474656,1.2804637172622124,0.5497189797711337,0.5935218185186386 +240,983040,5239132,0.12288,1,11,60480,True,True,True,0.24298761555141254,(0.0009359177755966125+0.00412392315729343j),0.004228792296854827,1.3476281418310532,0.5537337934408951,0.5884793698787689 +241,987136,5243228,0.123392,1,11,64576,True,True,True,0.2594503125405808,(0.000872214900954877+0.004443342101533314j),0.004528139558881353,1.3769638279001095,0.5535284658088118,0.5934781283140182 +242,991232,5247323,0.123904,0,11,68672,True,True,True,0.2728972761722316,(0.0010649047350872493+0.00460220143954971j),0.004723799337927541,1.343407899747667,0.5392853326323054,0.5826791524887085 +243,995328,5251420,0.124416,1,11,72768,True,True,True,0.2677790176885852,(0.0010331007579770734+0.004533070798005724j),0.004649304037795878,1.346720423115713,0.5431229706384719,0.5850762128829956 +244,999424,5255516,0.124928,1,11,76864,True,True,True,0.27273585576465686,(0.001190185230456936+0.004606812727866582j),0.004758073600989309,1.317971325646566,0.5488263894264966,0.5929315090179443 +245,1003520,5259611,0.12544,0,11,80960,True,True,True,0.277553334130381,(0.001377950261444966+0.004616611618738488j),0.00481786776087591,1.2807377876274038,0.5415111722890744,0.5867087841033936 +246,1007616,5263707,0.125952,0,11,85056,True,True,True,0.2655589509320627,(0.0011514306146589667+0.004635249098410475j),0.004776120461702055,1.3273170531356284,0.5375551530033255,0.5783406347036362 +247,1011712,5267804,0.126464,1,11,89152,False,True,False,0.25538412849058145,(0.0009827635050397186+0.004463016645785106j),0.004569938915061435,1.3540537158216441,0.535083797776337,0.5724174678325653 +248,1015808,5280027,0.126976,8128,12,992,False,True,False,0.2812606928866462,(0.0048793151638969095+8.05644236800617e-05j),0.004879980235103132,0.016509920106764792,0.5399580759163802,0.5863421857357025 +249,1019904,5278028,0.127488,2033,12,5088,False,True,False,0.2816763742277087,(0.0041030436954555246-0.002639239528791662j),0.004878581029065087,-0.5716079390475177,0.5385550842790271,0.584967315196991 +250,1024000,5278060,0.128,-2031,12,9184,False,True,False,0.28242789552891234,(-0.004878754419270177-0.0002662660909589648j),0.004886014972832446,-3.0870700906873467,0.5376792656874811,0.5842850655317307 +251,1028096,5278091,0.128512,-6096,12,13280,False,True,False,0.2681008918313915,(0.0038474847466956337+0.0025998928860442062j),0.004643552723396047,0.5942567128822575,0.5426132080040174,0.5846357047557831 +252,1032192,5288283,0.129024,0,12,17376,False,True,False,0.24375932875272263,(0.0011357620006579774+0.0040703688113794805j),0.0042258558402753655,1.2986857372531115,0.5460942745071787,0.5805922597646713 +253,1036288,5292379,0.129536,0,12,21472,False,True,False,0.25538271104520355,(0.0011127166312888783+0.004253423429781606j),0.004396561062303354,1.3149255298493328,0.5379460291956822,0.5754789561033249 +254,1040384,5296476,0.130048,1,12,25568,True,True,True,0.2632105657612795,(0.0011581742548442148+0.0043932573571891466j),0.004543355347216472,1.313035430034399,0.5401483179505394,0.5803552120923996 +255,1044480,5300571,0.13056,0,12,29664,True,True,True,0.26986947258717187,(0.0013068274108764114+0.004486378559068552j),0.004672835376630335,1.2873514021821055,0.541962749115588,0.5845340937376022 +256,1048576,5304667,0.131072,0,12,33760,True,True,True,0.2716474398335631,(0.0014068769556635232+0.0045219013663756165j),0.004735704249169993,1.2691645381137087,0.5479715361191466,0.5916292369365692 +257,1052672,5308763,0.131584,0,12,37856,True,True,True,0.2602069168691974,(0.0014259509292018208+0.004322987510848465j),0.004552093701962135,1.2521812254494566,0.553095674227995,0.5932641923427582 +258,1056768,5312859,0.132096,0,12,41952,True,True,True,0.26067296967171716,(0.001243339607338989+0.004388924606338943j),0.004561639242564598,1.294739177254704,0.5553010262917414,0.5957848429679871 +259,1060864,5316955,0.132608,0,12,46048,True,True,True,0.2763320728115187,(0.001091005945684809+0.004723962722877519j),0.004848310817249239,1.3438244988245012,0.5541697016465323,0.5999841392040253 +260,1064960,5321051,0.13312,0,12,50144,True,True,True,0.2754645271489226,(0.0013234191848957258+0.0046175039478779465j),0.004803413478727236,1.2916694754434184,0.5464955195365455,0.591369017958641 +261,1069056,5325147,0.133632,0,12,54240,True,True,True,0.26852039912809356,(0.0015103311655884739+0.00438350483122627j),0.004636401064956728,1.2389860736762326,0.5387882672532496,0.5806553810834885 +262,1073152,5329243,0.134144,0,12,58336,True,False,False,0.12222192020312277,(0.0016917557631161454+0.0040214872795306614j),0.004362842823373725,1.172591181605333,2.4462056325581023,2.4833016842603683 +263,1077248,5333339,0.134656,0,12,62432,True,False,False,0.08371985216496043,(0.001522863605885863+0.004194885739388139j),0.004462754746639531,1.2225621889916407,5.489172343866355,5.527917593717575 +264,1081344,5337436,0.135168,1,12,66528,True,False,False,0.07678297321464417,(0.000837113473129972+0.004424337184075886j),0.004502834494548102,1.383800318183157,6.664573420147217,6.704098269343376 +265,1085440,5341532,0.13568,1,12,70624,True,False,False,0.075825225755414,(0.0010644786672962556+0.0043263854821034625j),0.0044554153760210085,1.329544959208023,6.688882765976795,6.72756265103817 +266,1089536,5345627,0.136192,0,12,74720,True,False,False,0.0777915075019332,(0.0013604196351404264+0.004361358503073744j),0.00456860915115413,1.2684347849139403,6.676964480041531,6.717616260051727 +267,1093632,5349723,0.136704,0,12,78816,True,False,False,0.0828610428066847,(0.0015486982431894794+0.004585583083988033j),0.004840045296132608,1.2450921911444341,6.60539333945425,6.651059195399284 +268,1097728,5353821,0.137216,2,12,82912,True,False,False,0.08195769883417732,(0.0011937036958979035+0.004685608387128368j),0.004835271912842961,1.3213430856688024,6.74911831950998,6.794759154319763 +269,1101824,5357917,0.137728,2,12,87008,False,False,False,0.0716654800554192,(0.0005531018437636853+0.004432103696542682j),0.004466482377272085,1.4466437471388893,6.906468290897046,6.942122623324394 +270,1105920,5366076,0.13824,4065,12,91104,False,False,False,0.07377076771462239,(-0.004091817902133142-0.0020419652606560356j),0.004573029178776726,-2.6787163810812644,6.832708365234196,6.870096296072006 +271,1110016,5374235,0.138752,8128,13,2944,False,False,False,0.08087575586757796,(0.004779806391792624+8.861341029904627e-05j),0.004780627728604942,0.018536997739119303,6.768167156707149,6.812728449702263 +272,1114112,5374267,0.139264,4064,13,7040,False,False,False,0.0800133242828991,(-0.003767808252151954-0.0028533788785221463j),0.004726325216209805,-2.4934329082951177,6.763541054221683,6.807121142745018 +273,1118208,5374299,0.139776,0,13,11136,False,False,False,0.07956224503645665,(0.0013792993209312803+0.004496803629903398j),0.004703584750234004,1.273177782321964,6.7703096256518736,6.813439726829529 +274,1122304,5378395,0.140288,0,13,15232,False,False,False,0.07909923134694494,(0.0015060370202961348+0.004398239469498638j),0.004648941593261645,1.2408918421229516,6.697100535491124,6.739266023039818 +275,1126400,5382492,0.1408,1,13,19328,False,False,False,0.07780223075074265,(0.001290172857201479+0.0043936989878511305j),0.0045792070052907054,1.2851830749053166,6.6471269868946585,6.687608331441879 +276,1130496,5386588,0.141312,1,13,23424,False,False,False,0.07864006701111693,(0.0010540703263440517+0.004463093516908906j),0.004585877014656342,1.3388713181506051,6.581861800468286,6.622819036245346 +277,1134592,5390682,0.141824,-1,13,27520,True,False,False,0.08301430893626999,(0.0015449788316282908+0.004589310350730047j),0.004842388778846393,1.2460661944160356,6.588775629410941,6.634496435523033 +278,1138688,5394779,0.142336,0,13,31616,True,False,False,0.07878097899540573,(0.001481786310700397+0.004374651467605647j),0.004618794878927114,1.24420473670389,6.651206343796035,6.692744478583336 +279,1142784,5398876,0.142848,1,13,35712,True,False,False,0.09576023729412096,(0.0010937122441491563+0.004038675938138141j),0.004184149830765837,1.3063300491750123,3.679667399162275,3.7137223184108734 +280,1146880,5402972,0.14336,1,13,39808,True,True,True,0.2383815900640343,(0.0012815346971280827+0.004158815962114253j),0.004351790595453722,1.2718803162847057,0.6127624549315758,0.6496810913085938 +281,1150976,5407067,0.143872,0,13,43904,True,True,True,0.26364871875573537,(0.0013686838317304665+0.004418645928249998j),0.004625767749301804,1.2704170494974214,0.5558803660749743,0.5974064767360687 +282,1155072,5411164,0.144384,1,13,48000,True,True,True,0.26715586396351754,(0.0012130199951223312+0.004499399727171521j),0.004660044572044107,1.3074611161349192,0.5495655838572667,0.5918039679527283 +283,1159168,5415260,0.144896,1,13,52096,True,True,True,0.25698590459791865,(0.001158258764511068+0.004307109301455813j),0.004460129359139025,1.3080933467821958,0.5475274608915194,0.5862440466880798 +284,1163264,5419356,0.145408,1,13,56192,True,True,True,0.2581379731067278,(0.001248193819057321+0.004339140607048203j),0.004515100111588618,1.2906994427415837,0.55376852676701,0.5933034271001816 +285,1167360,5423452,0.14592,1,13,60288,True,True,True,0.2530657803756539,(0.0013788577757052885+0.00419175764528281j),0.00441271808780142,1.2530004458654427,0.5521800321637115,0.5899625867605209 +286,1171456,5427547,0.146432,0,13,64384,True,True,True,0.25392783983290507,(0.001401972804627126+0.004166755137027025j),0.00439629117744209,1.246228731526822,0.5473219261437456,0.585045263171196 +287,1175552,5431643,0.146944,0,13,68480,True,True,True,0.2652653510843641,(0.0014373715911341833+0.004373403795019587j),0.004603552741665001,1.253255857245764,0.5448719137584159,0.5861142575740814 +288,1179648,5435739,0.147456,0,13,72576,True,True,True,0.26566180677487866,(0.00145395835175196+0.004343914276516279j),0.00458078444486872,1.2478058759437545,0.5376427555518017,0.5784688889980316 +289,1183744,5439835,0.147968,0,13,76672,True,True,True,0.2634471009230045,(0.0014112452051848665+0.004300735879135284j),0.004526360804359151,1.2537266677052141,0.5335782988276216,0.5733728855848312 +290,1187840,5443931,0.14848,0,13,80768,True,True,True,0.25121895961789686,(0.0013545192402851529+0.004096059693806466j),0.004314212255734364,1.2514281391921533,0.5380727033377047,0.5743184983730316 +291,1191936,5448027,0.148992,0,13,84864,True,True,True,0.24618455862048508,(0.001239173099831446+0.004247836216677644j),0.004424891241043571,1.286954298856598,0.5431489357370782,0.5781912803649902 +292,1196032,5452123,0.149504,0,13,88960,False,True,False,0.25460500594550434,(0.001456645781360352+0.004342461175011724j),0.004580260471724191,1.2471487770574143,0.5413396313714424,0.578863725066185 +293,1200128,5464347,0.150016,8128,14,800,False,True,False,0.2664892367017101,(0.004595258533890168-0.00025639798128029975j),0.004602405992314784,-0.05573840974724589,0.5403135139541736,0.581617996096611 +294,1204224,5464379,0.150528,4064,14,4896,False,True,False,0.2677067102634058,(-0.0039035142522089628-0.002474915637314424j),0.004621972623136355,-2.576531583209091,0.5393652625029224,0.5810040086507797 +295,1208320,5464411,0.15104,0,14,8992,False,True,False,0.2676224417366838,(0.0017066501910134538+0.0042936749487946044j),0.004620421998085522,1.1924641946640253,0.5397369743995677,0.5813761651515961 +296,1212416,5468507,0.151552,0,14,13088,False,True,False,0.2540449166869206,(0.0012582258203098654+0.004159380751831945j),0.004345524186286909,1.2770446405022853,0.5336992416461102,0.5705199241638184 +297,1216512,5472603,0.152064,0,14,17184,False,True,False,0.24859482152857068,(0.0012690168352510153+0.004147650472783568j),0.004337442584349937,1.2738802772540043,0.553916127141515,0.5904026478528976 +298,1220608,5476700,0.152576,1,14,21280,False,True,False,0.2558611321685786,(0.0011615097203271432+0.004337193105057625j),0.0044900277127178,1.309134118890352,0.5548674484680924,0.5937363505363464 +299,1224704,5480796,0.153088,1,14,25376,True,True,True,0.24902334455788566,(0.0011255067621460822+0.004187091354160079j),0.004335723639684458,1.3081995949229324,0.5533850609771982,0.5899706929922104 +300,1228800,5484891,0.1536,0,14,29472,True,True,True,0.2524803523265553,(0.0013228128281321033+0.004215829556643872j),0.004418489858418024,1.266752277708672,0.5565978879327824,0.5944947451353073 +301,1232896,5488987,0.154112,0,14,33568,True,True,True,0.25659362997876295,(0.001523597078719511+0.004232821106107312j),0.004498680092492703,1.2252864490022244,0.559860953567165,0.5993203818798065 +302,1236992,5493083,0.154624,0,14,37664,True,True,True,0.2701015466384452,(0.0015930439218050786+0.004434456215466593j),0.004711920082481281,1.2259117421093622,0.5500180173758105,0.5933022946119308 +303,1241088,5497179,0.155136,0,14,41760,True,True,True,0.2654883946307786,(0.0015101082344784968+0.004325150491303857j),0.0045811956574966055,1.2348826680926182,0.5382364009561323,0.5790502279996872 +304,1245184,5501275,0.155648,0,14,45856,True,True,True,0.2642378873941613,(0.0014789350860992378+0.004294330327625845j),0.004541863268710591,1.239125775840792,0.5361206526207132,0.5763632953166962 +305,1249280,5505371,0.15616,0,14,49952,True,True,True,0.2704631814372041,(0.0014297452012599925+0.004460898789483908j),0.004684419852078267,1.2606343751470939,0.5420946543757261,0.5848787277936935 +306,1253376,5509467,0.156672,0,14,54048,True,True,True,0.25862368887790793,(0.0014114606716766828+0.004290730646771298j),0.0045169227036592555,1.2529907254827484,0.5547799785112384,0.5945469737052917 +307,1257472,5513563,0.157184,0,14,58144,True,True,True,0.2537946459711735,(0.0014512878585148262+0.004152496169937046j),0.004398802210785839,1.2345690612285416,0.5482861363456426,0.5860335677862167 +308,1261568,5517659,0.157696,0,14,62240,True,True,True,0.25880367193626036,(0.0013953166604228435+0.004247498083004329j),0.004470810726029341,1.253399184203357,0.5424842444975086,0.5814279019832611 +309,1265664,5521755,0.158208,0,14,66336,True,True,True,0.25852433212459397,(0.0012096553631778682+0.004317856823054481j),0.004484100092779276,1.297646864720312,0.5464240381960734,0.5855598300695419 +310,1269760,5525851,0.15872,0,14,70432,True,True,True,0.26478919294097997,(0.0012756367113437668+0.004410535775679678j),0.004591304264354332,1.2892540359027742,0.5455173013175918,0.5866492241621017 +311,1273856,5529947,0.159232,0,14,74528,True,True,True,0.26738258733865083,(0.0014459702809501217+0.004439384043162406j),0.004668935717706549,1.2559186226601515,0.551789156057867,0.5942759960889816 +312,1277952,5534043,0.159744,0,14,78624,True,True,True,0.25761703065587765,(0.0013013793274676412+0.004291751269303245j),0.004484720405056056,1.276380664774593,0.5515944654460578,0.5908040851354599 +313,1282048,5538139,0.160256,0,14,82720,True,True,True,0.2594854532357755,(0.001014695960330343+0.004360357591237143j),0.004476865668676032,1.3421562446445414,0.539021821863747,0.5779357999563217 +314,1286144,5542236,0.160768,1,14,86816,False,True,False,0.25534036090986695,(0.0010348878449817414+0.004494382765061006j),0.004611991900531523,1.3444786345884008,0.5423552649187608,0.5801824033260345 +315,1290240,5546331,0.16128,0,14,90912,False,True,False,0.24958348378421272,(0.0015809884356665748+0.004215168793332553j),0.004501907638989949,1.2119632322931633,0.5466115493167396,0.5829229354858398 +316,1294336,5552459,0.161792,2032,15,2752,False,True,False,0.2653891462384448,(0.0037756615455502513-0.0024862762863175044j),0.004520751030354544,-0.5823280105725755,0.5254411813925184,0.5652527213096619 +317,1298432,5552491,0.162304,-2032,15,6848,False,True,False,0.2657521082769784,(-0.004521714802829172-0.00017802384287181412j),0.0045252179225707245,-3.1022421077858477,0.5259034994737588,0.5658674240112305 +318,1302528,5552523,0.162816,-6096,15,10944,False,True,False,0.2648650947094851,(0.0035480581267110073+0.00278413095489372j),0.004510000182319003,0.665336521026977,0.5263289531903287,0.5660385489463806 +319,1306624,5562715,0.163328,0,15,15040,False,True,False,0.2620496140457573,(0.001531028169564713+0.004261039621478605j),0.004527748437337394,1.2258529584701106,0.5415241879914068,0.5814525336027145 +320,1310720,5566812,0.16384,1,15,19136,False,True,False,0.26453769584680464,(0.0011282515653286331+0.00448029271963071j),0.0046201703916893,1.32410036700869,0.547386468762953,0.5885750651359558 +321,1314816,5570908,0.164352,1,15,23232,False,True,False,0.2602922116740193,(0.0010637771205495672+0.004353568314823194j),0.004481649119915256,1.3311460884082906,0.5387595665150288,0.5779144465923309 +322,1318912,5575003,0.164864,0,15,27328,True,True,True,0.2646714154148712,(0.001350060593372117+0.004299112239390732j),0.004506110257489876,1.2665159901569734,0.5260034771882566,0.5656261295080185 +323,1323008,5579099,0.165376,0,15,31424,True,True,True,0.2675197135922362,(0.001229299289273+0.004407258670649587j),0.004575489671349184,1.2987837668896933,0.5257819233489514,0.5663109868764877 +324,1327104,5583195,0.165888,0,15,35520,True,True,True,0.2527301679389408,(0.0011438527326352401+0.004195144440594359j),0.00434829115301711,1.3046058624948298,0.5373194205840789,0.5739810466766357 +325,1331200,5587291,0.1664,0,15,39616,True,True,True,0.24252120082883175,(0.0013404286467247842+0.003997623218501677j),0.004216365775648994,1.2472710654732522,0.5534920044503024,0.588080883026123 +326,1335296,5591387,0.166912,0,15,43712,True,True,True,0.2571775457631954,(0.0015098749844689487+0.004185489604321386j),0.0044494994883253446,1.2245854919847523,0.5440344222728948,0.5825654715299606 +327,1339392,5595483,0.167424,0,15,47808,True,True,True,0.26432524091011667,(0.0014117994702806471+0.004327530007223564j),0.004551998869475376,1.2554462062864538,0.5386840960050098,0.5791479051113129 +328,1343488,5599579,0.167936,0,15,51904,True,True,True,0.2621376516183847,(0.0013181958784353406+0.004343836003591089j),0.004539443974763663,1.2761650037093621,0.544478221527759,0.5846533477306366 +329,1347584,5603675,0.168448,0,15,56000,True,True,True,0.2602155447030736,(0.0014567732237749647+0.004242818646846353j),0.004485944526577967,1.2400577194321012,0.5383806447420117,0.5774832665920258 +330,1351680,5607772,0.16896,1,15,60096,True,True,True,0.26420496559852147,(0.0012353303830398529+0.004402993922998593j),0.00457300739571061,1.2972628513414242,0.5426832718703825,0.5834076106548309 +331,1355776,5611867,0.169472,0,15,64192,True,True,True,0.2645956652886718,(0.0013486633031770535+0.004399815742174559j),0.004601876929082688,1.2733620636596512,0.5481978807485378,0.5894669741392136 +332,1359872,5615963,0.169984,0,15,68288,True,True,True,0.27635966275564405,(0.001538395327785914+0.004518762326779053j),0.004773455053781399,1.2426579370597932,0.5369393073322216,0.5813388675451279 +333,1363968,5620060,0.170496,1,15,72384,True,True,True,0.28065909499300684,(0.0013899322538439272+0.004688437803033093j),0.004890128904557162,1.2825907901516267,0.5446156770475633,0.5911828726530075 +334,1368064,5624155,0.171008,0,15,76480,True,True,True,0.2787902846792729,(0.001505395943641435+0.004657137912448599j),0.0048943999103769785,1.2581526999750539,0.5536297896520709,0.6002864688634872 +335,1372160,5628251,0.17152,0,15,80576,True,True,True,0.2782403905799784,(0.0013851585328944899+0.004671326949604034j),0.004872366943421579,1.2825319635019046,0.549059815247206,0.5951337069272995 +336,1376256,5632347,0.172032,0,15,84672,True,True,True,0.25835564575952363,(0.0014878867435889247+0.004418020064904829j),0.004661835288343993,1.2459498434659404,0.5424659481705443,0.5812639445066452 +337,1380352,5636443,0.172544,0,15,88768,False,True,False,0.2661307059301699,(0.001742326334063677+0.0044784482607504j),0.00480543441101739,1.1997678069313928,0.5420525528553599,0.5833700597286224 +338,1384448,5650699,0.173056,10160,16,608,False,True,False,0.2807983627799369,(-0.0014132177560300736-0.004678753858631776j),0.0048875271964072394,-1.864132822427261,0.5440899108503512,0.5906622856855392 +339,1388544,5650731,0.173568,6096,16,4704,False,True,False,0.28175733500795064,(-0.0016292651991435913+0.00462401096559049j),0.004902650558528672,1.909562177118072,0.5438451356478441,0.5907425284385681 +340,1392640,5650763,0.17408,2032,16,8800,False,True,False,0.2810896310741443,(0.004032377747532641-0.0027645120137144447j),0.00488902822376471,-0.6009814789944031,0.5438568421206966,0.5905141830444336 +341,1396736,5652827,0.174592,0,16,12896,False,True,False,0.27995892582994847,(0.0013644086381278274+0.004682448638769451j),0.00487718527293271,1.287259194961097,0.5457013503526119,0.5921090841293335 +342,1400832,5656923,0.175104,0,16,16992,False,True,False,0.2694191676957321,(0.0012987608029786238+0.004501592194187054j),0.004685201373059593,1.289912543456448,0.5464975984850089,0.5892708152532578 +343,1404928,5661020,0.175616,1,16,21088,False,True,False,0.2724290212387798,(0.0013557614569333096+0.004514417086428908j),0.004713602736585594,1.2790476630851628,0.5394092203654874,0.5826522558927536 +344,1409024,5665116,0.176128,1,16,25184,True,True,True,0.2703439033029992,(0.0015023504482026882+0.004452830832832162j),0.004699442445124271,1.2453972397154547,0.5445303148943486,0.5874657332897186 +345,1413120,5669212,0.17664,1,16,29280,True,True,True,0.26084853462192703,(0.0015064276691071788+0.0042858697602228745j),0.004542906990446158,1.2327973663021916,0.5488662670965079,0.5889388173818588 +346,1417216,5673307,0.177152,0,16,33376,True,True,True,0.26680859121689254,(0.0017233605136990984+0.004346323777514884j),0.004675521557983502,1.1933022514222584,0.5563818107259524,0.5990244597196579 +347,1421312,5677403,0.177664,0,16,37472,True,True,True,0.28118617001285623,(0.0017648563265804532+0.004599738199242859j),0.004926693551972255,1.2044321407102385,0.5511238823654319,0.5984399318695068 +348,1425408,5681499,0.178176,0,16,41568,True,True,True,0.2765548104730267,(0.0017933494122994718+0.004409004550129239j),0.004759771343001174,1.1844871287004388,0.5314170018017368,0.5754271447658539 +349,1429504,5685595,0.178688,0,16,45664,True,True,True,0.2665701091804682,(0.0016608712100729577+0.004276843269699999j),0.00458801498799071,1.200381524244915,0.5360344693741199,0.5770386159420013 +350,1433600,5689691,0.1792,0,16,49760,True,True,True,0.27603880819109367,(0.001647519716432292+0.00448414294414518j),0.004777222954767775,1.218696301508401,0.5400274148415931,0.5845701545476913 +351,1437696,5693787,0.179712,0,16,53856,True,True,True,0.27423717356605604,(0.0018811367461085812+0.004391660175502362j),0.004777588780405176,1.1660975677898966,0.5460581921807042,0.5904646962881088 +352,1441792,5697883,0.180224,0,16,57952,True,True,True,0.26939315416499676,(0.001895787593627749+0.004261155598661815j),0.004663845798926014,1.1521917534315318,0.5405786387936542,0.5828797817230225 +353,1445888,5701979,0.180736,0,16,62048,True,True,True,0.2704970887722574,(0.0018084369666119368+0.004265944201606953j),0.004633435463393503,1.1698372476397976,0.5303428144210389,0.5722107142210007 +354,1449984,5706075,0.181248,0,16,66144,True,True,True,0.2631123469104774,(0.0014536311531551688+0.004261454370101405j),0.004502558925531079,1.2420618201093678,0.532675277665522,0.5722941160202026 +355,1454080,5710171,0.18176,0,16,70240,True,True,True,0.266366325753132,(0.0013174392407077908+0.004407645976290434j),0.004600324902141802,1.2803502910288584,0.5411182266002784,0.5824431627988815 +356,1458176,5714267,0.182272,0,16,74336,True,True,True,0.27057933254212896,(0.0013928641345691333+0.004495997771867698j),0.004706810646500274,1.2703723153640838,0.5461706870280945,0.5893164128065109 +357,1462272,5718363,0.182784,0,16,78432,True,True,True,0.2670809726675467,(0.0012795950443333676+0.004403007790597894j),0.004585176232332653,1.2879685794606828,0.5334450177163121,0.5744196623563766 +358,1466368,5722459,0.183296,0,16,82528,True,True,True,0.26574562793667467,(0.0016406126164279962+0.004275302399884901j),0.004579281643188625,1.2043836478611014,0.5377712923688862,0.5786349177360535 diff --git a/data/processed/lab063/local_delay_vs_time.png b/data/processed/lab063/local_delay_vs_time.png new file mode 100644 index 0000000..e239148 Binary files /dev/null and b/data/processed/lab063/local_delay_vs_time.png differ diff --git a/data/processed/lab063/matched_residual_by_packet.png b/data/processed/lab063/matched_residual_by_packet.png new file mode 100644 index 0000000..d22523e Binary files /dev/null and b/data/processed/lab063/matched_residual_by_packet.png differ diff --git a/data/processed/lab063/normalized_correlation_vs_time.png b/data/processed/lab063/normalized_correlation_vs_time.png new file mode 100644 index 0000000..3ee0e90 Binary files /dev/null and b/data/processed/lab063/normalized_correlation_vs_time.png differ diff --git a/data/processed/lab063/packet_quality.csv b/data/processed/lab063/packet_quality.csv new file mode 100644 index 0000000..f327c67 --- /dev/null +++ b/data/processed/lab063/packet_quality.csv @@ -0,0 +1,17 @@ +packet_index,raw_power_code2,rms_full_iq_code,mean_i,mean_q,ac_power_code2,ac_rms_code,max_abs_i,max_abs_q,max_complex_magnitude,background_ac_power_code2,background_subtracted_useful_power_code2,symbol_error_rate,symbol_rms_deviation,matched_component_power,residual_power,matched_residual_db,band_gain_nonuniformity_db,initial_frequency_hz,diagnostic_residual_phase_error_rad,local_delay_median_samples,local_delay_min_samples,local_delay_max_samples,local_correlation_median,local_correlation_min,local_gain_amplitude_median,local_phase_unwrapped_span_rad,ser_minus_lab056_b,evm_minus_lab056_b,matched_residual_minus_lab056_b_db,ripple_minus_lab056_b_db +1,4.900591831425598,2.2137280391740983,0.9692702913631633,1.8366285119667014,0.5879026427373475,0.7667480960115568,3.0,4.0,4.4721360206604,0.5252822403066744,0.06262040243067313,0.08517887563884156,1.088322316906538,0.7075133679013462,0.8380110003749788,-0.7351506962803888,6.642520146946069,1.0073017677042053,5.396055347590577,0.0,0,1,0.2720544529364392,0.2556440262627536,0.004692917533594935,0.120558278787813,0.05021991563884157,0.24297231690653787,-2.199996696280389,1.1711381469460687 +2,4.865146982310094,2.2057078188894588,0.9677527748872702,1.8294528269164065,0.5817039030956508,0.7626951573831126,3.0,4.0,4.4721360206604,0.5252822403066744,0.05642166278897642,0.09795570698466781,1.104921348985033,0.6708739973434846,0.8190373162813612,-0.8666272994726886,6.598551357893342,1.6416990453424165,0.9116196756938657,0.0,0,1,0.2633530926845802,0.2539878786554866,0.0045493907778025216,0.0709144214354922,0.06299674698466781,0.25957134898503287,-2.3314732994726888,1.127169357893342 +3,6.015186004162331,2.4525876139625127,0.9700940860215054,1.8342655220256676,1.7095734631363353,1.3075065824447445,6.0,7.0,7.211102485656738,0.5252822403066744,1.184291222829661,0.10221465076660988,1.3578439728375573,0.6181275875589448,1.1396667156434608,-2.6569973778482696,7.370968795797246,-0.9619877262845884,0.9174219316762064,0.0,0,1,0.2672883844824355,0.24083000237735547,0.004581545172098038,0.15725486354106955,0.06725569076660988,0.5124939728375573,-4.12184337784827,1.899586795797246 +4,8.462127124523066,2.9089735517056643,0.9603494623655914,1.846362296219216,4.130802305757289,2.032437528131502,6.0,7.0,7.6157732009887695,0.5252822403066744,3.6055200654506145,0.15587734241908008,1.6634180909816034,0.694252592647496,1.920968976998595,-4.420028409350613,10.617549420778396,2.5845496302438504,5.388297118381418,0.0,0,0,0.2731302498054202,0.1663171407536924,0.004805263148615891,0.12094876972869106,0.12091838241908008,0.8180680909816034,-5.884874409350614,5.146167420778395 +5,4.954615417967395,2.2258965425121167,0.9645117932708983,1.8537439299340963,0.5879658608412441,0.7667893197229889,3.0,4.0,4.242640495300293,0.5252822403066744,0.06268362053456977,0.08986371379897785,1.0991964913376657,0.7021817411712009,0.8483991001186207,-0.8215066687796163,6.409725568268307,-1.2358463102217572,0.8342172701371073,0.0,0,1,0.26644916295862675,0.2537591241878097,0.0046666418592819555,0.09866723940073996,0.05490475379897786,0.2538464913376657,-2.2863526687796165,0.9383435682683068 +6,4.919647502601457,2.218027840808464,0.968934269857787,1.8444437218175511,0.5788412403444356,0.7608161672470135,3.0,4.0,4.4721360206604,0.5252822403066744,0.05355900003776126,0.075809199318569,1.1024024281507157,0.6444662106996041,0.783214058873921,-0.8468032228257232,6.3642932090088,-1.7795429995488667,5.318131944986163,0.0,0,1,0.2655258469985231,0.25666966629660665,0.004581829702937256,0.20674702332927808,0.040850239318569,0.2570524281507156,-2.3116492228257233,0.8929112090087994 +7,4.958322493929934,2.226729102053039,0.9635145681581686,1.856150277488727,0.5846683182554333,0.7646360691567154,3.0,4.0,4.4721360206604,0.5252822403066744,0.05938607794875894,0.08390119250425894,1.1001519668540132,0.6819353341348239,0.8253697594999119,-0.8290535905764504,6.236828217134885,-0.2484094971075878,1.4617535496008514,0.0,0,1,0.266458697108116,0.24788848233138613,0.004627604818355622,0.11827169376376112,0.04894223250425894,0.25480196685401313,-2.2938995905764505,0.765446217134885 +8,4.913306451612903,2.2165979454138505,0.9589186611168922,1.8453433922996878,0.5884892174705705,0.7671305087601265,3.0,4.0,4.4721360206604,0.5252822403066744,0.06320697716389612,0.08262350936967632,1.1492572709962479,0.6381478875618168,0.8428608001594871,-1.2083452015652267,6.714920606410644,-1.0783628659018663,0.78177232042639,0.0,0,1,0.26521123625627346,0.2568596341044175,0.004588048214156221,0.17639438146975883,0.04766454936967632,0.3039072709962478,-2.673191201565227,1.2435386064106435 +9,4.8869558619493585,2.2106460281893523,0.9541276448144294,1.840042924037461,0.5908383370498989,0.7686600920107007,3.0,4.0,4.4721360206604,0.5252822403066744,0.06555609674322449,0.08943781942078365,1.141830995657666,0.6581222468886276,0.858045321706861,-1.1520365600725753,6.809131520732102,0.8322819250764986,1.0738651986809553,0.0,0,1,0.2629884708976966,0.2513843183766455,0.004577452828973017,0.13543041514325171,0.05447885942078365,0.29648099565766595,-2.6168825600725754,1.3377495207321015 +10,4.915355098855359,2.2170600124614035,0.9478299514394728,1.850437911897329,0.5928530162226577,0.769969490449237,3.0,4.0,4.242640495300293,0.5252822403066744,0.06757077591598337,0.08347529812606473,1.0923957700987015,0.6971368095977797,0.8319132362097249,-0.7676001965024029,6.678161163217084,-1.3378733037888852,0.7703154441715622,0.0,0,1,0.26769649861033307,0.25301897115559957,0.004684343948400701,0.1578122760403755,0.048516338126064734,0.24704577009870143,-2.232446196502403,1.2067791632170835 +11,4.919918487686438,2.218088926911281,0.9430389351370101,1.852898456468956,0.5973633645170526,0.7728928544869933,3.0,4.0,4.4721360206604,0.5252822403066744,0.07208112421037827,0.08049403747870527,1.0853439130113745,0.6882509611422404,0.8107399547939167,-0.7113474983787614,6.630624104636567,1.1396956047405093,0.8869440636679229,1.0,0,1,0.2677790176885852,0.24298761555141254,0.0046615184329749015,0.11596124244647732,0.04553507747870528,0.2399939130113744,-2.1761934983787614,1.1592421046365669 +12,6.8007067291016305,2.607816467679739,0.9549947970863684,1.8480749219562955,2.4733107494758295,1.5726763015559908,6.0,7.0,8.062257766723633,0.5252822403066744,1.9480285091691552,0.12819420783645655,1.4566037803957919,0.6313306634190563,1.3394908423846723,-3.2668286553130113,7.945031576922354,-0.15870982770940278,1.0850946010670803,0.0,0,1,0.2691949358576327,0.2602069168691974,0.004654618220793532,0.10483842514826858,0.09323524783645655,0.6112537803957918,-4.731674655313011,2.4736495769223534 +13,7.57159425945196,2.751653004913948,0.9523066250433576,1.8468283905653833,3.253931247152167,1.8038656399943336,6.0,7.0,7.810249328613281,0.5252822403066744,2.7286490068454925,0.16013628620102216,1.542471770787923,0.6706715317796331,1.5956745609431342,-3.764344492637608,9.871896166053979,-3.768747766207012,1.4778689507229945,0.0,0,1,0.25756193885232326,0.2383815900640343,0.004487614735363821,0.0618646152553739,0.12517732620102218,0.6971217707879229,-5.229190492637608,4.400514166053979 +14,4.931039715574054,2.220594450946425,0.9521657127991675,1.8542859001040584,0.5860439716189889,0.7655350884309542,3.0,4.0,4.4721360206604,0.5252822403066744,0.06076173131231455,0.09454855195911414,1.1250423245117716,0.6318534852320092,0.7997497398817571,-1.0233772215014318,6.450865575756282,0.07157023489205856,0.8500145465030344,0.0,0,1,0.25880367193626036,0.24902334455788566,0.004498680092492703,0.11686979564231703,0.059589591959114147,0.2796923245117715,-2.488223221501432,0.9794835757562819 +15,4.914639698231009,2.2168986666582233,0.9496509712105445,1.8523890045091918,0.5814577070833247,0.7625337416031664,3.0,4.0,4.4721360206604,0.5252822403066744,0.05617546677665031,0.09284497444633731,1.1566134639773282,0.6485174305492952,0.8675572440266134,-1.2637648711797032,7.550266963349408,0.6368695507363243,5.326810530921518,0.0,0,1,0.26432524091011667,0.24252120082883175,0.00457300739571061,0.08002037051007749,0.057886014446337314,0.3112634639773282,-2.7286108711797032,2.0788849633494078 +16,4.976760319112036,2.2308653744930544,0.956902532084634,1.864615851543531,0.5843055893746447,0.7643988418192722,3.0,4.0,4.4721360206604,0.5252822403066744,0.059023349067970354,0.08603066439522998,1.063656865382626,0.7029467258520877,0.7952899743189897,-0.5360309519366353,6.3916733554839595,1.3365576309608829,0.7414410771269146,0.0,0,1,0.26939315416499676,0.26084853462192703,0.004663845798926014,0.13577682602915098,0.05107170439522998,0.2183068653826259,-2.000876951936635,0.9202913554839594 diff --git a/data/processed/lab063/phase_vs_time.png b/data/processed/lab063/phase_vs_time.png new file mode 100644 index 0000000..cc598ee Binary files /dev/null and b/data/processed/lab063/phase_vs_time.png differ diff --git a/data/processed/lab063/received_power_by_packet.png b/data/processed/lab063/received_power_by_packet.png new file mode 100644 index 0000000..ca10d7c Binary files /dev/null and b/data/processed/lab063/received_power_by_packet.png differ diff --git a/data/processed/lab063/summary.json b/data/processed/lab063/summary.json new file mode 100644 index 0000000..2987760 --- /dev/null +++ b/data/processed/lab063/summary.json @@ -0,0 +1,951 @@ +{ + "lab": "Lab063", + "status": "COMPLETED_OFFLINE", + "rf_tx": 0, + "hardware_queries": 0, + "lab062_status_preserved": "RF_SESSION_INVALID_TX_UNDERRUN", + "lab062_commit": "f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5", + "physical_device": "Auron HackRF Plus", + "api_firmware_identification": "HackRF One r9", + "integrity": { + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "rx_sha256": "ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32", + "tx_samples": 1476096, + "rx_samples": 24000000 + }, + "actual_inter_packet_gap": { + "tx_samples": 1476096, + "packets": 16, + "packet_waveform_samples": 92256, + "packet_product_samples": 1476096, + "identity_confirmed": true, + "additional_inter_packet_gap_samples": 0, + "additional_inter_packet_gap_seconds": 0.0, + "actual": "0 additional samples (no planned 5 ms gaps)", + "reason": "IMPLEMENTATION_OMISSION: prepare() writes the 16 complete packet waveforms back-to-back and has no gap parameter or zero-fill operation", + "packet_internal_note": "Each packet waveform still contains its own guards and RRC tails" + }, + "tx_underrun_scale": { + "bytes": 16672, + "complex_samples": 8336, + "duration_seconds": 0.001042, + "duration_milliseconds": 1.042, + "symbols": 521.0, + "fraction_of_packet": 0.09035726673603885, + "percent_of_packet": 9.035726673603884, + "interpretation": "Scale only; RX does not prove that this many RF samples were lost or repeated" + }, + "tx_underrun_log": { + "binary_path": "C:\\Users\\user\\Tools\\HackRF\\Library\\bin\\hackrf_transfer.exe", + "binary_exists": true, + "local_source_files": [], + "progress_line": "1 underruns, longest 16672 bytes", + "final_line": "0 underruns, longest 0 bytes", + "counter_semantics": "NOT_ESTABLISHED", + "note": "No local source or documentation was found that explains the reset between progress and final counters" + }, + "background": { + "before": { + "raw_power_code2": 4.867889351370101, + "rms_full_iq_code": 2.2063293841514464, + "mean_i": 0.9631677072493929, + "mean_q": 1.8471644120707595, + "ac_power_code2": 0.5281809538613338, + "ac_rms_code": 0.7267605890947402, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.123105525970459 + }, + "after": { + "raw_power_code2": 4.852031304197017, + "rms_full_iq_code": 2.202732690136735, + "mean_i": 0.9442421089143254, + "mean_q": 1.8541991848768644, + "ac_power_code2": 0.5223835267520149, + "ac_rms_code": 0.7227610440194013, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604 + }, + "ac_power_code2_used": 0.5252822403066744, + "preflight_ac_rms_code": 0.9854828456229909 + }, + "local_alignment": { + "valid_windows": 221, + "total_windows": 359, + "minimum_correlation": 0.0716654800554192, + "median_correlation": 0.2655258469985231, + "maximum_correlation": 0.2873942479114494, + "delay_min_samples": 0, + "delay_median_samples": 0.0, + "delay_max_samples": 1, + "jump_candidates": [], + "local_delay_discontinuity": false, + "local_delay_discontinuity_scope": "NO_IN_221_RELIABLE_WINDOWS; UNDETERMINED_IN_22_INTERNAL_LOW_CORRELATION_WINDOWS", + "underrun_location": "NOT_LOCALIZED_FROM_RX", + "reliable_region_inside_packet_samples": [ + 24000, + 86000 + ], + "correlation_threshold": 0.15, + "internal_low_correlation_windows": { + "count": 22, + "packet_counts": { + "3": 5, + "4": 7, + "12": 7, + "13": 3 + }, + "windows": [ + { + "window_index": 62, + "packet_index": 3, + "tx_sample": 253952, + "rx_sample_selected_but_not_used_for_delay_verdict": 4510043, + "position_inside_packet_samples": 69440, + "normalized_correlation": 0.13153433429624267 + }, + { + "window_index": 63, + "packet_index": 3, + "tx_sample": 258048, + "rx_sample_selected_but_not_used_for_delay_verdict": 4514139, + "position_inside_packet_samples": 73536, + "normalized_correlation": 0.08888879507126439 + }, + { + "window_index": 64, + "packet_index": 3, + "tx_sample": 262144, + "rx_sample_selected_but_not_used_for_delay_verdict": 4518235, + "position_inside_packet_samples": 77632, + "normalized_correlation": 0.07990273751817419 + }, + { + "window_index": 65, + "packet_index": 3, + "tx_sample": 266240, + "rx_sample_selected_but_not_used_for_delay_verdict": 4522332, + "position_inside_packet_samples": 81728, + "normalized_correlation": 0.07824125225628915 + }, + { + "window_index": 66, + "packet_index": 3, + "tx_sample": 270336, + "rx_sample_selected_but_not_used_for_delay_verdict": 4526428, + "position_inside_packet_samples": 85824, + "normalized_correlation": 0.07587440188611191 + }, + { + "window_index": 74, + "packet_index": 4, + "tx_sample": 303104, + "rx_sample_selected_but_not_used_for_delay_verdict": 4559195, + "position_inside_packet_samples": 26336, + "normalized_correlation": 0.08726659571551212 + }, + { + "window_index": 75, + "packet_index": 4, + "tx_sample": 307200, + "rx_sample_selected_but_not_used_for_delay_verdict": 4563291, + "position_inside_packet_samples": 30432, + "normalized_correlation": 0.07303287114951702 + }, + { + "window_index": 76, + "packet_index": 4, + "tx_sample": 311296, + "rx_sample_selected_but_not_used_for_delay_verdict": 4567387, + "position_inside_packet_samples": 34528, + "normalized_correlation": 0.07923837125521409 + }, + { + "window_index": 77, + "packet_index": 4, + "tx_sample": 315392, + "rx_sample_selected_but_not_used_for_delay_verdict": 4571483, + "position_inside_packet_samples": 38624, + "normalized_correlation": 0.08766369642748506 + }, + { + "window_index": 78, + "packet_index": 4, + "tx_sample": 319488, + "rx_sample_selected_but_not_used_for_delay_verdict": 4575579, + "position_inside_packet_samples": 42720, + "normalized_correlation": 0.08111151553103035 + }, + { + "window_index": 79, + "packet_index": 4, + "tx_sample": 323584, + "rx_sample_selected_but_not_used_for_delay_verdict": 4579675, + "position_inside_packet_samples": 46816, + "normalized_correlation": 0.10671176630261674 + }, + { + "window_index": 81, + "packet_index": 4, + "tx_sample": 331776, + "rx_sample_selected_but_not_used_for_delay_verdict": 4587867, + "position_inside_packet_samples": 55008, + "normalized_correlation": 0.13566484987135102 + }, + { + "window_index": 262, + "packet_index": 12, + "tx_sample": 1073152, + "rx_sample_selected_but_not_used_for_delay_verdict": 5329243, + "position_inside_packet_samples": 58336, + "normalized_correlation": 0.12222192020312277 + }, + { + "window_index": 263, + "packet_index": 12, + "tx_sample": 1077248, + "rx_sample_selected_but_not_used_for_delay_verdict": 5333339, + "position_inside_packet_samples": 62432, + "normalized_correlation": 0.08371985216496043 + }, + { + "window_index": 264, + "packet_index": 12, + "tx_sample": 1081344, + "rx_sample_selected_but_not_used_for_delay_verdict": 5337436, + "position_inside_packet_samples": 66528, + "normalized_correlation": 0.07678297321464417 + }, + { + "window_index": 265, + "packet_index": 12, + "tx_sample": 1085440, + "rx_sample_selected_but_not_used_for_delay_verdict": 5341532, + "position_inside_packet_samples": 70624, + "normalized_correlation": 0.075825225755414 + }, + { + "window_index": 266, + "packet_index": 12, + "tx_sample": 1089536, + "rx_sample_selected_but_not_used_for_delay_verdict": 5345627, + "position_inside_packet_samples": 74720, + "normalized_correlation": 0.0777915075019332 + }, + { + "window_index": 267, + "packet_index": 12, + "tx_sample": 1093632, + "rx_sample_selected_but_not_used_for_delay_verdict": 5349723, + "position_inside_packet_samples": 78816, + "normalized_correlation": 0.0828610428066847 + }, + { + "window_index": 268, + "packet_index": 12, + "tx_sample": 1097728, + "rx_sample_selected_but_not_used_for_delay_verdict": 5353821, + "position_inside_packet_samples": 82912, + "normalized_correlation": 0.08195769883417732 + }, + { + "window_index": 277, + "packet_index": 13, + "tx_sample": 1134592, + "rx_sample_selected_but_not_used_for_delay_verdict": 5390682, + "position_inside_packet_samples": 27520, + "normalized_correlation": 0.08301430893626999 + }, + { + "window_index": 278, + "packet_index": 13, + "tx_sample": 1138688, + "rx_sample_selected_but_not_used_for_delay_verdict": 5394779, + "position_inside_packet_samples": 31616, + "normalized_correlation": 0.07878097899540573 + }, + { + "window_index": 279, + "packet_index": 13, + "tx_sample": 1142784, + "rx_sample_selected_but_not_used_for_delay_verdict": 5398876, + "position_inside_packet_samples": 35712, + "normalized_correlation": 0.09576023729412096 + } + ], + "interpretation": "Delay is not established in these windows; low correlation is itself a local anomaly, but it does not identify an underrun without a reliable timing discontinuity" + }, + "excluded_region_reason": "Packet edges and repeated PRBS preamble have correlation aliases spaced by 2032 samples; 22 additional internal windows are below the 0.15 correlation threshold. All are retained in CSV, and delay is not asserted for any excluded window" + }, + "packet_quality": [ + { + "packet_index": 1, + "raw_power_code2": 4.900591831425598, + "rms_full_iq_code": 2.2137280391740983, + "mean_i": 0.9692702913631633, + "mean_q": 1.8366285119667014, + "ac_power_code2": 0.5879026427373475, + "ac_rms_code": 0.7667480960115568, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06262040243067313, + "symbol_error_rate": 0.08517887563884156, + "symbol_rms_deviation": 1.088322316906538, + "matched_component_power": 0.7075133679013462, + "residual_power": 0.8380110003749788, + "matched_residual_db": -0.7351506962803888, + "band_gain_nonuniformity_db": 6.642520146946069, + "initial_frequency_hz": 1.0073017677042053, + "diagnostic_residual_phase_error_rad": 5.396055347590577, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2720544529364392, + "local_correlation_min": 0.2556440262627536, + "local_gain_amplitude_median": 0.004692917533594935, + "local_phase_unwrapped_span_rad": 0.120558278787813, + "ser_minus_lab056_b": 0.05021991563884157, + "evm_minus_lab056_b": 0.24297231690653787, + "matched_residual_minus_lab056_b_db": -2.199996696280389, + "ripple_minus_lab056_b_db": 1.1711381469460687 + }, + { + "packet_index": 2, + "raw_power_code2": 4.865146982310094, + "rms_full_iq_code": 2.2057078188894588, + "mean_i": 0.9677527748872702, + "mean_q": 1.8294528269164065, + "ac_power_code2": 0.5817039030956508, + "ac_rms_code": 0.7626951573831126, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.05642166278897642, + "symbol_error_rate": 0.09795570698466781, + "symbol_rms_deviation": 1.104921348985033, + "matched_component_power": 0.6708739973434846, + "residual_power": 0.8190373162813612, + "matched_residual_db": -0.8666272994726886, + "band_gain_nonuniformity_db": 6.598551357893342, + "initial_frequency_hz": 1.6416990453424165, + "diagnostic_residual_phase_error_rad": 0.9116196756938657, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2633530926845802, + "local_correlation_min": 0.2539878786554866, + "local_gain_amplitude_median": 0.0045493907778025216, + "local_phase_unwrapped_span_rad": 0.0709144214354922, + "ser_minus_lab056_b": 0.06299674698466781, + "evm_minus_lab056_b": 0.25957134898503287, + "matched_residual_minus_lab056_b_db": -2.3314732994726888, + "ripple_minus_lab056_b_db": 1.127169357893342 + }, + { + "packet_index": 3, + "raw_power_code2": 6.015186004162331, + "rms_full_iq_code": 2.4525876139625127, + "mean_i": 0.9700940860215054, + "mean_q": 1.8342655220256676, + "ac_power_code2": 1.7095734631363353, + "ac_rms_code": 1.3075065824447445, + "max_abs_i": 6.0, + "max_abs_q": 7.0, + "max_complex_magnitude": 7.211102485656738, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 1.184291222829661, + "symbol_error_rate": 0.10221465076660988, + "symbol_rms_deviation": 1.3578439728375573, + "matched_component_power": 0.6181275875589448, + "residual_power": 1.1396667156434608, + "matched_residual_db": -2.6569973778482696, + "band_gain_nonuniformity_db": 7.370968795797246, + "initial_frequency_hz": -0.9619877262845884, + "diagnostic_residual_phase_error_rad": 0.9174219316762064, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2672883844824355, + "local_correlation_min": 0.24083000237735547, + "local_gain_amplitude_median": 0.004581545172098038, + "local_phase_unwrapped_span_rad": 0.15725486354106955, + "ser_minus_lab056_b": 0.06725569076660988, + "evm_minus_lab056_b": 0.5124939728375573, + "matched_residual_minus_lab056_b_db": -4.12184337784827, + "ripple_minus_lab056_b_db": 1.899586795797246 + }, + { + "packet_index": 4, + "raw_power_code2": 8.462127124523066, + "rms_full_iq_code": 2.9089735517056643, + "mean_i": 0.9603494623655914, + "mean_q": 1.846362296219216, + "ac_power_code2": 4.130802305757289, + "ac_rms_code": 2.032437528131502, + "max_abs_i": 6.0, + "max_abs_q": 7.0, + "max_complex_magnitude": 7.6157732009887695, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 3.6055200654506145, + "symbol_error_rate": 0.15587734241908008, + "symbol_rms_deviation": 1.6634180909816034, + "matched_component_power": 0.694252592647496, + "residual_power": 1.920968976998595, + "matched_residual_db": -4.420028409350613, + "band_gain_nonuniformity_db": 10.617549420778396, + "initial_frequency_hz": 2.5845496302438504, + "diagnostic_residual_phase_error_rad": 5.388297118381418, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 0, + "local_correlation_median": 0.2731302498054202, + "local_correlation_min": 0.1663171407536924, + "local_gain_amplitude_median": 0.004805263148615891, + "local_phase_unwrapped_span_rad": 0.12094876972869106, + "ser_minus_lab056_b": 0.12091838241908008, + "evm_minus_lab056_b": 0.8180680909816034, + "matched_residual_minus_lab056_b_db": -5.884874409350614, + "ripple_minus_lab056_b_db": 5.146167420778395 + }, + { + "packet_index": 5, + "raw_power_code2": 4.954615417967395, + "rms_full_iq_code": 2.2258965425121167, + "mean_i": 0.9645117932708983, + "mean_q": 1.8537439299340963, + "ac_power_code2": 0.5879658608412441, + "ac_rms_code": 0.7667893197229889, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.242640495300293, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06268362053456977, + "symbol_error_rate": 0.08986371379897785, + "symbol_rms_deviation": 1.0991964913376657, + "matched_component_power": 0.7021817411712009, + "residual_power": 0.8483991001186207, + "matched_residual_db": -0.8215066687796163, + "band_gain_nonuniformity_db": 6.409725568268307, + "initial_frequency_hz": -1.2358463102217572, + "diagnostic_residual_phase_error_rad": 0.8342172701371073, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.26644916295862675, + "local_correlation_min": 0.2537591241878097, + "local_gain_amplitude_median": 0.0046666418592819555, + "local_phase_unwrapped_span_rad": 0.09866723940073996, + "ser_minus_lab056_b": 0.05490475379897786, + "evm_minus_lab056_b": 0.2538464913376657, + "matched_residual_minus_lab056_b_db": -2.2863526687796165, + "ripple_minus_lab056_b_db": 0.9383435682683068 + }, + { + "packet_index": 6, + "raw_power_code2": 4.919647502601457, + "rms_full_iq_code": 2.218027840808464, + "mean_i": 0.968934269857787, + "mean_q": 1.8444437218175511, + "ac_power_code2": 0.5788412403444356, + "ac_rms_code": 0.7608161672470135, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.05355900003776126, + "symbol_error_rate": 0.075809199318569, + "symbol_rms_deviation": 1.1024024281507157, + "matched_component_power": 0.6444662106996041, + "residual_power": 0.783214058873921, + "matched_residual_db": -0.8468032228257232, + "band_gain_nonuniformity_db": 6.3642932090088, + "initial_frequency_hz": -1.7795429995488667, + "diagnostic_residual_phase_error_rad": 5.318131944986163, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2655258469985231, + "local_correlation_min": 0.25666966629660665, + "local_gain_amplitude_median": 0.004581829702937256, + "local_phase_unwrapped_span_rad": 0.20674702332927808, + "ser_minus_lab056_b": 0.040850239318569, + "evm_minus_lab056_b": 0.2570524281507156, + "matched_residual_minus_lab056_b_db": -2.3116492228257233, + "ripple_minus_lab056_b_db": 0.8929112090087994 + }, + { + "packet_index": 7, + "raw_power_code2": 4.958322493929934, + "rms_full_iq_code": 2.226729102053039, + "mean_i": 0.9635145681581686, + "mean_q": 1.856150277488727, + "ac_power_code2": 0.5846683182554333, + "ac_rms_code": 0.7646360691567154, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.05938607794875894, + "symbol_error_rate": 0.08390119250425894, + "symbol_rms_deviation": 1.1001519668540132, + "matched_component_power": 0.6819353341348239, + "residual_power": 0.8253697594999119, + "matched_residual_db": -0.8290535905764504, + "band_gain_nonuniformity_db": 6.236828217134885, + "initial_frequency_hz": -0.2484094971075878, + "diagnostic_residual_phase_error_rad": 1.4617535496008514, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.266458697108116, + "local_correlation_min": 0.24788848233138613, + "local_gain_amplitude_median": 0.004627604818355622, + "local_phase_unwrapped_span_rad": 0.11827169376376112, + "ser_minus_lab056_b": 0.04894223250425894, + "evm_minus_lab056_b": 0.25480196685401313, + "matched_residual_minus_lab056_b_db": -2.2938995905764505, + "ripple_minus_lab056_b_db": 0.765446217134885 + }, + { + "packet_index": 8, + "raw_power_code2": 4.913306451612903, + "rms_full_iq_code": 2.2165979454138505, + "mean_i": 0.9589186611168922, + "mean_q": 1.8453433922996878, + "ac_power_code2": 0.5884892174705705, + "ac_rms_code": 0.7671305087601265, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06320697716389612, + "symbol_error_rate": 0.08262350936967632, + "symbol_rms_deviation": 1.1492572709962479, + "matched_component_power": 0.6381478875618168, + "residual_power": 0.8428608001594871, + "matched_residual_db": -1.2083452015652267, + "band_gain_nonuniformity_db": 6.714920606410644, + "initial_frequency_hz": -1.0783628659018663, + "diagnostic_residual_phase_error_rad": 0.78177232042639, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.26521123625627346, + "local_correlation_min": 0.2568596341044175, + "local_gain_amplitude_median": 0.004588048214156221, + "local_phase_unwrapped_span_rad": 0.17639438146975883, + "ser_minus_lab056_b": 0.04766454936967632, + "evm_minus_lab056_b": 0.3039072709962478, + "matched_residual_minus_lab056_b_db": -2.673191201565227, + "ripple_minus_lab056_b_db": 1.2435386064106435 + }, + { + "packet_index": 9, + "raw_power_code2": 4.8869558619493585, + "rms_full_iq_code": 2.2106460281893523, + "mean_i": 0.9541276448144294, + "mean_q": 1.840042924037461, + "ac_power_code2": 0.5908383370498989, + "ac_rms_code": 0.7686600920107007, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06555609674322449, + "symbol_error_rate": 0.08943781942078365, + "symbol_rms_deviation": 1.141830995657666, + "matched_component_power": 0.6581222468886276, + "residual_power": 0.858045321706861, + "matched_residual_db": -1.1520365600725753, + "band_gain_nonuniformity_db": 6.809131520732102, + "initial_frequency_hz": 0.8322819250764986, + "diagnostic_residual_phase_error_rad": 1.0738651986809553, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2629884708976966, + "local_correlation_min": 0.2513843183766455, + "local_gain_amplitude_median": 0.004577452828973017, + "local_phase_unwrapped_span_rad": 0.13543041514325171, + "ser_minus_lab056_b": 0.05447885942078365, + "evm_minus_lab056_b": 0.29648099565766595, + "matched_residual_minus_lab056_b_db": -2.6168825600725754, + "ripple_minus_lab056_b_db": 1.3377495207321015 + }, + { + "packet_index": 10, + "raw_power_code2": 4.915355098855359, + "rms_full_iq_code": 2.2170600124614035, + "mean_i": 0.9478299514394728, + "mean_q": 1.850437911897329, + "ac_power_code2": 0.5928530162226577, + "ac_rms_code": 0.769969490449237, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.242640495300293, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06757077591598337, + "symbol_error_rate": 0.08347529812606473, + "symbol_rms_deviation": 1.0923957700987015, + "matched_component_power": 0.6971368095977797, + "residual_power": 0.8319132362097249, + "matched_residual_db": -0.7676001965024029, + "band_gain_nonuniformity_db": 6.678161163217084, + "initial_frequency_hz": -1.3378733037888852, + "diagnostic_residual_phase_error_rad": 0.7703154441715622, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.26769649861033307, + "local_correlation_min": 0.25301897115559957, + "local_gain_amplitude_median": 0.004684343948400701, + "local_phase_unwrapped_span_rad": 0.1578122760403755, + "ser_minus_lab056_b": 0.048516338126064734, + "evm_minus_lab056_b": 0.24704577009870143, + "matched_residual_minus_lab056_b_db": -2.232446196502403, + "ripple_minus_lab056_b_db": 1.2067791632170835 + }, + { + "packet_index": 11, + "raw_power_code2": 4.919918487686438, + "rms_full_iq_code": 2.218088926911281, + "mean_i": 0.9430389351370101, + "mean_q": 1.852898456468956, + "ac_power_code2": 0.5973633645170526, + "ac_rms_code": 0.7728928544869933, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.07208112421037827, + "symbol_error_rate": 0.08049403747870527, + "symbol_rms_deviation": 1.0853439130113745, + "matched_component_power": 0.6882509611422404, + "residual_power": 0.8107399547939167, + "matched_residual_db": -0.7113474983787614, + "band_gain_nonuniformity_db": 6.630624104636567, + "initial_frequency_hz": 1.1396956047405093, + "diagnostic_residual_phase_error_rad": 0.8869440636679229, + "local_delay_median_samples": 1.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2677790176885852, + "local_correlation_min": 0.24298761555141254, + "local_gain_amplitude_median": 0.0046615184329749015, + "local_phase_unwrapped_span_rad": 0.11596124244647732, + "ser_minus_lab056_b": 0.04553507747870528, + "evm_minus_lab056_b": 0.2399939130113744, + "matched_residual_minus_lab056_b_db": -2.1761934983787614, + "ripple_minus_lab056_b_db": 1.1592421046365669 + }, + { + "packet_index": 12, + "raw_power_code2": 6.8007067291016305, + "rms_full_iq_code": 2.607816467679739, + "mean_i": 0.9549947970863684, + "mean_q": 1.8480749219562955, + "ac_power_code2": 2.4733107494758295, + "ac_rms_code": 1.5726763015559908, + "max_abs_i": 6.0, + "max_abs_q": 7.0, + "max_complex_magnitude": 8.062257766723633, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 1.9480285091691552, + "symbol_error_rate": 0.12819420783645655, + "symbol_rms_deviation": 1.4566037803957919, + "matched_component_power": 0.6313306634190563, + "residual_power": 1.3394908423846723, + "matched_residual_db": -3.2668286553130113, + "band_gain_nonuniformity_db": 7.945031576922354, + "initial_frequency_hz": -0.15870982770940278, + "diagnostic_residual_phase_error_rad": 1.0850946010670803, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.2691949358576327, + "local_correlation_min": 0.2602069168691974, + "local_gain_amplitude_median": 0.004654618220793532, + "local_phase_unwrapped_span_rad": 0.10483842514826858, + "ser_minus_lab056_b": 0.09323524783645655, + "evm_minus_lab056_b": 0.6112537803957918, + "matched_residual_minus_lab056_b_db": -4.731674655313011, + "ripple_minus_lab056_b_db": 2.4736495769223534 + }, + { + "packet_index": 13, + "raw_power_code2": 7.57159425945196, + "rms_full_iq_code": 2.751653004913948, + "mean_i": 0.9523066250433576, + "mean_q": 1.8468283905653833, + "ac_power_code2": 3.253931247152167, + "ac_rms_code": 1.8038656399943336, + "max_abs_i": 6.0, + "max_abs_q": 7.0, + "max_complex_magnitude": 7.810249328613281, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 2.7286490068454925, + "symbol_error_rate": 0.16013628620102216, + "symbol_rms_deviation": 1.542471770787923, + "matched_component_power": 0.6706715317796331, + "residual_power": 1.5956745609431342, + "matched_residual_db": -3.764344492637608, + "band_gain_nonuniformity_db": 9.871896166053979, + "initial_frequency_hz": -3.768747766207012, + "diagnostic_residual_phase_error_rad": 1.4778689507229945, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.25756193885232326, + "local_correlation_min": 0.2383815900640343, + "local_gain_amplitude_median": 0.004487614735363821, + "local_phase_unwrapped_span_rad": 0.0618646152553739, + "ser_minus_lab056_b": 0.12517732620102218, + "evm_minus_lab056_b": 0.6971217707879229, + "matched_residual_minus_lab056_b_db": -5.229190492637608, + "ripple_minus_lab056_b_db": 4.400514166053979 + }, + { + "packet_index": 14, + "raw_power_code2": 4.931039715574054, + "rms_full_iq_code": 2.220594450946425, + "mean_i": 0.9521657127991675, + "mean_q": 1.8542859001040584, + "ac_power_code2": 0.5860439716189889, + "ac_rms_code": 0.7655350884309542, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.06076173131231455, + "symbol_error_rate": 0.09454855195911414, + "symbol_rms_deviation": 1.1250423245117716, + "matched_component_power": 0.6318534852320092, + "residual_power": 0.7997497398817571, + "matched_residual_db": -1.0233772215014318, + "band_gain_nonuniformity_db": 6.450865575756282, + "initial_frequency_hz": 0.07157023489205856, + "diagnostic_residual_phase_error_rad": 0.8500145465030344, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.25880367193626036, + "local_correlation_min": 0.24902334455788566, + "local_gain_amplitude_median": 0.004498680092492703, + "local_phase_unwrapped_span_rad": 0.11686979564231703, + "ser_minus_lab056_b": 0.059589591959114147, + "evm_minus_lab056_b": 0.2796923245117715, + "matched_residual_minus_lab056_b_db": -2.488223221501432, + "ripple_minus_lab056_b_db": 0.9794835757562819 + }, + { + "packet_index": 15, + "raw_power_code2": 4.914639698231009, + "rms_full_iq_code": 2.2168986666582233, + "mean_i": 0.9496509712105445, + "mean_q": 1.8523890045091918, + "ac_power_code2": 0.5814577070833247, + "ac_rms_code": 0.7625337416031664, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.05617546677665031, + "symbol_error_rate": 0.09284497444633731, + "symbol_rms_deviation": 1.1566134639773282, + "matched_component_power": 0.6485174305492952, + "residual_power": 0.8675572440266134, + "matched_residual_db": -1.2637648711797032, + "band_gain_nonuniformity_db": 7.550266963349408, + "initial_frequency_hz": 0.6368695507363243, + "diagnostic_residual_phase_error_rad": 5.326810530921518, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.26432524091011667, + "local_correlation_min": 0.24252120082883175, + "local_gain_amplitude_median": 0.00457300739571061, + "local_phase_unwrapped_span_rad": 0.08002037051007749, + "ser_minus_lab056_b": 0.057886014446337314, + "evm_minus_lab056_b": 0.3112634639773282, + "matched_residual_minus_lab056_b_db": -2.7286108711797032, + "ripple_minus_lab056_b_db": 2.0788849633494078 + }, + { + "packet_index": 16, + "raw_power_code2": 4.976760319112036, + "rms_full_iq_code": 2.2308653744930544, + "mean_i": 0.956902532084634, + "mean_q": 1.864615851543531, + "ac_power_code2": 0.5843055893746447, + "ac_rms_code": 0.7643988418192722, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "max_complex_magnitude": 4.4721360206604, + "background_ac_power_code2": 0.5252822403066744, + "background_subtracted_useful_power_code2": 0.059023349067970354, + "symbol_error_rate": 0.08603066439522998, + "symbol_rms_deviation": 1.063656865382626, + "matched_component_power": 0.7029467258520877, + "residual_power": 0.7952899743189897, + "matched_residual_db": -0.5360309519366353, + "band_gain_nonuniformity_db": 6.3916733554839595, + "initial_frequency_hz": 1.3365576309608829, + "diagnostic_residual_phase_error_rad": 0.7414410771269146, + "local_delay_median_samples": 0.0, + "local_delay_min_samples": 0, + "local_delay_max_samples": 1, + "local_correlation_median": 0.26939315416499676, + "local_correlation_min": 0.26084853462192703, + "local_gain_amplitude_median": 0.004663845798926014, + "local_phase_unwrapped_span_rad": 0.13577682602915098, + "ser_minus_lab056_b": 0.05107170439522998, + "evm_minus_lab056_b": 0.2183068653826259, + "matched_residual_minus_lab056_b_db": -2.000876951936635, + "ripple_minus_lab056_b_db": 0.9202913554839594 + } + ], + "group_trends": [ + { + "packets": "1-4", + "useful_power_mean": 1.2272133383749813, + "symbol_error_rate_mean": 0.11030664395229983, + "symbol_rms_deviation_mean": 1.303626432427683, + "matched_component_power_mean": 0.672691886362818, + "residual_power_mean": 1.179421002324599, + "matched_residual_db_mean": -2.16970094573799, + "initial_frequency_hz_mean": 1.067890679251471, + "diagnostic_residual_phase_error_rad_mean": 3.153348518335517, + "local_phase_unwrapped_span_rad_mean": 0.11741908337326645, + "local_gain_amplitude_median": 0.004637231352846487 + }, + { + "packets": "5-8", + "useful_power_mean": 0.05970891892124652, + "symbol_error_rate_mean": 0.08304940374787052, + "symbol_rms_deviation_mean": 1.1127520393346606, + "matched_component_power_mean": 0.6666827933918614, + "residual_power_mean": 0.8249609296629852, + "matched_residual_db_mean": -0.9264271709367542, + "initial_frequency_hz_mean": -1.0855404181950195, + "diagnostic_residual_phase_error_rad_mean": 2.0989687712876277, + "local_phase_unwrapped_span_rad_mean": 0.1500200844908845, + "local_gain_amplitude_median": 0.004607826516255922 + }, + { + "packets": "9-12", + "useful_power_mean": 0.5383091265096853, + "symbol_error_rate_mean": 0.09540034071550255, + "symbol_rms_deviation_mean": 1.1940436147908833, + "matched_component_power_mean": 0.668710170261926, + "residual_power_mean": 0.9600473387737937, + "matched_residual_db_mean": -1.4744532275666877, + "initial_frequency_hz_mean": 0.11884859957967997, + "diagnostic_residual_phase_error_rad_mean": 0.9540548268968803, + "local_phase_unwrapped_span_rad_mean": 0.12851058969459328, + "local_gain_amplitude_median": 0.004658068326884217 + }, + { + "packets": "13-16", + "useful_power_mean": 0.7261523885006069, + "symbol_error_rate_mean": 0.10839011925042591, + "symbol_rms_deviation_mean": 1.2219461061649122, + "matched_component_power_mean": 0.6634972933532564, + "residual_power_mean": 1.0145678797926236, + "matched_residual_db_mean": -1.6468793843138447, + "initial_frequency_hz_mean": -0.4309375874044365, + "diagnostic_residual_phase_error_rad_mean": 2.0990337763186155, + "local_phase_unwrapped_span_rad_mean": 0.09863290185922985, + "local_gain_amplitude_median": 0.0045358437441016565 + } + ], + "special_packets_3_4_12_14": { + "packets": [ + 3, + 4, + 12, + 14 + ], + "all_have_power_drop_below_median": false, + "all_have_correlation_below_median": false, + "all_have_large_delay_change": false, + "interpretation": "No common underrun signature unless one of all three booleans is true with localized alignment evidence" + }, + "packets_most_affected": [ + 13, + 4, + 12, + 3 + ], + "active_rx_level": { + "ac_rms_min": 0.7608161672470135, + "ac_rms_max": 2.032437528131502, + "max_abs_i_min": 3.0, + "max_abs_i_max": 6.0, + "max_abs_q_min": 4.0, + "max_abs_q_max": 7.0, + "mean_i_min": 0.9430389351370101, + "mean_i_max": 0.9700940860215054, + "mean_q_min": 1.8294528269164065, + "mean_q_max": 1.864615851543531, + "local_gain_amplitude_median_min": 0.004487614735363821, + "local_gain_amplitude_median_max": 0.004805263148615891, + "analog_overload": "LESS_LIKELY_FROM_DIGITAL_LEVEL_BUT_NOT_EXCLUDED_WITHOUT_INSTRUMENT" + }, + "lab056_comparison": { + "reference": { + "symbol_error_rate": 0.03495896, + "evm_rms": 0.84535, + "matched_residual_db": 1.464846, + "band_ripple_db": 5.471382 + }, + "packets_worse_on_all_three_core_metrics": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + }, + "quality_distribution": "GLOBAL", + "primary_cause_status": "PARTIALLY_LOCALIZED", + "packets_worse_than_lab056_on_ser_evm_and_matched_residual": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "global_degradation_rule": "at least 12/16 packets worse than Lab056 B on SER, EVM and matched/residual", + "global_degradation": true, + "local_delay_discontinuity": false, + "next_single_step": "Before another TX, investigate the low active RX level, gain/geometry and possible analogue compression; also change TX streaming/logging so any underrun is unambiguous. Do not change RF parameters yet.", + "lab063_commit": "NOT_PERFORMED", + "push": "NOT_PERFORMED", + "lab064": "NOT_CREATED" +} \ No newline at end of file diff --git a/data/processed/lab063/symbol_error_rate_by_packet.png b/data/processed/lab063/symbol_error_rate_by_packet.png new file mode 100644 index 0000000..9f7cc17 Binary files /dev/null and b/data/processed/lab063/symbol_error_rate_by_packet.png differ diff --git a/docs/LABS_INDEX.md b/docs/LABS_INDEX.md index f64d031..f53cb86 100644 --- a/docs/LABS_INDEX.md +++ b/docs/LABS_INDEX.md @@ -596,3 +596,31 @@ [покадровый CSV](../data/processed/lab062/packet_comparison.csv). - **Текущее состояние:** `RF TX=0`; повтор не выполнялся, Lab062 не закоммичена, push не выполнялся, Lab063 не создана. Следующий шаг требует отдельного согласования. + +## Lab063: офлайн-локализация TX underrun и ухудшения Lab062 + +- **Запись 058; только сохранённые TX/RX, RF TX=0.** Lab062 перед анализом зафиксирована + коммитом `f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5`; её статус + `RF_SESSION_INVALID_TX_UNDERRUN` сохранён. +- **Фактические паузы:** 92 256 × 16 = 1 476 096 отсчётов, поэтому дополнительных пауз между + полными packet waveform нет. Причина: ошибка реализации `prepare()`, пакеты записаны подряд + без параметра паузы и без вставки нулей. +- **Масштаб журнала:** 16 672 байта cs8 = 8 336 комплексных отсчётов = 1,042 мс = 521 символ = + 9,035727% одного waveform. RX не подтверждает потерю или повтор именно такого числа отсчётов. +- **Локальное сопоставление:** 221 надёжное окно из 359, задержка 0…1 отсчёт, скачков нет. + Ещё 22 внутренних окна пакетов3,4,12,13 имеют корреляцию ниже0,15; задержка там не + установлена. `UNDERRUN LOCATION=NOT_LOCALIZED_FROM_RX`. Повторяющаяся преамбула с + корреляционными копиями и низкокорреляционные окна исключены из решения о разрыве. +- **Качество:** все 16 пакетов хуже Lab056 B по SER, EVM и matched/residual. Пакеты 3,4,12,13 + имеют дополнительные всплески AC-мощности и остатка при почти постоянном локальном |h|; + пакет14 общего признака с ними не показывает. Итог: `GLOBAL_RF_DEGRADATION`, причина + `PARTIALLY_LOCALIZED`. +- **RX-уровень:** AC RMS0,760816…2,032438 кода, max|I|=3…6, max|Q|=4…7. Сильная аналоговая + перегрузка менее вероятна, но без прибора не исключена. Значение расхождения счётчиков + `hackrf_transfer` локально не установлено: `COUNTER SEMANTICS=NOT_ESTABLISHED`. +- [Текущее состояние](lab063_current_state.md), [отчёт](lab063_offline_result.md), + [JSON](../data/processed/lab063/summary.json), + [пакеты CSV](../data/processed/lab063/packet_quality.csv), + [локальное сопоставление CSV](../data/processed/lab063/local_alignment.csv). +- **STOP:** Lab063 не коммитировалась, push не выполнялся, Lab064 не создана. Следующий шаг + требует отдельного согласования; RF TX=0. diff --git a/docs/lab063_current_state.md b/docs/lab063_current_state.md new file mode 100644 index 0000000..aaa2266 --- /dev/null +++ b/docs/lab063_current_state.md @@ -0,0 +1,78 @@ +# Lab063: текущее состояние + +## Статус + +Lab063 выполнена полностью офлайн по сохранённым файлам единственного RF-сеанса Lab062. Новых передач, запросов к HackRF и аппаратных команд не было. + +- `LAB063 STATUS = COMPLETED_OFFLINE` +- `RF TX = 0` +- `LAB063 COMMIT = NOT PERFORMED` +- `PUSH = NOT PERFORMED` +- `LAB064 = NOT CREATED` + +Lab062 перед началом анализа зафиксирована отдельным коммитом: + +- `LAB062 COMMIT = f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5` +- `NEW HEAD = f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5` +- сообщение: `Lab062: record invalidated 500 ksymbol/s RF packet trial` + +Статус аппаратного опыта сохранён без изменения: `RF_SESSION_INVALID_TX_UNDERRUN`. Результат `legacy = 0/16` и `T2 = 0/16` не переобъявлялся как валидное сравнение приёмников. + +## Исходные данные + +Анализ использует только сохранённые файлы Lab062: + +| Объект | Значение | +|---|---| +| TX | `data/raw/lab062/tx_stream.cs8` | +| TX SHA-256 | `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5` | +| TX | 1 476 096 комплексных отсчётов | +| RX | `data/raw/lab062/rx_stream.cs8` | +| RX SHA-256 | `ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32` | +| RX | 24 000 000 комплексных отсчётов | +| Начало TX в RX | отсчёт 4 256 091 | +| Частота дискретизации | 8 Мвыб/с | +| Символьная скорость | 500 ксимв/с | +| Пакетов | 16 | +| Длина одного полного waveform | 92 256 отсчётов | + +Физическое устройство и ответ программного интерфейса записаны отдельно: + +- `PHYSICAL DEVICE = Auron HackRF Plus` +- `API/FIRMWARE IDENTIFICATION = HackRF One r9` + +## Зафиксированный результат + +Фактический TX-файл содержит пакеты вплотную: `92 256 × 16 = 1 476 096`. Дополнительных пауз между полными waveform нет. Внутренние защитные участки и хвосты RRC каждого пакета сохранены. + +`INTER-PACKET GAP ACTUAL = 0 additional samples = 0 s` + +Причина установлена по `prepare()` в `experiments/lab062_full_packet_rf_preflight.py`: шестнадцать результатов `build_parameterized_tx_cs8(...)` записываются подряд, параметра паузы и записи нулей между ними нет. Это ошибка реализации подготовленного потока Lab062, а не доказанное ограничение генератора PHY. + +Записанный `longest = 16 672 bytes` для cs8 соответствует 8 336 комплексным отсчётам, 1,042 мс, 521 символу и 9,035727 % waveform одного пакета. Это оценка масштаба сообщения журнала. RX-запись не доказывает, что именно столько эфирных отсчётов было потеряно, повторено или заменено. + +Локальное сопоставление 512-символьными окнами с шагом 256 символов дало 359 окон. В 221 надёжном внутреннем окне задержка равна 0…1 отсчёту, скачков не найдено. Ещё 22 внутренних окна в пакетах 3, 4, 12 и 13 имеют корреляцию ниже порога 0,15; задержка в них не установлена: + +- `UNDERRUN LOCATION = NOT_LOCALIZED_FROM_RX` +- `LOCAL DELAY DISCONTINUITY = NO IN 221 RELIABLE WINDOWS; UNDETERMINED IN 22 INTERNAL LOW-CORRELATION WINDOWS` + +Участки на краях пакетов и повторяющаяся PRBS-преамбула сохранены в CSV, но исключены из решения о разрыве: там возникают корреляционные копии с шагом 2 032 отсчёта. Те же ограничения применены к 22 внутренним окнам с низкой корреляцией. Низкая корреляция сама по себе отмечает локальную аномалию, но без надёжной временной привязки не определяет underrun. + +Ухудшение относительно Lab056 B наблюдается у всех 16 пакетов по трём общим показателям: доле ошибочных символов, EVM и отношению согласованной составляющей к остатку. При этом пакеты 3, 4, 12 и 13 дополнительно выделяются всплесками AC-мощности и остатка. Пакет 14 такого общего физического признака не имеет. + +- `PACKETS MOST AFFECTED = 13, 4, 12, 3` +- `LAB062 QUALITY DISTRIBUTION = GLOBAL` +- `PRIMARY CAUSE STATUS = PARTIALLY_LOCALIZED` + +Установлено глобальное ухудшение принятого сигнала и отсутствие наблюдаемого временного скачка в надёжных окнах. Точная физическая причина ухудшения и смысл расхождения промежуточного и итогового счётчиков `hackrf_transfer` не установлены. + +## Артефакты + +- `experiments/lab063_tx_underrun_localization.py` +- `tests/test_lab063_tx_underrun_localization.py` +- `data/processed/lab063/summary.json` +- `data/processed/lab063/packet_quality.csv` +- `data/processed/lab063/local_alignment.csv` +- `docs/lab063_offline_result.md` + +Следующий один шаг до нового TX: отдельно согласовать исследование уровня RX, усилений, геометрии и возможной аналоговой компрессии или слишком слабого полезного сигнала. Для будущего повтора также потребуется однозначное журналирование TX underrun и явное добавление запланированных межпакетных пауз. RF-параметры в Lab063 не менялись. diff --git a/docs/lab063_offline_result.md b/docs/lab063_offline_result.md new file mode 100644 index 0000000..4a0ed8f --- /dev/null +++ b/docs/lab063_offline_result.md @@ -0,0 +1,212 @@ +# Lab063: офлайн-локализация TX underrun и ухудшения пакетов Lab062 + +## Что установлено + +Lab062 остаётся аппаратно невалидным опытом: во время единственной передачи журнал показал `1 underruns, longest 16672 bytes`, хотя итоговая строка показала ноль. Офлайн-анализ не нашёл в RX-записи временного скачка, пропуска или повтора ожидаемого масштаба в 221 надёжном внутреннем окне. Локальная задержка в них составляет 0…1 отсчёт. Ещё в 22 внутренних окнах корреляция ниже 0,15, поэтому задержку там установить нельзя. + +Качество сигнала при этом хуже Lab056 B на протяжении всего потока. Все 16 пакетов имеют большую долю ошибочных символов и EVM, а отношение согласованной полезной составляющей к остатку у всех ниже. Пакеты 3, 4, 12 и 13 содержат дополнительные всплески AC-мощности и остатка при почти неизменной TX-согласованной амплитуде. Это указывает на добавочную помеху или искажение, а не на провал полезной несущей в этих пакетах. По сохранённой записи нельзя установить конкретный аппаратный источник. + +Цифровые значения далеки от пределов cs8: по пакетам `max |I| = 3…6`, `max |Q| = 4…7`. Сильная аналоговая перегрузка поэтому менее вероятна. Отсутствие rail clipping не является измерением аналоговой линейности, и без отдельного прибора аналоговую компрессию исключить нельзя. + +Итоговый выбор: **B. `GLOBAL_RF_DEGRADATION`**. Единичный локальный underrun недостаточен для объяснения всего результата, а его положение по RX не локализовано. + +## Целостность и границы анализа + +Анализ выполнен без RF и без опроса аппаратуры: + +- TX SHA-256: `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`; +- RX SHA-256: `ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32`; +- TX: 1 476 096 комплексных отсчётов; +- RX: 24 000 000 комплексных отсчётов; +- сохранённое начало TX в RX: отсчёт 4 256 091; +- `RF TX = 0`; +- аппаратных запросов: 0. + +Поиск использует известный TX только после строгого результата `0/16`; это диагностическая привязка, которая не превращает пакет в принятый и не меняет verdict `legacy` или T2. + +## Фактические паузы между пакетами + +Проверка длины даёт точное равенство: + +`92 256 отсчётов × 16 пакетов = 1 476 096 отсчётов`. + +Следовательно: + +`ACTUAL INTER-PACKET GAP = 0 additional samples = 0 s`. + +Запланированных пауз 5 мс в TX-файле нет. Внутренние защитные интервалы и хвосты RRC, входящие в каждый 92 256-отсчётный waveform, присутствуют. + +Код `prepare()` в `experiments/lab062_full_packet_rf_preflight.py` записывает шестнадцать результатов `build_parameterized_tx_cs8(...)` непосредственно друг за другом. Между вызовами нет параметра паузы, массива нулей или другой операции, которая добавила бы 5 мс. Причина: **ошибка реализации подготовки Lab062**. Возможность сформировать паузы в других генераторах проекта означает, что это не установленное ограничение PHY-генератора. + +## Масштаб сообщения TX underrun + +Для cs8 один комплексный отсчёт занимает два байта: + +| Величина | Значение | +|---|---:| +| Журнал, bytes | 16 672 | +| Комплексные отсчёты | 8 336 | +| Длительность при 8 Мвыб/с | 1,042 мс | +| Символы при 500 ксимв/с | 521 | +| Доля waveform одного пакета | 9,035727 % | + +Это только пересчёт масштаба строки журнала. Он не доказывает фактическую потерю, повтор или замену 8 336 отсчётов в эфире. + +## Локальное сопоставление TX и RX + +TX разбит на окна по 512 символов, то есть по 8 192 отсчёта. Шаг равен 256 символам, или 4 096 отсчётам. Для каждого окна независимо искалось положение в RX в пределах ±12 000 отсчётов, затем вычислялись нормированная корреляция, комплексный коэффициент `h`, его амплитуда и фаза, а также остаточная мощность. + +Повторяющаяся PRBS-преамбула создаёт ложные корреляционные максимумы с периодом 2 032 отсчёта. Поэтому решение о временном скачке использует внутреннюю часть каждого пакета от отсчёта 24 000 до 86 000 и требует корреляцию не ниже 0,15. Края, преамбула и внутренние окна ниже порога остаются в `local_alignment.csv` для проверки, но их выбранная задержка не участвует в verdict. + +| Показатель | Значение | +|---|---:| +| Всего окон | 359 | +| Надёжных окон | 221 | +| Внутренних окон с корреляцией ниже 0,15 | 22 | +| Корреляция, минимум по всем окнам | 0,071665 | +| Корреляция, медиана по всем окнам | 0,265526 | +| Корреляция, максимум по всем окнам | 0,287394 | +| Локальная задержка в надёжных окнах | 0…1 отсчёт | +| Кандидаты на скачок | 0 | + +- `UNDERRUN LOCATION = NOT_LOCALIZED_FROM_RX` +- `LOCAL DELAY DISCONTINUITY = NO IN 221 RELIABLE WINDOWS; UNDETERMINED IN 22 INTERNAL LOW-CORRELATION WINDOWS` + +Внутренние окна с низкой корреляцией распределены так: + +- пакет 3: 5 окон, позиции 69 440…85 824 отсчёта внутри пакета; +- пакет 4: 7 окон, позиции 26 336…46 816 и 55 008 отсчётов; +- пакет 12: 7 окон, позиции 58 336…82 912 отсчётов; +- пакет 13: 3 окна, позиции 27 520…35 712 отсчёта. + +Низкая корреляция совпадает с пакетами, где выросли AC-мощность и остаток. Она подтверждает локальные участки сильного искажения. Без надёжной оценки задержки эти участки не доказывают пропуск или повтор отсчётов и не локализуют TX underrun. + +Поиск не подгонялся под ожидаемые 8 336 отсчётов. Он способен обнаружить синтетически вставленный скачок и проверяет переходы между пакетами; оба свойства закрыты отдельными тестами. + +## Качество пакетов 1–16 + +`raw` означает полную принятую мощность вместе с DC. `useful` в таблице означает AC-мощность пакета после вычитания средней фоновой AC-мощности до и после потока. Это избыточная над фоном мощность, а не доказанная мощность только полезного TX-сигнала. `M/R` означает отношение TX-согласованной составляющей к остатку. Остаток включает шум, помехи, искажения канала и возможное влияние underrun. + +| № | raw, код² | useful, код² | SER, % | EVM RMS | matched / residual, код² | M/R, дБ | ripple, дБ | CFO, Гц | phase, рад | +|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| +| 1 | 4,900592 | 0,062620 | 8,517888 | 1,088322 | 0,707513 / 0,838011 | -0,735151 | 6,642520 | +1,007302 | 5,396055 | +| 2 | 4,865147 | 0,056422 | 9,795571 | 1,104921 | 0,670874 / 0,819037 | -0,866627 | 6,598551 | +1,641699 | 0,911620 | +| 3 | 6,015186 | 1,184291 | 10,221465 | 1,357844 | 0,618128 / 1,139667 | -2,656997 | 7,370969 | -0,961988 | 0,917422 | +| 4 | 8,462127 | 3,605520 | 15,587734 | 1,663418 | 0,694253 / 1,920969 | -4,420028 | 10,617549 | +2,584550 | 5,388297 | +| 5 | 4,954615 | 0,062684 | 8,986371 | 1,099196 | 0,702182 / 0,848399 | -0,821507 | 6,409726 | -1,235846 | 0,834217 | +| 6 | 4,919648 | 0,053559 | 7,580920 | 1,102402 | 0,644466 / 0,783214 | -0,846803 | 6,364293 | -1,779543 | 5,318132 | +| 7 | 4,958322 | 0,059386 | 8,390119 | 1,100152 | 0,681935 / 0,825370 | -0,829054 | 6,236828 | -0,248409 | 1,461754 | +| 8 | 4,913306 | 0,063207 | 8,262351 | 1,149257 | 0,638148 / 0,842861 | -1,208345 | 6,714921 | -1,078363 | 0,781772 | +| 9 | 4,886956 | 0,065556 | 8,943782 | 1,141831 | 0,658122 / 0,858045 | -1,152037 | 6,809132 | +0,832282 | 1,073865 | +| 10 | 4,915355 | 0,067571 | 8,347530 | 1,092396 | 0,697137 / 0,831913 | -0,767600 | 6,678161 | -1,337873 | 0,770315 | +| 11 | 4,919918 | 0,072081 | 8,049404 | 1,085344 | 0,688251 / 0,810740 | -0,711347 | 6,630624 | +1,139696 | 0,886944 | +| 12 | 6,800707 | 1,948029 | 12,819421 | 1,456604 | 0,631331 / 1,339491 | -3,266829 | 7,945032 | -0,158710 | 1,085095 | +| 13 | 7,571594 | 2,728649 | 16,013629 | 1,542472 | 0,670672 / 1,595675 | -3,764344 | 9,871896 | -3,768748 | 1,477869 | +| 14 | 4,931040 | 0,060762 | 9,454855 | 1,125042 | 0,631853 / 0,799750 | -1,023377 | 6,450866 | +0,071570 | 0,850015 | +| 15 | 4,914640 | 0,056175 | 9,284497 | 1,156613 | 0,648517 / 0,867557 | -1,263765 | 7,550267 | +0,636870 | 5,326811 | +| 16 | 4,976760 | 0,059023 | 8,603066 | 1,063657 | 0,702947 / 0,795290 | -0,536031 | 6,391673 | +1,336558 | 0,741441 | + +Полные значения, включая локальную задержку, корреляцию, `|h|`, DC и разности относительно Lab056 B, находятся в `data/processed/lab063/packet_quality.csv`. + +## Уровень RX и DC во время передачи + +Средняя фоновая AC-мощность соседних окон равна 0,525282 код², что соответствует AC RMS 0,724764 кода. На RX-only preflight было 0,985483 кода AC RMS. + +| № | RMS full | AC RMS | mean I | mean Q | max \|I\| | max \|Q\| | max \|IQ\| | +|---:|---:|---:|---:|---:|---:|---:|---:| +| 1 | 2,213728 | 0,766748 | 0,969270 | 1,836629 | 3 | 4 | 4,472136 | +| 2 | 2,205708 | 0,762695 | 0,967753 | 1,829453 | 3 | 4 | 4,472136 | +| 3 | 2,452588 | 1,307507 | 0,970094 | 1,834266 | 6 | 7 | 7,211102 | +| 4 | 2,908974 | 2,032438 | 0,960349 | 1,846362 | 6 | 7 | 7,615773 | +| 5 | 2,225897 | 0,766789 | 0,964512 | 1,853744 | 3 | 4 | 4,242640 | +| 6 | 2,218028 | 0,760816 | 0,968934 | 1,844444 | 3 | 4 | 4,472136 | +| 7 | 2,226729 | 0,764636 | 0,963515 | 1,856150 | 3 | 4 | 4,472136 | +| 8 | 2,216598 | 0,767131 | 0,958919 | 1,845343 | 3 | 4 | 4,472136 | +| 9 | 2,210646 | 0,768660 | 0,954128 | 1,840043 | 3 | 4 | 4,472136 | +| 10 | 2,217060 | 0,769969 | 0,947830 | 1,850438 | 3 | 4 | 4,242640 | +| 11 | 2,218089 | 0,772893 | 0,943039 | 1,852898 | 3 | 4 | 4,472136 | +| 12 | 2,607816 | 1,572676 | 0,954995 | 1,848075 | 6 | 7 | 8,062258 | +| 13 | 2,751653 | 1,803866 | 0,952307 | 1,846828 | 6 | 7 | 7,810249 | +| 14 | 2,220594 | 0,765535 | 0,952166 | 1,854286 | 3 | 4 | 4,472136 | +| 15 | 2,216899 | 0,762534 | 0,949651 | 1,852389 | 3 | 4 | 4,472136 | +| 16 | 2,230865 | 0,764399 | 0,956903 | 1,864616 | 3 | 4 | 4,472136 | + +DC стабилен: `mean I = 0,943039…0,970094`, `mean Q = 1,829453…1,864616`. Ступени AC-амплитуды есть в пакетах 3, 4, 12 и 13. При этом медиана локального `|h|` по пакетам меняется только от 0,004488 до 0,004805. Рост полной AC-мощности в этих пакетах создаёт главным образом остаток, а не согласованный полезный компонент. + +## Пакеты 3, 4, 12 и 14 + +У четырёх ранее отмеченных пакетов нет общего признака underrun: + +- у всех четырёх нет скачка задержки; +- у них нет общего провала мощности; +- у них нет общей потери локальной корреляции; +- пакет 14 близок к обычным пакетам по AC RMS, SER, EVM и неравномерности полосы; +- пакеты 3, 4 и 12 имеют всплески AC-мощности и остатка; аналогичный, ещё более выраженный всплеск есть у пакета 13. + +Поэтому связывать набор `3, 4, 12, 14` с одним TX underrun оснований нет. По сводному ранжированию наиболее повреждены пакеты `13, 4, 12, 3`. + +## Тренд по четвертям потока + +| Пакеты | useful, среднее код² | SER, % | EVM RMS | matched, код² | residual, код² | M/R, дБ | CFO, Гц | phase error, рад | local phase span, рад | медиана \|h\| | +|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| +| 1–4 | 1,227213 | 11,030664 | 1,303626 | 0,672692 | 1,179421 | -2,169701 | +1,067891 | 3,153349 | 0,117419 | 0,004637 | +| 5–8 | 0,059709 | 8,304940 | 1,112752 | 0,666683 | 0,824961 | -0,926427 | -1,085540 | 2,098969 | 0,150020 | 0,004608 | +| 9–12 | 0,538309 | 9,540034 | 1,194044 | 0,668710 | 0,960047 | -1,474453 | +0,118849 | 0,954055 | 0,128511 | 0,004658 | +| 13–16 | 0,726152 | 10,839012 | 1,221946 | 0,663497 | 1,014568 | -1,646879 | -0,430938 | 2,099034 | 0,098633 | 0,004536 | + +Согласованная составляющая и локальный коэффициент передачи стабильны по четвертям. Средний локальный фазовый размах лежит в пределах 0,098633…0,150020 рад; последовательного роста к концу потока нет. Остаток и SER меняются вместе со всплесками избыточной мощности. Базовое качество всех четвертей хуже Lab056 B. + +## Сравнение с Lab056 B + +| Метрика | Lab056 B | Lab062, диапазон пакетов | Результат | +|---|---:|---:|---| +| SER | 3,495896 % | 7,580920…16,013629 % | все 16 хуже | +| EVM RMS | 0,845350 | 1,063657…1,663418 | все 16 хуже | +| Matched/residual | +1,464846 дБ | -4,420028…-0,536031 дБ | все 16 хуже | +| Неравномерность полосы | 5,471382 дБ | 6,236828…10,617549 дБ | все 16 хуже | + +Ухудшение не ограничено одним пакетом или коротким участком. Локальный TX-согласованный gain не показывает потери длиной около 8 336 отсчётов. Поэтому наблюдавшийся TX underrun остаётся достаточной причиной признать Lab062 невалидной, но не является достаточным объяснением глобально худшего качества. + +## Смысл счётчиков `hackrf_transfer` + +Сохранены обе строки: + +- промежуточная: `1 underruns, longest 16672 bytes`; +- итоговая: `0 underruns, longest 0 bytes`. + +В локальной установке исходный файл `hackrf_transfer.c` и документация с описанием сброса этих счётчиков не найдены. В бинарном файле обнаружены только строки формата статистики. Поэтому: + +`COUNTER SEMANTICS = NOT_ESTABLISHED`. + +Нулевая итоговая строка не отменяет ненулевое промежуточное наблюдение. Причину расхождения без исходного кода используемой версии придумывать нельзя. + +## Графики и машинные результаты + +- [Локальная задержка](../data/processed/lab063/local_delay_vs_time.png) +- [Нормированная корреляция](../data/processed/lab063/normalized_correlation_vs_time.png) +- [Амплитуда коэффициента передачи](../data/processed/lab063/gain_vs_time.png) +- [Фаза коэффициента передачи](../data/processed/lab063/phase_vs_time.png) +- [Принятая мощность по пакетам](../data/processed/lab063/received_power_by_packet.png) +- [SER по пакетам](../data/processed/lab063/symbol_error_rate_by_packet.png) +- [Matched/residual по пакетам](../data/processed/lab063/matched_residual_by_packet.png) +- [Сравнение Lab056 B и Lab062](../data/processed/lab063/lab056_b_vs_lab062_packets.png) +- [Сводка JSON](../data/processed/lab063/summary.json) +- [Качество пакетов CSV](../data/processed/lab063/packet_quality.csv) +- [Локальное сопоставление CSV](../data/processed/lab063/local_alignment.csv) + +## Инженерный вывод + +`LAB062 QUALITY DISTRIBUTION = GLOBAL`. + +`PRIMARY CAUSE STATUS = PARTIALLY_LOCALIZED`. + +Найдена ошибка подготовки TX: обещанные межпакетные паузы не были записаны. Подтверждено глобальное ухудшение относительно Lab056 B и отдельные всплески помехи или искажения. Положение underrun и точная физическая причина общего ухудшения не установлены. + +`NEXT SINGLE STEP = до нового TX отдельно исследовать уровень RX, усиления, геометрию и возможную аналоговую компрессию либо слишком слабый полезный сигнал; будущий TX-процесс должен иметь явные паузы и однозначное журналирование underrun`. + +Новый RF-сеанс требует отдельного разрешения. В рамках Lab063 параметры PHY, приёмник, усиления и частота не менялись. + +- `RF TX = 0` +- `LAB063 COMMIT = NOT PERFORMED` +- `PUSH = NOT PERFORMED` +- `LAB064 = NOT CREATED` diff --git a/experiments/lab063_tx_underrun_localization.py b/experiments/lab063_tx_underrun_localization.py new file mode 100644 index 0000000..1648c21 --- /dev/null +++ b/experiments/lab063_tx_underrun_localization.py @@ -0,0 +1,567 @@ +"""Lab063: офлайн-локализация TX underrun и ухудшения качества Lab062.""" + +from __future__ import annotations + +from dataclasses import dataclass +import csv +import json +import math +from pathlib import Path +import re +import sys + +if __package__ in (None, ""): + sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +import matplotlib.pyplot as plt +import numpy as np +from scipy import signal + +from experiments import lab058_abab_symbol_quality as lab058 +from experiments import lab062_full_packet_rf_preflight as lab062 + + +ROOT = Path(__file__).resolve().parents[1] +RAW = ROOT / "data/raw/lab062" +LAB062 = ROOT / "data/processed/lab062" +OUTPUT = ROOT / "data/processed/lab063" +TX_PATH = RAW / "tx_stream.cs8" +RX_PATH = RAW / "rx_stream.cs8" +FRAME_SAMPLES = 92_256 +PACKETS = 16 +SAMPLE_RATE = 8_000_000 +SYMBOL_RATE = 500_000 +WINDOW_SYMBOLS = 512 +WINDOW_SAMPLES = WINDOW_SYMBOLS * (SAMPLE_RATE // SYMBOL_RATE) +STEP_SYMBOLS = 256 +STEP_SAMPLES = STEP_SYMBOLS * (SAMPLE_RATE // SYMBOL_RATE) +SEARCH_MARGIN_SAMPLES = 12_000 +MIN_LOCAL_CORRELATION = 0.15 +RELIABLE_PACKET_START = 24_000 +RELIABLE_PACKET_END = 86_000 +LAB056_B = { + "symbol_error_rate": 0.03495896, + "evm_rms": 0.845350, + "matched_residual_db": 1.464846, + "band_ripple_db": 5.471382, +} + + +@dataclass(frozen=True) +class ArrayReader: + """Минимальный интерфейс чтения для автономных проверок алгоритма.""" + + values: np.ndarray + + @property + def size(self) -> int: + return int(len(self.values)) + + def read(self, start: int, count: int) -> np.ndarray: + return np.asarray(self.values[start:start + count], dtype=np.complex64) + + +def underrun_scale(byte_count: int = 16_672) -> dict: + if type(byte_count) is not int or byte_count <= 0 or byte_count % 2: + raise ValueError("Размер cs8 underrun должен быть положительным чётным числом байт") + samples = byte_count // 2 + duration = samples / SAMPLE_RATE + symbols = samples * SYMBOL_RATE / SAMPLE_RATE + return { + "bytes": byte_count, + "complex_samples": samples, + "duration_seconds": duration, + "duration_milliseconds": duration * 1000, + "symbols": symbols, + "fraction_of_packet": samples / FRAME_SAMPLES, + "percent_of_packet": 100 * samples / FRAME_SAMPLES, + "interpretation": "Scale only; RX does not prove that this many RF samples were lost or repeated", + } + + +def actual_gap() -> dict: + metadata = json.loads((RAW / "tx_metadata.json").read_text(encoding="utf-8")) + total = int(metadata["tx_samples"]) + expected = FRAME_SAMPLES * PACKETS + return { + "tx_samples": total, + "packets": PACKETS, + "packet_waveform_samples": FRAME_SAMPLES, + "packet_product_samples": expected, + "identity_confirmed": total == expected, + "additional_inter_packet_gap_samples": total - expected, + "additional_inter_packet_gap_seconds": (total - expected) / SAMPLE_RATE, + "actual": "0 additional samples (no planned 5 ms gaps)", + "reason": ( + "IMPLEMENTATION_OMISSION: prepare() writes the 16 complete packet waveforms " + "back-to-back and has no gap parameter or zero-fill operation" + ), + "packet_internal_note": "Each packet waveform still contains its own guards and RRC tails", + } + + +def normalized_match(transmitted: np.ndarray, search: np.ndarray) -> dict: + """Найти локальный участок RX с нормировкой по AC-энергии каждого положения.""" + transmitted = np.asarray(transmitted, dtype=np.complex128) + search = np.asarray(search, dtype=np.complex128) + if transmitted.ndim != 1 or search.ndim != 1 or len(search) < len(transmitted): + raise ValueError("Нужны одномерные TX и более длинное RX-окно") + centered_tx = transmitted - np.mean(transmitted) + tx_energy = float(np.vdot(centered_tx, centered_tx).real) + if tx_energy <= 0: + raise ValueError("TX-окно не содержит AC-энергии") + correlation = signal.correlate(search, centered_tx, mode="valid", method="fft") + count = len(centered_tx) + kernel = np.ones(count, dtype=np.float64) + sums = signal.fftconvolve(search, kernel, mode="valid") + powers = signal.fftconvolve(abs(search) ** 2, kernel, mode="valid") + rx_energies = np.maximum(powers - abs(sums) ** 2 / count, 0.0) + normalized = abs(correlation) / np.sqrt(np.maximum(tx_energy * rx_energies, 1e-30)) + best = int(np.argmax(normalized)) + centered_rx = search[best:best + count] - np.mean(search[best:best + count]) + gain = complex(np.vdot(centered_tx, centered_rx) / tx_energy) + residual = centered_rx - gain * centered_tx + return { + "offset": best, + "normalized_correlation": float(normalized[best]), + "gain": gain, + "gain_amplitude": float(abs(gain)), + "phase_rad": float(np.angle(gain)), + "residual_power": float(np.mean(abs(residual) ** 2)), + "rx_ac_power": float(np.mean(abs(centered_rx) ** 2)), + } + + +def track_alignment(tx, rx, rx_start: int, *, frame_samples: int = FRAME_SAMPLES, + window_samples: int = WINDOW_SAMPLES, + step_samples: int = STEP_SAMPLES, + search_margin: int = SEARCH_MARGIN_SAMPLES, + reliable_packet_start: int = RELIABLE_PACKET_START, + reliable_packet_end: int = RELIABLE_PACKET_END) -> list[dict]: + """Сопоставить короткие перекрывающиеся TX-окна с RX независимо по времени.""" + rows = [] + for tx_start in range(0, tx.size - window_samples + 1, step_samples): + expected_rx = rx_start + tx_start + low = max(0, expected_rx - search_margin) + high = min(rx.size, expected_rx + search_margin + window_samples) + match = normalized_match(tx.read(tx_start, window_samples), rx.read(low, high - low)) + matched_rx = low + match.pop("offset") + packet = min(PACKETS, tx_start // frame_samples + 1) + position_inside_packet = tx_start - (packet - 1) * frame_samples + inside_reliable_region = reliable_packet_start <= position_inside_packet <= reliable_packet_end + correlation_above_threshold = match["normalized_correlation"] >= MIN_LOCAL_CORRELATION + rows.append({ + "window_index": len(rows), + "tx_sample": tx_start, + "rx_sample": matched_rx, + "time_seconds": tx_start / SAMPLE_RATE, + "local_delay_samples": matched_rx - expected_rx, + "packet_index": packet, + "position_inside_packet_samples": position_inside_packet, + "inside_reliable_region": inside_reliable_region, + "correlation_above_threshold": correlation_above_threshold, + "reliable_for_delay": inside_reliable_region and correlation_above_threshold, + **match, + }) + return rows + + +def alignment_verdict(rows: list[dict], expected_jump: int) -> dict: + valid = [row for row in rows if row.get("reliable_for_delay") is True] + internal_low_correlation = [ + row for row in rows + if row.get("inside_reliable_region") is True + and row.get("correlation_above_threshold") is False + ] + jumps = [] + for left, right in zip(valid, valid[1:]): + change = right["local_delay_samples"] - left["local_delay_samples"] + if abs(change) >= max(256, expected_jump // 4): + jumps.append({ + "left_window": left["window_index"], "right_window": right["window_index"], + "tx_sample": right["tx_sample"], "rx_sample": right["rx_sample"], + "packet_index": right["packet_index"], + "position_inside_packet_samples": right["position_inside_packet_samples"], + "delay_change_samples": change, + "left_correlation": left["normalized_correlation"], + "right_correlation": right["normalized_correlation"], + }) + delays = np.asarray([row["local_delay_samples"] for row in valid], dtype=np.float64) + correlations = np.asarray([row["normalized_correlation"] for row in rows], dtype=np.float64) + return { + "valid_windows": len(valid), + "total_windows": len(rows), + "minimum_correlation": float(np.min(correlations)), + "median_correlation": float(np.median(correlations)), + "maximum_correlation": float(np.max(correlations)), + "delay_min_samples": int(np.min(delays)) if len(delays) else None, + "delay_median_samples": float(np.median(delays)) if len(delays) else None, + "delay_max_samples": int(np.max(delays)) if len(delays) else None, + "jump_candidates": jumps, + "local_delay_discontinuity": bool(jumps), + "local_delay_discontinuity_scope": ( + f"NO_IN_{len(valid)}_RELIABLE_WINDOWS; " + f"UNDETERMINED_IN_{len(internal_low_correlation)}_INTERNAL_LOW_CORRELATION_WINDOWS" + if not jumps else "DETECTED_IN_RELIABLE_WINDOWS" + ), + "underrun_location": "NOT_LOCALIZED_FROM_RX" if not jumps else jumps[0], + "reliable_region_inside_packet_samples": [RELIABLE_PACKET_START, RELIABLE_PACKET_END], + "correlation_threshold": MIN_LOCAL_CORRELATION, + "internal_low_correlation_windows": { + "count": len(internal_low_correlation), + "packet_counts": { + str(packet): sum(row["packet_index"] == packet for row in internal_low_correlation) + for packet in sorted({row["packet_index"] for row in internal_low_correlation}) + }, + "windows": [ + { + "window_index": row["window_index"], + "packet_index": row["packet_index"], + "tx_sample": row["tx_sample"], + "rx_sample_selected_but_not_used_for_delay_verdict": row["rx_sample"], + "position_inside_packet_samples": row["position_inside_packet_samples"], + "normalized_correlation": row["normalized_correlation"], + } + for row in internal_low_correlation + ], + "interpretation": ( + "Delay is not established in these windows; low correlation is itself a local anomaly, " + "but it does not identify an underrun without a reliable timing discontinuity" + ), + }, + "excluded_region_reason": ( + "Packet edges and repeated PRBS preamble have correlation aliases spaced by 2032 samples; " + "22 additional internal windows are below the 0.15 correlation threshold. All are retained " + "in CSV, and delay is not asserted for any excluded window" + ), + } + + +def moments(values: np.ndarray) -> dict: + values = np.asarray(values) + mean = complex(np.mean(values, dtype=np.complex128)) + power = float(np.mean(abs(values.astype(np.complex128)) ** 2)) + ac_power = max(0.0, power - abs(mean) ** 2) + return { + "raw_power_code2": power, + "rms_full_iq_code": math.sqrt(power), + "mean_i": float(mean.real), "mean_q": float(mean.imag), + "ac_power_code2": ac_power, "ac_rms_code": math.sqrt(ac_power), + "max_abs_i": float(np.max(abs(values.real))), + "max_abs_q": float(np.max(abs(values.imag))), + "max_complex_magnitude": float(np.max(abs(values))), + } + + +def packet_quality(tx, rx, rx_start: int, background_ac_power: float, + lab062_analysis: dict, alignment: list[dict]) -> list[dict]: + rows = [] + physical = lab062_analysis["lab058_quality"]["packets"] + for index in range(1, PACKETS + 1): + values = rx.read(rx_start + (index - 1) * FRAME_SAMPLES, FRAME_SAMPLES) + level = moments(values) + metrics = physical[index - 1]["oracle"]["metrics"] + channel = physical[index - 1]["channel"] + local = [row for row in alignment if row["packet_index"] == index and row["reliable_for_delay"]] + phases = np.unwrap([row["phase_rad"] for row in local]) if local else np.empty(0) + row = { + "packet_index": index, + **level, + "background_ac_power_code2": background_ac_power, + "background_subtracted_useful_power_code2": max(0.0, level["ac_power_code2"] - background_ac_power), + "symbol_error_rate": metrics["ber"], + "symbol_rms_deviation": metrics["evm_rms"], + "matched_component_power": metrics["matched_component_power"], + "residual_power": metrics["residual_power"], + "matched_residual_db": metrics["matched_residual_db"], + "band_gain_nonuniformity_db": channel["amplitude_ripple_p95_p05_db"], + "initial_frequency_hz": physical[index - 1]["oracle"]["cfo_hz"], + "diagnostic_residual_phase_error_rad": channel["residual_phase_ripple_p95_p05_rad"], + "local_delay_median_samples": float(np.median([item["local_delay_samples"] for item in local])), + "local_delay_min_samples": int(min(item["local_delay_samples"] for item in local)), + "local_delay_max_samples": int(max(item["local_delay_samples"] for item in local)), + "local_correlation_median": float(np.median([item["normalized_correlation"] for item in local])), + "local_correlation_min": float(min(item["normalized_correlation"] for item in local)), + "local_gain_amplitude_median": float(np.median([item["gain_amplitude"] for item in local])), + "local_phase_unwrapped_span_rad": float(np.ptp(phases)) if len(phases) else None, + "ser_minus_lab056_b": metrics["ber"] - LAB056_B["symbol_error_rate"], + "evm_minus_lab056_b": metrics["evm_rms"] - LAB056_B["evm_rms"], + "matched_residual_minus_lab056_b_db": metrics["matched_residual_db"] - LAB056_B["matched_residual_db"], + "ripple_minus_lab056_b_db": channel["amplitude_ripple_p95_p05_db"] - LAB056_B["band_ripple_db"], + } + rows.append(row) + return rows + + +def group_trends(rows: list[dict]) -> list[dict]: + result = [] + for low in (1, 5, 9, 13): + selected = rows[low - 1:low + 3] + result.append({ + "packets": f"{low}-{low + 3}", + "useful_power_mean": float(np.mean([row["background_subtracted_useful_power_code2"] for row in selected])), + "symbol_error_rate_mean": float(np.mean([row["symbol_error_rate"] for row in selected])), + "symbol_rms_deviation_mean": float(np.mean([row["symbol_rms_deviation"] for row in selected])), + "matched_component_power_mean": float(np.mean([row["matched_component_power"] for row in selected])), + "residual_power_mean": float(np.mean([row["residual_power"] for row in selected])), + "matched_residual_db_mean": float(np.mean([row["matched_residual_db"] for row in selected])), + "initial_frequency_hz_mean": float(np.mean([row["initial_frequency_hz"] for row in selected])), + "diagnostic_residual_phase_error_rad_mean": float(np.mean( + [row["diagnostic_residual_phase_error_rad"] for row in selected] + )), + "local_phase_unwrapped_span_rad_mean": float(np.mean( + [row["local_phase_unwrapped_span_rad"] for row in selected] + )), + "local_gain_amplitude_median": float(np.median([row["local_gain_amplitude_median"] for row in selected])), + }) + return result + + +def classify(packet_rows: list[dict], alignment: dict) -> dict: + worse = [ + row for row in packet_rows + if row["symbol_error_rate"] > LAB056_B["symbol_error_rate"] + and row["symbol_rms_deviation"] > LAB056_B["evm_rms"] + and row["matched_residual_db"] < LAB056_B["matched_residual_db"] + ] + global_degradation = len(worse) >= 12 + discontinuity = alignment["local_delay_discontinuity"] + if discontinuity and global_degradation: + distribution, primary = "MIXED", "PARTIALLY_LOCALIZED" + elif discontinuity: + distribution, primary = "LOCALIZED", "PARTIALLY_LOCALIZED" + elif global_degradation: + distribution, primary = "GLOBAL", "PARTIALLY_LOCALIZED" + else: + distribution, primary = "NOT_LOCALIZED", "NOT_LOCALIZED" + return { + "quality_distribution": distribution, + "primary_cause_status": primary, + "packets_worse_than_lab056_on_ser_evm_and_matched_residual": [row["packet_index"] for row in worse], + "global_degradation_rule": "at least 12/16 packets worse than Lab056 B on SER, EVM and matched/residual", + "global_degradation": global_degradation, + "local_delay_discontinuity": discontinuity, + } + + +def write_csv(path: Path, rows: list[dict]) -> None: + with path.open("w", newline="", encoding="utf-8-sig") as stream: + writer = csv.DictWriter(stream, fieldnames=list(rows[0])) + writer.writeheader() + for row in rows: + writer.writerow({key: (json.dumps(value) if isinstance(value, (dict, list)) else value) + for key, value in row.items()}) + + +def plots(alignment: list[dict], packets: list[dict]) -> None: + OUTPUT.mkdir(parents=True, exist_ok=True) + time_ms = np.asarray([row["time_seconds"] * 1000 for row in alignment]) + packet_indexes = np.arange(1, PACKETS + 1) + + def line(name: str, values, ylabel: str, title: str) -> None: + figure, axis = plt.subplots(figsize=(9, 4.5)) + axis.plot(time_ms, values, linewidth=1.2) + axis.set(xlabel="Время TX, мс", ylabel=ylabel, title=title) + axis.grid(True, alpha=0.3); figure.tight_layout() + figure.savefig(OUTPUT / name, dpi=160); plt.close(figure) + + figure, axis = plt.subplots(figsize=(9, 4.5)) + unreliable = [row for row in alignment if not row["reliable_for_delay"]] + reliable = [row for row in alignment if row["reliable_for_delay"]] + axis.scatter([row["time_seconds"] * 1000 for row in unreliable], + [row["local_delay_samples"] for row in unreliable], s=7, alpha=0.25, + label="исключено: края, преамбула или низкая корреляция") + axis.plot([row["time_seconds"] * 1000 for row in reliable], + [row["local_delay_samples"] for row in reliable], linewidth=1.2, + label="надёжная внутренняя часть") + axis.set(xlabel="Время TX, мс", ylabel="Локальная задержка, отсчёты", + title="Локальная временная привязка TX и RX") + axis.grid(True, alpha=0.3); axis.legend(); figure.tight_layout() + figure.savefig(OUTPUT / "local_delay_vs_time.png", dpi=160); plt.close(figure) + line("normalized_correlation_vs_time.png", [row["normalized_correlation"] for row in alignment], + "Нормированная корреляция", "Устойчивость локального сопоставления") + reliable_time_ms = np.asarray([row["time_seconds"] * 1000 for row in reliable]) + figure, axis = plt.subplots(figsize=(9, 4.5)) + axis.plot(reliable_time_ms, [row["gain_amplitude"] for row in reliable], linewidth=1.2) + axis.set(xlabel="Время TX, мс", ylabel="|h|, коды RX / код TX", + title="Локальная амплитуда канала в надёжных окнах") + axis.grid(True, alpha=0.3); figure.tight_layout() + figure.savefig(OUTPUT / "gain_vs_time.png", dpi=160); plt.close(figure) + figure, axis = plt.subplots(figsize=(9, 4.5)) + phase = np.unwrap([row["phase_rad"] for row in reliable]) + axis.plot(reliable_time_ms, phase, linewidth=1.2) + axis.set(xlabel="Время TX, мс", ylabel="Развёрнутая фаза, рад", + title="Локальная фаза канала в надёжных окнах") + axis.grid(True, alpha=0.3); figure.tight_layout() + figure.savefig(OUTPUT / "phase_vs_time.png", dpi=160); plt.close(figure) + + def bars(name: str, values, ylabel: str, title: str, baseline=None) -> None: + figure, axis = plt.subplots(figsize=(9, 4.5)) + axis.bar(packet_indexes, values) + if baseline is not None: + axis.axhline(baseline, color="tab:red", linestyle="--", label="Lab056 B") + axis.legend() + axis.set(xlabel="Номер пакета", ylabel=ylabel, title=title, xticks=packet_indexes) + axis.grid(True, axis="y", alpha=0.3); figure.tight_layout() + figure.savefig(OUTPUT / name, dpi=160); plt.close(figure) + + bars("received_power_by_packet.png", [row["background_subtracted_useful_power_code2"] for row in packets], + "Полезная AC-мощность, код²", "Принятая мощность по пакетам") + bars("symbol_error_rate_by_packet.png", [100 * row["symbol_error_rate"] for row in packets], + "Ошибочные символы, %", "Диагностическая SER по пакетам", 100 * LAB056_B["symbol_error_rate"]) + bars("matched_residual_by_packet.png", [row["matched_residual_db"] for row in packets], + "Matched/residual, дБ", "Полезная согласованная составляющая к остатку", LAB056_B["matched_residual_db"]) + + figure, axes = plt.subplots(2, 2, figsize=(11, 7)) + comparisons = [ + ("SER, %", [100 * row["symbol_error_rate"] for row in packets], 100 * LAB056_B["symbol_error_rate"]), + ("EVM RMS", [row["symbol_rms_deviation"] for row in packets], LAB056_B["evm_rms"]), + ("Matched/residual, дБ", [row["matched_residual_db"] for row in packets], LAB056_B["matched_residual_db"]), + ("Неравномерность, дБ", [row["band_gain_nonuniformity_db"] for row in packets], LAB056_B["band_ripple_db"]), + ] + for axis, (label, values, baseline) in zip(axes.flat, comparisons): + axis.bar(packet_indexes, values); axis.axhline(baseline, color="tab:red", linestyle="--") + axis.set(xlabel="Пакет", ylabel=label, xticks=packet_indexes); axis.grid(True, axis="y", alpha=0.3) + figure.suptitle("Lab056 B и пакеты Lab062"); figure.tight_layout() + figure.savefig(OUTPUT / "lab056_b_vs_lab062_packets.png", dpi=160); plt.close(figure) + + +def local_counter_semantics() -> dict: + binary = Path(r"C:\Users\user\Tools\HackRF\Library\bin\hackrf_transfer.exe") + source_candidates = list(binary.parent.parent.rglob("hackrf_transfer.c")) if binary.parent.parent.exists() else [] + return { + "binary_path": str(binary), "binary_exists": binary.exists(), + "local_source_files": [str(path) for path in source_candidates], + "progress_line": "1 underruns, longest 16672 bytes", + "final_line": "0 underruns, longest 0 bytes", + "counter_semantics": "NOT_ESTABLISHED" if not source_candidates else "LOCAL_SOURCE_REQUIRES_REVIEW", + "note": "No local source or documentation was found that explains the reset between progress and final counters", + } + + +def run() -> dict: + OUTPUT.mkdir(parents=True, exist_ok=True) + lab062_analysis = json.loads((LAB062 / "rf_analysis.json").read_text(encoding="utf-8")) + if lab062_analysis["status"] != "RF_SESSION_INVALID_TX_UNDERRUN": + raise RuntimeError("Lab062 must remain INVALID_TX_UNDERRUN") + tx, rx = lab058.Cs8File(TX_PATH), lab058.Cs8File(RX_PATH) + rx_start = int(lab062_analysis["location"]["rx_start_sample"]) + gap = actual_gap() + if not gap["identity_confirmed"] or gap["additional_inter_packet_gap_samples"] != 0: + raise RuntimeError("Unexpected Lab062 TX accounting") + scale = underrun_scale() + alignment_rows = track_alignment(tx, rx, rx_start) + alignment = alignment_verdict(alignment_rows, scale["complex_samples"]) + + before = moments(rx.read(rx_start - FRAME_SAMPLES, FRAME_SAMPLES)) + after = moments(rx.read(rx_start + tx.size, FRAME_SAMPLES)) + background_ac_power = 0.5 * (before["ac_power_code2"] + after["ac_power_code2"]) + packet_rows = packet_quality(tx, rx, rx_start, background_ac_power, lab062_analysis, alignment_rows) + trends = group_trends(packet_rows) + classification = classify(packet_rows, alignment) + most_affected = sorted( + packet_rows, + key=lambda row: (row["symbol_error_rate"], row["symbol_rms_deviation"], -row["matched_residual_db"]), + reverse=True, + )[:4] + selected = {3, 4, 12, 14} + special = [row for row in packet_rows if row["packet_index"] in selected] + special_common = { + "packets": sorted(selected), + "all_have_power_drop_below_median": all( + row["background_subtracted_useful_power_code2"] < np.median( + [item["background_subtracted_useful_power_code2"] for item in packet_rows] + ) for row in special + ), + "all_have_correlation_below_median": all( + row["local_correlation_median"] < np.median([item["local_correlation_median"] for item in packet_rows]) + for row in special + ), + "all_have_large_delay_change": all( + row["local_delay_max_samples"] - row["local_delay_min_samples"] >= scale["complex_samples"] // 4 + for row in special + ), + "interpretation": "No common underrun signature unless one of all three booleans is true with localized alignment evidence", + } + result = { + "lab": "Lab063", "status": "COMPLETED_OFFLINE", "rf_tx": 0, + "hardware_queries": 0, "lab062_status_preserved": lab062_analysis["status"], + "lab062_commit": "f8ae6c6bfceaa21b6c08dcf55d2bff996dd0dae5", + "physical_device": "Auron HackRF Plus", + "api_firmware_identification": "HackRF One r9", + "integrity": { + "tx_sha256": lab062.sha256(TX_PATH), "rx_sha256": lab062.sha256(RX_PATH), + "tx_samples": tx.size, "rx_samples": rx.size, + }, + "actual_inter_packet_gap": gap, + "tx_underrun_scale": scale, + "tx_underrun_log": local_counter_semantics(), + "background": {"before": before, "after": after, "ac_power_code2_used": background_ac_power, + "preflight_ac_rms_code": 0.9854828456229909}, + "local_alignment": alignment, + "packet_quality": packet_rows, + "group_trends": trends, + "special_packets_3_4_12_14": special_common, + "packets_most_affected": [row["packet_index"] for row in most_affected], + "active_rx_level": { + "ac_rms_min": min(row["ac_rms_code"] for row in packet_rows), + "ac_rms_max": max(row["ac_rms_code"] for row in packet_rows), + "max_abs_i_min": min(row["max_abs_i"] for row in packet_rows), + "max_abs_i_max": max(row["max_abs_i"] for row in packet_rows), + "max_abs_q_min": min(row["max_abs_q"] for row in packet_rows), + "max_abs_q_max": max(row["max_abs_q"] for row in packet_rows), + "mean_i_min": min(row["mean_i"] for row in packet_rows), + "mean_i_max": max(row["mean_i"] for row in packet_rows), + "mean_q_min": min(row["mean_q"] for row in packet_rows), + "mean_q_max": max(row["mean_q"] for row in packet_rows), + "local_gain_amplitude_median_min": min(row["local_gain_amplitude_median"] for row in packet_rows), + "local_gain_amplitude_median_max": max(row["local_gain_amplitude_median"] for row in packet_rows), + "analog_overload": "LESS_LIKELY_FROM_DIGITAL_LEVEL_BUT_NOT_EXCLUDED_WITHOUT_INSTRUMENT", + }, + "lab056_comparison": {"reference": LAB056_B, + "packets_worse_on_all_three_core_metrics": classification["packets_worse_than_lab056_on_ser_evm_and_matched_residual"]}, + **classification, + "next_single_step": ( + "Before another TX, investigate the low active RX level, gain/geometry and possible analogue compression; " + "also change TX streaming/logging so any underrun is unambiguous. Do not change RF parameters yet." + if classification["quality_distribution"] == "GLOBAL" else + "Improve TX streaming and underrun logging before any separately authorized repeat." + ), + "lab063_commit": "NOT_PERFORMED", "push": "NOT_PERFORMED", "lab064": "NOT_CREATED", + } + write_csv(OUTPUT / "local_alignment.csv", alignment_rows) + write_csv(OUTPUT / "packet_quality.csv", packet_rows) + plots(alignment_rows, packet_rows) + (OUTPUT / "summary.json").write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8") + return result + + +def run_functional_tests() -> None: + scale = underrun_scale() + assert scale["complex_samples"] == 8336 + assert abs(scale["duration_milliseconds"] - 1.042) < 1e-12 + assert scale["symbols"] == 521.0 + transmitted = np.exp(1j * np.arange(128) * 0.31) + search = np.concatenate((np.zeros(37, complex), (0.4 + 0.2j) * transmitted, np.zeros(19, complex))) + result = normalized_match(transmitted, search) + assert result["offset"] == 37 and result["normalized_correlation"] > 0.999999 + + +def main() -> None: + result = run() + print(json.dumps({ + "status": result["status"], + "actual_inter_packet_gap": result["actual_inter_packet_gap"], + "tx_underrun_scale": result["tx_underrun_scale"], + "local_alignment": result["local_alignment"], + "packets_most_affected": result["packets_most_affected"], + "active_rx_level": result["active_rx_level"], + "quality_distribution": result["quality_distribution"], + "primary_cause_status": result["primary_cause_status"], + "next_single_step": result["next_single_step"], + "rf_tx": result["rf_tx"], + }, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/tests/test_lab063_tx_underrun_localization.py b/tests/test_lab063_tx_underrun_localization.py new file mode 100644 index 0000000..326dbcb --- /dev/null +++ b/tests/test_lab063_tx_underrun_localization.py @@ -0,0 +1,111 @@ +"""Lab063: автономные проверки локального сопоставления без SDR.""" + +from __future__ import annotations + +import numpy as np + +from experiments import lab063_tx_underrun_localization as lab + + +def test_underrun_scale_is_exact(): + result = lab.underrun_scale(16_672) + assert result["complex_samples"] == 8_336 + assert result["duration_seconds"] == 0.001042 + assert result["symbols"] == 521 + assert np.isclose(result["fraction_of_packet"], 8_336 / 92_256) + + +def test_normalized_match_recovers_offset_gain_and_low_residual(): + random_generator = np.random.default_rng(6301) + transmitted = (random_generator.choice((-1.0, 1.0), 2048) + * np.exp(1j * np.arange(2048) * 0.01)) + gain = 0.35 - 0.2j + search = np.concatenate((np.zeros(321, complex), gain * transmitted, np.zeros(400, complex))) + result = lab.normalized_match(transmitted, search) + assert result["offset"] == 321 + assert result["normalized_correlation"] > 0.999999 + assert abs(result["gain"] - gain) < 1e-12 + assert result["residual_power"] < 1e-20 + + +def test_alignment_localizes_inserted_delay_jump(): + random_generator = np.random.default_rng(6302) + transmitted = random_generator.choice((-1.0, 1.0), 8192).astype(np.complex64) + split, inserted = 4096, 700 + received = np.concatenate((np.zeros(1000), transmitted[:split], np.zeros(inserted), transmitted[split:], np.zeros(1000))) + rows = lab.track_alignment( + lab.ArrayReader(transmitted), lab.ArrayReader(received), 1000, + frame_samples=8192, window_samples=512, step_samples=256, search_margin=1000, + reliable_packet_start=0, reliable_packet_end=8192, + ) + verdict = lab.alignment_verdict(rows, inserted) + assert verdict["local_delay_discontinuity"] + assert any(abs(row["delay_change_samples"]) >= inserted - 1 for row in verdict["jump_candidates"]) + + +def test_alignment_compares_reliable_windows_across_packet_boundary(): + rows = [ + { + "window_index": 4, "tx_sample": 1000, "rx_sample": 2000, + "packet_index": 1, "position_inside_packet_samples": 1000, + "local_delay_samples": 0, "normalized_correlation": 0.9, + "inside_reliable_region": True, "correlation_above_threshold": True, + "reliable_for_delay": True, + }, + { + "window_index": 9, "tx_sample": 9000, "rx_sample": 10700, + "packet_index": 2, "position_inside_packet_samples": 800, + "local_delay_samples": 700, "normalized_correlation": 0.9, + "inside_reliable_region": True, "correlation_above_threshold": True, + "reliable_for_delay": True, + }, + ] + verdict = lab.alignment_verdict(rows, 700) + assert verdict["local_delay_discontinuity"] + assert verdict["jump_candidates"][0]["packet_index"] == 2 + + +def test_alignment_discloses_internal_low_correlation_window(): + rows = [ + { + "window_index": 0, "tx_sample": 1000, "rx_sample": 2000, + "packet_index": 1, "position_inside_packet_samples": 1000, + "local_delay_samples": 0, "normalized_correlation": 0.9, + "inside_reliable_region": True, "correlation_above_threshold": True, + "reliable_for_delay": True, + }, + { + "window_index": 1, "tx_sample": 1256, "rx_sample": 2956, + "packet_index": 1, "position_inside_packet_samples": 1256, + "local_delay_samples": 700, "normalized_correlation": 0.1, + "inside_reliable_region": True, "correlation_above_threshold": False, + "reliable_for_delay": False, + }, + ] + verdict = lab.alignment_verdict(rows, 700) + assert verdict["internal_low_correlation_windows"]["count"] == 1 + assert "UNDETERMINED_IN_1_INTERNAL_LOW_CORRELATION_WINDOWS" in verdict["local_delay_discontinuity_scope"] + assert verdict["local_delay_discontinuity"] is False + + +def test_classification_marks_global_degradation_without_jump(): + packets = [{ + "packet_index": index, + "symbol_error_rate": 0.1, + "symbol_rms_deviation": 1.2, + "matched_residual_db": -1.0, + } for index in range(1, 17)] + result = lab.classify(packets, {"local_delay_discontinuity": False}) + assert result["quality_distribution"] == "GLOBAL" + assert result["primary_cause_status"] == "PARTIALLY_LOCALIZED" + + +def test_classification_marks_mixed_when_jump_and_global_damage_coexist(): + packets = [{ + "packet_index": index, + "symbol_error_rate": 0.1, + "symbol_rms_deviation": 1.2, + "matched_residual_db": -1.0, + } for index in range(1, 17)] + result = lab.classify(packets, {"local_delay_discontinuity": True}) + assert result["quality_distribution"] == "MIXED"