← 발견
ASTERXOR / 발견

소리는 어떻게 생겼을까

스펙트로그램은 스쳐 가는 진동을 읽을 수 있는 그림으로 바꾼다. 무엇을 선명하게 볼지는 창의 선택에 달려 있다.

어두운 스펙트로그램에 금색 수평선 하나, 평행선 두 개, 올라가는 대각선 스윕이 차례로 나타난다.
음 하나, 두 개, 그리고 올라가는 스윕. 4초 합성 신호의 스펙트로그램이다.
발견ASTERXOR / LEON LEUNG

두 음이 동시에 들리는데, 마이크는 왜 선 하나만 그릴까?

소리 녹음은 연속된 음압 측정값을 숫자로 표현한 것이라고 볼 수 있다. 매 순간 서로 다른 소리의 기여가 더해진다. 익숙한 파형은 그 합을 따라간다. 음마다 따로 차선을 내주지는 않는다. 구성 성분이 시간에 따라 어떻게 변하는지 보려면 다른 시점이 필요하다.

스펙트로그램은 시간을 멈추지 않고도 보이게 한다.
ONE LINE

파형 한 줄 안에 여러 성분이 담긴다

초당 440번 진동하는 일정한 440 Hz 사인파부터 생각해 보자. 곡선은 규칙적으로 오르내린다. 여기에 660 Hz 사인파를 더하면 모양이 복잡해진다. 두 성분이 사라진 것은 아니다. 하나의 숫자열을 함께 이루고 있다. 푸리에 변환은 그 숫자열을 반복되는 성분들의 조합으로 설명한다.

이 글의 두 음은 수식으로 직접 생성했다. 4초 신호는 440 Hz로 시작해 440과 660 Hz가 함께 울리는 구간을 지나, 300 Hz에서 1,800 Hz를 향해 올라가는 스윕으로 끝난다. 구간 사이에는 짧은 무음이 있다. 마이크나 노래, 개인 녹음은 사용하지 않았다.

규칙적인 440헤르츠 사인파와 440 및 660헤르츠 사인파를 더한 복잡한 파형을 비교하는 두 그래프.
FIG 01단일 음과 두 음의 혼합에서 각각 20밀리초를 살펴본 모습. 세로축은 보정된 음압이 아니라 수치상의 진폭이다.
A SMALL VIEW

작은 창을 움직이며 살핀다

녹음 전체를 한 번에 푸리에 변환하면 전체 구간에 어떤 주파수들이 기여했는지 알 수 있다. 하지만 각 성분이 언제 나타났는지 보기 좋은 시간표는 남지 않는다. 대신 짧은 조각을 떼어 분석하고, 조금 앞으로 이동한 다음 반복한다. 이것이 단시간 푸리에 변환, 즉 STFT다.

각 조각을 변환하기 전에 한 윈도(Hann window)로 양끝을 부드럽게 줄인다. 신호를 갑자기 잘라 내면 에너지가 다른 주파수로 퍼질 수 있다. 완만한 창은 이 효과를 줄이지만 스펙트럼의 봉우리는 넓어진다. 이렇게 구한 스펙트럼을 시간순으로 나란히 세우면, 변화하는 세기가 스펙트로그램을 이룬다.

파형 아래의 스펙트로그램에 440헤르츠 수평선 하나, 440과 660헤르츠 수평선 두 개, 300에서 1800헤르츠를 향해 올라가는 선이 차례로 나타난 그림.
FIG 024초짜리 합성 신호를 파형과 스펙트로그램으로 표현했다. 색은 측정된 음압이 아니라 상대적인 스펙트럼 세기를 나타낸다.
READ THE PICTURE

높이는 음량이 아니라 주파수다

대표 그림을 왼쪽에서 오른쪽으로 읽어 보자. 시간은 가로로 흐르고, 높은 주파수는 위쪽에 놓인다. 밝은 색은 더 강한 성분을 뜻한다. 첫 구간에는 수평선 하나, 두 번째에는 두 개가 생긴다. 마지막 스윕이 대각선으로 올라가는 이유는 음량이 커져서가 아니라 주파수가 높아지기 때문이다.

주된 계산은 초당 8,000개 샘플에서 한 창마다 512개를 사용한다. 64밀리초 분량이다. 다음 창은 이전 창보다 8밀리초 뒤에서 시작한다. 기본 주파수 빈 간격은 15.625 Hz다. 그래서 440 Hz 음의 봉우리는 437.5 Hz에, 660 Hz 음의 봉우리는 656.25 Hz에 나타난다. 가까운 빈 중심에 최대값이 생기는 것은 예상된 결과이며, 원래 음이 바뀌었다는 뜻이 아니다.

0.6초, 2.0초, 3.4초의 주파수 그래프에 봉우리 하나, 두 개, 그리고 약 1050헤르츠 부근의 더 넓은 봉우리가 차례로 나타난다.
FIG 0364밀리초 조각 세 개가 대표 그림의 세 순간을 설명한다. 스윕은 창 안에서도 주파수가 변하므로 봉우리가 더 넓다.
THE COMPROMISE

오래 보면 더 작은 차이를 구분한다

별도 테스트에서는 440 Hz와 470 Hz 음을 함께 놓고, 나중에 샘플 하나 길이의 임펄스를 넣었다. 16밀리초 창에서는 가까운 두 음이 합쳐져 봉우리 하나로 검출됐다. 128밀리초 창에서는 약 437.5 Hz와 468.75 Hz에 두 봉우리가 검출됐다. 오래 관찰할수록 서로 다른 진동 속도를 구분할 근거가 많아진다.

대신 임펄스를 보자. 긴 창을 쓴 그림에서는 그 흔적이 시간 방향으로 더 넓게 퍼진다. 그 순간을 포함한 분석 창이라면 어디서든 흔적이 잡힐 수 있다. 긴 창은 주파수 분리에 유리하고, 짧은 창은 갑작스러운 변화의 시점을 더 좁게 잡는다. 모든 질문에 가장 좋은 창 하나는 없다.

16밀리초 창에서는 440과 470헤르츠가 합쳐지고, 128밀리초 창에서는 분리되는 스펙트로그램 비교. 긴 창에서는 임펄스도 시간 방향으로 퍼진다.
FIG 04동일한 별도 테스트 신호에 두 창 길이와 공통 색상 범위를 적용했다. 긴 창은 가까운 음을 분리하지만 짧은 임펄스를 시간 방향으로 넓힌다.
READ THE SCALE

색도 선택의 결과다

그림은 플롯의 최고값을 기준으로 한 데시벨을 보여 주며, 표시 범위는 −60에서 0 dB다. 수치는 창을 적용한 변환의 크기에서 계산했다. 소음계의 측정값이 아니고, 여기서 0 dB는 무음을 뜻하지 않는다. 기준값이나 색 범위를 바꾸면 신호가 같아도 그림은 달라진다.

마찬가지로 창을 더 많이 겹치면 시간축의 샘플이 촘촘해지지만, 창 길이의 상충 관계가 사라지지는 않는다. 제로 패딩으로 주파수 빈을 더 촘촘하게 그릴 수도 있지만 원래 관찰의 분해능이 높아지는 것은 아니다. 매끄러운 그래픽과 실제로 구별되는 두 음은 서로 다른 문제다.

WHAT IT REVEALS

생략하는 덕분에 유용한 지도

축을 이해하면 그림은 유용한 길잡이가 된다. 일정한 음은 대체로 수평 흔적을 남긴다. 주파수 스윕은 기울거나 휜다. 짧은 클릭은 넓은 주파수 범위를 포함하므로 세로로 퍼질 수 있다. 실제 목소리와 악기는 배음, 변하는 진폭 포락선, 겹치는 음원 때문에 더 복잡하다.

색만으로는 소리가 무엇에서 나왔는지, 듣기 좋은지, 중요한지, 안전한지 알 수 없다. 그림이 듣기를 대신하지도 않는다. 장점은 더 소박하고 실용적이다. 패턴이 어디서 시작하는지, 어떤 주파수들이 공존하는지, 무엇이 달라지는지 짚어 볼 수 있다. 순식간에 지나간 사건이 자세히 살필 수 있는 대상이 된다.

더 읽어 보기

SciPy · ShortTimeFFT ↗SciPy · Hann window ↗NumPy · Discrete Fourier Transform ↗

모든 그림은 함께 제공한 계산으로 만들었다. 생성한 오디오는 재현용 파일로만 보관하며, 이 글은 플레이어 없이 읽을 수 있도록 구성했다.

가져갈 생각 하나

스펙트로그램이 모든 디테일을 똑같이 선명하게 남길 수는 없다. 어떤 디테일을 보려 했는지 아는 데서 그 가치가 시작된다.