테스트 소스를 수정해서 10개 정도만 출력하고 그 값을 비교하는데 신기한걸 발견함
소스로는 non-canonical ordering / canonical ordering 이라고 되어있는데
하나는 pffft_transform+ pffft_zreorders 로 실행하고
다른 하나는 pffft_transform_ordered로 실행한다.
// pass 0 : non canonical ordering of transform coefficients if (pass == 0) { // test forward transform, with different input / output pffft_transform(s, in, tmp, 0, PFFFT_FORWARD); memcpy(tmp2, tmp, Nbytes); memcpy(tmp, in, Nbytes); pffft_transform(s, tmp, tmp, 0, PFFFT_FORWARD); for (k = 0; k < Nfloat; ++k) { assert(tmp2[k] == tmp[k]); }
// test reordering pffft_zreorder(s, tmp, out, PFFFT_FORWARD); pffft_zreorder(s, out, tmp, PFFFT_BACKWARD); for (k = 0; k < Nfloat; ++k) { assert(tmp2[k] == tmp[k]); } pffft_zreorder(s, tmp, out, PFFFT_FORWARD); } else { // pass 1 : canonical ordering of transform coeffs. pffft_transform_ordered(s, in, tmp, 0, PFFFT_FORWARD); memcpy(tmp2, tmp, Nbytes); memcpy(tmp, in, Nbytes); pffft_transform_ordered(s, tmp, tmp, 0, PFFFT_FORWARD); for (k = 0; k < Nfloat; ++k) { assert(tmp2[k] == tmp[k]); } memcpy(out, tmp, Nbytes); } |
아무튼 결과만 보면
ifft 값은 동일하게 나온다.(ordered / non-ordered)
그런데 ifft를 수행하고 나서 나온 결과가 raw와 다르다.
pffft 특성으로 인해 샘플 숫자로 나눠줘야 한다는데
[링크 : https://dsp.stackexchange.com/questions/75749/how-to-use-pffft-fft-library]
일단은 그렇게 나누면 raw 와 ifft 값은 동일한 형상을 보이지만(좌하단/우하단) scale이 다르고
ifft한 값을 샘플 수 32000로 나누고 원본과 차이를 비교하면 또 형상이 동일하게 나온다(우상단)
데이터의 첫번째로 하면 오차율을 더 최소가 되지만 형상이 달라진다.(우상단) 멀까..?