Data Science

음파 데이터 이론(Sampling Rate, Bit Depth) (구 블로그 글 복구)

Railly Linker 2025. 4. 11. 08:52

- 이번 포스팅에서는 소리라는 현상을 데이터의 관점에서 어떻게 이해하는 지에 대해 알아보겠습니다.

 

- 디지털 녹음 과정
아날로그 데이터인 음파를, 음파 감지 센서(마이크)를 이용해서 받아들입니다.
센서는 음파에서 오는 진동을 받아들여, 이를 전기적 신호로 전달합니다.
일단 여기서 일차적인 데이터의 손실이 생겨날수 있습니다.
마이크의 센서가 음파를 받아들이는 과정에서 발생하는 것이죠.
물론 마이크 성능이 좋고, 무엇보다 사람이 귀로 들을수 있는 이상으로만 예민한 센서라면 인지적인 역할로서는 충분한 성능입니다.

어쨌건 이렇게 음파에 간섭을 받은 전기적 신호가 만들어질때만 해도 이것은 아직 아날로그 신호라 할수 있습니다.
(공기를 매질로하던 신호가 전기 신호로 변환. 공기의 떨림이 전기의 떨림으로 전환.)

여기서 나온 신호를 디지털화 해야 전자 회로로 다루기 쉬운 형태의 데이터가 되는데, 이것을 해주는 전자 부품이 여럿 있다고 하는데, 자세히 알아보지 않았으니 패스.

그냥 Analog To Digital 회로라고 합시다.

이 장비의 규격에 맞추기 위해, 마이크로 받은 음파 신호를 증폭을 시켜서 A/D에 전달해주고, 이는 아날로그 신호를 디지털화 합니다.
여기서 아날로그 신호를 디지털로 만들때 발생하는 주된 데이터 손실이 일어납니다.

여기서 나온 디지털 신호가 전자기기에 저장되고, 이러한 일차적인 디지털 신호를 가공하여 압축된 포멧으로 만들던지, 해당 신호를 해석하여 다시 아날로그 신호로 복구하는 등의 작업을 진행할수 있게 되는 것입니다.

물론, 정보화 시대에서는 디지털화한 정보는 조작/편집 등 데이터로 할수 있는 모든 것을 할수 있습니다.

- 오디오 데이터의 압축 포멧에 대해서는 여기가 아니라 데이터 사이언스 카테고리에 소리 데이터 분석 글에서 다루었기에 생략합니다. 추후 이 카테고리에 한번 더 따로 정리하는 것도 좋아보이네요.

- A/D 출력 데이터
가장 중요한 것...
디지털화된 데이터가 과연 어떤 형태로 출력되고 저장되는지에 대해 알아봅시다.

이게 무슨 말이냐면, 아날로그 소리라는 현실적인 음파가 가진 정보가 뭐가 있는지... 일종의 인코딩된 데이터를 원본으로 되돌릴수 있는 필요 최소의 특징이 뭐가 있는지를 알아보는 것입니다.

여기서 나오는 데이터는 '시간'과 '주파수'를 수치화 한 것입니다.

sound wave, 말 그대로 음파를 수치화 할때 고려해야할 정보의 특징 축은 위에서 말한 두가지인데,
시간의 경우는, 동영상에서의 프레임을 생각하시면 됩니다.

그러니까, 동영상은, 1초에 이미지를 몇장을 보여주고 저장할지에 대한 것이죠?

음파 데이터의 시간 역시, 1초를 얼마만큼 쪼갤지에 대한 것입니다.

주파수의 경우는, 역시나 영상에서의 해상도를 대입하면 쉽게 이해가 가능합니다.
영상에서는 픽셀이라는 단위로 점, 색을 표현하는데, 당연히 촘촘하고 작고 많을수록 더 선명하고 아날로그와 같은 자연스러운 정보가 되는 것이죠.

음파의 경우에는 공기가 떨리는 것, 전기 신호가 일그러지며 독특한 소리를 발생시키는데,
이 주파수를 표현할수 있는 데이터가 역시나 촘촘하고 많아질수록, 계단 형태의 디지털 신호는 마치 아날로그 신호처럼 인식될수 있는 것입니다.

그러니까 이를 2차원 그래프 상에 대입시키자면,
x축으로는 시간이, y축으로는 주파수로 나타낼수 있고,

주파수 예

위와 같은 그래프로 나타낼수 있습니다.

- Sample rate
음파 데이터는 크게 두가지로 나타난다고 했습니다.
그것을 전문용어로 바꾸자면, sample rate와 Bit Depth입니다.


먼저 sample rate를 먼저 봅시다.
이는 위에서 설명한 시간축이라고 생각하시면 됩니다.

현실세계에서 시간의 해상도는 무한합니다.

그렇다면 말 그대로 현실의 시간적 데이터를 그대로 저장한다고 하면, 0.00001초짜리 오디오 데이터를 만들려고 해도 무한한 데이터 공간이 필요하죠.

이는 물리적으로도 말이 안되고 의미없는 짓입니다.

그렇기에 오리지널 음파의 모든것을 저장하는게 아니라, 동영상처럼 30이니 60프레임과 같은 위화감 없는 퀄리티로 저장하는 것이 좋습니다.


동영상은 Fps 즉 Frame per sec의 단위였죠?
1초에 보이는 프레임이 몇개인가...

음파의 경우에는 프레임이 아니라 sample이라 부릅니다.

단위는 Hz인데,
예를들어 보통 음악 작업에 사용되는 음파 데이터의 헤르츠는, 44.1kHz(=44,100Hz)로, 즉 1초에 44,100개의 샘플을 가진다는 의미입니다.

높은 sr이 당연히 좋은 것이며, sr이 높아질수록 데이터 용량은 주파수의 해상도 용량만큼 증가합니다.
(생각해보세요. 동영상의 경우, 프레임이 높아진다면, 중간중간 표현해야하는 정지된 영상들이 늘어나므로, 2프레임이면 해상도 x 2, 10프레임이면 해상도 x10을 해야하죠.)

이해를 더 돕기 위해 시각자료를 준비하자면,

주파수 해상도 샘플

위와 같습니다.

원본의 시간축을 쪼개서, 위와 같이 10Hz로 샘플링을 한다면, 1초당 10샘플이 되도록, 즉 0.1초 간격으로 원본을 관측하며, 거기서 나온 주파수의 점들을 가져와서 오른쪽처럼 표현하는 것입니다.

당연히 이 샘플 레이트가 작다면, 부드럽지 않고 뚝뚝 끊기듯 들리고, 시간축 중간중간의 주파수 변화를 놓칠수 있겠죠.

 

- Bit Depth
주파수의 Quantization(양자화)의 깊이를 의미합니다.
동영상의 해상도와 비슷하다고 했죠?
위에서 sr이 시간축에 대해 데이터 저장과 표현 방식을 나누었다 했는데, bd는 주파수 축에서 이를 몇 비트로 표현할지에 대한 것을 의미합니다.

가장 극단적으로 1-Bit Quantization을 봅시다.
이는 주파수 데이터를 1비트로 표현하겠다는 것입니다.

1-Bit Quantization

 

위와 같이, 오리지널 사운드의 주파수를 1비트로 나타내기에, 데이터의 이진화가 발생합니다.
시간축이야 아무리 촘촘해도 우리가 여기서 들을수 있는건, 높은 삐 소리와 낮은 삐 소리 뿐입니다.

이제 조금 비트수를 높여봅시다.
2-bit Quantization

2-bit Quantization

 

1bit의 이진화보다는 그래프가 생성되는군요.

비트수를 더더욱 높여서
4-bit Quantization

4-bit Quantization

겨우 4비트인데도 꽤나 표현되는게 많네요.


이쯤와서 비트수와 표현범위를 알아보죠.

IT 공부하신 분이라면 가장 먼저 배우는 개념인데, 혹시 음향쪽 공부하시는 분이 볼지도 모르니 간단하게 정리하자면,
비트수가 n개 상승하면, 표현할수 있는 것은 2^n이 됩니다.

이진수를 보신다면, 0과 1을 표현하는데,
이진수의 한 자리를 비트라고 칭하며,
1비트가 올라갈때마다 2^n개의 표현범위가 생겨나기 때문이죠.

경우의 수로도 생각할수 있는데, 간략히 예시를들면,
1비트는 
0, 1로 2가지 경우를 만들어낼수 있고,
2비트는 00, 01, 10, 11로 4가지,
3비트는 000, 001, 010, 011, 100, 101, 110, 111로, 8가지를 만들수 있죠.

보신다면 2의 1승, 2의 2승, 2의 3승 순으로 표현범위가 늘어나는 것이죠.

비트 뎁스는 이러한 의미입니다.

보통 음향 관련된 일을 하시는 분들은 24비트를 사용하시거나, 16비트를 사용한다 하시더군요.

- 자 이제 우리는 소리라는 데이터를 어떻게 디지털로 저장하고 사용하는지를 알아봤고, 나름 기초적인 전문용어도 배워봤습니다.
복습하자면, Sample rate는, 1초당 몇개의 오디오 샘플을 보여줄 것인가, 시간축을 잘라내는 것이고,
Bit Depth는, 주파수를 몇 비트로 표현할 것인가에 대한 내용이었습니다.

sr이 44.1kHz(=44,100Hz)에 bd가 24비트라면,
이는 1초에 44,100개의 샘플을 표현하며,
주파수를 2^24(16,777,216) 단계로 표현한다는 것을 의미합니다.

- 데이터 분석에서 오디오 데이터를 분석할때에는 압축같은 것을 하지 않은 wav와 같은 포멧을 사용하는데, 여기서 반환되는 데이터의 형태도 위와 같습니다.

시간축과 주파수에 대한 데이터가 출력되며, 이를 통해서 우리는 음파라는 데이터를 파악할수 있죠.

소리의 성질과 현상에 대해서도 이해하면 좋을것이라 생각하는데, 앨리어싱이니 무슨무슨 효과니 알아야할게 많네요.

차라리 음향이 아니라 신호이론을 공부할까 하는데, 일단 IT나 데이터 분석 위주로 공부하면서 모르는게 있으면 이렇게 정리할 것입니다.

마지막으로, 복습겸 메모리상의 오디오 파일 값을 시각화하는 코드와 자료를 보고 끝냅니다.

# Example of a AC spectrogram
y, sr = librosa.load('code/UrbanSound8K/audio/fold1/134717-0-0-19.wav', duration=2.97)
ps = librosa.feature.melspectrogram(y=y, sr=sr)
ps.shape
# (128, 128)
librosa.display.specshow(ps, y_axis='mel', x_axis='time')

오디오 파일 데이터 시각화

 

위 파이썬 코드는 추후 응성 데이터 분석글을 작성할 때 다시 알아볼 것입니다.

 

librosa를 이용하면, 주파수 값과 sr을 얻어낼수 있는데,
sr은 말했듯 시간축을 의미하고, y는 주파수 값을 의미합니다.

 

이상입니다.