T0=pi;
N0=10;
Ts=T0/N0;
t=0:Ts:Ts*(N0-1);
g=exp(-t/2);
g(1)=(exp(-pi/2)+1)/2;
Dnn=fft(g)/N0;
Dn=abs(Dnn);
w=0:1:(N0-1);
stem(w,Dn);
여기서 g 함수의 지수형 푸리에 급수 크기(여기서는 Dn)를 구하는 건데요.
Dn=수식으로 계산하면 0.504/(1+j4n) 으로서 n값이 증가할수록(w가 증가할수록) 크기가 줄어들어야 하는데요..왜 w 가 6부터 다시 증가하기 시작하는지 궁금합니다.
그건 당연합겁니다. fft특성상 트랜스폼 파형이 주기 N0인 주기함수이기 때문이죠.. 즉 위에선 N0=10이기 때문이죠.. 그렇기 때문에 만약에 n=100까지 얻고 싶다. 그러면 n을 100보다 쫌 많이 크게 해주고 그 값에서 100까지만 취해서 오차를 줄이는 거죠.. 에공 말로 할려니 힘들다. 예를 들어 위의 예에서 N0를 한 100정
첫댓글 Dn=abs(Dnn) -> Dn=Dnn.*conj(Dnn)으로 고쳐보시길...
그렇게 해도 올라가는데요..값만 조금 변하는데..ㅠ.ㅠ.
안되네요 ^^;; 저도.. 같은 수업 같네요.. fft의 문제 같은데.. 노가다로 fft 수식 써서 하니까.. 감소하던데.. ㅡㅡ;;
트릭이란게 이걸 지칭하나 봅니다 ㅡ.ㅡ; 버근가?? ㅎㅎ
그건 당연합겁니다. fft특성상 트랜스폼 파형이 주기 N0인 주기함수이기 때문이죠.. 즉 위에선 N0=10이기 때문이죠.. 그렇기 때문에 만약에 n=100까지 얻고 싶다. 그러면 n을 100보다 쫌 많이 크게 해주고 그 값에서 100까지만 취해서 오차를 줄이는 거죠.. 에공 말로 할려니 힘들다. 예를 들어 위의 예에서 N0를 한 100정
도로 해두고 0-10까지만 해서 그려보셈 거의 손으로 한거랑 비슷할 겁니다.
그리고 fft는 sample의 개수가 2^n에 최적화 되어있습니다. 그러니까 N0를 8, 16,32, 64, 128, ...., 1024, 2048 이렇게 잡는것이 계산시간을 줄일 수 있습니다. 머.. 위의 예에서는 거의 차이가 없겠지만 ㅎㅎ