fft normalization and parseval

조회 수: 30 (최근 30일)
yasser
yasser 2014년 5월 25일
답변: yasser 2014년 5월 26일
h=complex(randi([-1 1],128,1),randi([-1 1],128,1));
h=h/std(h); % no h is normalized to unit pow thus var(h)=1
t=128*ifft(h);
k=var(t);
f=fft(t)/128
g=var(f);
my problem is that k(power in time ) not = g(power in freq) also i have done normalizatoin so that parseval therom applies
any help please

채택된 답변

Matt J
Matt J 2014년 5월 25일
편집: Matt J 2014년 5월 25일
also i have done normalizatoin so that parseval therom applies
No, you haven't, I'm afraid. For a length-N fft, the proper normalization is
Y=fft(X)/sqrt(N);
XX=sqrt(N)*ifft(Y);
For example,
>> X=rand(1,10);
>> Y=fft(X)/sqrt(10); XX= sqrt(10)*ifft(Y);
>> norm(X), norm(Y), norm(XX)
ans =
2.3117
ans =
2.3117
ans =
2.3117
  댓글 수: 2
Matt J
Matt J 2014년 5월 25일
yasser Commented
@Matt J thanks but please provide a ref for your normalization factor as i saw lots of codes doing as i did without the sqrt issue
Matt J
Matt J 2014년 5월 25일
편집: Matt J 2014년 5월 25일
As you can see from the formula in the FFT documentation
the formula for the transform that MATLAB uses is non-orthogonal by a factor of sqrt(N). Normalizing by N and 1/N is what is needed when using FFTs to compute Fourier Series coefficients, see the formulas here

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

George Papazafeiropoulos
George Papazafeiropoulos 2014년 5월 25일
In the following code:
var1=128;
h=complex(randi([-1 1],var1,1),randi([-1 1],var1,1));
h=h/std(h); % no h is normalized to unit pow thus var(h)=1
t=var1*ifft(h);
k=var(t)
f=fft(t)/var1;
g=var(f)
you have specified var1=128. Try to increase var from 128 to larger values. The two results will eventually converge.

yasser
yasser 2014년 5월 26일
@Matt J please what do u mean by formula for the transform that MATLAB uses is non-orthogonal by a factor of sqrt(N)

카테고리

Help CenterFile Exchange에서 Detection에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by