You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #409 gave the library layer an honest per-frame PHY-status story: RxAtrib.physt is the raw descriptor bit on every generation that decodes it, the parse outcome is a PhyStsFill tier, and the library-internal EMAs (_rxq, _rxpaths, _cfo) fold only fields the parser actually claims. The caller-side consumers were left for follow-up, and they still ingest the deterministic zeros that physt=0 A-MPDU subframes now carry (pre-#409 those were random stale bytes; post-#409 they are a systematic bias toward zero):
examples/rx/main.cpp signal consumers are ungated (:911-913 hopset per-slot accumulators, :920-925g_rxagg energy/LinkHealth aggregate, :1136-1146DEVOURER_RX_ALLPATHSrx.path rows). Under aggregated traffic the per-dwell RSSI/SNR means scale down with aggregation depth and snr_min pins to 0, so the FHSS exclusion policy scores a better (more-aggregating) channel as worse, DEVOURER_LINKHEALTH classifies a strong link as weak, and all-zero rx.path vectors inflate measured inter-chain correlation toward 1.0 in antenna-decorrelation runs. The gate is now one field read away.
rx.txhit cannot distinguish "no report" from BCC (examples/rx/main.cpp:1076). ldpc/stbc/bw come only from the PHY-status parse, so a physt=0 subframe deterministically reports ldpc=0/stbc=0 — indistinguishable from a real BCC fallback in encoding-truth-table runs (A-MPDU is opt-in in txdemo, so default regress.py runs are unaffected). Either emit physt in the event or omit ldpc/stbc when there was no report.
examples/chanscout/main.cpp has the same ungated accumulator shape (:83-110): snr_sum/snr_min fold zeros from frames that carried no SNR, biasing survey records on channels with CCK or aggregated traffic.
cell::UeRxAttribution folds snr_raw unconditionally (src/cell/UeRxAttribution.h:97): per-UE SNR windows inherit the same zero-dilution RxQualityAccumulator was cured of in rx: gate PHY-status parsing on the RX-descriptor PHYST bit (Jaguar1/2/3) #409 (snr_min pins to 0, means drag down). Same fix shape: per-metric presence counts.
The last two are the same defect class #409 fixed in RxQualityAccumulator (an SNR sum whose zeros are absence, not measurements) — the fix there (snr_valid + per-metric sample counts) is the template.
Validation note for whoever picks this up: the demo-side bias needs aggregated traffic to show (SetAmpduMode on the TX side); a default regress run will not exercise it.
PR #409 gave the library layer an honest per-frame PHY-status story:
RxAtrib.phystis the raw descriptor bit on every generation that decodes it, the parse outcome is aPhyStsFilltier, and the library-internal EMAs (_rxq,_rxpaths,_cfo) fold only fields the parser actually claims. The caller-side consumers were left for follow-up, and they still ingest the deterministic zeros that physt=0 A-MPDU subframes now carry (pre-#409 those were random stale bytes; post-#409 they are a systematic bias toward zero):examples/rx/main.cppsignal consumers are ungated (:911-913hopset per-slot accumulators,:920-925g_rxaggenergy/LinkHealth aggregate,:1136-1146DEVOURER_RX_ALLPATHSrx.pathrows). Under aggregated traffic the per-dwell RSSI/SNR means scale down with aggregation depth andsnr_minpins to 0, so the FHSS exclusion policy scores a better (more-aggregating) channel as worse,DEVOURER_LINKHEALTHclassifies a strong link as weak, and all-zerorx.pathvectors inflate measured inter-chain correlation toward 1.0 in antenna-decorrelation runs. The gate is now one field read away.rx.txhitcannot distinguish "no report" from BCC (examples/rx/main.cpp:1076).ldpc/stbc/bwcome only from the PHY-status parse, so a physt=0 subframe deterministically reportsldpc=0/stbc=0— indistinguishable from a real BCC fallback in encoding-truth-table runs (A-MPDU is opt-in in txdemo, so defaultregress.pyruns are unaffected). Either emitphystin the event or omitldpc/stbcwhen there was no report.examples/chanscout/main.cpphas the same ungated accumulator shape (:83-110):snr_sum/snr_minfold zeros from frames that carried no SNR, biasing survey records on channels with CCK or aggregated traffic.cell::UeRxAttributionfoldssnr_rawunconditionally (src/cell/UeRxAttribution.h:97): per-UE SNR windows inherit the same zero-dilutionRxQualityAccumulatorwas cured of in rx: gate PHY-status parsing on the RX-descriptor PHYST bit (Jaguar1/2/3) #409 (snr_minpins to 0, means drag down). Same fix shape: per-metric presence counts.The last two are the same defect class #409 fixed in
RxQualityAccumulator(an SNR sum whose zeros are absence, not measurements) — the fix there (snr_valid+ per-metric sample counts) is the template.Validation note for whoever picks this up: the demo-side bias needs aggregated traffic to show (
SetAmpduModeon the TX side); a default regress run will not exercise it.