Main Content

이산 푸리에 변환

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

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

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

x(n+1)=1Nk=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

subplot(2,1,1)
plot(f,m)
title('Magnitude')
ax = gca;
ax.XTick = [15 40 60 85];

subplot(2,1,2)
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);

subplot(2,1,1)
plot(f,m)
title('Magnitude')
ax = gca;
ax.XTick = [15 40 60 85];

subplot(2,1,2)
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 함수와 그 역 함수, 즉 fft2ifft2도 포함되어 있습니다. 이들 함수는 2차원 신호 또는 영상 처리에 유용합니다. DFT를 계산하는 다른 알고리즘인 goertzel 함수도 툴박스에 포함되어 있습니다. 이 함수는 긴 신호의 일부에 대한 DFT를 계산하는 데 효율적입니다.

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

참고 항목

| | | | |