FFT (고속 푸리에 변환)

FFT(고속 푸리에 변환)란?

FFT(고속 푸리에 변환)는 DFT(이산 푸리에 변환)를 고도로 최적화한 구현으로, 이산 신호를 시간 영역에서 주파수 영역으로 변환합니다. FFT 계산은 신호의 주파수 성분, 위상 및 기타 속성에 대한 정보를 제공합니다.

x축에는 시간(단위: 초), y축에는 진폭을 보여주는 그래프와 x축에는 주파수, y축에는 전력을 보여주는 그래프.

FFT를 사용해 주파수 성분으로 분해된 대왕고래 울음소리 오디오 신호. (MATLAB 코드 예제 참조)

널리 사용되는 FFT 알고리즘으로는 Cooley-Tukey 알고리즘, 소인수 FFT 알고리즘, Rader의 FFT 알고리즘 등이 있습니다. 가장 일반적으로 사용되는 FFT 알고리즘은 Cooley-Tukey 알고리즘으로, 큰 DFT를 더 작은 DFT로 나누어 계산 속도를 높이고 복잡도를 줄입니다. FFT 응용 사례는 다양한 분야에 걸쳐 있습니다.

FFT 응용 사례

신호 처리에서 FFT는 주파수 영역 분석(스펙트럼 분석)의 기초가 되며 신호 필터링, 스펙트럼 추정, 데이터 압축 및 기타 응용 사례에 사용됩니다. 단시간 푸리에 변환과 같은 FFT의 변형을 사용하면 시간 영역 및 주파수 영역에서 동시에 분석을 수행할 수도 있습니다. 이러한 기법은 오디오 및 음성, 레이다, 통신 및 기타 센서 데이터 신호와 같은 다양한 신호에 사용할 수 있습니다. 또한 FFT는 더 복잡한 신호 처리 기법의 중간 단계로 사용되기도 합니다.

영상 처리에서 FFT는 필터링과 영상 압축에 사용됩니다. FFT는 물리학 및 수학에서 PDE(편미분방정식)를 푸는 데에도 사용됩니다.

x축에는 주파수(단위: kHz), y축에는 파워 스펙트럼(단위: dB)을 보여주는 지속성 스펙트럼 그래프. 측면의 막대는 색상으로 구분된 밀도 백분율을 표시합니다.

지속성 스펙트럼은 시간-주파수 뷰의 한 유형으로, 신호의 스펙트럼 분석에 사용할 수 있습니다. (MATLAB의 시간-주파수 함수 참조)

MATLAB에서의 FFT

MATLAB®fft, ifft, fft2 같은 여러 함수를 제공하며, 이를 통해 FFT를 직접 구현할 수 있습니다. MATLAB에서 FFT 구현은 데이터 크기와 계산에 따라 다양한 FFT 알고리즘 중에서 선택하도록 최적화되어 있습니다. 마찬가지로 Simulink®는 모델 기반 설계 및 시뮬레이션에 사용할 수 있는 FFT용 블록을 제공합니다. 또한 MATLAB 및 Simulink는 자동 코드 생성을 통해 FPGA, ARM을 포함한 프로세서, NVIDIA GPU와 같은 특정 하드웨어 상에서 FFT를 구현할 수 있도록 지원합니다.

아래 함수와 예제를 살펴보고 MATLAB을 사용한 FFT의 응용 사례 및 구현과 푸리에 변환에 대해 자세히 알아볼 수 있습니다.

MATLAB Online에서 FFT 예제 실행

FFT를 사용해 신호에서 잡음 제거하기

FFT 및 주파수 영역 분석 소개

FFT를 사용한 파워 스펙트럼 밀도 추정

FFT의 하드웨어 구현

프로그램 가능 논리 소자에서 FFT를 구현하는 것은 소프트웨어 구현만큼 간단하지 않습니다. 속도 및 정확도 같은 공학적 장단점에 대한 잘못된 결정을 내리거나 비효율적인 코드를 사용할 경우, 애플리케이션의 품질과 성능에 부정적인 영향을 미칠 수 있습니다. MATLAB 및 Simulink의 코드 생성 툴을 사용하면 ARM과 같은 범용 프로세서부터 FPGA와 같은 보다 특수한 소자에 이르는 다양한 하드웨어 소자에서 FFT를 손쉽게 구현할 수 있습니다.


참조: MATLAB 및 Simulink를 사용한 신호 처리, MATLAB을 사용한 영상 처리 및 컴퓨터 비전, MATLAB 및 Simulink를 사용한 레이다 시스템, Signal Processing Toolbox, Audio Toolbox, Radar Toolbox, 잡음 제거, 컨벌루션, 디지털 신호 처리, 나이퀴스트 정리