네트워크

대역폭은 왜 정보량인가 — 주파수를 나누는 이유와 나눈 대가

· 2026년 8월 24일 수정

풀리지 않는 질문

“대역폭이 넓으면 빠르다”는 설명은 어디에나 있지만, 왜 그런지는 잘 나오지 않는다. 대역폭은 주파수의 폭이고 속도는 초당 비트 수인데, 단위가 다른 두 값이 왜 같은 것을 가리키는지가 빠져 있다.

여기서 세 가지 질문이 따라온다. 대역폭은 정확히 무엇인가. 왜 주파수를 조각내서 나눠 쓰는가. 나누면 무엇이 달라지는가. 이 글은 신호를 직접 만들어 세 질문에 답한다.

핵심 개념

  • 주파수 스펙트럼: 신호를 주파수 성분으로 분해했을 때의 분포. 시간축의 파형과 같은 정보를 다르게 본 것이다. 변환은 푸리에 변환이 한다.
  • 대역폭(bandwidth): 하나의 신호가 스펙트럼에서 차지하는 폭. 단위는 Hz다. 실제로는 전력의 99%가 들어 있는 구간처럼 기준을 정해서 잰다.
  • 반송파(carrier)와 변조(modulation): 정보를 특정 주파수의 사인파에 실어 보내는 것. 반송파는 정보를 나르는 빈 수레고, 변조는 거기에 정보를 싣는 행위다.
  • 심볼률(symbol rate): 초당 몇 번 신호를 바꾸는가. 한 번의 변화에 1비트를 실으면 심볼률이 곧 비트레이트다.

동작 원리

정보를 실으면 신호가 주파수축에서 퍼진다

변하지 않는 사인파는 스펙트럼에서 선 하나다. 폭이 0이고, 정보량도 0이다. 항상 같은 것을 보내는 신호는 아무것도 알려주지 않는다.

정보를 실으려면 신호를 바꿔야 한다. 그런데 사인파를 중간에 끊거나 부호를 뒤집는 순간 그것은 더 이상 순수한 사인파가 아니고, 스펙트럼에서 선 하나로 표현되지 않는다.

급격한 변화를 만들려면 여러 주파수 성분이 필요하다. 변조된 신호가 반송파 주위로 퍼지는 이유다.

여기서 대역폭과 정보량이 연결된다. 빠르게 바꿀수록 더 넓게 퍼진다. 초당 두 배로 바꾸면 폭도 두 배가 된다. 정보를 많이 보내려면 빠르게 바꿔야 하고, 빠르게 바꾸면 넓게 퍼진다. 대역폭이 정보량인 이유는 이 인과 때문이다.

폭이 정하는 상한

이 관계를 정량화한 것이 두 정리다.

  • 나이키스트: 대역폭 B인 기저대역 채널로 구분 가능하게 보낼 수 있는 심볼은 초당 2B개가 상한이다. 잡음이 전혀 없어도 이 이상은 안 된다. 반송파에 실어 보내는 대역통과 채널에서는 폭 B에 초당 B개다.
  • 섀넌-하틀리: 잡음이 있을 때 오류 없이 보낼 수 있는 최대 속도는 C = B·log₂(1 + S/N)이다.

섀넌 식에서 대역폭 B는 앞에 곱해져 있고 신호 대 잡음비 S/N은 로그 안에 있다. 출력을 두 배로 올려도 용량은 조금 늘지만, 폭을 두 배로 넓히면 용량도 두 배가 된다. 폭이 유리한 변수다. 단, 이것은 S/N이 고정일 때의 이야기이고 출력이 고정이면 얘기가 달라진다(「경계 조건」).

그래서 나눠야 한다

퍼진다는 것이 문제의 시작이다. 두 송신기가 같은 시간·같은 공간에서 같은 주파수를 쓰면, 수신기에 도달하는 것은 두 신호의 합뿐이다. 합은 원래의 두 신호로 되돌아가지 않는다. 방정식 하나에 미지수가 둘인 상황이다.

그래서 어떤 축으로든 갈라야 한다. 갈라놓을 수 있는 축은 네 가지다.

방식 갈라놓는 것
주파수 FDMA, OFDMA 서로 다른 주파수 구간을 쓴다
시간 TDMA, CSMA/CA 같은 주파수를 번갈아 쓴다
코드 CDMA 서로 직교하는 코드로 곱해 보낸다
공간 MIMO, 섹터 안테나, 셀 분할 빔을 좁히거나 거리를 벌린다

Wi-Fi는 네 가지를 모두 쓴다. 채널을 고르는 것이 주파수 분할, 하나가 쏘는 동안 나머지가 기다리는 것이 시간 분할, 여러 안테나로 동시에 다른 스트림을 보내는 것이 공간 분할이다.

주파수 분할이 기본이 된 이유는 구현이 가장 단순하기 때문이다. 필터 하나면 원하는 구간만 남기고 나머지를 버릴 수 있다. 나머지 축은 송수신기가 시간이나 코드를 맞춰야 하지만, 주파수는 서로 몰라도 된다.

규제는 이 물리적 필연 위에 얹힌 조정 장치다. 나눠야 한다는 것은 물리가 정하고, 누가 어느 조각을 쓸지는 물리가 정해주지 않는다. 국가와 ITU가 용도별로 구간을 할당하는 것은 이 조정 문제를 푸는 방식이지, 나누는 이유 자체가 아니다.

직접 확인

BPSK 신호를 만들어 확인한다. 비트를 ±1로 바꿔 반송파에 곱해 보내고, 받는 쪽은 같은 반송파를 곱해 내린 뒤 심볼 구간마다 평균 내어(정합 필터) 부호로 판정한다.

import numpy as np

rng = np.random.default_rng(0)
fs, sps, nsym = 40_000_000, 400, 2000   # 샘플률 40 MHz, 심볼당 400 샘플 -> 심볼률 100 kHz
R, FC, NOISE = fs // sps, 10_000_000, 3.5
t = np.arange(nsym * sps) / fs

def bpsk(bits, fc, ph=0.0, k=sps):
    """비트열을 ±1로 바꿔 반송파에 싣는다."""
    return np.repeat(bits * 2.0 - 1, k) * np.cos(2 * np.pi * fc * t + ph)

def bw99(power, freq):
    """전력의 99%가 들어 있는 주파수 폭."""
    c = np.cumsum(power) / power.sum()
    return freq[np.searchsorted(c, 0.995)] - freq[np.searchsorted(c, 0.005)]

def demod(x, fc, ph=0.0):
    """반송파를 곱해 내린 뒤 심볼 구간마다 평균 내고(정합 필터) 부호로 판정한다."""
    y = (x * 2 * np.cos(2 * np.pi * fc * t + ph)).reshape(nsym, sps).mean(axis=1)
    return (y > 0).astype(int)

print("[1] 심볼률과 점유 대역폭 (난수 20회 평균)")
freq = np.fft.rfftfreq(nsym * sps, 1 / fs)
for mult in (1, 2, 4):
    P = sum(np.abs(np.fft.rfft(bpsk(rng.integers(0, 2, nsym // mult), FC, k=sps * mult))) ** 2
            for _ in range(20))
    bw = bw99(P, freq)
    print(f"  심볼률 {R // mult // 1000:>3} kHz -> 점유 대역폭 {bw / 1000:7.1f} kHz (심볼률의 {bw / (R / mult):.1f}배)")

b1, b2 = rng.integers(0, 2, nsym), rng.integers(0, 2, nsym)
s1 = bpsk(b1, FC)
print("\n[2] 두 송신기를 얼마나 띄워야 하나 (심볼률 100 kHz, 잡음 포함)")
print(f"{'gap':>10}{'dT':>6}{'sinc':>9}{'BER(phase 0)':>14}{'BER(random)':>13}")
for gap in (0, 20_000, 30_000, 50_000, 70_000, 100_000, 130_000, 200_000):
    x = s1 + bpsk(b2, FC + gap) + rng.normal(0, NOISE, len(t))
    aligned = (np.mean(demod(x, FC) != b1) + np.mean(demod(x, FC + gap) != b2)) / 2
    errs = []
    for _ in range(50):   # 두 반송파의 위상차는 정해져 있지 않다
        ph = rng.uniform(0, 2 * np.pi)
        x = s1 + bpsk(b2, FC + gap, ph) + rng.normal(0, NOISE, len(t))
        errs += [np.mean(demod(x, FC) != b1), np.mean(demod(x, FC + gap, ph) != b2)]
    print(f"{gap // 1000:>6} kHz{gap / R:>6.1f}{np.sinc(gap / R):>+9.3f}"
          f"{aligned:>14.3f}{np.mean(errs):>13.3f}")

print("\n[3] 나눈 대가 — 섀넌 용량 C = B·log2(1 + S/N), 총 20 MHz, S/N = 20 dB 고정")
cap = lambda B: B * np.log2(1 + 100.0) / 1e6
for n in (1, 2, 4, 8):
    each = (20e6 - (n - 1) * 1e6) / n          # 조각 사이마다 가드밴드 1 MHz
    print(f"  {n}조각 (가드밴드 {n - 1}개) -> 조각당 {each / 1e6:5.3f} MHz, {cap(each):6.1f} Mbps"
          f", 합 {n * cap(each):6.1f} Mbps")

실행 결과다.

[1] 심볼률과 점유 대역폭 (난수 20회 평균)
  심볼률 100 kHz -> 점유 대역폭  2041.6 kHz (심볼률의 20.4배)
  심볼률  50 kHz -> 점유 대역폭  1018.6 kHz (심볼률의 20.4배)
  심볼률  25 kHz -> 점유 대역폭   513.3 kHz (심볼률의 20.5배)

[2] 두 송신기를 얼마나 띄워야 하나 (심볼률 100 kHz, 잡음 포함)
       gap    dT     sinc  BER(phase 0)  BER(random)
     0 kHz   0.0   +1.000         0.256        0.079
    20 kHz   0.2   +0.935         0.080        0.073
    30 kHz   0.3   +0.858         0.048        0.050
    50 kHz   0.5   +0.637         0.000        0.012
    70 kHz   0.7   +0.368         0.001        0.001
   100 kHz   1.0   +0.000         0.000        0.000
   130 kHz   1.3   -0.198         0.001        0.000
   200 kHz   2.0   -0.000         0.000        0.000

[3] 나눈 대가 — 섀넌 용량 C = B·log2(1 + S/N), 총 20 MHz, S/N = 20 dB 고정
  1조각 (가드밴드 0개) -> 조각당 20.000 MHz,  133.2 Mbps, 합  133.2 Mbps
  2조각 (가드밴드 1개) -> 조각당 9.500 MHz,   63.3 Mbps, 합  126.5 Mbps
  4조각 (가드밴드 3개) -> 조각당 4.250 MHz,   28.3 Mbps, 합  113.2 Mbps
  8조각 (가드밴드 7개) -> 조각당 1.625 MHz,   10.8 Mbps, 합   86.6 Mbps

[1] 대역폭은 심볼률에 비례한다. 심볼률을 절반으로 줄이면 점유 대역폭도 절반이 된다. 심볼률 대비 비율은 20.4 / 20.4 / 20.5로 사실상 고정이다. 반송파 주파수는 세 경우 모두 10MHz로 같았으므로, 폭을 정한 것은 반송파가 아니라 초당 몇 번 바꿨는가다.

[2] 겹치면 4분의 1이 틀린다. 간격 0, 위상이 맞은 경우의 오류율 0.256은 우연이 아니다. 두 신호의 세기가 같으므로 판정값은 ±1 ±1, 즉 -2, 0, +2 중 하나가 된다. 두 비트가 다를 때 합이 0이 되어 판정이 동전 던지기가 되고, 그 경우가 절반이니 오류율은 그 절반인 0.25다.

신호가 약해진 것이 아니라 정보가 사라진 것이다. 출력을 아무리 올려도 이 값은 그대로다.

[2] 간섭은 진폭과 위상 두 인자로 새어 들어온다. 정합 필터가 심볼 구간 평균이므로, 주파수 차이 Δ인 간섭이 k번째 심볼의 판정값에 남기는 양은 sinc(Δ·T)·cos(πΔT(2k+1) + φ)다(T는 심볼 길이, φ는 두 반송파의 위상차). 앞 인자가 크기를 정하고 뒤 인자가 심볼마다 부호와 세기를 흔든다. 20kHz(Δ·T = 0.2)에서는 sinc(0.2) ≈ 0.94로 거의 그대로 새어 들어와 8%가 틀린다.

앞 인자는 포락선이 1/(πΔ·T)로 줄어들 뿐 단조롭게 작아지지는 않는다. 널 사이에서 사이드로브로 다시 올라오기 때문에, 130kHz(Δ·T = 1.3)의 |sinc|는 100kHz보다 오히려 크다.

[2] 널이 두 종류라는 것이 핵심이다. 50kHz(Δ·T = 0.5)에서 위상이 맞으면 오류가 0이 되는데, 이것은 sinc(0.5) ≈ 0.64가 작아서가 아니라 cos(π(k+0.5))가 모든 k에서 정확히 0이기 때문이다. 위상에 기댄 널이라 두 송신기의 위상차가 무작위면 깨진다(0.012).

반면 100kHz, 즉 간격이 심볼률과 정확히 같을 때는 sinc(1) = 0이라 앞 인자 자체가 0이고, 위상이 어떻든 0을 유지한다. 스펙트럼은 뻔히 겹쳐 있는데도 간섭이 없다. OFDM이 부반송파를 심볼률 간격으로 겹쳐 놓고도 쓰는 원리가 이것이다. 가드밴드로 벌리는 것과 직교하는 지점에 정확히 놓는 것은 다른 전략이고, 뒤쪽이 폭을 아끼는 대신 주파수·위상 정확도를 요구한다.

간격 0인데 위상 무작위 쪽이 0.079로 낮은 것도 같은 이야기다. 위상차가 90도에 가까우면 두 신호가 직교 성분으로 갈라져 둘 다 살아난다. 다만 이것은 위상이라는 축으로 나눈 것이지 겹쳐 쓴 것이 아니고, 서로 모르는 두 송신기가 위상을 맞춰 줄 이유도 없다.

[3] 나눠도 총량은 줄지 않는다. 가드밴드가 깎을 뿐이다. 용량 식은 B에 대해 선형이라 n·cap(B/n) = cap(B)다. 나누는 행위 자체는 총 용량을 만들지도 없애지도 않는다. 손해는 조각 사이에 비워두는 가드밴드에서 나온다. 조각이 n개면 그 사이가 n-1군데이므로 잘게 나눌수록 커진다.

20MHz를 1MHz 가드밴드로 잘랐을 때 둘이면 5% 손해지만 여덟이면 35%가 날아간다. [3]은 실측이 아니라 섀넌 식을 대입한 산술이다.

경계 조건

C ∝ BS/N이 고정일 때만 성립한다. 송신 출력이 고정된 상태에서 대역폭만 넓히면 잡음 전력도 폭에 비례해 늘어난다(N = N₀·B). 이때 용량은 B → ∞에서 S/(N₀·ln2)로 수렴한다.

무한정 넓힌다고 무한정 빨라지지 않는다. 채널 폭을 160MHz로 올려도 기대만큼 안 빨라지고 도달 거리만 줄어드는 이유가 여기 있다.

위 실험은 단순화한 모델이다. BPSK에 사각 펄스, 가산 백색 잡음, 그리고 수신기가 자기 신호와는 주파수·타이밍·위상을 완벽히 맞춘 상태를 가정했다(간섭원과의 위상차만 무작위로 뒀다).

실제 시스템은 펄스 성형으로 스펙트럼 꼬리를 잘라내므로 점유 대역폭이 심볼률의 20배가 아니라 1.1~1.5배 수준이고, 다중 경로 페이딩과 동기 오차가 더해져 필요한 간격이 커진다. 비례 관계와 겹침의 결과는 그대로지만 절대 수치는 모델에 딸린 값이다.

[2]의 0.25는 세기가 같을 때의 값이다. 한쪽이 충분히 세면 강한 쪽은 살아남고 약한 쪽만 죽는다. 여러 공유기가 같은 채널을 써도 가까운 쪽은 멀쩡히 되는 이유다.

대안과 트레이드오프

주파수를 미리 잘라 고정 배분하는 방식은 단순하지만 노는 조각이 생긴다. 배분받은 쪽이 안 쓰는 동안 그 구간은 비어 있고, 다른 쪽은 부족해도 못 가져간다. 트래픽이 몰렸다 빠졌다 하는 데이터 통신에서 이 손실이 크다.

방식 얻는 것 잃는 것
고정 주파수 분할(FDMA) 송수신기가 서로 몰라도 된다. 구현이 단순하다 노는 조각. 가드밴드 낭비
시간 분할(TDMA, CSMA/CA) 폭 전체를 번갈아 다 쓴다 시간 동기 또는 충돌 회피 비용
직교 분할(OFDM) 가드밴드 없이 촘촘히 붙인다 주파수·위상 오차에 민감하다
동적 할당(OFDMA) 필요한 만큼 부반송파를 준다 스케줄러가 필요하다. 제어 정보 오버헤드

Wi-Fi가 802.11ax에서 OFDMA를 들여온 것이 이 흐름이다. 그전까지는 작은 패킷 하나를 보내려고 채널 전체를 차지하고 나머지가 기다렸지만, OFDMA는 한 번의 송신에 여러 단말의 데이터를 부반송파 단위로 나눠 싣는다.

2.4GHz와 5GHz의 차이도 같은 이야기의 사례다. 5GHz가 빠른 이유는 주파수가 높아서가 아니라 그 대역에 할당된 구간이 넓어 조각을 크게 떼어낼 수 있어서다. 2.4GHz가 멀리 가는 이유는 경로 손실이 주파수가 높을수록 커지기 때문이고, 이것은 대역폭과 무관한 별개의 물리다.

두 대역의 성격 차이는 폭이 넓은가멀리 가는가가 서로 반대로 붙어 있어서 생긴다.

참고