Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Embedded System/신호 및 시스템

[신호및시스템] Phase 3-3 - Fast Fourier Transform

sm_amoled 2025. 10. 7. 22:29

Fast Fourier Transform

앞서 확인한 DFT Matrix 를 이용해 연산을 처리하면 반복되는 연산을 미리 끝내두고, 병렬 연산의 적용이 가능해 연산 처리 효율이 높일 수 있기는 하지만, 여전히 $O(n^2)$ 의 연산량을 가진다. 혹시 중복되는 계산이나 계산 결과를 재사용할 수 있는 부분이 있을지에 대해 고민한 결과, Fast Fourier Transform (이하 FTT) 에 대한 컨셉이 나오게 되었다.

$N=4$ 인 상황을 다시 가져와 생각해보자.

$$
\left[
\begin{matrix}
X_0\\ X_1\\X_2\\X_3
\end{matrix}
\right] = \left[
\begin{matrix}
1&1&1&1\\
1&-j&-1&j\\
1&-1&1&-1\\
1&j&-1&-j
\end{matrix}
\right]\cdot \left[
\begin{matrix}
x[0]\\ x[1]\\x[2]\\x[3]
\end{matrix}
\right]
$$

요녀석을 수식으로 각각 풀어보면 이렇게 정리할 수 있다. 여기에서 홀수항과 짝수항을 분리해서 묶어주자. 묶는 기준은 복소항의 포함 여부이다.

요걸 다시 묶어보면 이렇게 예쁘게 묶이는 것을 볼 수 있다. 여기에서 잘 보면 중복되는 부분들이 눈에 들어오기 시작한다.

왼쪽 항에서는 위아래 2개가 중복으로 동일하게 등장하고, 오른쪽 항에서는 전체적으로 -1 이 곱해진 여부를 제외하면 중복해서 동일한 형태가 등장한다.

여기에서 한 번 더 중복을 찾아내주자. 오른쪽 복소수에서, 패턴을 찾을 수 있다. 해당 값들은 G, H, W 라는 배열로 미리 계산을 완료해두면 두 번 계산하지 않아도 되므로 효율적이다.

이렇게 반복 패턴을 활용해서 다시 수식을 작성해보면 아래처럼 정리할 수 있다.

기존 방식에서라면 곱셈 16번에 덧셈 12번이나 해야했는데, 개선된 방식에서는 덧셈 8번에 곱셈 2번이면 연산을 완료할 수 있다. 이렇게 큰 틀에서 등분해가면서 패턴을 찾고 미리 연산을 끝내두는 방식으로 Divide and Conquer 를 적용하면 훨씬 효율적으로 연산할 수 있다.

이론적으로는 기존에는 $O(n^2)$ 만큼 걸리던 시간복잡도를 $O(n\cdot \log{n})$ 까지 줄일 수 있다!! 와우!!!

차량용 임베디드에서 연산을 수행해야 하는 상황일 때, 1ms 마다 1024 개의 신호에 대해서 연산을 수행해야 한다고 가정해보자. 기존 방식에서는 1,048,576 회의 복소수 곱셈을 수행해야하고, 100MHz 단위로 100ms 가 소요된다. 그러나 FFT를 적용하면 10,240 회의 복소수 곱셈만 수행하면 되기에 100MHz 환경에서 1ms 만에 처리할 수 있다. 이렇게 보니깐 차이가 진짜 크네!

 

샤라웃

혁펜하임의 “퍼펙트” 신호 및 시스템 (Signals & Systems)

 

혁펜하임의 “퍼펙트” 신호 및 시스템 (Signals & Systems)

수백명의 A+를 배출한 미친 강의!

www.youtube.com

 

320x100