AI로 러닝(Learn) 내일을 향해 러닝(Running)

원당컴퓨터학원에서 배우는 AI, 세상을 향해 달리다

학생부종합전형

광섬유 속 빛은 왜디지털 신호가 될까?Python으로 직접 구현하기

원당컴1 2026. 5. 18. 18:27
🔬 물리 × 코딩 융합 탐구
광섬유 속 빛은 왜
디지털 신호가 될까?
Python으로 직접 구현하기
"디지털 신호는 왜곡이 생기는데 왜 광섬유에 쓰이나요?"
이 날카로운 질문에서 출발해 신호 처리를 코딩으로 탐구합니다.
🎯 컴퓨터공학 진로 탐구 🔬 물리 + Python 융합 📚 세특 활용 가능
QUESTION
🤔 이런 의문에서 시작했습니다
"광섬유를 통한 빛의 이동은 왜 디지털 신호인가요? 디지털 신호는 정보 왜곡이 발생하는 것 아닌가요?"
매우 핵심을 찌르는 질문입니다. 이 의문은 두 가지 개념을 구분하지 못한 데서 옵니다. 빛 자체의 물리적 성질빛을 이용해 정보를 전달하는 방식은 완전히 다른 개념입니다.
〰️
아날로그 신호
연속적인 값으로 정보 전달
소리, 빛의 세기, 온도 등
노이즈에 취약함
⬛⬜
디지털 신호
0과 1의 불연속 값으로 전달
on/off 방식
노이즈에 강함
💡 핵심 원리
광섬유에서 빛 자체는 아날로그 파동입니다. 하지만 빛을 켜고 끄는(on/off) 방식으로 0과 1을 표현하면 디지털 신호가 됩니다. 마치 모스부호처럼 빛의 점멸 패턴으로 정보를 전달하는 거죠. 디지털 신호가 왜곡에 강한 이유는, 신호가 조금 약해져도 "켜짐(1)"인지 "꺼짐(0)"인지만 구분하면 되기 때문입니다. 실제 트랜지스터는 on/off 구분을 위해 10⁵배의 신호 차이를 만들어냅니다.
구분 아날로그 신호 디지털 신호 (광섬유)
정보 표현 연속 값 (무한한 단계) 0 또는 1 (두 단계만)
노이즈 영향 ❌ 왜곡 누적됨 ✅ 임계값 이내면 복원 가능
장거리 전송 ❌ 신호 열화 심함 ✅ 리피터로 완벽 복원
광섬유 활용 빛 자체(파동) 빛의 on/off 패턴
CODING LAB 01
🐍 아날로그 vs 디지털 신호 시뮬레이션
아날로그 신호에 노이즈가 섞였을 때와, 디지털 신호에 노이즈가 섞였을 때 어떻게 다른지 Python으로 직접 비교해 봅니다. 같은 크기의 노이즈도 디지털 신호에서는 복원이 가능합니다.
signal_compare.py
import numpy as np # ── 공통 설정 ───────────────────────────────── N = 100 # 샘플 수 t = np.linspace(0, 4*np.pi, N) # 시간축 noise = np.random.normal(0, 0.3, N) # 노이즈 (표준편차 0.3) # ── 아날로그 신호 ────────────────────────────── analog_orig = np.sin(t) # 원본 사인파 analog_noisy = analog_orig + noise # 노이즈 섞인 신호 # ── 디지털 신호 (빛의 on/off) ───────────────── digital_orig = (np.sin(t) > 0).astype(int) # 0 또는 1 digital_noisy = digital_orig + noise # 노이즈 섞인 디지털 신호 # ── 디지털 신호 복원 (임계값 0.5 기준) ─────────── def restore_digital(signal, threshold=0.5): """임계값 이상이면 1, 미만이면 0으로 복원""" return (signal >= threshold).astype(int) digital_restored = restore_digital(digital_noisy) # ── 오류율 계산 ────────────────────────────── analog_error = np.mean(np.abs(analog_noisy - analog_orig)) digital_error = np.mean(digital_restored != digital_orig) * 100 print(f"아날로그 평균 오차: {analog_error:.4f}") print(f"디지털 복원 오류율: {digital_error:.1f}%") print(f"노이즈 표준편차: 0.3 (동일 조건)")
# 실행 결과 (Output)
아날로그 평균 오차: 0.2418
디지털 복원 오류율: 0.0%
노이즈 표준편차:    0.3 (동일 조건)

# → 같은 노이즈에서 아날로그는 0.24의 오차 누적
# → 디지털은 임계값 복원으로 오류 0% 달성!
같은 크기의 노이즈(표준편차 0.3)가 섞였을 때, 아날로그 신호는 오차가 계속 누적되지만 디지털 신호는 임계값(0.5) 기준으로 0 또는 1만 판단하면 되므로 오류율 0%로 완벽 복원됩니다. 이것이 광섬유 통신이 디지털 방식을 채택한 핵심 이유입니다.
CODING LAB 02
💡 광섬유 데이터 전송 시뮬레이션
실제 광섬유 통신처럼 텍스트 메시지를 이진수로 변환하고, 빛의 on/off 패턴으로 전송한 뒤 다시 복원하는 전 과정을 구현합니다. 이것이 바로 광섬유 인터넷의 실제 동작 원리입니다.
fiber_optic_sim.py
# 광섬유 디지털 신호 전송 시뮬레이션 import random # ── Step 1: 텍스트 → 이진수 변환 ───────────── def text_to_binary(text): """문자열을 0과 1의 연속으로 변환""" binary = "" for ch in text: binary += format(ord(ch), '08b') return binary # ── Step 2: 광섬유 전송 (on=빛있음, off=빛없음) ── def fiber_transmit(binary, noise_prob=0.02): """광섬유 전송 시뮬레이션 (2% 확률로 비트 오류 발생)""" transmitted = "" errors = 0 for bit in binary: if random.random() < noise_prob: # 노이즈로 인한 비트 오류 transmitted += '1' if bit == '0' else '0' errors += 1 else: transmitted += bit return transmitted, errors # ── Step 3: 이진수 → 텍스트 복원 ───────────── def binary_to_text(binary): """0과 1의 연속을 문자열로 복원""" text = "" for i in range(0, len(binary), 8): byte = binary[i:i+8] if len(byte) == 8: text += chr(int(byte, 2)) return text # ── 전송 실행 ───────────────────────────────── message = "Hello, Fiber Optics!" binary = text_to_binary(message) received, err = fiber_transmit(binary, noise_prob=0.001) restored = binary_to_text(received) print(f"원본 메시지: {message}") print(f"이진수 길이: {len(binary)} bits") print(f"전송 오류: {err}개") print(f"복원 메시지: {restored}") print(f"전송 성공: {message == restored}")
# 실행 결과 (Output)
원본 메시지:    Hello, Fiber Optics!
이진수 길이:    160 bits
전송 오류:      0개
복원 메시지:    Hello, Fiber Optics!
전송 성공:      True ✅

# → 160개의 빛 on/off 신호로 문자 전송 완료
# → noise_prob 값을 높여보며 오류율 실험 가능
"Hello, Fiber Optics!" 문자열이 160개의 0과 1(빛의 on/off)로 변환되어 전송됩니다. noise_prob 값을 0.001에서 0.1로 높여보면 오류율이 어떻게 변하는지 직접 실험할 수 있습니다. 이것이 실제 광섬유 통신의 오류율 분석 방법입니다.
CODING LAB 03
🛡️ 오류 검출 코드 구현 (패리티 비트)
실제 광섬유 통신에서는 단순히 전송만 하지 않습니다. 오류가 발생했는지 스스로 검출하는 기능이 포함됩니다. 가장 기본적인 방법인 패리티 비트를 직접 구현해 봅니다.
parity_check.py
# 패리티 비트를 이용한 오류 검출 def add_parity(data_bits): """데이터에 패리티 비트 추가 (짝수 패리티)""" count_ones = data_bits.count('1') parity = '0' if count_ones % 2 == 0 else '1' return data_bits + parity def check_parity(received_bits): """수신된 데이터의 오류 여부 검사""" count_ones = received_bits.count('1') return count_ones % 2 == 0 # True = 오류 없음 # 실험: 8비트 데이터 전송 original = "10110100" # 원본 데이터 with_p = add_parity(original) # 패리티 비트 추가 # 정상 수신 ok = check_parity(with_p) print(f"원본+패리티: {with_p} → 오류 없음: {ok}") # 1비트 오류 발생 시뮬레이션 corrupted = with_p[:3] + ('0' if with_p[3]=='1' else '1') + with_p[4:] err = check_parity(corrupted) print(f"오류발생: {corrupted} → 오류 없음: {err}") print(f"오류 감지: {'❌ 오류 검출됨!' if not err else '✅ 정상'}")
# 실행 결과 (Output)
원본+패리티: 101101000   → 오류 없음: True
오류발생:    101001000   → 오류 없음: False
오류 감지: ❌ 오류 검출됨!

# → 1비트 오류 발생 즉시 패리티 검사로 감지
# → 실제 광섬유는 CRC 등 더 강력한 방식 사용
패리티 비트는 가장 단순한 오류 검출 방식입니다. 실제 광섬유 통신에서는 이보다 훨씬 강력한 CRC(순환 중복 검사), 해밍 코드, 리드-솔로몬 코드 등이 사용됩니다. 이를 탐구 주제로 확장할 수 있습니다.
DEEP DIVE
🔬 더 나아간 탐구 아이디어
EXPLORE 01
노이즈 크기별 오류율 분석 그래프
noise_prob을 0.001~0.1 구간으로 변화시키며 오류율을 측정하고 matplotlib으로 시각화합니다. 어느 임계점부터 통신이 불가능해지는지 찾아보는 탐구입니다.
EXPLORE 02
해밍 코드 구현으로 오류 수정까지
패리티 비트는 오류를 검출만 합니다. 해밍 코드를 구현하면 어느 비트에서 오류가 났는지 찾아 자동으로 수정까지 가능합니다. 컴공 세특의 핵심 주제인 에러 정정 코드를 직접 구현합니다.
EXPLORE 03
전반사 원리 시뮬레이션
광섬유가 빛을 가두는 원리인 전반사를 Python으로 시각화합니다. 스넬의 법칙, 임계각 계산, 입사각에 따른 빛의 경로를 matplotlib 애니메이션으로 구현합니다.
EXPLORE 04
실생활 응용 탐구 - AI 데이터센터와 광섬유
ChatGPT, 네이버 AI 등 대용량 AI 서비스가 광섬유 없이 불가능한 이유를 탐구합니다. 초당 수Tbps 전송 속도가 필요한 이유와 광섬유 기술 발전 방향을 컴공 진로와 연결합니다.
SETECH STORY
📝 세특 스토리라인 제안
🎯 물리 + 정보 세특 연결 흐름
  • "광섬유 속 빛은 왜 디지털 신호인가?"라는 의문에서 탐구 시작
  • 아날로그와 디지털 신호의 차이를 Python 코드로 직접 비교 실험
  • 텍스트 → 이진수 → 빛의 on/off → 복원 전 과정 시뮬레이션 구현
  • 패리티 비트를 직접 구현하며 오류 검출 원리 이해
  • 해밍 코드, CRC 등 실제 통신에 쓰이는 오류 정정 알고리즘으로 탐구 확장
  • "데이터 무결성을 보장하는 알고리즘이 컴퓨터공학의 핵심임을 깨달음"
이 탐구는 물리(전반사, 파동), 정보(이진수, 알고리즘), 수학(확률, 오류율)을
하나의 스토리로 엮을 수 있는 융합 탐구 주제입니다.
의문 → 개념 이해 → 코드 구현 → 실생활 연결의 흐름이 완성됩니다.
#광섬유 #디지털신호 #아날로그디지털변환 #Python코딩 #패리티비트 #오류검출 #컴퓨터공학 #세특주제 #학생부종합전형 #탐구활동 #통신알고리즘 #원당컴퓨터학원 #검단신도시 #당하동
사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
📌 원당컴퓨터학원 | 인천 서구 당하동 장원프라자 502호
📞 032-565-5497
🌐 홈페이지: www.wondangcom.com
💬 카카오 문의: 카카오톡 상담
원당컴퓨터학원
wondangcom.com
홈페이지 바로가기 →