본문 바로가기

통신이론

SNR, THD, SINAD 그리고 C/N 계산하기

스펙트럼 분석기(SA) 혹은 음향장비에서 볼 수 있는 신호대잡음비(SNR), 총고조파왜곡(THD), 신호대잡음및왜곡비(SINAD)를 실제 예제를 가지고 구체적으로 계산하고 비교해 보려고 합니다.

 

먼저 정의부터 살펴보고 갈게요!

① 신호 대 잡음비(signal-to-noise ratio, SNR, S/N)

는 다음과 같이 정의된다. SNR = Ps/Pn
여기서 Ps 와 Pn은 각각 신호의 전력과 노이즈의 전력에 해당한다. 노이즈 전력 대비 신호 전력의 세기를 봄으로써 상대적인 신호 전력 크기를 나타내기 위함이다. 이는 통신 시스템의 성능이 절대적인 신호 전력이 아닌 노이즈 전력 대비 신호의 전력으로 결정되기 때문이다.

 

② 총 고조파 왜곡(total harmonic distortion, THD)

은 어떤 신호에 존재하는 고조파 왜곡을 측정한 것으로, 기본 주파수의 전력에 대한 전체 고조파 구성 요소의 전력합의 비율로 정의된다. 전 고조파 왜율(全高調波歪率), 총 고조파 왜율 등으로 불린다.

오디오 시스템에서 왜곡이 적다는 것은 스피커, 증폭기, 마이크 등 여러 장비들이 녹음된 오디오를 정확하게 재생한다는 것을 의미한다.
무선 통신 분야에서 THD가 낮은 장비는 다른 장비와의 의도치 않은 간섭을 덜 발생시킨다. 또한 THD가 높은 장치는 방출되는 주파수 스펙트럼을 넓힐 가능성이 있어, 스펙트럼 공유, 감지 등의 응용 분야에서 사용하기에 적합하지 않을 수 있다.
전력 시스템에서 낮은 THD는 낮은 피크 전력, 적은 전력과 전자기 방출, 모터의 적은 코어 손실을 의미한다.

 

③ 신호대잡음및왜곡비(Signal to Noise and Distortion, SINAD)

는 원치 않거나 불필요한 신호, 특히 노이즈 및 왜곡에 의한 신호 저하를 확인하기 위해 모든 무선 통신 장치에 사용할 수 있는 측정입니다. 그러나 SINAD 측정은 무선 수신기의 감도를 측정하고 지정하는 데 가장 널리 사용됩니다.
SINAD의 실제 정의는 매우 간단합니다. 총 신호 전력 레벨(신호 + 노이즈 + 왜곡)과 원치 않는 신호 전력(노이즈 + 왜곡)의 비율로 요약할 수 있습니다. 따라서 SINAD의 수치가 높을수록 오디오 신호의 품질이 좋아집니다.
SINAD 수치는 데시벨(dB)로 표시되며 간단한 SINAD 공식 또는 방정식에서 결정할 수 있습니다.
SINAD = 10*log(SND / ND)
(여기서 SND = 결합된 신호 + 노이즈 + 왜곡 파워 레벨 , ND = 결합된 노이즈 + 왜곡 파워 레벨

 

그럼 이제 본격적으로
48kHz로 샘플링된 정현파 신호를 생성하고, 신호는 기본주파수 1kHz와 단위 진폭 1[V]을 가집니다. 이 신호에 진폭이 0.4[V]인 2kHz 고조파와 분산이 0.1²인 가산성 잡음을 추가되는 상황을 가정합니다.

 

 
import numpy as np
import matplotlib.pyplot as plt

fs = 48e3
t = np.arange(0, 1, 1/fs)
A = 1
power_fundamental = A**2/2
a = 0.4
power_harmonic = a**2/2
s = 0.1
variance_noise = s**2
x = A*np.cos(2*np.pi*1000*t) + a*np.cos(2*np.pi*2000*t) + s*np.random.randn(len(t))

SNR = 10*np.log10(power_fundamental/variance_noise)
print('SNR : ', SNR)
THD = 10*np.log10(power_harmonic/power_fundamental)
print('THD : ', THD)
SINAD = 10*np.log10(power_fundamental/(power_harmonic+variance_noise))
print('SINAD : ', SINAD)

fig, (ax0, ax1) = plt.subplots(nrows=2)
N = len(x)
f = np.fft.fftfreq(len(x), 1/fs)
Xf = (1/N)*np.fft.fft(x)
ax0.plot(t[:500], x[:500], '.-')
ax1.plot(f[(f>=0)*(f<5000)], 20*np.log10(abs(Xf[(f>=0)*(f<5000)]))+30)

plt.show(block=False)
 

 

SNR :  16.989700043360187
THD :  -7.958800173440751
SINAD :  7.447274948966939

 

고조파와 잡음이 있는 정현파의 시간 wave와 주파수 파워 스펙트럼

 

위 그래프는 시간 0.01초까지 wave를 표시하였고,

아래 그래프는 임의로 보기좋은 0 ~ 5000Hz 특정대역 주파수까지만, 전력[dBm] 단위로 스펙트럼을 plot한 것입니다.

기본신호는 약 18 [dBm], 고조파는 약 2 [dBm], 노이즈 레벨의 평균은 약 -36.8 [dBm] 됨을 알 수 있습니다.

 

 

다음은 제가 C/N을 이해한 개념을 정리하여 추가한 것입니다.(틀린부분 있으면 지적해 주세요!)

④ 반송파대잡음비(Carrier to Noise Ratio, C/N, CN, CNR)

C/N으로 표기되는 반송파대잡음비는 변조된 신호 대 잡음비 입니다. (디지털) 변조 전에 아날로그 기저 대역 메시지 신호의 S/N과 달리 C/N은 변조 후에 계산됩니다. 여기에서 캐리어라는 용어가 유래했습니다. 디지털 변조 신호는 반송파라고 하는 두 개의 연속 파형으로 구성됩니다. 이를 반송파 신호라고 하며 디지털 C/N 비율을 아날로그 S/N 비율 계산과 구별합니다. (C/N은 주파수축-스펙트럼 분석기, SNR은 시간축-오실로스코프 으로 계산이 쉬울것 같습니다.)

 

따라서,,, BPSK변조된 반송파신호 파워 0.5W이고 데이터율이 1 KBit/s 일때, 노이즈레벨이 위 와 같다면

디지털 통과대역 신호 C/N0 는 약 10log10(0.5*1000/1000) - (-36.8) = 33.79 [dB] 이 예상됩니다.

 

 

<참고자료>

1. snr - 신호 대 잡음비 - MATLAB - MathWorks 한국

2. Signal-to-noise ratio - Wikipedia

3. Total harmonic distortion - Wikipedia

4. SINAD - Wikipedia

5. Carrier-to-noise ratio - Wikipedia

6. 캐리어 대 노이즈 비율(CNR 또는 C/N)이란 무엇입니까?