자세한 설명이 없어서 대충 혼돈의 카오스중..
pffft_transform()이 가장 처음 접하는 함수이긴 한데 이걸로 하니 1Hz가 아니라 4Hz에 진동이 있는걸로 검출이 되서
pffft_transform_ordered()로 바꾸니 의도한 대로 분석이 되서 일단 쓰는데, 무슨 차이인진 모르겠다.
int n = 32000; int nc = ( n / 2 ) + 1; int Nfloat = n; int Nbytes = Nfloat * sizeof(float); float *X = pffft_aligned_malloc(Nbytes); float *Y = pffft_aligned_malloc(Nbytes); float *Z = pffft_aligned_malloc(Nbytes); PFFFT_Setup *s = pffft_new_setup(n, PFFFT_REAL); for(int i = 0; i < 8; i++) pffft_transform_ordered(s, X, Z, 0, PFFFT_FORWARD); for ( i = 0; i < nc; i++ ) printf ( " %3d,%12f,%12f,%12f,%12f,%12f\n", i, Z[i*2], Z[i*2+1], sqrt(Z[i*2] * Z[i*2] + Z[i*2+1] * Z[i*2+1]), atan2(Z[i*2+1], Z[i*2]), atan2(Z[i*2+1], Z[i*2]) * 180 / PI ); pffft_aligned_free(Z); pffft_aligned_free(Y); pffft_aligned_free(X); pffft_destroy_setup(s); |
[링크 : https://bitbucket.org/jpommier/pffft/src/master/]
성능비교 테스트. pffft가 double을 미지원하는 것을 제외하면 최소 4배는 빠르게 처리한다고 보면 될 듯.
(complex는 double이 되긴 한데 real은 float만 되는 듯?)
fftw 2023-06-15 02:40:48.089 2023-06-15 02:40:48.109 --- plan 생성 20ms 2023-06-15 02:40:48.133 --- 32k 8ch 연산 23~24ms pffft 2023-06-15 02:40:48.136 2023-06-15 02:40:48.139 --- plan 생성 3ms 2023-06-15 02:40:48.146 --- 32k 8ch 연산 6~7ms |
'프로그램 사용 > fft, fftw' 카테고리의 다른 글
fft window type과 진폭 보정계수 (0) | 2023.07.04 |
---|---|
fft window 함수 (0) | 2023.07.03 |
fft 결과의 amplitude가 0.5가 나오는 이유 (0) | 2023.06.13 |
overlap kissfft (0) | 2023.06.12 |
fft size overlap window size (0) | 2023.06.12 |