테스트 소스를 수정해서 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로 나누고 원본과 차이를 비교하면 또 형상이 동일하게 나온다(우상단)

 

데이터의 첫번째로 하면 오차율을 더 최소가 되지만 형상이 달라진다.(우상단) 멀까..?

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fft 결과에 N(입력 샘플 갯수)로 나누는 이유  (0) 2023.09.21
FFT RBW  (0) 2023.09.19
tek.com fft 관련 문서  (0) 2023.07.19
sfft  (0) 2023.07.12
fft window type과 진폭 보정계수  (0) 2023.07.04
Posted by 구차니