LabHub
배우기 러닝패스 코스

케이블이 메아리친다

옆 배선의 에지가 만든 누화 펄스를 분석한다

LabHub 에서 이어서 보기

목표

집중정수 정전용량 결합 모델에서 에지·결합 C·피해선 저항의 영향을 분리합니다. 선수 지식은 Python 함수·JSON·파일 처리, RC 시간상수입니다. 예상 85분이므로 60분 전 +시간으로 연장하세요(최대 180분). 세션 종료 시 작업물은 사라집니다.

왜 중요한가

피크만 작게 만든 파형이나 설정만 바꾼 보고서가 실제 증거와 일치하는지 확인해야 합니다. 전압의 극성과 문턱 위 체류시간을 보존하고 관측 꼬리에서 감쇠를 역산합니다. 이상 R·C 모델의 교육용 비교이며 분포정수 NEXT/FEXT·실물 보드 인증이 아닙니다.

단계

  1. mkdir -p /root/capacitive-crosstalk로 시작하고 모든 함수를 /root/capacitive-crosstalk/analyze.py에 저장하세요. parameters(config)는 tau_ns와 ratio 객체를 반환합니다. config는 정확히 rise_ns(0.2/1/2), coupling_pf(0.2/1/2), victim_ohm(50/200/1000) 세 키의 dict입니다. 값은 bool 아닌 int/float이며 잘못된 입력은 ValueError입니다. Cv=2pF 고정, tau_ns=Rv*(Cv+Cc)*0.001, ratio=Cc/(Cv+Cc)입니다. 입력을 바꾸거나 import 때 출력하지 않습니다.
  2. predict(config,t_ns)는 읽기의 g(t−2)−g(t−12) 식으로 피해선 전압 V를 반환합니다. 시간은 bool 아닌 유한 int/float, 0~60ns이고 범위 밖은 ValueError입니다. 상승 시작 2ns, 하강 시작 12ns, 두 에지 길이는 rise_ns입니다. 하강에서 이전 상승의 감쇠 꼬리가 남아 있는 경우도 포함하세요.
  3. extrema(rows)는 유효한 시간 증가 (ns,공격선V,피해선V) 튜플 목록에서 positive_v, positive_ns, negative_v, negative_ns 객체를 반환합니다. positive는 피해선 최대값, negative는 최소값이고 동률이면 첫 시간을 고릅니다. 입력은 비어 있지 않고 0V 표본을 포함합니다. 절댓값이나 공격선 열로 대신하지 않습니다.
  4. dwell(rows,threshold_v=0.15)는 유효한 시간 증가 (ns,공격선V,피해선V) 표에서 |피해선V|>threshold_v인 총 시간 ns를 반환합니다. 각 구간의 원래 부호 전압을 선형 보간하여 ±문턱 교차 둘 모두 고려하세요. 문턱과 같은 평탄 구간은 제외합니다. threshold_v는 bool 아닌 유한 양수이며 그 외 ValueError입니다. 균일 간격만 가정하지 않습니다.
  5. infer_tau(t1,v1,t2,v2)는 (t2−t1)/ln(v1/v2)를 ns로 반환합니다. 모두 bool 아닌 유한 int/float이고 t1
  6. analyze(folder)는 config.json과 제공 simulator.read_trace(folder/trace.tsv)를 읽어 아래 반환 계약을 구현합니다. 읽은 행은 ns 단위입니다. 각 시각의 피해선 predict와 공격선 선형 에지 예측을 실제 두 전압과 비교해 최대 절대 오차를 구합니다. consistent는 오차≤0.002V입니다. 관측 꼬리 두 점은 상승 끝+0.5ns와 +1.5ns이며 infer_tau가 거절하면 None입니다. 원본을 수정하지 않습니다.
  7. campaign(values,folder)는 중복 없는 설정 dict 1~8개 list 전체를 사전 검증하고 새 폴더에서 simulator.capture(cfg,folder/case-NN)와 analyze를 호출합니다. NN은 순서대로 00부터입니다. 관측 config가 요청과 다르면 ValueError입니다. results, 모든 passed의 논리곱 all_pass, model=lumped_capacitive_coupling, measured=False를 반환하고 같은 내용을 report.json에 저장합니다. 기존 폴더는 비어 있어도 거절하고 입력 오류에는 폴더도 만들지 않습니다. 실패 조건과 원본 네 파일을 보존하세요.

참고

총 정전용량으로 시간상수를 구한다

mkdir -p /root/capacitive-crosstalk로 시작하고 모든 함수를 /root/capacitive-crosstalk/analyze.py에 저장하세요. parameters(config)는 tau_ns와 ratio 객체를 반환합니다. config는 정확히 rise_ns(0.2/1/2), coupling_pf(0.2/1/2), victim_ohm(50/200/1000) 세 키의 dict입니다. 값은 bool 아닌 int/float이며 잘못된 입력은 ValueError입니다. Cv=2pF 고정, tau_ns=Rv*(Cv+Cc)*0.001, ratio=Cc/(Cv+Cc)입니다. 입력을 바꾸거나 import 때 출력하지 않습니다.

피해선의 시간상수에도 결합 C가 들어갑니다. pF×Ω를 ns로 바꾸는 계수를 확인하세요.

상승과 하강 펄스의 부호를 보존한다

predict(config,t_ns)는 읽기의 g(t−2)−g(t−12) 식으로 피해선 전압 V를 반환합니다. 시간은 bool 아닌 유한 int/float, 0~60ns이고 범위 밖은 ValueError입니다. 상승 시작 2ns, 하강 시작 12ns, 두 에지 길이는 rise_ns입니다. 하강에서 이전 상승의 감쇠 꼬리가 남아 있는 경우도 포함하세요.

한 에지의 응답을 함수로 만든 다음 시간 이동·부호 반전으로 중첩합니다. 하강 때 상태를 0으로 초기화하지 않습니다.

양과 음의 극값을 따로 읽는다

extrema(rows)는 유효한 시간 증가 (ns,공격선V,피해선V) 튜플 목록에서 positive_v, positive_ns, negative_v, negative_ns 객체를 반환합니다. positive는 피해선 최대값, negative는 최소값이고 동률이면 첫 시간을 고릅니다. 입력은 비어 있지 않고 0V 표본을 포함합니다. 절댓값이나 공격선 열로 대신하지 않습니다.

하강의 음수값을 양수로 바꾸지 않습니다. 시간상수가 크면 두 피크의 크기가 다를 수 있습니다.

두 문턱 사이의 시간을 제외한다

dwell(rows,threshold_v=0.15)는 유효한 시간 증가 (ns,공격선V,피해선V) 표에서 |피해선V|>threshold_v인 총 시간 ns를 반환합니다. 각 구간의 원래 부호 전압을 선형 보간하여 ±문턱 교차 둘 모두 고려하세요. 문턱과 같은 평탄 구간은 제외합니다. threshold_v는 bool 아닌 유한 양수이며 그 외 ValueError입니다. 균일 간격만 가정하지 않습니다.

음수에서 양수로 바뀌는 구간의 가운데는 문턱 아래일 수 있습니다. abs를 보간 전에 적용하면 그 부분이 사라집니다.

관측 꼬리에서 시간상수를 역산한다

infer_tau(t1,v1,t2,v2)는 (t2−t1)/ln(v1/v2)를 ns로 반환합니다. 모두 bool 아닌 유한 int/float이고 t1

자연로그를 쓰고 시간의 차이를 사용합니다. 전압 배율과 시간 원점을 바꿔도 같은 값이어야 합니다.

실제 파형과 모델을 대조한다

analyze(folder)는 config.json과 제공 simulator.read_trace(folder/trace.tsv)를 읽어 아래 반환 계약을 구현합니다. 읽은 행은 ns 단위입니다. 각 시각의 피해선 predict와 공격선 선형 에지 예측을 실제 두 전압과 비교해 최대 절대 오차를 구합니다. consistent는 오차≤0.002V입니다. 관측 꼬리 두 점은 상승 끝+0.5ns와 +1.5ns이며 infer_tau가 거절하면 None입니다. 원본을 수정하지 않습니다.

관측 피크·체류는 표에서, 예상 파형은 설정에서 구합니다. 규격에 맞는 가짜 0V 파형도 증거 검사는 실패해야 합니다.

완화 방법별 증거 보고서를 남긴다

campaign(values,folder)는 중복 없는 설정 dict 1~8개 list 전체를 사전 검증하고 새 폴더에서 simulator.capture(cfg,folder/case-NN)와 analyze를 호출합니다. NN은 순서대로 00부터입니다. 관측 config가 요청과 다르면 ValueError입니다. results, 모든 passed의 논리곱 all_pass, model=lumped_capacitive_coupling, measured=False를 반환하고 같은 내용을 report.json에 저장합니다. 기존 폴더는 비어 있어도 거절하고 입력 오류에는 폴더도 만들지 않습니다. 실패 조건과 원본 네 파일을 보존하세요.

기준 조건에서 에지·결합C·저항을 하나씩 바꿔 원인을 비교합니다. 실패 결과도 삭제하지 말고 보존합니다.