[음성 기초 지식] 2. 음성 데이터 분석

2021. 4. 1. 11:56음성

 Sound? 

소리는 일반적으로 진동으로 인한 공기의 압축으로 생성

 

압축이 얼마나 됐느냐에 따라서 표현된 것이 바로 Wave(파동) → 파동은 진동하며 공간/매질을 전파해 나가는 현상

 

 

<Wave에서 얻을 수 있는 정보>

 

https://www.youtube.com/watch?v=Z_6tAxb89sw

 

1. Amplitude(Intensity) : 진폭(강도)

http:// https://keystagewiki.com/index.php/Amplitude

-소리의 크기와 관련

- 소리의 크기는 음압 변화의 비율로 표현

- bel : 소리 크기(음압)에 대한 단위, 실제 사용 시에는 bel값을 10배 한 decibel(dB=데시벨)을 사용

http://contents.kocw.or.kr/document/03_Sound.pdf


2. Frequency : 주파수(단위 : Hertz) = 소리의 높낮이

- 소리가 얼마나 압축되어 있는가?

- 1초 동안의 진동 횟수

- 주파수가 높으면 높은 소리, 낮으면 낮은 소리

https://kids.britannica.com/students/assembly/view/223513


3. Tone Color, Timbre : 음색

- 기음/기본 주파수 : 소리의 높낮이를 구분할 수 있는 기본이 되는 주파수

- 배음 / 고조 주파수 : 기음의 정수배가 되는 주파수

- 기음과 배음의 구성이 음색을 결정짓는 중요한 요소

 

http://contents.kocw.or.kr/document/03_Sound.pdf


4. Phase(Degress of displacement) : 위상

- 음파의 주기를 그래프로 표현한 것

- 위상이 일치할 때의 소리는 음압이 커지고 풍성해진다.

 

출처 : http://www.sorishop.com/board/special/board_view.html?no=565&s_field=memo&s_key=%B3%F4%C0%BA&page=3


 Sampling? 

(아날로그는 신호나 자료를 연속적인 물리량으로 나타낸 것)

 

자연의 소리를 컴퓨터에서 사용하기 위해서는 우리가 듣는 소리(아날로그)를 숫자화(디지털)로 변경해야 한다.

 

출처 :&nbsp;https://evan-moon.github.io/2019/07/10/javascript-audio-waveform/

 

컴퓨터는 연속적인 전기 신호를 측정하기 위해 특정 타이밍에 전기 신호를 측정하고 그 값을 저장한다.

 

컴퓨터가 샘플 측정을 하는 간격이 짧을수록 우리는 원래 신호에 가까운 값을 측정할 수 있다.

 

이때 신호를 측정하는 간격을 샘플 레이트(Sample Rate)

 

출처 : https://evan-moon.github.io/2019/07/10/javascript-audio-waveform/

샘플 레이트가 높을수록 음질이 더 좋다.

특히, 높은 주파수를 가진 소리(고음)의 해상도가 확연하게 좋아진다.


 Sample Rate? 

인간이 들을 수 있는 영역의 가청주파수는 20hz ~ 20kHz이며 CD의 샘플 레이트는 44.1kHz이다.

 어차피 사람은 1초에 20,000번 진동하는 소리까지 밖에 들을 수 없는데 왜 44,100번 진동하는 소리를 녹음할까?

 

출처 :&nbsp;https://evan-moon.github.io/2019/07/10/javascript-audio-waveform/

 +  부분 : 공기  압축,  -  부분 : 공기 팽창

우리는 압축 → 팽창 압축까지 모두 들어야 공기의 떨림(진동=소리)을 느낄 수 있다.

즉, 우리가 들을 수 있는 20,000번의 진동은 이 사이클이 1초에 20,000번 반복되는 소리라는 것!

 

오디오 신호의 한 사이클을 제대로 측정하려면

압축의 ★과 팽창의 ★을 모두 측정해야 하기 때문에 최소 2번은 측정을 해야 한다.

 

그래서 인간이 들을 수 있는 가장 높은 소리인 초당 20,000번의 떨림 20kHz을 제대로 측정하려면

컴퓨터는 최소한 1초에 20,000 * 2 = 40,000번 측정을 해야 하는 것이다.

 

이걸 나이퀴스트 이론(Nyquist Theorem)이라고 한다. 

정리하자면 측정하고 싶은 오디오 주파수가 있다면 최소한 그 주파수의 두배 사이즈의 Sample Rate를 준비해야 한다.

 

하지만, 나이퀴스트 이론에는 문제가 있다.

 

만약 1초에 20,000번의 사이클을 도는 소리를 측정하려고 만든 그릇에

1초에 30,000번의 사이클을 도는 훨씬 더 높은 주파수가 들어온다면 어떻게 될까?

https://evan-moon.github.io/2019/07/10/javascript-audio-waveform/

이런 식으로 점을 이상한 곳에 찍어 측정된다.

파란색 점들을 이어 보면 낮은 주파수가 된 것을 알 수 있다.

 

이런 낮은 주파수는 인간의 귀에 잘 들리고 녹음할 때는 안 들렸던 소리가 들리게 된다.

이 현상을  고스트 주파수(Ghost Frequency)라고 부른다.

 

이 문제를 해결하기 위해 LPF(Low Pass Filter) 방법을 사용하는데

단어 그대로 낮은(Low) 주파수만 통과(Pass) 시키는 필터다.

즉, 오디오 녹음을 할 때 LPF를 사용해서 가청주파수보다 높은 소리는

잘라버리고 인간이 들을 수 있는 소리만 통과시킨다.

출처 : 나


 Feature extraction(특징 추출) 

- 파동은 시간 영역(Time domain)과 주파수 영역(Frequency domain)으로 구성

출처 : 나

- 다양한 특징 추출 방법론이 존재(Spectrum, Spectrogram, Scalogram, MFCC..)

 

<Librosa의 특성 추출 방법>

출처 : 팀원들과 함께한 기록, librosa 공식 홈페이지

 

사람이 듣는 소리는 하나의 주파수만 가지고 있는 것이 아니라 다양한 주파수가 합성된 모습이다. 

각 주파수들의 정보를 어떻게 추출할 수 있을까? 정답은 푸리에 변환!

Fourier Transform(푸리에 변환)

- 푸리에 변환은 임의의 입력 신호를 다양한 주파수를 갖는 주기 함수들의 합으로 분해하여 표현하는 것

- 푸리에 변환에서 사용하는 주기 함수는 sin, cos 삼각함수이며 푸리에 변환은 고주파부터 저주파까지

다양한 주파수 대역의 sin, cos 함수들로 원본 신호를 분해하는 것이다.

https://ww2.mathworks.cn/help/signal/ref/stft.html

DFT (Discrete Fourier Transform) : 각 시간 및 주파수 지점에 대한 크기와 위상을 알 수 있다.

DFT를 빠르게 연산 = FFT(Fast Fourier Transform)

 

https://youtu.be/spUNpyF58BY?t=491

 

푸리에 변환을 정말 잘 정리해준 동영상!

동영상을 보면 푸리에 변환이 무엇인지 이해할 수 있다.

 Spectrum(스펙트럼) 

https://ratsgo.github.io/speechbook/docs/fe/mfcc

-  푸리에 변환을 실시한 결과를 그래프로 나타낸 것

- 파동의 시간 영역을 주파수 영역으로 변환

- 음향 신호를 주파수, 진폭으로 분석하여 보여준다(시간에 대한 정보가 없다)

- x축은 주파수(Frequency), y축은 진폭(Amplitude)을 나타낸다

https://m.blog.naver.com/novatest/221460293414

맨 앞의 붉은색 신호 입력 신호

뒤의 파란색 신호들은 푸리에 변환(Fourier transform)을 통해 얻어진 (원본 신호를 구성하는) 주기 함수 성분들이다.

 

각각의 주기함수 성분들은 고유의 주파수(frequency)와 강도(amplitude)를 가지고 있으며 

이들을 모두 합치면 원본 붉은색 신호가 된다.

 

 

https://blog.naver.com/intknk2/221406515869

 FFT를 통해 우리가 알 수 있는 정보는 신호의 주파수 성분이 Hz로 이루어져 있다는 사실뿐이고

주파수 성분이 어느 시점에 존재하는지 여부는 알 수 없다.

 

이러한 것은 복잡한 신호일수록 알기 어려워지며 이에 따라 기본 Time-Frequency 분석기법인 STFT가 생겼다.

 

STFT(Short Time Fourier Transform)은 비정상 신호의 주파수 성분

시간의 흐름에 따라 어떻게 변하는지 분석하는 데 쓰인다.

https://en.wikipedia.org/wiki/Short-time_Fourier_transform

 

출처 : 나

 

 Spectrogram(스펙트로그램) 

https://kr.mathworks.com/help/dsp/ref/dsp.stft.html

- 소리나 파동을 시각화하여 파악하기 위한 도구로, 파형(waveform)과 스펙트럼(spectrum)의 특징이 조합되어 있다.

 

- Spectrum은 파형 전체를 대상으로 특성을 분석했다면 

Spectrogram은 STFT의 프레임을 작게 쪼갠 것을 조금씩 이동하면서 쭉 이어 붙인 것이다.

 

- x축은 시간(Time), y축은 주파수(Frequency), z 축은 특정 시간, 특정 주파수의 진폭(Amplitude)을 나타내며

진폭의 차이를 인쇄 농도/ 표시 색상의 차이로 나타낸다

 

출처 : 나

<3차원 생성> 

* 위의 그래프와 동일한 데이터가 아니며 이해를 돕기 위해 가져온 사진이다.

https://www.faberacoustical.com/apps/ios/signalscope_adv_2018/

 

 

 

'음성' 카테고리의 다른 글

[음성 기초 지식] 1. 한국어 음운론  (0) 2023.05.01
3. Understanding Audio Signals for Machine Learning  (0) 2021.07.07
2. Intensity, Loudness, and Timbre  (0) 2021.07.07
1. sound & waveform  (0) 2021.07.01