librosa 음성 파일 스펙트럼 추출

Jiumn·2024년 12월 9일

주파수

  • 1초 동안에 진동하는 수
    - 1초에 1번 진동: 1Hz
    - 주파수가 낮으면 통신거리가 길어진다
    • 주파수가 높으면 통신거리가 짧아진다

librosa

  • sr: sampling rate (샘플링 레이트) 초당 샘플링 데이터의 수
    - 소리를 아주 짧은 순간마다 잘라서 저장해야 함
    - 샘플링 레이트가 높을수록 더 정확한 소리를 저장할 수 있음
    - default 가 22050Hz 인 이유: 사람이 들을 수 있는 주파수 소리가 20~20000Hz 이기 때문
  • y: 소리의 진폭. -1 ~ 1 사이의 값을 가짐. 0일 때는 소리가 거의 없거나 매우 약한 상태. 1 또는 -1에 가까운 값을 소리가 매우 크다는 의미.

numpy

  • 과학, 수학 연산을 위한 기초 패키지
  • array(행렬) 형태로 데이터를 저장함
  • 행렬: 그래픽 색상 픽셀 값, 3D 등 조작할 때 사용. 벡터를 변환할 때 유용함. (벡터: 방향과 크기를 갖는 데이터 구조)

DTW(Dynamic Time Warping, 동적 시간 워핑)

  • 두 개의 시계열이 존재할 때 상호 간 얼마나 유사한지 측정하기 위한 방식
    - 코사인 유사도:
    • 유클리드 거리: 두 점 사이의 거리를 계산할 때 사용. 같은 시점의 거리를 계산하므로 속도를 반영할 수 없음. 데이터의 길이가 다르거나 신호의 떨림이 커질수록 결과가 다르게 나옴
  • DTW는 거리가 짧은 지점을 찾아 시작점을 매칭
  • warp: 공간을 왜곡시켜서 공간을 이동하거나 연결한다는 뜻

https://aliencoder.tistory.com/33

matplotlib

  • 데이터 시각화 라이브러리
IOPub data rate exceeded. The notebook server will temporarily stop sending output to the client in order to avoid crashing it. To change this limit, set the config variable `--NotebookApp.iopub_data_rate_limit`. Current values: NotebookApp.iopub_data_rate_limit=1000000.0 (bytes/sec) NotebookApp.rate_limit_window=3.0 (secs)

new => terminal => 다음 명령어 입력 후 새로운 노트북 실행

jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10

  • matplotlib 으로 진폭을 시각화한 이미지

  • 진폭은 소리의 크기를 나타내는 것

  • 가령 남자와 여자 소리를 구분해내려면 주파수로 변환을 해야 함
    -> 이때 필요한 것이 푸리에 변환
    (푸리에 변환을 사용하는 근본적인 이유는 time domain에서 해석하기 힘든 신호를 frequency domain에서 쉽게 해석할 수 있기 때문)

  • fft: 고속 푸리에 변환(Fast Fourier Transform, FFT). 전체에 대해 푸리에 변환을 하는 것. 해당 파일의 주파수 성분에 대해서만 알 수 있고 어느 시점에 존재하는지 알 수 없음.

  • sftf: short time fourier trasform. sftf 가 나온 이유.
    - n_fft: 주파수 해상도
    - win_length: 시간 해상도
    - hop_length:

  • 스펙트로그램(Spectrogram): sftf 를 3차원으로 표현한 시각화 도구. 파형, 스펙트럼의 특징이 결합된 것. x축은 시간, y축은 주파수, z축은 진폭을 나타냄.

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글