주요 콘텐츠

이산 푸리에 변환

R2026b

이산 푸리에 변환, 즉 DFT는 디지털 신호 처리에 사용되는 주요 툴입니다. 이 제품은 단축된 실행 시간으로 DFT를 계산할 수 있는 방법인 고속 푸리에 변환(FFT)을 기반으로 합니다. 툴박스 함수의 대부분(Z 영역 주파수 응답, 스펙트럼 및 켑스트럼 분석, 일부 필터 설계 및 구현 함수 포함)은 FFT를 포함합니다.

MATLAB® 환경은 이산 푸리에 변환과 이산 푸리에 역변환을 계산할 수 있도록 fft와 ifft를 제공합니다. 입력 시퀀스 x와 변환된 버전 X(단위원 원주상에 균일한 간격을 갖는 주파수에 대한 이산시간 푸리에 변환)에 대해 두 함수는 다음과 같이 관계를 구현합니다.

X(k+1)=∑n=0N-1x(n+1)WNkn

및

x(n+1)=1N∑k=0N-1X(k+1)WN-kn.

이 방정식에서 급수 첨자는 MATLAB 벡터 인덱싱 방식으로 인해 0이 아니라 1부터 시작합니다. 그리고, 아래 정의가 적용됩니다.

WN=e-j2π/N.

참고 MATLAB은 fft 함수에 음의 j를 사용합니다. 엔지니어링 분야에서는 통상적으로 이 방식을 따릅니다. 물리학과 순수 수학에서는 일반적으로 양의 j를 사용합니다.

fft에 입력 인수로 x 하나만 제공하면 그 입력 벡터나 행렬의 DFT가 계산됩니다. x가 벡터이면 fft는 벡터의 DFT를 계산하고, x가 사각형 배열이면 fft는 배열의 각 열별로 DFT를 계산합니다.

예를 들어, 시간 벡터와 신호를 생성해 보겠습니다.

t = 0:1/100:10-1/100;                     % Time vector
x = sin(2*pi*15*t) + sin(2*pi*40*t);      % Signal

신호의 DFT와 변환된 시퀀스의 크기 및 위상을 계산합니다. 위상을 계산할 때 크기가 작은 변환 값을 0으로 설정하여 반올림 오차를 줄입니다.

y = fft(x);                               % Compute DFT of x
m = abs(y);                               % Magnitude
y(m<1e-6) = 0;
p = unwrap(angle(y));                     % Phase

단위가 도(Degree)인 크기와 위상을 플로팅하려면 다음 명령을 입력하십시오.

f = (0:length(y)-1)*100/length(y);        % Frequency vector

tiledlayout("flow")
nexttile
plot(f,m)
title("Magnitude")
ax = gca;
ax.XTick = [15 40 60 85];
nexttile
plot(f,p*180/pi)
title("Phase")
ax = gca;
ax.XTick = [15 40 60 85];

Figure contains 2 axes objects. Axes object 1 with title Magnitude contains an object of type line. Axes object 2 with title Phase contains an object of type line.

fft에 대한 두 번째 인수 n은 변환에 사용할 점 개수를 지정합니다. 이는 DFT 길이를 나타냅니다.

n = 512;
y = fft(x,n);
m = abs(y);
p = unwrap(angle(y));
f = (0:length(y)-1)*100/length(y);

tiledlayout("flow")
nexttile
plot(f,m)
title("Magnitude")
ax = gca;
ax.XTick = [15 40 60 85];

nexttile
plot(f,p*180/pi)
title("Phase")
ax = gca;
ax.XTick = [15 40 60 85];

Figure contains 2 axes objects. Axes object 1 with title Magnitude contains an object of type line. Axes object 2 with title Phase contains an object of type line.

이 경우, fft는 입력 시퀀스가 n보다 짧으면 0으로 채우고, n보다 길면 자릅니다. n이 지정되지 않으면 입력 시퀀스의 길이가 디폴트로 설정됩니다. fft의 실행 시간은 이 함수가 수행하는 DFT의 길이 n에 따라 결정됩니다. 이 알고리즘에 대한 자세한 내용은 fft 도움말 페이지를 참조하십시오.

참고 결과로 생성되는 FFT 진폭은 A*n/2입니다. 여기서 A는 원래 진폭이고 n은 FFT 점의 개수입니다. 이 식은 FFT 점의 개수가 데이터 샘플의 개수보다 크거나 같은 경우에만 성립합니다. FFT 점의 개수가 더 적으면 FFT 진폭은 위 양만큼 원래 진폭보다 낮아집니다.

이산 푸리에 역변환 함수 ifft도 입력 시퀀스를 받으며, 선택적으로 변환에 대해 원하는 점의 개수를 받을 수 있습니다. 아래 예제를 사용해 보십시오. 원래 시퀀스 x와 재생성된 시퀀스가 동일합니다(반올림 오차 이내에서).

t = 0:1/255:1;
x = sin(2*pi*120*t);
y = real(ifft(fft(x)));

figure
plot(t,x-y)

Figure contains an axes object. The axes object contains an object of type line.

이 툴박스에는 2차원 FFT 함수와 그 역 함수, 즉 fft2와 ifft2도 포함되어 있습니다. 이들 함수는 2차원 신호 또는 영상 처리에 유용합니다. DFT를 계산하는 다른 알고리즘인 goertzel 함수도 툴박스에 포함되어 있습니다. 이 함수는 긴 신호의 일부에 대한 DFT를 계산하는 데 효율적입니다.

편의상 영주파수 성분이 시퀀스의 중심이 되도록 fft 함수 또는 fft2 함수의 출력값을 재배열하는 것이 필요한 경우가 있습니다. 함수 fftshift는 영주파수 성분을 벡터나 행렬의 중심으로 이동합니다.

Copyright 2026, The MathWorks, Inc.

참고 항목

| | | | |