이산 푸리에 변환
이산 푸리에 변환, 즉 DFT는 디지털 신호 처리에 사용되는 주요 툴입니다. 이 제품은 단축된 실행 시간으로 DFT를 계산할 수 있는 방법인 고속 푸리에 변환(FFT)을 기반으로 합니다. 툴박스 함수의 대부분(Z 영역 주파수 응답, 스펙트럼 및 켑스트럼 분석, 일부 필터 설계 및 구현 함수 포함)은 FFT를 포함합니다.
MATLAB® 환경은 이산 푸리에 변환과 이산 푸리에 역변환을 계산할 수 있도록 fft
와 ifft
를 제공합니다. 입력 시퀀스 x와 변환된 버전 X(단위원 원주상에 균일한 간격을 갖는 주파수에 대한 이산시간 푸리에 변환)에 대해 두 함수는 다음과 같이 관계를 구현합니다.
및
이 방정식에서 급수 첨자는 MATLAB 벡터 인덱싱 방식으로 인해 0이 아니라 1부터 시작합니다. 그리고, 아래 정의가 적용됩니다.
참고 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];
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];
이 경우, 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)
이 툴박스에는 2차원 FFT 함수와 그 역 함수, 즉 fft2
와 ifft2
도 포함되어 있습니다. 이들 함수는 2차원 신호 또는 영상 처리에 유용합니다. DFT를 계산하는 다른 알고리즘인 goertzel 함수도 툴박스에 포함되어 있습니다. 이 함수는 긴 신호의 일부에 대한 DFT를 계산하는 데 효율적입니다.
편의상 영주파수 성분이 시퀀스의 중심이 되도록 fft
함수 또는 fft2
함수의 출력값을 재배열하는 것이 필요한 경우가 있습니다. 함수 fftshift
는 영주파수 성분을 벡터나 행렬의 중심으로 이동합니다.