프로그램 사용/fft, fftw

fft 잘못 사용하고 있었나?

구차니 2023. 6. 2. 23:30

입력값을 정규화 하려고 했는데

fftw를 쓴다고 알려진 matlab의 예제를 보니

입력값 범위로 정규화하는게 아니라(입력 값이 8bit 라면 /256 으로 0~1 사이 값으로..)

입력 받는 샘플의 갯수로 정규화 해줘야 하는 건가?

 

아무튼 정규화 했다고 생각했는데 진폭이 이상하게 1이상의 값이 나왔는데

그거 탓이었나 싶기도 하고.. 다시 테스트 해봐야 할 듯

 

Fs = 1000;            % Sampling frequency                    
T = 1/Fs;             % Sampling period       
L = 1500;             % Length of signal
t = (0:L-1)*T;        % Time vector

푸리에 변환을 계산합니다.

Y = fft(X);
양방향 스펙트럼 P2를 계산합니다. 그런 다음, P2와 짝수 값 신호 길이 L을 기반으로 하여 단방향 스펙트럼 P1을 계산합니다.

P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

[링크 : https://kr.mathworks.com/help/matlab/ref/fft.html]

 

fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out,
                           fftw_r2r_kind kind, unsigned flags);
fftw_plan fftw_plan_r2r_2d(int n0, int n1, double *in, double *out,
                           fftw_r2r_kind kind0, fftw_r2r_kind kind1,
                           unsigned flags);
fftw_plan fftw_plan_r2r_3d(int n0, int n1, int n2,
                           double *in, double *out,
                           fftw_r2r_kind kind0,
                           fftw_r2r_kind kind1,
                           fftw_r2r_kind kind2,
                           unsigned flags);
fftw_plan fftw_plan_r2r(int rank, const int *n, double *in, double *out,
                        const fftw_r2r_kind *kind, unsigned flags);

[링크 : https://www.fftw.org/fftw3_doc/More-DFTs-of-Real-Data.html]