MATLAB 역 고속 푸리에 변환

Ammar Ali 2022년8월18일
MATLAB 역 고속 푸리에 변환

이 튜토리얼에서는 MATLAB의 ifft() 함수를 사용하여 역 고속 푸리에 변환을 찾는 방법에 대해 설명합니다.

MATLAB 역 고속 푸리에 변환

Matlab의 ifft() 함수를 사용하여 벡터, 행렬 또는 다차원 배열의 역 고속 푸리에 변환을 찾을 수 있습니다. ifft() 함수에는 아래와 같은 네 가지 구문이 있습니다.

Out = ifft(X)
Out = ifft(X,n)
Out = ifft(X,n,dim)
Out = ifft(___,symflag)

첫 번째 구문은 고속 푸리에 변환 알고리즘을 사용하여 입력 X의 역 고속 푸리에 변환을 반환합니다. ifft() 함수는 입력 X에 있는 켤레 대칭 벡터를 확인합니다. 벡터가 켤레 대칭이면 출력은 빠르고 실제적입니다.

역대각 교환 행렬과 복소수 켤레의 곱이 원래 벡터와 같으면 벡터는 켤레 대칭입니다. 시간 영역 신호의 경우 고속 푸리에 변환에는 절반의 양의 주파수 스펙트럼과 절반의 음의 주파수 스펙트럼이 포함됩니다.

입력 X는 벡터, 행렬 또는 다차원 배열일 수 있습니다. 첫 번째 구문은 입력이 벡터인 경우 벡터의 역 고속 푸리에 변환을 포함하는 벡터를 반환하고 출력 벡터는 입력 벡터와 길이가 같습니다.

입력이 행렬인 경우 구문은 행렬 열의 역 고속 푸리에 변환을 포함하는 행렬을 반환하고 출력 행렬의 크기는 입력 행렬이 됩니다. 입력이 다차원 배열인 경우 함수는 첫 번째 차원을 따라 값의 역 고속 푸리에 변환을 반환하여 벡터로 처리합니다.

두 번째 구문은 역 고속 푸리에 변환을 두 번째 인수 n으로 찾으려는 점을 추가하는 데 사용됩니다. 포인트를 추가하지 않으면 함수는 요소 인덱스를 포인트로 사용합니다.

인수 n이 0이면 함수의 출력은 빈 행렬이 됩니다. 인수 길이 n이 입력 벡터 또는 행렬의 길이보다 작은 경우 ifft() 함수는 나머지 값을 무시합니다.

인수 길이 n이 벡터 또는 행렬의 길이보다 크면 함수는 입력 값 사이에 0을 추가하여 함수의 성능을 향상시킵니다. 인수 길이 n은 일반적으로 작은 소수 또는 2의 거듭제곱의 곱입니다.

세 번째 구문은 차원을 세 번째 인수 dim으로 설정하는 데 사용되며, 행렬 및 다차원 배열의 경우 역 고속 푸리에 변환을 찾는 데 사용됩니다. 예를 들어, 행렬 입력의 경우 함수는 각 열의 역 고속 푸리에 변환을 찾지만 세 번째 인수로 2를 추가하면 함수는 각 행의 역 고속 푸리에 변환을 반환합니다.

네 번째 인수는 입력의 대칭을 대칭 또는 비대칭으로 설정하는 데 사용됩니다. 입력이 정확히 대칭이 아닌 경우 이 인수를 사용하여 대칭으로 설정하여 함수가 입력을 대칭으로 처리하도록 할 수 있습니다.

예를 들어, 벡터를 만들고 fft() 함수를 사용하여 고속 푸리에 변환을 찾은 다음 ifft() 함수를 사용하여 역 고속 푸리에 변환을 찾습니다. 아래 코드를 참조하십시오.

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier)

출력:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

    1.0000    6.0000    2.0000

위의 코드에서 우리는 ifft() 함수의 결과를 확인하기 위해 푸리에 및 역 푸리에 변환을 찾기 위해 세 요소의 벡터를 사용했습니다. 출력에서 입력 벡터 nifft() 함수의 출력이 동일함을 알 수 있습니다. 이는 함수가 완벽하게 작동하고 있음을 의미합니다.

출력에서 입력 벡터 n의 푸리에 변환이 원래 신호를 재구성하는 데 사용되는 크기와 위상을 포함한다는 것을 알 수 있습니다. 크기나 위상과 같은 푸리에 변환의 한 부분을 제거하면 원래 신호를 재구성할 수 없습니다.

원래 신호를 재구성하기 위해 ifft() 함수를 사용하기 전에 신호에 크기와 위상이 포함되어 있는지 확인해야 합니다. 또한 신호가 원래 위치에서 이동하지 않도록 해야 합니다.

예를 들어 fftshift() 함수를 사용하여 푸리에 변환을 찾고 영주파수 성분을 스펙트럼의 중심으로 이동할 수 있습니다. ifft() 함수를 사용하여 역 푸리에 변환을 찾는 경우 원래 싱글을 제대로 재구성할 수 없습니다.

이 경우 ifft() 함수 대신 ifftshift() 함수를 사용할 수 있으며 ifftshift() 함수는 역 푸리에 변환을 찾아 신호를 원래 위치로 다시 이동합니다.

위에 표시된 두 번째 구문을 사용하여 포인트를 설정하면 출력도 변경됩니다. 예를 들어, 포인트 길이가 입력 벡터의 길이보다 긴 경우 재구성된 신호는 원래 벡터 또는 행렬 요소보다 더 많은 요소를 포함합니다.

ifft() 함수의 차원을 변경하면 출력도 변경되며 원래 벡터 또는 행렬과 일치하지 않을 수 있습니다. 예를 들어, 위의 예를 반복하고 입력 벡터의 역 푸리에 변환을 수행하는 데 사용되는 점의 수를 변경해 보겠습니다.

아래 코드를 참조하십시오.

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier,4)

출력:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

   0.7500 + 0.0000i   3.8660 - 1.6160i   2.2500 + 1.7321i   2.1340 - 0.1160i

ifft() 함수의 출력이 입력 벡터 n과 일치하지 않는 것을 볼 수 있습니다. 포인트 수를 기본적으로 3인 4로 변경했기 때문입니다. ifft() 함수에 대한 자세한 내용은 이 링크를 확인하십시오.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook