본문 바로가기

통신이론

아날로그 진폭변조(AM) - DSB

물리학에 대한 관심을 이제 제 일 분야(통신)로 돌리려 합니다. 

일반상대성이론까지의 여정은 너무 고단하고 힘들기도 하고요. 이제는 제 시간과 노력, 에너지가 유한적이라 느끼며 허투루 쓰면 안될 것 같고, 블로그의 모토에 따라 빨리 누군가에게 쓸모가 있는 글을 써 보고싶은 욕구가 강해졌기 때문입니다.

잠시 외도를 했지만, 이제 본래로 돌아간다고 할까요.ㅎㅎ

그래서 통신이론과 관련된 아래 책 2권을 다시 복습하면서 정리하여 블로그 해 볼 생각입니다.

① 디지털통신과 MATLAB /SIMULINK, 양원영 등, 도서출판 홍릉

② 원리로 이해하는 통신이론 (Analog & Digital Communications), 한동석, 한빛아카데미

 

참고로 경험상 많은 내용을 담으려다 보면, 정작 중요하고 핵심적인 내용에 소흘하기 쉽기때문에 핵심만 두드러지게 잘 전달되도록 블로그하겠습니다!

오늘은 아날로그 진폭변조 (Amplitude Modulation)가 주제입니다!

 

1. 억압 반송파 양측파대 변조(DSB-SC : Double Side Band-Suppressed Carrier)

DSB-SC 신호와 스펙트럼

 

s(t) = x(t)·cos(wct)   : modulation

 

DSB-SC 변조된 신호(s)에는 LSB와 USB 신호가 존재하므로 양측파대란 이름이 붙었습니다.

여기서는 스펙트럼상 구형파를 잘 표현하기 위해 임의로 메시지 신호 x=sinc(Bt) 로 정했습니다. 마이크 음성 입력 '아~' 와 비슷한 입력이라고 생각해 주세요.

실제로 송신기와 수신기의 거리 차로 인해 송신 신호는 약간의 지연시간 td초 이후에 수신(전파지연)이 되는데,

cos(wc(t-td)) 때문에 메시지 신호(x)의 복원이 쉽지 않습니다.

 

s(t)·cos(wct) = 1/2 ·x(t)[1+cos(2wct)]   : 반송파 복원한 demodulation

 

수신기에서 메시지 신호x(t)를 복원하는 과정을 복조라고 하고, 복조기에서 송신신호의 지연된 정도를 발견하여

cos(wc(t-td))를 반영하는 과정을 반송파 복원(carrier recovery)이라 합니다.

반송파 복원을 이용하여 신호를 복원하는 수신 방식을 동기식(coherent) 수신기라고, 반대로 반송파 복원이 필요 없는 수신방식을 비동기식(noncoherent) 수신기라고 합니다.

 

 

2. 반송파 양측파대 변조(DSB-LC : Double Side Band-Large Carrier)

DSB-SC 변조 방식은 수신기에서의 반송파 복원이라는 어려운 문제를 안고 있는데,

이 문제를 해결한 변조 방식이 바로 방송파 양측파대(DSB-LC) 변조입니다.

단 AM라디오는 이 conventional AM 변조 방식을 사용하고 있어 대역폭과 전력 낭비가 많은 단점이 있습니다.

DSB-LC 신호와 스펙트럼

 

s(t) = (Ac + x(t))·cos(wct)  :  modulation

 

변조지수(modulaion index: m)는 파일럿 신호에 대한 변조신호 진폭의 변화량을 표현합니다. 즉  m = max|x(t)| / Ac

따라서, 가장 간단한 예로 단일톤의 변조신호를 s(t) = Ac(1 + m·cos(wmt))·cos(wct) 로 표현할 수도 있습니다.

<예제> 메시지 신호 x(t)= m·cos(wmt) 를 단일톤 변조하고,
평균전력이 3kW, 변조지수가 1일때, 반송파 신호의 전력과 측파대 전력?
파일럿 신호전력 Pc=Ac2/2 , 측파대 전력 Ps=m2Ac2/4 따라서 Pc=2kW , Ps=1kW

 

DSB-LC 변조는 DSB-SC변조 신호에 별도의 반송파 신호 또는 파이럿 신호 Ac·cos(wct)를 덧붙여 보내기 때문에,

일반적으로 쉽게 비동기식 복조를 합니다.

대표적으로 ① DSB-LC 변조된 신호를 반파 정류한 다음 LPF와 HPF(DC제거)를 순서대로 통과 시켜 메시지를 복원할 수 있고, ② 회로의 RC 시정수를 적절히 이용하는 포락선 검파기로 복조할 수 있습니다.

 

마지막으로 위 내용을 검증할 수 있는 파이썬 소스코드를 공개하겠습니다!

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin, lfilter

duration = 1.0
fs = 400
t = np.arange(fs*duration)/fs - duration/2   # fs = len(t)

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

# modulation
fc = 100
Ac, m=1, 1
dsb_sc = x*np.cos(2*np.pi*fc*t)
dsb_lc = Ac*(1 + m*x)*np.cos(2*np.pi*fc*t)

DSB_SCk = np.fft.fft(dsb_sc)
DSB_LCk = np.fft.fft(dsb_lc)

# demodulation
y = dsb_sc*np.cos(2*np.pi*fc*t)
LPF = firwin(36, cutoff = 1/4, window = "hamming")
yl = lfilter(LPF,1, y)

fig, (ax0, ax1) = plt.subplots(nrows=2)
ax0.plot(t, dsb_sc, label='DSB-SC')
#ax0.plot(t, dsb_lc, label='DSB-LC')
ax0.set_xlabel("time")
ax0.legend()

ax1.plot(freq, 20*np.log10(1/fs*abs(DSB_SCk)), label='DSB_SCk')
#ax1.plot(freq, 20*np.log10(1/fs*abs(DSB_LCk)), label='DSB_LCk')
ax1.set_xlabel("frequency")
ax1.set_ylim(-60.0, 10.0)
ax1.legend()
ax1.grid()
fig.tight_layout()

plt.show(block=False)

 

다음 주제들은 SSB, FM ... 입니다!