-
음성인식에서 쓰이는 FFT(Fast Fourier Transform)와 STFT(Short Time Fourier Transform) 그리고 Spectrogram의 개념과 차이점자연어처리(NLP)와 인공지능(AI) 2024. 5. 23. 22:25
[Fourier Transform]
시간에 따른 신호의 변화를, 주파수의 관점으로 표현(변환)한 것.
그래프에서, X축을 시간에서 주파수로 바꿨다고 생각하면 됨.
[Discrete Fourier Transform]
퓨리에 변환의 결과가 이산값(Dicrete)하게 만드는 것이 특징.
우리가 실제로 컴퓨터에 활용할 신호는 양자환된 Dicrete신호이므로, DFT가 필요하다.
[Fast Fourier Transform]
DFT를 빠르게 계산하는 하나의 알고리즘.
내츄럴한 DFT는 계산량이 많다. (DFT의 복잡도는 O(N*N)이다.)
더 간단히 할 수 있는 방법이 FFT이고, FFT의 복잡도는 (N/2)logN 으로 줄어들 수 있다.
가장 일반적으로 사용되는 알고리즘은 쿨리-튜키 알고리즘이다.
(단, N=2의 지수승일 때만 가능- 2, 4, 32 등..)
[STFT (Short Time Fourier Transform)]
어떤 (음성) 신호에 대해 FFT를 적용하는데, 일정한 시간 단위로 끊어서 적용하는 것.
즉, FFT를 쓰지만 시간의 개념이 추가된다. (아래 그림 참고)
[Spectrogram]
STFT는 FFT에서 가지고 있는 변수인 '주파수', '크기(진폭)'에 '시간'을 더한 것이라고 하였다.
이 STFT의 3차원 변수를 2차원으로 표현한 시각화 도구가 Spectrogram이다.
x축, y축은 주파수와 시간을 나타내고, 크기(진폭)은 색깔로써 표현한다.
[Window Size]
STFT를 실행할때, 일정 시간 단위로 끊어서 FFT를 적용한다고 하였다.
Window Size란, 바로 그 일정 시간의 크기를 의미한다.
Window Size를 적용할때, 주로 오버랩(겹치게 하기)을 적용한다.
*window 끼리 오버랩 영역을 만드는 이유:
1) Hamming Window는 양쪽의 값이 줄어들기 때문에 줄어든 값에 대한 보상이 필요하다.
2) 또한 이를 통해 Window 간에 자연스러운 연결이 가능하다n_fft = 2048 ## 윈도우 사이즈, 윈도우에 포함시킨 샘플의 개수 hop_length = 512 ## 윈도우를 몇칸씩(몇개씩) 이동시킬 것인지 지정 win_length = 2048 ## STFT 실행하기 stft = librosa.stft(y, n_fft = n_fft, win_length = win_length, hop_length = hop_length) print("stft shape : " , stft.shape) print("stft type : " , type(stft)) print(stft)
[그림으로 표현하는 FFT와 STFT]
참고 자료 및 출처 :
https://sanghyu.tistory.com/38?category=1120070
https://sswwd.tistory.com/3728x90'자연어처리(NLP)와 인공지능(AI)' 카테고리의 다른 글
Batch Size, Iteration, Step, Epoch 이해하기 (4) 2024.09.22 왜 대부분의 LLM은 Decoder-only 형태로 구현되는걸까 (2) 2024.06.05 문장 기반 임베딩 모델의 Semi-supervised 학습 방법 (0) 2024.05.23 Retrieval-Augmented Generation(RAG)의 흐름과 아키텍쳐 (1) 2024.05.21 RAG와 LLM 그리고 임베딩(Embedding) 모델의 동향 (1) 2024.05.20