feat: HDMI-Tool 启动时强制扩展显示拓扑 + 收录波形/注入脚本
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Kingst VIS 3 通道边沿流分段: 按占空比签名分段, 输出各通道占空比
|
||||
# 用法: python la_wave_analyzer3.py <capture.csv> (列: Time[s], ch8, ch9, ch10)
|
||||
import csv, time, statistics
|
||||
|
||||
import sys
|
||||
PATH = sys.argv[1] if len(sys.argv) else r"E:\Hulk-Coding\LT8619C_DLPC3421_HDMI\tools\wave\A1_RGB-SWAP.csv"
|
||||
|
||||
t0 = time.time()
|
||||
rows = []
|
||||
with open(PATH, encoding='utf-8-sig', errors='replace') as f:
|
||||
r = csv.reader(f)
|
||||
hdr = next(r)
|
||||
print('header:', hdr)
|
||||
for row in r:
|
||||
if len(row) < 4:
|
||||
continue
|
||||
rows.append((float(row[0]) * 1e9, int(row[1]), int(row[2]), int(row[3])))
|
||||
n = len(rows)
|
||||
t_last = rows[-1][0] + 1000.0
|
||||
print('rows=%d span=%.2fs' % (n, (t_last - rows[0][0]) / 1e9))
|
||||
|
||||
W = 50_000_000.0
|
||||
wins = []
|
||||
acc = {'t0': rows[0][0], 'hi': [0.0, 0.0, 0.0]}
|
||||
for i in range(n - 1):
|
||||
t, a, b, c = rows[i]
|
||||
dt = min(rows[i + 1][0], t_last) - t
|
||||
if dt <= 0:
|
||||
continue
|
||||
acc['hi'][0] += dt if a else 0.0
|
||||
acc['hi'][1] += dt if b else 0.0
|
||||
acc['hi'][2] += dt if c else 0.0
|
||||
if rows[i + 1][0] - acc['t0'] >= W:
|
||||
span = rows[i + 1][0] - acc['t0']
|
||||
wins.append((acc['t0'], tuple(x / span for x in acc['hi'])))
|
||||
acc = {'t0': rows[i + 1][0], 'hi': [0.0, 0.0, 0.0]}
|
||||
|
||||
|
||||
def sig(d):
|
||||
hi = [x > 0.5 for x in d]
|
||||
return ('D7' if hi[0] else '--') + '/' + ('D15' if hi[1] else '--') + '/' + ('D23' if hi[2] else '--')
|
||||
|
||||
|
||||
segs = []
|
||||
for t, d in wins:
|
||||
s = sig(d)
|
||||
if segs and segs[-1][0] == s:
|
||||
segs[-1][1].append((t, d))
|
||||
else:
|
||||
segs.append((s, [(t, d)]))
|
||||
|
||||
print('\n%-16s %10s %9s %9s %9s' % ('活动组签名', '时长(s)', 'D7占空', 'D15占空', 'D23占空'))
|
||||
for s, ws in segs:
|
||||
dur = ws[-1][0] - ws[0][0]
|
||||
m = [statistics.mean(x[1][k] for x in ws) for k in range(3)]
|
||||
print('%-16s %10.2f %8.1f%% %8.1f%% %8.1f%%' % (s, dur, m[0] * 100, m[1] * 100, m[2] * 100))
|
||||
|
||||
# 每段行结构抽查(第一段一次即可)
|
||||
s0, ws0 = segs[0]
|
||||
ch = 0
|
||||
starts = []
|
||||
seg_t0 = ws0[0][0] - W / 2
|
||||
for j in range(n - 1):
|
||||
t = rows[j][0]
|
||||
if t < seg_t0:
|
||||
continue
|
||||
if rows[j][1] and rows[j + 1][0] - t >= 15000.0:
|
||||
starts.append(t)
|
||||
if len(starts) >= 5 or t > seg_t0 + 0.3e9:
|
||||
break
|
||||
if len(starts) >= 2:
|
||||
p = statistics.median([b - a for a, b in zip(starts, starts[1:])])
|
||||
print('\n行周期抽查: %.0fns (%.1f clk @40MHz)' % (p, p / 25.0))
|
||||
print('耗时 %.1fs' % (time.time() - t0))
|
||||
Reference in New Issue
Block a user