Main Content

nufft

비균일 고속 푸리에 변환

R2020a 이후

설명

예제

Y = nufft(X,t)는 샘플 점 t를 사용하여 X비균일 이산 푸리에 변환(NUDFT)을 반환합니다.

  • X가 벡터인 경우 nufft는 그 벡터의 변환을 반환합니다.

  • X가 행렬인 경우 nufftX의 열을 벡터로 취급하고 각 열의 변환을 반환합니다.

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

예제

Y = nufft(X,t,f)는 샘플 점 t를 사용하여 쿼리 점 f에서 NUDFT를 계산합니다. 샘플 점을 지정하지 않고 f를 지정하려면 nufft(X,[],f)를 사용하십시오.

Y = nufft(X,t,f,dim)은 차원 dim에 따라 NUDFT를 반환합니다. 예를 들어, nufft(X,t,f,2)는 행렬 X를 구성하는 각 행의 변환을 계산합니다.

Y = nufft(X)X의 이산 푸리에 변환을 반환하며, fft(X)와 동일합니다.

예제

모두 축소

비균일 간격의 점 t에서 샘플링된 신호 X를 만듭니다. 신호를 플로팅합니다.

t = [0:300 500.5:700.5];
S = 2*sin(2*pi*0.02*t) + sin(2*pi*0.1*t);
X = S + rand(size(t));
plot(t,S)

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

신호의 비균일 고속 푸리에 변환을 구합니다. 주파수를 세 번째 인수로 제공하지 않고 nufft를 사용할 경우, nufft는 주파수가 신호 길이 n에 대해 f(i) = (i-1)/n 형식을 취하는 디폴트 주파수 스케일링을 사용합니다. 변환의 절댓값을 디폴트 주파수의 함수로 플로팅합니다.

Y = nufft(X,t);
n = length(t);
f = (0:n-1)/n;
plot(f,abs(Y))

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

균일하지 않게 샘플링된 점의 시간 벡터를 만듭니다. 이에 상응하는 균일하게 샘플링된 데이터에 대해 지속 시간을 약 35초로, 샘플링 주기를 T = 50ms(또는 샘플링 주파수 Fs = 20Hz)로 정의합니다.

T = 50e-3;    % Sampling period of 50 ms for equivalent uniform samples
Fs = 1/T;     % Sampling frequency of 20 Hz for equivalent uniform samples
t = [0:T:300*T 500.5*T:T/2:700.5*T];

피크 주파수가 0.4Hz와 2Hz이며 비균일 간격의 점 t에서 샘플링된 신호 X를 만듭니다.

S = 2*sin(2*pi*0.4*t) + sin(2*pi*2*t);    % Signal with peak frequencies at 0.4 Hz and 2 Hz
X = S + rand(size(t));
plot(t,S)
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.

신호의 비균일 고속 푸리에 변환을 구합니다. 주파수를 세 번째 인수로 제공하지 않고 nufft를 사용합니다. 이 경우, nufft는 신호 길이 n에 대해 f(i) = (i-1)/n 형식을 취하는 디폴트 주파수를 사용합니다. 비균일 이산 푸리에 변환은 비균일 샘플 점 t와 주파수 f가 그에 상응하는 균일하게 샘플링된 데이터에 대해 샘플링 주기 1초와 샘플링 주파수 1Hz를 갖는 것처럼 처리합니다. 따라서 nufft를 사용하여 올바로 스케일링된 단위의 변환을 얻으려면 시간 벡터에 스케일링 인자 T를 포함해야 합니다. 변환의 절댓값을 Fs로 스케일링된 디폴트 주파수의 함수로 플로팅합니다.

Y = nufft(X,t/T);
n = length(t);
f = (0:n-1)/n*Fs;
plot(f,abs(Y))
xlabel("f (Hz)")
ylabel("abs(Y)(f)")

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

nufft를 사용할 경우 비균일 주파수 벡터 또는 쿼리 점 f를 세 번째 인수로, 비균일 시간 벡터 t를 두 번째 인수로 지정할 수도 있습니다. 여기에서는 nufft를 사용할 때 tf를 다시 스케일링할 필요가 없습니다. 변환의 절댓값을 비균일 주파수의 함수로 플로팅합니다.

f = [0:0.5:n/4 n/3+1:n-120]/n*Fs;
Y = nufft(X,t,f);
plot(f,abs(Y))
xlabel("f (Hz)")
ylabel("abs(Y)(f)")

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

특정 범위의 고른음의 주파수를 정의하고 레이블을 지정합니다.

C3 = 440 / (2^(21/12));
nOctaves = 3;
musicalTones = C3 * 2.^((0:(12*nOctaves-1))/12);
toneNames = ["C";"C#";"D";"D#";"E";"F";"F#";"G";"G#";"A";"A#";"B"] + string(3:(3+nOctaves-1));
toneNames = categorical(toneNames, toneNames);

오디오 신호 샘플링 주파수(단위: Hz), 샘플 점 n, 메이저 코드를 포함하는 신호 X를 정의합니다.

fs = 16e3;
n = 1:16000;
X = 4*cos(2*pi*(440/fs)*n) + 2*cos(2*pi*(554.37/fs)*n) + 3*cos(2*pi*(659.2/fs)*n);

메이저 코드의 주파수 성분을 계산하고 플로팅합니다.

Y = nufft(X,[],musicalTones/fs);
bar(toneNames(:),abs(Y))

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

입력 인수

모두 축소

입력 배열로, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다.

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

샘플 점 또는 시간 벡터로, 길이 n의 벡터로 지정됩니다. 여기서 n은 입력 배열 X의 연산 차원의 길이입니다. 기본적으로, 샘플 점 벡터는 0:(n-1)입니다.

디폴트 샘플 점 0:(n-1)을 사용할 경우 nuffttf가 그에 상응하는 균일하게 샘플링된 데이터에 대해 샘플링 주기 1초와 샘플링 주파수 1Hz를 갖는 것처럼 처리합니다. 따라서 올바로 스케일링된 단위의 푸리에 변환을 얻으려면 시간 벡터와 주파수 벡터를 다시 스케일링해야 할 수 있습니다. 예제는 시간과 주파수 스케일링을 사용한 비균일 샘플 점 항목을 참조하십시오.

데이터형: double | single

쿼리 점 또는 주파수 벡터로, 벡터로 지정됩니다. 기본적으로, 쿼리 점 벡터는 (0:(n-1))/n입니다. 여기서 n은 입력 배열 X의 연산 차원의 길이입니다. 샘플 점을 지정하지 않고 f를 지정하려면 nufft(X,[],f)를 사용하십시오.

디폴트 쿼리 점 (0:(n-1))/n을 사용할 경우 nuffttf가 그에 상응하는 균일하게 샘플링된 데이터에 대해 샘플링 주기 1초와 샘플링 주파수 1Hz를 갖는 것처럼 처리합니다. 따라서 올바로 스케일링된 단위의 푸리에 변환을 얻으려면 시간 벡터와 주파수 벡터를 다시 스케일링해야 할 수 있습니다. 예제는 시간과 주파수 스케일링을 사용한 비균일 샘플 점 항목을 참조하십시오.

데이터형: double | single

연산을 수행할 차원으로, 양의 정수 스칼라로 지정됩니다. 디폴트 값은 크기가 1이 아닌 첫 번째 배열 차원입니다.

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

세부 정보

모두 축소

벡터의 비균일 이산 푸리에 변환

길이가 n인 벡터 X, 샘플 점 t, 주파수 f에 대해 X의 비균일 이산 푸리에 변환은 다음과 같이 정의됩니다.

Y(k)=j=1nX(j)e2πit(j)f(k)

여기서 k = 1, 2, ..., m입니다. t = 0, 1, ..., n-1이고 f = (0, 1, ..., n-1)/n(nufft의 디폴트 값)일 때, 이 공식은 fft 함수에서 사용하는 균일한 이산 푸리에 변환과 동일합니다.

참고 문헌

[1] Potter, Samuel F., Nail A. Gumerov, and Ramani Duraiswami. “Fast Interpolation of Bandlimited Functions.” In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 4516–20. New Orleans, LA: IEEE, 2017. https://doi.org/10.1109/ICASSP.2017.7953011.

[2] Dutt, A., and V. Rokhlin. “Fast Fourier Transforms for Nonequispaced Data.” SIAM Journal on Scientific Computing 14, no. 6 (November 1993): 1368–93. https://doi.org/10.1137/0914081.

확장 기능

버전 내역

R2020a에 개발됨

참고 항목

|