Main Content

ifft

고속 푸리에 역변환(Inverse Fast Fourier Transform)

설명

예제

X = ifft(Y)는 고속 푸리에 변환 알고리즘을 사용하여 Y이산 푸리에 변환의 역을 계산합니다. XY와 크기가 같습니다.

  • Y가 벡터인 경우 ifft(Y)는 그 벡터의 역변환을 반환합니다.

  • Y가 행렬인 경우, ifft(Y)는 행렬의 각 열에 대한 역변환을 반환합니다.

  • Y가 다차원 배열인 경우 ifft(Y)는 크기가 1이 아닌 첫 번째 차원의 값을 벡터로 취급하고 각 벡터의 역변환을 반환합니다.

예제

X = ifft(Y,n)은 길이 n까지 Y에 후행 0을 채워 Yn점 푸리에 역변환(N-point Inverse Fourier Transform)을 반환합니다.

예제

X = ifft(Y,n,dim)은 차원 dim을 따라 푸리에 역변환을 반환합니다. 예를 들어, Y가 행렬인 경우 ifft(Y,n,2)는 각 행의 n점 푸리에 역변환을 반환합니다.

예제

X = ifft(___,symflag)는 위에 열거된 구문에 나와 있는 입력 인수 조합 중 하나 외에 Y의 대칭성을 지정합니다. 예를 들어, ifft(Y,'symmetric')Y를 켤레 대칭으로 처리합니다.

예제

모두 축소

푸리에 변환과 이 변환의 역은 시공간에서 샘플링된 데이터와 주파수로 샘플링된 데이터 간에 변환을 수행합니다.

벡터를 만든 다음, 이 벡터의 푸리에 변환을 계산합니다.

X = [1 2 3 4 5];
Y = fft(X)
Y = 1×5 complex

  15.0000 + 0.0000i  -2.5000 + 3.4410i  -2.5000 + 0.8123i  -2.5000 - 0.8123i  -2.5000 - 3.4410i

Y의 역변환을 계산합니다. 이 역변환은 원래 벡터 X와 같습니다.

ifft(Y)
ans = 1×5

     1     2     3     4     5

단방향 스펙트럼의 푸리에 역변환, 즉 실수 신호의 푸리에 변환을 구합니다.

주파수 영역에서 단방향 스펙트럼을 불러옵니다. 이 스펙트럼의 샘플링 주파수와 샘플링 주기를 표시합니다.

load Y1spectrum.mat
Fs
Fs = 1000
T
T = 1.0000e-03

단방향 스펙트럼의 복소수 크기를 플로팅합니다.

L1 = length(Y1);
f = Fs/(2*L1-1)*(0:L1-1);
plot(f,abs(Y1))
xlabel("f (Hz)")
ylabel("|Y1(f)|")

Figure contains an axes object. The axes object with xlabel f (Hz), ylabel |Y1(f)| contains an object of type line.

시간 영역 신호의 이산 푸리에 변환이 주기적 특성을 가집니다. 여기서 스펙트럼의 첫 번째 절반은 양의 주파수이고 두 번째 절반은 음의 주파수이며, 이 때 첫 번째 요소는 영주파수에 사용되도록 예약됩니다. 실수 신호의 경우 주파수 영역에서의 이산 푸리에 변환은 양방향 스펙트럼입니다. 이때 양의 주파수에서의 스펙트럼은 음의 주파수에서의 스펙트럼의 켤레 복소수이면서 시간 영역에서의 실수 신호의 피크 진폭의 절반입니다. 단방향 스펙트럼의 푸리에 역변환을 구하기 위해 단방향 스펙트럼을 양방향 스펙트럼으로 변환합니다.

Y2 = [Y1(1) Y1(2:end)/2 fliplr(conj(Y1(2:end)))/2];

시간 영역에서 실수 신호를 복원하기 위해 양방향 스펙트럼의 푸리에 역변환을 구합니다.

X = ifft(Y2);

신호를 플로팅합니다.

t = (0:length(X)-1)*T;
plot(t,X)
xlabel("t (seconds)")
ylabel("X(t)")

Figure contains an axes object. The axes object with xlabel t (seconds), ylabel X(t) contains an object of type line.

ifft 함수를 사용하면 변환의 크기를 제어할 수 있습니다.

임의의 3×5 행렬을 만들고 각 행의 8점 푸리에 역변환을 계산합니다. 결과값에서 각 행의 길이는 8입니다.

Y = rand(3,5);
n = 8;
X = ifft(Y,n,2);
size(X)
ans = 1×2

     3     8

벡터가 거의 켤레 대칭인 경우, 'symmetric' 옵션을 지정하면 푸리에 역변환을 더 빨리 계산할 수 있습니다. 이 옵션은 출력값이 실수가 되도록 보장하기도 합니다. 계산에서 반올림 오차가 야기되는 경우 거의 켤레 대칭인 데이터가 발생할 수 있습니다.

거의 켤레 대칭인 벡터 Y를 만들고 이 벡터의 푸리에 역변환을 계산합니다. 그런 다음 거의 0에 가까운 허수부를 제거하는 'symmetric' 옵션을 지정하여 역변환을 계산합니다.

Y = [1 2:4+eps(4) 4:-1:2]
Y = 1×7

    1.0000    2.0000    3.0000    4.0000    4.0000    3.0000    2.0000

X = ifft(Y)
X = 1×7 complex

   2.7143 + 0.0000i  -0.7213 + 0.0000i  -0.0440 - 0.0000i  -0.0919 + 0.0000i  -0.0919 - 0.0000i  -0.0440 + 0.0000i  -0.7213 - 0.0000i

Xsym = ifft(Y,'symmetric')
Xsym = 1×7

    2.7143   -0.7213   -0.0440   -0.0919   -0.0919   -0.0440   -0.7213

입력 인수

모두 축소

입력 배열로, 벡터, 행렬 또는 다차원 배열로 지정됩니다. Ysingle형인 경우 ifft는 기본적으로 단정밀도로 계산되며 X 또한 single형이 됩니다. 그렇지 않으면, Xdouble형으로 반환됩니다.

데이터형: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
복소수 지원 여부:

역변환 길이로, [] 또는 음이 아닌 정수 스칼라로 지정됩니다. Y의 길이보다 큰 변환 길이를 지정하여 Y를 0으로 채우면 ifft의 성능을 향상시킬 수 있습니다. 이 길이는 일반적으로 2의 거듭제곱으로 지정되거나 작은 소수의 곱으로 지정됩니다. n이 신호의 길이보다 작은 경우 ifftn번째 요소 이후의 나머지 신호 값을 무시하고 잘린 결과를 반환합니다. n이 0인 경우 ifft는 빈 행렬을 반환합니다.

데이터형: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

연산을 수행할 차원으로, 양의 정수 스칼라로 지정됩니다. 기본적으로 dim은 크기가 1이 아닌 첫 번째 배열 차원입니다. 예를 들어, 행렬 Y가 있다고 가정합니다.

  • ifft(Y,[],1)은 각 열의 푸리에 역변환을 반환합니다.

    ifft(Y,[],1) column-wise operation

  • ifft(Y,[],2)는 각 행의 푸리에 역변환을 반환합니다.

    ifft(Y,[],2) row-wise operation

데이터형: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

대칭 유형으로, 'nonsymmetric'이나 'symmetric'으로 지정됩니다. 반올림 오차로 인해 Y가 완전한 켤레 대칭이 아니어도 ifft(Y,'symmetric')은 Y 요소의 두 번째 절반(음수 주파수 스펙트럼에 있음)을 무시하여 Y가 켤레 대칭인 것처럼 처리합니다. 켤레 대칭에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

세부 정보

모두 축소

벡터의 이산 푸리에 변환

Y = fft(X)는 푸리에 변환을 구현하고 X = ifft(Y)는 푸리에 역변환을 구현합니다. 이 변환은 길이 nXY에 대해 다음과 같이 정의됩니다.

Y(k)=j=1nX(j)Wn(j1)(k1)X(j)=1nk=1nY(k)Wn(j1)(k1),

여기서

Wn=e(2πi)/n

은 n개의 단위근 중 하나입니다.

알고리즘

  • ifft 함수는 Y의 벡터가 켤레 대칭인지 여부를 테스트합니다. Y의 벡터가 켤레 대칭이면 역변환 계산 속도가 더 빠르고 출력값은 실수가 됩니다.

    함수 g(a)g(a)=g*(a)인 경우 켤레 대칭입니다. 하지만 시간 영역 신호의 고속 푸리에 변환에서 스펙트럼의 절반은 양의 주파수이고, 나머지 절반은 음의 주파수입니다. 이때 첫 번째 요소는 영주파수에 사용되도록 예약됩니다. 이런 이유로 v(2:end)conj(v(end:-1:2))와 같을 경우 벡터 v는 켤레 대칭입니다.

확장 기능

버전 내역

R2006a 이전에 개발됨