신호처리

[신호처리] 4. 푸리에 변환, 고속 푸리에 변환, 나이퀴스트 주파수

mhiiii 2025. 1. 8. 14:26
728x90

 

소리 파형만을 보고 어떤 소리가 표현되는 지 아는 것은 어려움

그러나 직접 음성 파일을 들어보았을 때 누구나 음의 차이를 인지할 수 있음

이 차이는 어디에서 오는 걸까?

 

기저막은 달팽이 관에 도달한 진동을 주파수별 진동으로 분해하여 진동의 크기를 직접 뇌신경에 전달

사람은 이와 같은 방법으로 음색 차이를 인지 가능

이 매커니즘을 흉내 내어 기계도 주파수 별로 분해가 가능하게 됨

 

 


푸리에 변환(Fourier Transform)

시간 영역의 신호를 주파수 도메인에서 분석 가능

 

푸리에 정리 "모든 주기적인 신호는 주파수가 다른 삼각함수 조합으로 표현할 수 있다"


연속 푸리에 변환 (Continuous Fourier Transform)

연속치인 시간 신호를 연속치인 주파수 축으로 분해

 

이산 시간 푸리에 변환 (Discrete-time Fourier Transform)

이산치 시간 신호를 연속치 주파수 축으로 분해

 

이산 푸리에 변환 (Discrete Fourier Transform)

이산치 시간 신호를 이산치 주파수 축으로 분해 

 

 

음성인식은 컴퓨터 상에서 실행되기 떄문에 모두 이산치를 사용

따라서 이산 푸리에 변환을 주로 사용하게 될 것임

 

이산 푸리에 변환(DFT)

$$y(k) = \sum^{N-1}_{n=0}x(n)e^{-j\frac{2\pi nk}{N}}$$

 

$x(n)$ : 시간 신호 $x$에서 시각이 $n$일 때 의 값(음압치)

$N$ : 분석 구간 내의 샘플 개수

$j$ : 허수 단위

$y$ : 스펙트럼, x를 주파수 성분에 따라 분해한 결과값 

$k$ : 0 ~ $N-1$ 범위를 1주기로 보는 주파수 값 

$y(k)$ : 복소수값

 

y에서 시간 신호 $x$로 돌아가는 처리는 역이산 푸리에 변환을 통해 가능

 

역이산 푸리에 변환(IDFT)

$$x(n)= \frac{1}{N}\sum^{N-1}_{n=0}y(k)e^{j\frac{2\pi nk}{N}}$$

 

 

고속 푸리에 변환

 

분석 구간 샘플 개수 N이 2의 제곱승일 때, 효율적인 계산을 위해 사용하는 푸리에 변환

 

시간 복잡도가 $O(n logn)$이며, DFT의 시간 복잡도 $O(n^2)$보다 훨씬 효율적 

728x90

나이퀴스트 주파수

 

나이퀴스트 이론(Nyquist Theorem)

 

신호는 그 신호에 포함된 가장 높은 진동수의 2배에 해당하는 빈도로 일정한 간격으로 샘플링하면

원래의 신호로 복원할 수 있다는 샘플링 이론

 

 

아날로그 신호에서 디지털 신호로 변환하는 과정 중 

신호의 손실이 없어야 원래 신호와 가까운 신호를 얻을 수 있음

 

아날로그 신호로 복원 후, 실제 아날로그 신호와의 차이를 "양자화 오차"라고 함

 

신호를 복원했을 때 기존 아날로그 신호의 유실 없이 복원되기 위해서는 얼마만큼 신호를 샘플링 해야할까?

 

나이퀴스트 주파수

 

신호 유실 없이 복원하기 위해서는

그 신호가 포함하고 있는 가장 빠른 주파수의 2배 이상으로 샘플링 

oversampling : 존재하지 않은 데이터를 어떻게 생성하느냐에 대한 문제가 있음

undersampling : 복원했을 때 차이가 좀 있음

 

 

References

파이썬으로 배우는 음성인식

 

https://mz-moonzoo.tistory.com/62

 

[Voice] 디지털 신호(음성) 처리 개념 정리

0. 기초 용어 Frequency: 주파수 (높이) Amplitude: 진폭 (세기) Phase: 위상 (맵시) 1. 컴퓨터가 소리를 인식하는 방식 연속적인 아날로그 신호를 표본화(Sampling), 양자화(Quantizing), 부호화(Encoding)을 거쳐 이

mz-moonzoo.tistory.com

 

728x90