음성신호처리
-
Speech
Normalized log mel-spectrogram의 python 구현
import os import numpy as np import librosa import librosa.display import matplotlib.pyplot as plt min_level_db= -100 def normalize_mel(S): return np.clip((S-min_level_db)/-min_level_db,0,1) def feature_extraction(path): y = librosa.load(path,16000)[0] S = librosa.feature.melspectrogram(y=y, n_mels=80, n_fft=512, win_length=400, hop_length=160) # 320/80 norm_log_S = normalize_mel(librosa.power_t..
-
Speech
MFCC(Mel Frequency Cepstrum Coefficient)의 python구현과 의미
MFCC의 python 구현python의 librosa 라이브러리를 이용해 쉽게 구현할 수 있다. import matplotlib.pyplot as pltimport librosa.displayimport librosaimport numpy as nppath = 'sample1.wav'sample_rate=16000x = librosa.load(path,sample_rate)[0]S = librosa.feature.melspectrogram(x, sr=sample_rate, n_mels=128)log_S = librosa.power_to_db(S, ref=np.max)mfcc = librosa.feature.mfcc(S=log_S, n_mfcc=20)delta2_mfcc = librosa.feature...
-
Speech
LPC(Linear Prediction Coding, 선형예측부호화)와 formant estimation
LPC에 대한 소개 음성신호처리에서 강력한 음성분석기법중 하나가 바로바로 Linear predictive analysis이다. 이 기법은 음성의 생성모델의 파라미터 (그 중 vocal tract 필터)를 예측하는 좋은 방법이다.(이에 대해 아래에 자세히 설명예정) 이 기법은 여러분야에 쓰일 수 있는데 첫째로 낮은 bit rate로 전송(통신)을 하기위한 신호의 한가지 표현으로 쓰일 수도 있고. 압축하여 저장하는데에 쓰일 수도 있다. 또한 automatic speech나 화자인식에 쓰일 수있다. 이번 포스팅에서는 실제적인 음성application에 널리 쓰이는 Linear predictive analysis에 대해 소개할 것이다. Linear prediction방법은 LPC 즉, speech를 coding..
-
Speech
Pitch detction(ACF, AMDF, Cepstrum)
유성음의 pitch 음성은 유성음과 무성음으로 구분할 수 있다. 유성음은 소리가 vocal tract를 타고 울려서 나오는 소리이므로 준 주기적인 성질이 나타나는데 이러한 준 주기적인 파형의 기본 주파수를 pitch라고 한다. 음성신호에서 Pitch는 40~400Hz 사이에 존재한다. Autocorrelation method [Autocorrelation을 통한 Pitch검출 방법] Autocorrelation은 어떤 신호가 잡음과 함께 있을 때 그 신호의 주기검출에 주로 이용된다. 따라서 autocorrelation을 이용하면 음성신호의 주기를 쉽게 확인할 수 있다. 유성음의 준 주기적 파형의 기본 주파수를 pitch라 한다. Pitch는 음성신호의 샘플링 주파수를 autocorrelation의 fir..
-
Speech
음성신호처리에서 frame 생성시 overlap을 하는 이유
동아리에서 논문세미나를 하다가 speech를 전공하지 않으시는 분들에게 왜 frame을 overlap하냐는 물음을 받았다. 음성신호를 연구하는 사람들이라면 overlap을 당연하게 받아들이겠지만, 어떻게 말로 표현해야할지 고민이 되어서 간단히 정리해두기로 한다. (사실 이 링크 한글번역임) 그리고 왜 frame 단위의 처리를 하는 지에 대해서 내가 쓴 포스팅을 이 링크에서 확인할 수 있다. window 와 frame 음성신호는 stationary하지 않지만 생각보다 그렇게 빠르게 변하지도 않는다. 이때 신호를 stationary한 작은 청크로 잘라서 처리하면 되겠다는 생각을 할 수 있다. 윈도잉(windowing)은 신호를 어느부분을 볼 지 정하는 창이다. 이를 이용해 신호를 작은 청크로 자른다. 이 청..
-
Speech
STFT(Short-Time Fourier Transform)와 Spectrogram의 python구현과 의미
음성신호처리에서 아주 기본적인 feature로 spectrogram이 존재한다. spectrogram을 많이 쓰지만 왜 짧은 시간으로 나눠서 Fourier transform을 하는 지에 대해 생각하지 않고 쓰는 경우가 많다. Python에서 함수 한 줄로 구할 수 있는 spectrogram의 구현을 먼저 알아보고 후에 그 의미도 알아보자. STFT 와 Spectrogram python 구현 Spectrogram은 위와 같은 그림으로 표현할 수 있다. x축은 시간 축(단위: frame), y축은 주파수를 의미한다. 그리고 각 시간당 주파수가 가지는 값을 값의 크기에 따라 색으로 표현하여 3차원을 2차원으로 표현하게 된다. 즉, 시간의 흐름을 가지는 푸리에 변환이라고 생각할 수 있다. 각각의 frame(짧은..
-
Speech
DFT(Discrete Fourier Transform)와 Circular Convolution
DSP를 공부해본 사람이라면 DFT(Discrete Fourier Transform)에 대해 들어본 적이 있을 것이다. DFT는 무엇인가? DTFT와 무엇이 다른가? 여러 궁금증에 앞서 DFT를 이해하기에 앞서 일단 식부터 살펴보고 시작하겠다. x[n]이라는 유한한 길이의 음성신호가 존재할 때, 각주파수(오메가)를 N개로 쪼갠 후 k번째 주파수에 해당하는 변환 값을 찾아내는 것이 DFT결과가 된다. 식을 먼저 소개했고, 자세한 내용은 아래의 설명들을 통해 차근차근 알아보도록하자. 왜 DFT를 하는가? 컴퓨터는 이산적인 값만 처리가 가능하다. 연속시간신호는 시간축(x축)에서 연속적이기 때문에 샘플링을 하여 이산시간 신호를 만들어야한다. 이와 같은 논리로, 이산시간신호에 대한 주파수변환인 DTFT결과를 확인..