다운샘플링 시 Aliasing 현상 Spectrogram에서 관찰하기
본문 바로가기
연구 노트/디지털신호처리

다운샘플링 시 Aliasing 현상 Spectrogram에서 관찰하기

by NEWSUN* 2024. 4. 21.

샘플링 이론에 대한 개념을 알아보고 torch 라이브러리를 사용해서 다운샘플링 했을 때 aliasing이 어떻게 관찰되는지 코드를 통해 살펴봅시다. 

 

샘플링 하는 이유

현실세계에서 대부분의 신호는 연속적입니다. 하지만, 컴퓨터와 같은 디지털 시스템에서는 연속적인 신호를 처리하기 어렵기 때문에 신호를 디지털 형태로 변환해주는 작업이 필요합니다. 이를 위해, 신호를 일정한 간격으로 샘플링하면 이산적인 표현을 얻을 수 있습니다. 

 

샘플링 이론과 Aliasing

나이퀴스트 샘플링 정리에 따르면, 연속 시간 신호를 복원하기 위해서는 샘플링 주파수가 신호의 최대 주파수의 두 배보다 커야 합니다. 이 조건을 만족하지 않는 경우, 샘플링 과정에서 정보의 왜곡 / 손실을 초래하는 aliasing이 발생합니다. aliasing샘플링 주파수가 낮아서 고주파 신호 일부가 낮은 주파수로 왜곡되는 현상을 말합니다. 예를 들자면, 음성 신호의 경우, 최대 주파수가 8kHz이므로 16kHz로 샘플링해줘야 aliasing이 발생하지 않을 것입니다.

 

 

샘플링 이론 (Sampling Theorem) 알아보기

나이퀴스트 샘플링 이론에 대해 알아보고 연속 시간 신호를 샘플링하여 이산 시간 신호로 만드는 과정을 살펴봅시다. Notation Periodic Sampling 연속 시간 신호의 이산 시간 표현을 얻을 때 쓰는 일반

sunny-archive.tistory.com

 

다운샘플링 (Downsampling)

sampling rate을 변환하는 이유가 뭔지 생각해보고 샘플링 속도를 줄이는 방법인 downsampling에 대해 알아봅시다. Sampling rate 변환 연속 시간 신호의 새로운 이산 시간 표현을 얻기 위해 이산 시간 신호

sunny-archive.tistory.com

 

Code

import math
import torch
import torchaudio

t = torch.arange(0, 16000*4, 1)
y = torch.cos(2*math.pi/5*t)
z = torch.cos(2*math.pi*1/3*t)

# wav 파일 저장
torchaudio.save("y.wav", y, 16000)
torchaudio.save("y2.wav", y[:,::2], 8000)
torchaudio.save("z.wav", z, 16000)
torchaudio.save("z2.wav", z[:,::2], 8000)

 

$x_d[n]=x[nM]=x_c(nMT)$에서, $M=2$ 로 설정하여 다운샘플링한 코드 입니다. 

 

Spectrogram

첫 번째로, $y=cos(2\pi \cdot \frac{1}{5}t)$ 예시를 살펴보겠습니다. 16kHz를 기준으로 $\frac{1}{5}$ 지점인 3.2kHz에서 주파수 성분이 관찰되는 걸 확인할 수 있습니다. 

 

y

 

 

$M=2$ 로 다운샘플링해도 aliasing이 발생하지 않기 때문에, 앞에서 보았던 것과 같이 3.2kHz에서 주파수 성분이 관찰됩니다.

 

y2

 

 

다음은 $z=cos(2\pi \cdot \frac{1}{3}t)$ 예시를 살펴보겠습니다. 16kHz를 기준으로 $\frac{1}{3}$ 지점인 약 5.3kHz에서 주파수 성분이 관찰되는 걸 확인할 수 있습니다.

 

z

 

 

이 신호를 $M=2$, 다운샘플링하면 어떻게 될까요?

 

z2

 

결과부터 보자면, 4kHz ($\pi$)를 중심으로 대략 1.3kHz ($\frac{\pi}{3}$)만큼 뒤바뀌어 약 2.7kHz에서 주파수 성분이 나타나는 걸 확인할 수 있습니다. 

 

 

다운샘플링 시, 나이퀴스트 샘플링 조건을 만족하지 못하면 이와 같이 고주파가 넘어와 저주파 대역에 나타나는 aliasing 현상이 발생하게 됩니다.