본문내용
1. 복조 및 음원 합성
1.1. 복조 실험
1.1.1. 지난 주 실험에서 생성한 bandpass 신호를 기저대역 신호로 변환
지난 주 실험에서는 중심주파수 fc = 15kHz인 bandpass 신호를 생성하였다. 이번 실험에서는 이 bandpass 신호를 기저대역 신호로 변환하여 left와 right 신호로 분리하는 과정을 다루고자 한다.
이를 위해 먼저 bandpass 신호 s(t)를 hilbert(x) 함수에 넣어 s(t)의 hilbert transform인 ŝ(t)를 구하였다. 이때 hilbert(s(t)) = s(t) + jŝ(t) = s+(t) = z(t)e^(jwt_c) = (x(t) + jx̂(t))e^(jwt_c)이 된다. 여기서 s+(t)에 e^(-jwt_c)를 곱하면 x(t) + jx̂(t)를 추출할 수 있다. 그리고 real() 함수를 사용하면 기저대역 신호 x(t)를 복조할 수 있다.
x(t) = Re(s+(t)e^(-jwt_c)) = s(t)cos(w_ct) + ŝ(t)sin(w_ct)이며, 이는 right 성분의 USB 신호이다. 또한 left 성분의 LSB 신호는 s(t)cos(w_ct) - ŝ(t)sin(w_ct)로 나타낼 수 있다.
위와 같은 과정을 통해 bandpass 신호를 기저대역 신호로 변환하고 left와 right 신호로 분리할 수 있다.
1.1.2. Left와 right 신호로 분리
지난주 실험에서 중심주파수 fc가 15kHz인 bandpass 신호를 생성하였다. 이번 실험에서는 이 bandpass 신호를 기저대역 신호로 변환하여 left와 right 신호로 분리하는 과정을 수행하였다.
Bandpass 신호 s(t)를 Hilbert transform을 이용하여 분석하면, s(t)=x(t)cos(2πfct) + hat{x}(t)sin(2πfct)로 나타낼 수 있다. 여기서 x(t)는 기저대역 신호이고 hat{x}(t)는 이에 대한 Hilbert transform이다.
Right 성분의 USB(Upper Sideband) 신호는 s(t)에 exp(-j2πfct)를 곱하면 얻을 수 있다. 이때 실수부는 x(t)가 된다. 따라서 Right 성분은 x(t)이다.
Left 성분의 LSB(Lower Sideband) 신호는 s(t)에 exp(j2πfct)를 곱하면 얻을 수 있다. 이때 실수부는 x(t)가 된다. 따라서 Left 성분은 x(t)이다.
이를 통해 bandpass 신호 s(t)를 기저대역 신호 x(t)로 변환하고, 이를 다시 Left와 Right 신호로 분리할 수 있다. 이 과정은 다음과 같은 블록 다이어그램으로 나타낼 수 있다.
[블록 다이어그램 생략]
위 블록 다이어그램에 따라 MATLAB 코드를 작성하면 다음과 같다.
sup = sL_1 + sR_1; % 지난주 실험에서 생성한 bandpass 신호
rhilbert = hilbert(sup); % Right 성분의 USB 신호
rUSB = rhilbert.'.*exp(j*2*pi*15000/Fs*(1:length(sup))); % Right 성분의 USB 신호를 fc=15kHz로 up-conversion
lhilbertLSB = conj(hilbert(sup)); % Left 성분의 LSB 신호
lLSB1 = lhilbertLSB.'.*exp(j*2*pi*15000/Fs*(1:length(sup))); % Left 성분의 LSB 신호를 fc=15kHz로 up-conversion
mixed = rUSB + lLSB1; % Right USB 신호와 Left LSB 신호를 합성
B = LPF(20000, 20200); % 20kHz 이하 주파수 성분만 통과시키는 LPF
y1 = filter(B.Numerator, 1, mixed); % Left 성분 추출
y2 = y1.*exp(j*2*pi*(-15000)/Fs*(1:length(sup))); % 15kHz만큼 down-conversion
y3 = real(y2); % 양의 주파수 성분만 추출 (Left 성분)
C = HPF(19800, 20000); % 20kHz 이상 주파수 성분만 통과시키는 HPF
y5 = ...