Main Content

힐베르트 변환을 통한 단측파대 변조

이 예제에서는 이산 힐베르트 변환을 사용하여 단측파대 변조를 구현하는 방법을 보여줍니다.

힐베르트 변환은 변조기와 복조기, 음성 처리, 의료 영상 처리, 도착 방향(DOA) 측정에 응용할 수 있으며, 기본적으로 모든 경우에서 복소 신호(구적) 처리는 설계를 단순화합니다.

소개

단측파대(SSB) 변조는 효율적인 진폭 변조(AM) 형태의 하나로, AM에서 사용되는 대역폭의 절반을 사용합니다. 이 기법은 전화 기술, HAM 무선, HF 통신(즉, 음성 기반 통신)과 같은 응용 사례에서 가장 많이 사용됩니다. 이 예제에서는 힐베르트 변환기를 사용하여 SSB 변조를 구현하는 방법을 보여줍니다.

SSB 변조에 힐베르트 변환기를 사용해야 하는 이유를 알아보기 위해 먼저 양측파대 변조에 대해 잠깐 살펴보겠습니다.

양측파대 변조

AM의 단순한 형태 중 하나가 양측파대(DSB) 변조이며, 일반적으로 이는 변조된 신호의 복사본 2개가 주파수가 이동되어 각각 반송 주파수의 양쪽에 놓이는 형태가 됩니다. 좀 더 정확하게는 DSB 억압 반송파(DSB Suppressed Carrier)라고 하며, 다음과 같이 정의됩니다.

f(n)=m(n)cos(2πf0n/fs)

여기서 m(n)은 일반적으로 메시지 신호라고 하며, f 0은 반송 주파수입니다. 위의 방정식에 나와 있는 것과 같이 DSB 변조는 메시지 신호 m(n)과 반송파 cos(2πf0n/fs)의 곱으로 구성되며, 따라서 다음과 같이 푸리에 변환의 변조 정리를 사용하여 f(n)에 대한 변환을 계산할 수 있습니다.

F(f)=12[M(f-f0)+M(f+f0)]

여기서 M(f)m(n)의 이산시간 푸리에 변환(DTFT)입니다. 메시지 신호가 대역폭 W를 갖는 저역통과이면 F(f)는 두 배의 대역폭을 갖는 대역통과 신호입니다. DSB 신호와 그 스펙트럼의 예를 살펴보겠습니다.

% Define and plot a message signal which contains three tones at 500, 600,
% and 700 Hz with varying amplitudes.
Fs = 10e3;
t = 0:1/Fs:0.1-1/Fs;
m = sin(2*pi*500*t) + 0.5*sin(2*pi*600*t) + 2*sin(2*pi*700*t);
plot(t,m)

grid
xlabel('Time')
ylabel('Amplitude')
title('Message Signal m(n)')

Figure contains an axes object. The axes object with title Message Signal m(n), xlabel Time, ylabel Amplitude contains an object of type line.

아래에서는 메시지 신호의 파워 스펙트럼을 계산하고 플로팅합니다.

periodogram(m,[],4096,Fs,'power','centered')
ylim([-75 12])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

양방향 파워 스펙트럼은 DC 근처에서 세 가지 톤을 명확히 보여줍니다. 더 확대해 보면 각 성분의 전력을 읽을 수 있습니다.

xlim([0.1 1])
ylim([-18 2])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

500Hz 톤의 파워는 약 –6dB이고, 600Hz 톤의 파워는 –12dB이며, 700Hz 톤의 파워는 0dB입니다. 이는 각각 1, 0.5, 2의 메시지 신호의 톤 진폭에 해당합니다.

이 메시지 신호 m(n)에 반송파를 곱하여 DSB 신호를 생성하고 해당 스펙트럼을 살펴보겠습니다.

fo = 3.5e3; % Carrier frequency in Hz
f = m.*cos(2*pi*fo*t);
idx = 100;
plot(t(1:idx),f(1:idx),t(1:idx),m(1:idx),':')
grid

xlabel('Time')
ylabel('Amplitude')
title('Message Signal and Message Signal Modulated')
legend('Modulated Message Signal','Message Signal m(n)')

Figure contains an axes object. The axes object with title Message Signal and Message Signal Modulated, xlabel Time, ylabel Amplitude contains 2 objects of type line. These objects represent Modulated Message Signal, Message Signal m(n).

파란색 실선은 변조된 메시지 신호이고, 빨간색 점선은 천천히 변화하는 메시지 신호입니다. 이 변조된 신호의 파워 스펙트럼은 다음과 같습니다.

periodogram(f,[],4096,Fs,'power','centered')
ylim([-75 0])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

메시지 신호(세 가지 톤)가 중심 주파수 f0으로 이동되었음을 확인할 수 있습니다. 또한, 변조된 m(n)의 DTFT에서 볼 수 있듯이 진폭이 절반으로 줄었으므로 각 성분의 파워는 1/4로 감소되었습니다. 더 자세히 들어가 새 전력 값을 읽어보도록 하겠습니다.

ylim([-20 0])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

양수 주파수 성분이 이제 –6dB, –18dB, –12dB에 있습니다.

DSB 변조를 정의했으므로 이제 단측파대 변조를 살펴보겠습니다.

단측파대 변조

단측파대(SSB) 변조는 DSB 변조와 유사하지만, 전체 스펙트럼을 사용하는 대신 필터를 사용하여 하측파대 또는 상측파대를 선택합니다. 하측파대 또는 상측파대를 선택하면 각각 하측파대(LSB) 변조 또는 상측파대(USB) 변조가 구현됩니다. 측파대 중 하나를 제거하는 두 가지 접근 방식이 있습니다. 하나는 필터 방법이고, 다른 하나는 위상변환(Phasing) 방법입니다. 상측파대 또는 하측파대에 대한 선택적인 필터링 과정에는 엄격한 필터가 필요하기 때문에, 특히 DC에 가까운 신호 성분이 있는 경우 쉽지 않습니다. 이 예제에서는 힐베르트 변환기를 사용하여 SSB 변조를 구현하는 위상변환 방법을 보여줍니다.

SSB 변조에서는 DSB 변조처럼 주파수 성분 쌍 X(f-f0)X(f+f0)을 생성하는 일 없이, 다시 말해 상측파대나 하측파대를 필터링할 필요 없이 메시지 신호를 다른 중심 주파수로 이동하면 됩니다. 이 작업은 힐베르트 변환기를 사용하여 수행할 수 있습니다.

SSB 변조에서의 힐베르트 변환 사용에 대해 알아보기 전에 이상적인 힐베르트 변환의 정의와 속성을 살펴보겠습니다. 이는 SSB 변조에서 힐베르트 변환을 사용해야 하는 이유를 이해하는 데 도움이 됩니다.

이상적인 힐베르트 변환

이산 힐베르트 변환을 수행하면 신호의 음수 주파수는 위상이 90도 전진하고, 양수 주파수는 위상이 90도 지연됩니다. 힐베르트 변환의 결과를 (+j)만큼 이동하고 이를 원래 신호에 더하면 아래에 표시된 것처럼 복소 신호가 생성됩니다.

mi(n)mr(n)의 힐베르트 변환인 경우 다음은

mc(n)=mr(n)+jmi(n)

해석적 신호로 알려진 복소 신호입니다. 아래 도식에서는 이상적인 힐베르트 변환을 통한 해석적 신호의 생성을 보여줍니다.

해석적 신호의 한 가지 중요한 특성은 그 스펙트럼 성분이 양의 나이퀴스트 구간에 있다는 것입니다. 이는 해석적(복소) 신호의 허수부를 90도 이동하고(+j) 이를 실수부에 더하면 음수 주파수는 상쇄되고 양수 주파수는 더해지기 때문입니다. 따라서 음수 주파수가 없는 신호가 생성됩니다. 또한, 복소 신호의 주파수 성분 크기가 실수 신호의 주파수 성분 크기의 두 배입니다. 이는 양수 주파수에 총 신호 전력이 포함되어 있는 단측 스펙트럼과 유사합니다.

다음으로, 스펙트럼 이동기를 소개하겠습니다. 스펙트럼 이동기는 스펙트럼을 이동할 신호에서 형성된 해석적 신호를 변조하여 신호의 스펙트럼 성분을 이동합니다. 이 개념은 뒷부분에 표시된 것처럼 SSB 변조에 사용할 수 있습니다.

스펙트럼 이동기

위에서 정의한 메시지 신호 m(n)을 사용하고 힐베르트 변환을 이용하여 해석적 신호를 생성하겠습니다. 그런 다음, 이 해석적 신호를 원하는 중심 주파수로 변조할 것입니다. 이 방식은 아래 도식에 표시되어 있습니다.

이 스펙트럼 이동 방법을 사용하면 결과적으로 실수 값 신호를 유지하면서 신호의 전력을 원하는 주파수로 이동할 수 있습니다.

앞에서 언급한 대로 해석적 신호는 원래 실수 값 신호와 그 실수 신호의 힐베르트 변환으로 구성됩니다. Signal Processing Toolbox™에서 힐베르트 함수로 실수 신호를 실행하면 해석적 신호가 생성됩니다.

참고: 힐베르트 함수는 허수부만이 아니라 완전한 해석적(복소) 신호를 생성합니다.

mc = hilbert(m);

또한, 메시지 신호 m(n)에서 생성된 해석적 신호의 스펙트럼 성분을 계산하고 플로팅할 수도 있습니다.

periodogram(mc,[],4096,Fs,'power','centered')
ylim([-75 6])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

스펙트럼 플롯에 표시된 것처럼, 해석적 신호는 복소 신호이며 양수 주파수 성분만 포함합니다. 게다가, 전력을 측정하거나 양수 주파수 성분에서 플롯을 더 확대해 보면 해석적 신호의 주파수 성분 전력이 실수 신호의 양수(또는 음수) 주파수 성분에 대한 총 전력의 두 배에 해당되는 것을 볼 수 있습니다. 즉, 이는 신호의 총 전력을 포함하는 단측 스펙트럼과 유사합니다. 아래의 확대된 플롯을 참조하십시오.

xlim([0.1 1])
ylim([-10 6])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

해석적(복소) 신호의 주파수 성분 500Hz, 600Hz, 700Hz의 파워가 대략적으로 각각 0dB, –6dB, 6dB(원래 신호의 총 전력에 해당함)인 것을 알 수 있습니다. 이러한 값은 진폭이 각각 1, 0.5, 2인 세 개 톤을 가지는 원래 실수 값 신호에 해당합니다.

이 시점에서 주파수 성분 쌍을 생성하지 않고 해석적 신호를 변조하여 스펙트럼 성분을 다른 중심 주파수로 이동하고 실수 값 신호를 유지할 수 있습니다.

신호를 반송 주파수 f0으로 변조하기 위해 해석적 신호에 지수를 곱합니다.

mcm = mc.*exp(1i*2*pi*fo*t);

스펙트럼 이동기 도식에 표시된 것처럼, 신호를 변조한 후 실수부를 계산합니다. 이에 대한 스펙트럼은 다음과 같습니다.

periodogram(real(mcm),[],4096,Fs,'power','centered')
ylim([-75 0])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

위의 플롯에서 볼 수 있듯이 주파수 쌍을 생성하지 않고 신호가 f0의 새로운 중심 주파수로 변조되었습니다. 즉, 그 결과로 상측파대가 생성되었습니다.

위의 스펙트럼 플롯을 DSB 변조 플롯과 비교하면 스펙트럼 이동기가 SSB 변조를 수행했음을 알 수 있습니다.

효율적인 SSB 변조 구현

앞에서 도출된 결과를 보면 SSB 변조된 신호 f(n)을 다음과 같이 쓸 수 있다는 것을 알 수 있습니다.

f(n)=[mc(n)exp(j2πf0n/fs)]

여기서 mc(n)은 해석적 신호로, 다음과 같이 정의됩니다.

mc(n)=m(n)+jm(n)

이 방정식을 전개하여 실수부를 구한 결과는 다음과 같습니다.

f(n)=[m(n)cos(2πf0n/fs)-m(n)sin(2πf0n/fs)]

결과적으로 단측파대인 상측파대(SSBU)가 생성됩니다. 이와 유사하게, 다음과 같이 SSB 하측파대(SSBL)를 정의할 수 있습니다.

f(n)=[mc(n)exp(-j2πf0n/fs)]

f(n)=[m(n)cos(2πf0n/fs)+m(n)sin(2πf0n/fs)]

위에 나와 있는 SSBU 방정식은 더욱 효율적인 SSB 구현 방법을 제시합니다. mc(n)exp(j2πf0n/fs)의 복소수 곱셈을 수행한 후 허수부를 버리는 대신 아래 표시된 것처럼 SSBU를 구현하여 필요한 수치만 계산할 수 있습니다.

위에 나와 있는 SSB 변조를 구현하려면 메시지 신호 m(n)에 대한 힐베르트 변환을 계산하고 두 신호를 모두 변조해야 합니다. 이를 수행하기 전에, 이상적인 힐베르트 변환기는 실현이 불가능하다는 사실에 주목해야 합니다. 그러나 팍스-맥클렐란(Parks-McClellan) FIR 필터 설계 기법과 같이 힐베르트 변환기를 근사하는 알고리즘이 개발되었으며 사용 가능합니다. Signal Processing Toolbox™는 이러한 필터를 설계하는 firpm 함수를 제공합니다. 또한, 필터로 인해 지연이 발생하므로 신호에 지연(N/2, 여기서 N은 필터 차수임)을 더하고 이를 아래 표시된 대로 코사인 항과 곱하는 방식으로 이러한 지연을 보정해야 합니다.

여기서는 FIR 힐베르트 변환기에 대해 짝수 길이 필터보다 계산량 측면에서 더욱 효율적인 홀수 길이 필터를 사용할 것입니다. 그렇지만 짝수 길이 필터가 통과대역 오차가 더 작습니다. 홀수 길이 필터를 사용할 경우 계산량이 절감되는 이유는 필터 중 0을 계수로 갖는 필터가 많기 때문입니다. 또한, 홀수 길이 필터를 사용하려면 짝수 길이 필터에서 필요한 분수 시간 지연이 아니라 정수 시간 지연만큼 이동해야 합니다. 홀수 길이 필터에서는 w=0w=π인 경우 힐베르트 변환기의 크기 응답이 0입니다. 짝수 길이 필터의 경우, π에서 크기 응답이 0이 아닐 수 있으므로 대역폭이 증가합니다. 따라서 홀수 길이 필터의 경우 유용한 대역폭은 다음으로 제한됩니다.

0<w<π

필터를 설계하고 영위상 응답을 플로팅해 보겠습니다.

Hd = designfilt('hilbertfir','FilterOrder',60, ...
    'TransitionWidth',0.1,'DesignMethod','equiripple');

hfv = fvtool(Hd,'MagnitudeDisplay','Zero-phase', ...
    'FrequencyRange','[-pi, pi)');
hfv.Color = 'white';

Figure Figure 1: Zero-phase Response contains an axes object. The axes object with title Zero-phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains 2 objects of type line.

힐베르트 변환을 근사하기 위해 필터를 사용하여 메시지 신호를 필터링합니다.

m_tilde = filter(Hd,m);

그러면 상측파대 신호는 다음과 같습니다.

G = filtord(Hd)/2;   % Filter delay
m_delayed = [zeros(1,G),m(1:end-G)];
f = m_delayed.*cos(2*pi*fo*t) - m_tilde.*sin(2*pi*fo*t);

스펙트럼은 다음과 같습니다.

periodogram(f,[],4096,Fs,'power','centered')
ylim([-75 0])

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

위의 플롯에서 볼 수 있듯이, 메시지 신호(세 가지 톤)를 3.5kHz의 반송 주파수로 변조하고 상측파대만 유지했습니다.

요약

앞에서 확인했듯이, 힐베르트 변환에 대한 근삿값을 사용하여 해석적 신호를 생성할 수 있습니다. 해석적 신호는 스펙트럼 이동이 필요한 여러 신호 응용 사례에 유용합니다. 특히, 근사 힐베르트 변환기를 사용하여 단측파대 변조를 구현할 수 있는 방법을 살펴봤습니다.

참고 항목

| |