본문 바로가기

통신이론

아날로그 진폭변조(AM) - SSB, VSB

·지난번 아날로그 진폭변조 - DSB에 이어 갑니다!

 

DSB변조된 신호의 대역을 반으로 줄인 변조방식을 SSB라 합니다. 실수 신호의 경우, 상측파대와 하측파대가 반송파주파수를 중심으로 크기가 우대칭이고, 위상은 기대칭의 특징이 나타냅니다. 그러므로 한쪽 측파대 신호만을 보내도 원래의 신호를 복원할 수 있습니다. 이번 주제는 바로 SSB 입니다.

 

(억압 반송파) 단일 측파대 변조(Single Side Band - Suppressed Carrier)

Single-sideband suppressed-carrier(J3E)

 

DSB 변조는 힐버트 변환 (Hilbert transform) 을 통해 주파수를 반으로 줄일 수 있는데, 이를 수식으로 살펴보고, 시현 검증해 보겠습니다.

 

기저대역 신호 X(w)에서 양의 주파수 부분(half)을 X+(w), 음의 주파수 부분을 X-(w)라고 하면,

USB(Upper Side Band) = X+(w-wc) + X-(w+wc)   ,  LSB(lower Side Band ) = X-(w-wc) + X+(w+wc)

X+(w) = 0.5·[X(w) + j·Xh(w)]   ,   X-(w) = 0.5·[X(w) - j·Xh(w)]   표현할 수 있다.

여기서, 힐버트 변환(Hilbert transform)   Xh(w) = -j·sgn(w) ·X(w) 이다.

따라서,,,

USB = x+(t)·ej2πfct + x-(t)·e-j2πfct = x(t)·cos(2πfct) - xh(t)·sin(2πfct)

LSB = x-(t)·ej2πfct + x+(t)·e-j2πfct = x(t)·cos(2πfct) + xh(t)·sin(2πfct)

 

참고로 F-1{sgn(w)} = j/(πt)  조금은 느리게 살자: 단위 계단 함수의 푸리에 변환(Fourier Transform of Unit Step Function) (ghebook.blogspot.com) 에 너무 자세히 설명되 있습니다.

힐버트 변환의 특징은 xhh(t) = -x(t)   ,   ∫ x(t)xh(t) dt = 0 (내적은 0, 상호 직교함수) 이다. 예 cos(t) -> sin(t)

 

이를 블록도로 표현하면,

힐버트 변환을 이용한 SSB 변복조기의 구조

 

블록도를 파이썬으로 시현하여 검증해 본 소스코드는 다음과 같다.

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert

def hbt(f, X) :
    H = np.zeros_like(X)
    #H[f==0] = 0
    H[f>0] = -1j*X[f>0]
    H[f<0] = 1j*X[f<0]
    return H

duration = 1.0
fs = 400.0
t = np.arange(fs*duration)/fs - duration/2

B = fs/8
x= np.sinc(B*t)
Xk= np.fft.fft(x)
freq=np.fft.fftfreq(len(t), 1/fs)

analytic_x = hilbert(x)
amplitude_envelope = np.abs(analytic_x)
Hk = np.fft.fft(analytic_x)

H = hbt(freq, Xk)
A = Xk + 1j*H

fc = 100
s = (analytic_x*np.exp(1j*2*np.pi*fc*t)).real   # upper SSB
sl = (analytic_x*np.exp(-1j*2*np.pi*fc*t)).real   # lower SSB
Sk= np.fft.fft(s)
SLk= np.fft.fft(sl)

fig, (ax0, ax1) = plt.subplots(nrows=2)
ax0.plot(t, analytic_x.real, alpha=0.5, label='in-phase signal')
ax0.plot(t, analytic_x.imag, alpha=0.5, label='quadrature signal')
ax0.plot(t, s, label='upper SSB')
ax0.set_xlabel("time")
ax0.legend()

ax1.plot(freq, 20*np.log10(1/fs*abs(Hk)), label='Hk')
ax1.plot(freq, 20*np.log10(1/fs*abs(A)), ':', label='Hk_my')
ax1.plot(freq, 20*np.log10(1/fs*abs(Sk)), label='USB')
ax1.plot(freq, 20*np.log10(1/fs*abs(SLk)), label='LSB')
ax1.set_xlabel("frequency")
ax1.set_ylim(-60.0, 10.0)
ax1.legend()
ax1.grid()
fig.tight_layout()

plt.show(block=False)

 

마지막으로,,, 이번 예시는 아래 전파형식으로 보자면 J3E 이고,

이 J3E 변조의 동기 복조는 수신기에서 반송파를 정확하게 찾을 수 있다면 가능합니다. 그러나 수신기에서 반송파를 찾기란 매우 어려운데 문제입니다. 이때문에 실제로는 수신기 동기를 위해 송신단에서 작은 전력의 파일럿 신호를 ( R3E, H3E  처럼) 보내기도 합니다. 

 

※ 1982년도에 ITU(International Telecommunication Union, 국제전기통신연합)에서는 진폭변조 전파형식을 지정하였다.

Designation(전파형식) Description
A3E Double-sideband full-carrier – the basic amplitude-modulation scheme
R3E Single-sideband reduced-carrier
H3E Single-sideband full-carrier
J3E Single-sideband suppressed-carrier
B8E Independent-sideband emission
C3F Vestigial-sideband

 

 

잔류 측파대 변조(Vestigial Side Band)

SSB 변조는 음성과 같이 기저대역 스펙트럼이 DC근처에 존재하지 않는 경우에 적용 가능합니다. 이상적으로 스펙트럼의 반만을 잘라 보내기는 어려우며, 일반적으로 신호 스펙트럼의 반보다 넓은 스펙트럼(기저대역 신호에서 음의 주파수 일부를 남겨두는 것)을 보내는 VSB 변조를 이용하여 스펙트럼 효율을 높입니다.