제로 패딩 FFT의 낮은 계수 만 효율적으로 계산하는 방법


14

시퀀스를 4N으로 제로 패딩하고 FFT를 수행하며 생성 된 4N 중에서 가장 낮은 주파수 N 포인트 만 사용하는 알고리즘이 있습니다.

이것은 많은 낭비되는 일처럼 보입니다. 어떻게 이것이 더 빨리 이루어질 수 있습니까?


@Dilip. FFTW 또는 IMKL 라이브러리를 사용하겠습니다. 나는 물론 내 kissfft 라이브러리를 사용할 수 있지만 다른 대 속도 불이익을 밖으로 시작하고있다
마크 Borgerding

2
나는 빈도에 따른 소멸이라고 말한 이후에 귀하가 응답 한 의견을 삭제했지만 대신 시간에 따른 소멸을 썼습니다. 그러나 여기 나비 그림을 보십시오. -FFT 에서 처음 두 단계에 대한 코드를 작성 하여 많은 수의 0을 고려하고 해당 곱셈을 건너 뛰면 입력 벡터가있는 -FFT에 대해 FFT 라이브러리 서브 루틴을 번 호출 할 수 있습니다. "완전한". 물론 각 서브 루틴 호출의 출력 중 만 필요합니다 . 4N4NN/4
Dilip Sarwate

답변:


2

빈이 몇 개인 경우 다음이 매우 효율적일 수 있습니다.
1. 필요한 각 주파수에서 DFT를 수행하십시오.
2. 해당 주파수마다 Goertzel 알고리즘을 사용하십시오.


마크는 그가 필요하다고 에서 쓰레기통을 4 N 그래서 1) 합리적인 옵션이 될하지 않는 것 같습니다. Goertzel 알고리즘은 데이터가 수신 될 때 온라인 계산, 작은 저장 공간 등의 이점이 있지만 빈마다 2 N + 4 곱셈이 필요한 반면 Horner의 규칙을 통해 다항식 평가로 계산 된 각 빈에는 N 곱셈 만 필요합니다 . 따라서 2)는 특히 합리적인 옵션으로 보이지 않습니다. N4N2N+4N
Dilip Sarwate

당신이 옳습니다. 질문을 읽는 동안 나는 어떻게 든 세부 사항을 놓쳤습니다. 내가 대답하고있는 동안, "Gee, 그가 얼마나 많은 쓰레기통을 원하는지 아는 것이 좋을 것 같습니다 ..."
Jacob

2

4 배 길이의 제로 패딩, 더 긴 FFT를 계산 한 다음 맨 아래 1/4 번째 구간 만 사용하면 원래 길이 FFT의 창 Sinc 보간과 거의 동일한 결과가 생성됩니다.

따라서 원래 FFT 길이를 사용하고 적절한 창 너비의 3 상 Sinc 보간 커널을 사용하여 보간하십시오.


0

시간 영역에서 패딩이 0이면 더 높은 주파수 솔루션을 제공하지만 새로운 정보는 제공하지 않으므로 주파수 영역에서 본질적으로 보간을 제공합니다. 신호의 특성과 필요한 정밀도에 따라 N 포인트의 규칙적인 FFT로 추가 주파수 포인트를 얻을 수 있으며 적절한 보간 (선형, 스플라인, pchip, sinc 등)을 수행 할 수 있습니다.


하자 수 다항식 (가능한 복소 계수는 X 정도) N - 1 . 우리는 Nα n , 0 n N - 1 에서 평가합니다. 여기서 α = exp ( j 2 π / N )N입니다x(z)=i=0N1xizixiN1Nαn,0nN1α=exp(j2π/N)N-제곱근은 숫자 X n = x ( α n ) 을 구합니다 . 이는 단위 원 에서 N 간격이 같은 점 에서 의 x ( z ) 값입니다 . 우리가 정말로 원하는 것은 값이며 , X ( Z ) 에서 β N , 0 N N - 1 여기서, β = EXP ( - J 2 π / 4 N ) , 어느NXn=x(αn)x(z)Nx(z)βn,0nN1β=exp(j2π/4N)단위 원의1 사분면에있는 N 개의 점입니다. 선형, 스플라인 등 보간이 어떻게 작동하는지 알 수 없습니다. 설명 해주십시오. N
Dilip Sarwate

죄송합니다. 이전 의견에서 두 번째 문장 은 단위 원의 4 사분면 이라고 말했을 것 입니다. 이후 마다 제 소정 값 X ( β 4 K가 ) : 이미 FFT에 의해 산출 된 X ( β 4 K ) = X ( α의 K ) . β4=αx(β4k)x(β4k)=x(αk)
Dilip Sarwate

더 큰 FFT를 수행하는 것보다 적절한 보간을 더 빨리 수행하기가 어렵다고 생각합니다.
Mark Borgerding

128 포인트 FFT 및 12800Hz 샘플 레이트가 있다고 가정 해 봅시다. 128 포인트 FFT는 0Hz, 100Hz, 200Hz, 300Hz 등의 값을 제공합니다. 제로 패딩은 주파수 분해능을 0Hz, 25Hz, 50Hz, 100Hz 등으로 높이는 것입니다. 이는 보간 문제로 볼 수 있습니다. 수학적으로 정밀하게하려면 128 차의 순환 정현 법을 수행해야합니다. 확실히 귀찮은 가치는 없지만 적용 및 정밀도에 따라 훨씬 낮은 차수 보간이 충분할 것입니다
Hilmar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.